2024.0.06

New featureLuciadRIA

A Tour tool has been added to the RIA toolbox. This also includes the Player and Recorder tools. For more information, please see the readme file at toolbox/ria/tour/README.md. The Monitoring building information sample in LuciadRIA demonstrates the basic usage of this new feature.

Bug fixLuciadRIA

RIA-4929
Fixed an issue where hasMesh and HasPointcloud properties of OGC3DTilesModel chere not working when building a project with vite.

2024.0

2024.0.05

ImprovementLuciadRIA

RIA-4926, RIA-4136
LuciadRIA now supports the Symbology Encoding Function FormatDate. Typically, it is used to format a date inside a label. The same functionality is supported through a new build-in custom function dateFormat. For more information, see SLD Custom Functions - dateFormat.

Bug fixLuciadRIA

RIA-4924
Fixed an exception in OGC 3D Tiles layers that have point clouds if the MeshStyle has pbrSettings defined.

Bug fixLuciadRIA

RIA-4820
Fixed an issue where WFSFeatureStore failed to request features located above the terrain and close to the camera when the camera was tilted towards the horizon. The LoadSpatially strategy now correctly requests features in this scenario.

Bug fixLuciadRIA

RIA-4915
Fixed an issue where parts of the terrain near the bottom of the screen are not shown when using certain kinds of elevation layers.

Bug fixLuciadRIA

RIA-4908
Fixed an issue where HSPC datasets without attribute names were not decoded in the ModelDescriptor. Now an attribute without name gets the attribute role as name.

Bug fixLuciadRIA

RIA-4913
Fixed an issue where attempting to extrude GeoBuffer shapes would sometimes result in a ProgrammingError: "ExtrudedShape: invalid base shape." This was caused by a mismatch between the Z-coordinates of the computed contour and the main shape.

Bug fixLuciadRIA

RIA-4909
Fixed an issue where snapping didn't work for points with different Z-coordinates while editing without a horizontal EditMoveConstraint.

Bug fixLuciadRIA

RIA-4907
Fixed an issue in OGC 3D Tiles where changes in OcclusionStyle were not instantly displayed.

Bug fixLuciadRIA

RIA-4900
Fix for an exception in OGC 3D Tiles that could happen when custom properties are often updated. The exception could interfere with the display of 3D Tiles and navigation.

Upgrade considerationLuciadRIA

RIA-4893
LuciadRIA now depends on library abseil. This new dependency requires no code changes.

2024.0.04

ImprovementLuciadRIA

RIA-4742
You can now constrain the camera on a 3D geocentric map to a maximum altitude. See `AboveConstraintOptions.maxAltitude` for more information.

Bug fixLuciadRIA

RIA-4791
Geodesy.shortestDistanceToLine often returned incorrect values when using a spherical or ellipsoidal Geodesy instance.

Bug fixLuciadRIA

RIA-4879
FeatureLayer: Fixed an issue where vertical polygons would not always be filled correctly.

Bug fixLuciadRIA

RIA-4892
Fixed an issue with creation of bounds (with the CreateController), where the bounds would be visible (at lon-lat [0,0]) before they were being created.

Bug fixLuciadRIA

RIA-4885
` Fixed an issue where complex stroked lines on a canvas map were disappearing when drawing two consecutive line segments back and forth on top of each other.

2024.0.03

ImprovementLuciadRIA

RIA-4732
The requirement for wrapAroundWorld mandating the central meridian to be 0 has been removed.

ImprovementLuciadRIA

RIA-1305
ReferenceProvider can now more robustly detect which projection is used in WKT strings. This means that additional underscores and whitespace in the name of the projection are now allowed.

ImprovementLuciadRIA

RIA-4884
It is now possible to override the default mipmap filtering type of a OGC 3D Tiles by setting the mipMapFiltering field of a MeshStyle.

ImprovementLuciadRIA

RIA-3519
Improved the handling of identifiers OGC expression in WFSFeatureStore. Previously, using the identifiers OGC expression for the 'query.filter' property passed to the WFSFeatureStore.spatialQuery method led to an error due to the WFS constraint that restricts combining the OGC `ResourceId` with other OGC filter expressions.

Bug fixLuciadRIA

RIA-4883
Improved the handling of WFS feature types with bounds of '0' width and height. Prior versions raised console warnings in such situations. Given that '0' dimensions are valid for single-point features, these unwarranted warnings are now eliminated.

Bug fixLuciadRIA

RIA-4886
Fixed a bug that prevented the samples from being correctly installed because of wrong version numbers.

Bug fixLuciadRIA

RIA-4881
Transformations using the Belgian Lambert (1972) reference (EPSG:31300) didn't produce correct results.

Bug fixLuciadRIA

RIA-4882
Fixed an issue where it was not possible to create a CircleBy3Points, CircularArcBy3Points and CirclularArcByBulge with the CreateController when the shape was not defined in a geodetic coordinate reference.

Bug fixLuciadRIA

RIA-4789
The functionality of swapAxes in GeoJsonCodec has been corrected to ensure that it is now applied when invoking decodeGeometryObject and decodeGeometry. Previously, the swapAxes option was applied only with the decode and decodeObject methods.

Bug fixLuciadRIA

RIA-4876
Fixed an issue with rendering icons for KML placemarks on KMLLayer. Previously, the KMLLayer.drapeTarget setting was not applied to KML placemarks with point geometry, and the icons were always rendered on the terrain surface.

Bug fixLuciadRIA

RIA-4873
Fixed an issue with Arc creation. Previously, creating an arc with a sweep angle of 360 degrees resulted in an arc of 0 degrees. Sweep angles are now normalized to the range of -360 to 360 degrees inclusively.

Upgrade considerationLuciadRIA

RIA-4871, RIA-4880
Fixed an issue where textures in OGC 3D Tiles and 3D Icons automatically applied mipmap filtering even when they should not have.

2024.0.02

ImprovementLuciadRIA

RIA-4865
Within the scope of requesting WFS capabilities, WFSCapabilitiesOperation now includes a supportedRequests field. This field informs users about the HTTP request methods ('GET' or 'POST') that the WFS service permits, and provides the corresponding URLs for each operation.

ImprovementLuciadRIA

RIA-4864
It is now possible to override the coordinate reference of a HSPCTilesModel from the constructor options.

ImprovementLuciadRIA

RIA-4843
EditHandle now has an invalidate() method that you can use to invalidate the visualization of the handle. For example, use invalidate() when the handle's style has changed and onDraw() needs to be re-evaluated.

ImprovementLuciadRIA

RIA-4859
You can now pass delegate controllers directly to the constructor of CompositeController.

Bug fixLuciadRIA

RIA-4869
Fix for wrong custom properties in OGC 3D Tiles that can occur if the custom properties are changed during swift camera movements.

Bug fixLuciadRIA

RIA-4804
Fix for the erroneous bounds of a TileSet3DLayer that has a transformation and a reference different than the map reference. In example, this would prevent the correct placement of geo-referenced tiles with a transformation on a 2D map.

Bug fixLuciadRIA

RIA-4872
Fixed a decoding issue of OGD 3D Tiles 1.1 that could occasionally result in degenerated geometries.

Bug fixLuciadRIA

RIA-4846
It is now possible to indicate that a RasterTileSetModel models a sparse tileset. In a sparse tile set, some tiles may be missing in the tile tree. Before this fix, LuciadRIA would not correctly load such tilesets: some tiles would not refine into higher detail when zooming in. Refer to the isSparseTileSet flag on RasterTileSetModelConstructorOptions for details.

Bug fixLuciadRIA

RIA-4860
Resolved an issue with the MIL-STD-2525c icon symbol 'Air Control - Tanking' (2.X.2.1.1.7.4). This symbol's icon was depicted with the letter 'T' inside the vertical lines instead of the letter 'K'.

Bug fixLuciadRIA

RIA-4856
Fixed an issue were pin lines would not be drawn when other lines were visualized on the map.

Bug fixLuciadRIA

RIA-4797
Fixed an issue with SwipeController: raster layers that are on top of a base imagery layer that is completely transparent, were invisible while swiping.

2024.0.01

ImprovementLuciadRIA

RIA-4831
When you now set any field on a PointCloudStyle or MeshStyle using the value that is already present, the layer that uses that style will no longer needlessly invalidate itself.

ImprovementLuciadRIA

RIA-4784
Introduced a new generic createGeodesy function in GeodesyFactory, that will return the most optimal Geodesy for any given reference.

Bug fixLuciadRIA

RIA-4851
Fix an issue when blending is enabled on a mesh layer, the mesh becomes red and transparent.

Bug fixLuciadRIA

RIA-4849
Fixed an issue where TileSet3DLayer layers could be invisible while their visibleInTree property was true, in the case that the layer got moved in the layer tree.

Bug fixLuciadRIA

RIA-4764
Fixed an issue where multiple labels were shown for the same feature on a WebGLMap with wrapAroundWorld set to true.

Bug fixLuciadRIA

RIA-4845
FeatureLayer: fixed a memory leak that would occur when an invisible layer was added to the map and model updates were applied while it remained invisible.

Bug fixLuciadRIA

RIA-4819
Fixed the SLD custom functions startAngle and endAngle to take into account rotation inside the reference of the given line shape.

Bug fixLuciadRIA

RIA-4817
Icon3DStyle: when a glTF file without normals was used, the 3D icon would not be correctly visualized when lighting is enabled.

Bug fixLuciadRIA

RIA-4813
Fixed a bug where passing null as value for globeColor in the Map constructor options was treated as undefined. Not setting the globeColor option (or setting it to undefined) results in the globe having a default grey color, whereas setting it to null means no globe will be rendered at all.

2024.0

New featureLuciadRIA

There is a new post-processing filter available for point clouds: Blending. When enabled, it merges overlapping points to increase the visual quality.

New featureLuciadRIA

An Overview Map tool was added to the RIA toolbox. See toolbox/ria/overviewmap/README.md for more information. Basic usage is illustrated in the LuciadRIA Panorama sample.

New featureLuciadRIA

Most of the packages under samples/common have been moved to toolbox/ria. The prefix of their package names also changed from @luciad/ria-sample-common to @luciad/ria-toolbox to clarify that these packages can be reused in your own project. More information can be found in Reuse sample code in your own application

New featureLuciadRIA

It is now possible to connect to the Google Map Tiles API and use its data in your LuciadRIA application. A new class GoogleMapsTileSetModel allows you to create a model for the desired Google Maps data, which you can then add to a LuciadRIA map using a RasterTileSetLayer. For more information, see the Visualize Google 2D Tiles tutorial. Basic usage is illustrated in the LuciadRIA Data Formats sample.

New featureLuciadRIA

You can now visualize OGC 3D Tiles 1.1. Supported functionality:
  • Implicit tiling (both JSON and binary subtrees, no metadata yet).
  • GLB/glTF (using internal, Base64 inlined or external buffers) as payload.
  • Supported glTF 2.0 extensions:
    • KHR_texture_transform
    • KHR_mesh_quantization
    • EXT_meshopt_compression
    • EXT_mesh_features
Note that you can also load glTF data with these extensions as 3D icons.

New featureLuciadRIA

PointCloudStyle now offers a density property. It allows you to paint density maps by setting a ColorMap on the point cloud style. The ColorMap is used to render the point cloud model as a heatmap of the point density. For more information, see Density painting of point cloud data.

New featureLuciadRIA

A Magnifier tool was added to the RIA toolbox. See toolbox/ria/magnifier/README.md for more information. Basic usage is illustrated in the LuciadRIA Monitoring building information sample.

New featureLuciadRIA

Map now exposes a defaultController field, which makes it easier to use custom navigation, hover or select controllers on the map. There are also new DefaultController and NavigateController classes that expose the default map behavior. For more information, see the Managing user input with LuciadRIA controllers tutorial.

New featureLuciadRIA

You can now display point clouds using normal-oriented points. The point orientation setting is enabled by default if the dataset has normal vector values.

ImprovementLuciadRIA

RIA-4747
The createExtrudedShape function now includes a generic type for type inference of baseShape.

ImprovementLuciadRIA

RIA-4259, RIA-4288
You can now cancel editing and creation simply by deactivating the controller on the map: map.controller = null. You can now also revert back to the start of the creation process by calling CreateController.restart(). For more information, check out the Cancelling create and edit interactions how-to article.

ImprovementLuciadRIA

The IFC sample has been modified to also showcase Revit data. The sample has been renamed to IFC / Revit Viewer sample.

ImprovementLuciadRIA

RIA-1330
Fixed an issue where the direction of panning would reverse if you drag a point that's higher than the camera. In these cases, the camera will now move camera vertically instead of horizontally.

ImprovementLuciadRIA

We added an AttributionChanged event in AttributedTileSet, to allow for a re-evaluation of the attributions when they change from within the model (either RasterTileSetModel or OGC3DTilesModel). This could happen because the attribution is loaded alongside the data (which happens in GoogleMapsTileSetModel), or because the attribution is included in the tiles and can change while the data is being loaded (which happens in OGC3DTilesModel for Google 3D Tiles).

ImprovementLuciadRIA

LuciadRIA now uses WASM SIMD instructions in some places to improve performance. Note that this requires browser support. Such support was added in Firefox in version 89, in Edge in version 91, in Chrome in version 91 and in Safari in version 16.4.

ImprovementLuciadRIA

RIA-4696
Added PickController.isPickMultiple(event). When this returns true, PickController.getCandidates returns multiple candidates under the mouse cursor, as opposed to just the closest or top-most candidate. This allows you to implement a controller that can deal with multiple features under the mouse, for example hover multiple features simultaneously or open a pop-up to select one of the candidates under the mouse.

ImprovementLuciadRIA

RIA-4730
You can now also configure the dataType and samplingMode parameters in the WMTSTileSetModelCreateOptions and WMSTileSetModelCreateOptions when creating a WMTSTileSetModel and WMSTileSetModel using the createFromCapabilities and createFromURL methods.

ImprovementLuciadRIA

OGC3DTilesModelDescriptor has two new properties hasPointCloud and hasMesh. These new properties allows you to check if your 3DTiles dataset contains a mesh, a point cloud, or both.

ImprovementLuciadRIA

RIA-4755
The KMLLayer.drapeTarget is now writable to allow runtime changes.

ImprovementLuciadRIA

RIA-4049
The OrientedBox.contains3DPoint and OrientedBox.contains3DCoordinates methods allow you to check whether a specified point is contained within an oriented box.

Bug fixLuciadRIA

RIA-4781
Painting a label on a 3D cartesian map doesn't throw an error anymore.

Bug fixLuciadRIA

RIA-3570, RIA-4744
Fixed an issue where map.getViewToMapTransformation(LocationMode.CLOSEST_SURFACE) used a fallback to terrain, if no closest surface was found. It now correctly fails to transform the point if there is no closest surface.

Bug fixLuciadRIA

RIA-4709

It is now possible to override the getFeatureInfoRoot service URI when creating a WMSTileSetModel and WMSImageModel. getMapRoot and getFeatureInfoRoot are now also available as instance properties on both models.

version property is corrected in WMSCapabilities. It is now of type WMSVersion instead of a string.

Bug fixLuciadRIA

RIA-4369
Fixed a bug where some glTF data with webp textures would not load properly. This could possibly impact 3D icons and 3D Tiles datasets.

Bug fixLuciadRIA

RIA-3573
The balloon's exact position can be now controlled by setting ShowBalloonOptions.anchor when calling Map.showBalloon. Please note that ShowBalloonOptions.object is now deprecated. Also, the map's default behavior to display a balloon when a user selects a feature with a non-point shape on a layer with a balloonContentProvider has changed. Now the balloon is placed exactly in the clicked position of the selected feature, and before, the balloon was placed at the shape's focusPoint.

Bug fixDefense Symbology

RIA-4700

The main geometry type of a number of APP-6A/B Minefield symbols has been changed. These symbols were modeled as polygons, which required the symbol to have at least 3 anchor points to define the symbol's shape. To better align these symbols with the NVG geometry bindings specification, the geometry has now been changed to a point, which requires only a single anchor point to define the symbol's shape. The following symbols are affected by this change:

  • 2.X.2.2.1.6.1 "Planned Minefield"
  • 2.X.2.2.1.6.2 "Completed Minefield"
  • 2.X.2.2.1.6.5 "Antitank (AT) Minefield"
  • 2.X.2.2.1.6.6 "Scatterable Mines"
  • 2.X.2.2.1.6.7 "Antipersonnel (AP) Minefield Reinforced With Scatterable With Self-Destruct Date-Time-Group"
  • 2.X.2.2.1.6.8 "Scatterable Minefield (Antitank Mines) With Self-Destruct Date-Time-Group"
  • 2.X.2.2.1.7 "Executed Volcano Minefield"

The MilitarySymbologyPainter is able to handle both the old shape (multiple points, defining an area) and the new shape (a single point). The behaviour for the old shape remains unchanged. When providing a single point, the corresponding icon will be drawn.

Bug fixDefense Symbology

RIA-4699

The main geometry type of the APP-6A/B symbol 2.X.2.3.1.1.2 "Fire Support Graphics - Fire Support Point - Target - Circular Target" has been changed. This symbol's geometry type was a circle, which required the symbol to have 2 anchor points to define the symbol's shape. The geometry has now been changed to point, which requires only a single anchor point to define the symbol's shape. To better align this symbol with the NVG geometry bindings specification, the geometry has now been changed to a point, which requires only a single anchor point to define the symbol's shape.

The MilitarySymbologyPainter is able to handle both the old shape (two points, defining a circle) and the new shape (a single point). The behaviour for the old shape remains unchanged. When providing a single point, the corresponding icon will be drawn.

Upgrade considerationLuciadRIA

EditController and CreateController no longer update or add features in the model upon de-activation. This is to avoid accidental updates to the model when swapping controllers. Instead, EditController has a new onFinish hook that is called when the edit operation finishes. CreateController still uses the onObjectCreated hook, but it's now called when creation finishes, instead of when the controller deactivates. Finishing an edit operation or a creation can also be forced through a new finish method, which can be called when using a button to immediately apply changes. Note that this method will not deactivate your controller. For more information, consult the API documentation of CreateController and EditController.

Upgrade considerationLuciadRIA

RIA-4372
CreateController now activates its edit handles immediately upon activating, instead of delaying it until the first mouse click or tap. This allows you to use EditHandle to draw things (like snap icons) before the first mouse click or tap.

If you already implemented a creation handle, and you're not using one of create handles in the API (PointCreateHandle, CreateByTemplateHandle, BoundsCreateHandle or PointListCreateHandle), you'll have to check if those still work correctly. Specifically, double check if everything is drawn correctly once the controller activates, before the first click (like a snap icon). If the created shape is drawn too early, you can disable that drawing by overriding EditHandle.shouldPaintFeature().

Upgrade considerationLuciadRIA

CompositeEditHandleConstructorOptions.cascading has been removed. You should use the new CascadingEditHandle class instead. To switch, replace

      new CompositeEditHandle(handles, {cascading: true})
    
with

      new CascadingEditHandle(handles)
    
.

Upgrade considerationLuciadRIA

The zlib library has been updated to 1.3.1.

Upgrade considerationLuciadRIA

The signature of AttributedTileSet.getAttribution() has changed. Previously, it was called multiple times with a single AttributionTileRegion for a given viewpoint. Now, it is called once with the entire list of tile regions. This makes it easier for tileset implementations to fetch attributions asynchronously.

Upgrade considerationLuciadRIA

Both GoogleImageModel and GoogleLayer are being phased out in favor of the new GoogleMapsTileSetModel in a RasterTileSetLayer. In 2024.0, they are being deprecated. While deprecated, they will remain available in all 2024.0 and 2024.1 releases. In the next major release, 2025.0, they will be completely removed.

Upgrade considerationLuciadRIA

RIA-4746
If you implemented an override of PickController.getCandidates(), or if you're calling it yourself, you should take into account the new additional multiple parameter.

Upgrade considerationLuciadRIA

RIA-3707
The createFromUrl and createFromCapabilities methods of WMSTileSetModel and WMSImageModel will now throw an error if you request a model with a coordinate reference that is not supported by the WMS server's capabilities. Before this fix, the factory methods would create a model with a CRS:84 reference if the server did not support the requested coordinate reference.

Upgrade considerationLuciadRIA

A dependency to the meshoptimizer library version 0.20 has been added. This library is used in internal code. No code changes are needed.

Upgrade considerationLuciadRIA

Icon3DStyle.legacyAxis is now set to false by default. You will need to update the rotations applied to your 3D icons or explicitly set the legacyAxis property to true on the styles you are using. See the documentation of Icon3DStyle for more information on the axis system of 3D icons.

Upgrade considerationLuciadRIA

(non-WebGL) Map is being phased out in favor of WebGLMap. In 2024.0, it is being deprecated. While deprecated, it will still remain available in all 2024.0 and 2024.1 releases. In the next major release, 2025.0, it will be completely removed. If you haven't already done so, you should switch to WebGLMap right now. To accomplish this, replace

        import {Map} from "@luciad/ria/view/Map.js";

        const map = new Map(domNode, options);
      
with

        import {WebGLMap} from "@luciad/ria/view/WebGLMap.js";

        const map = new WebGLMap(domNode, options);
      
For more information, check out the Non-webgl Map end-of-life announcement .