2023.0

2023.0.11

Bug fixLuciadRIA

RIA-4566
Fixed a regression with MapNavigator.pan. Panning to a location that's far away, would not move the camera all the way to its target location.

Bug fixLuciadRIA

RIA-4567
Fixed a regression with Map.onCreateContextMenu. It was no longer called when there are no features under the mouse.

2023.0.10

ImprovementLuciadRIA

RIA-4483
Improved error reporting when loading 3D icons from glTF files with invalid textures.

Bug fixLuciadRIA

RIA-4537
WFSFeatureStore now passes to the WFS service the exact reference identifier, as reported in the OtherSRS list of WFS capabilities. Before the fix, the reference identifier could be expressed in a different format, that might be rejected by the WFS service when requesting features.

Bug fixLuciadRIA

RIA-4538
Icon3DStyle: a 3D icon would not be visible on a 2D map when Icon3DStyle.transparency was set to true.

Bug fixLuciadRIA

RIA-4532
Fixed an issue with creating WMS models using createFromCapabilities or createFromURL with a reference configured in WMSTileSetModelCreateOptions. It was possible that a model was created with a reference that was equivalent to the requested reference but had a different axis ordering. For example, if you requested a model with an EPSG:4326 reference, you could get a model with a CRS:84 reference. This posed a problem if the WMS server does not support CRS:84.

Bug fixLuciadRIA

RIA-4527
Fix for possible incompatibility when displaying panoramic images with an Intel Graphics chipset.

Bug fixLuciadRIA

RIA-4499
Fixed a race issue when a feature model runs a query and is updated at the same time with add/put/remove operations. Before the fix individual feature mutations could be ignored.

Bug fixLuciadRIA

RIA-4524
Fitting on a bounds with elevation and a width and height of (almost) zero ignored the elevation.

Bug fixLuciadRIA

RIA-4488
Fixed a bug where the terrain offset of a TileSet3DLayer was still applied when its visible property was true, but the layer group containing the layer was invisible.

Bug fixLuciadRIA

RIA-4504
LuciadRIA now correctly parses the attribution element for layers in a WMS Capabilities response if it is present. Before the fix WMSCapabilitiesLayer.attribution was always null or undefined. In accordance with the WMS specifications, all elements in WMSCapabilitiesLayerAttribution are optional and can also be null.

Bug fixLuciadRIA

RIA-4506
Fixed an issue with the script to pack multiple samples in a release. On Windows, it would pack samples into an extra "webpack.config.js" folder inside the target folder.

Bug fixLuciadRIA

RIA-4497
Fixed an issue where WFSFeatureStore could decode features in incorrect reference. This situation happened when the store's reference, selected by the store from the WFS capabilities, mismatched the WFS service's default reference. The store will throw an exception if no reference is supported in LuciadRIA from the WFS capabilities.

Bug fixLuciadRIA

RIA-4489
Fixed an issue in which the TileLoadingStatus of a 3D Tiles layer did not reflect the actual number of loaded and pending tiles.

Bug fixLuciadRIA

RIA-4484
Fixed an issue where an error might be thrown when Map.getViewTransformation is called on a Map that is already destroyed.

Bug fixLuciadRIA

RIA-4482
Fixed memory blocks that were not released when glTF files were loaded as 3D icons.

Bug fixLuciadRIA

RIA-4481
Fixed an issue with picking of 3D shapes and icons that are drawn right on top of a draped layer.

Bug fixLuciadRIA

RIA-4476
Fixed an issue where the WASM binary used in LuciadRIA was inlined twice, resulting in unnecessary large bundle sizes.

Upgrade considerationLuciadRIA

RIA-4457
Luciad RIA now uses libwebp version 1.3.2.

2023.0.06

Bug fixLuciadRIA

RIA-4462
Fixed an issue in SLD styling, where fills without color but with opacity did not get assigned the correct opacity. Also fixed an issue where fills with an opacity value of 0 got a default color instead of being rendered transparent.

Bug fixLuciadRIA

RIA-4460
Fixed an issue in SLD styling, where external svg images without width and height, used in graphics without size parameter, were not correctly defaulted to a height of 16px.

Bug fixLuciadRIA

RIA-4459
Fixed an issue where HSPCTilesModel would log a warning when the model had a reference equal to EPSG:4978, but without identifier.

Bug fixLuciadRIA

RIA-4453
Fixed icon jittering and inaccuracies in Chrome on ARM-based MacOS devices.

2023.0.05

ImprovementLuciadRIA

RIA-4450
SLD support has been enhanced with the possibility to use a function to define the wellKnownName of a mark graphic.

Bug fixLuciadRIA

RIA-4449
Fixed an issue in SLD functions to make sure the "recode" function can also handle number-properties.

Bug fixLuciadRIA

RIA-4431
Fixed an issue in SLD styling, where svg images without width and height, used in graphics without size parameters, were displayed with a size of 256px. This was corrected to the default size of 16px as specified.

Bug fixLuciadRIA

RIA-4430
Fixed an issue in SLD styling (webGL only), where graphic stroke patterns did not continue nicely at corners.

Bug fixLuciadRIA

RIA-4427
Fixed an issue in SLD styling, where dashed lines would not be rendered when the dash specification consisted of an uneven number of components.

Bug fixLuciadRIA

RIA-4426
Fixed an issue in SLD styling, where labels that have undefined or null content, should not get displayed.

Bug fixLuciadRIA

RIA-4424
Fixed an issue in SLD styling, where an empty fill tag should result in a default 50% grey fill.

Bug fixLuciadRIA

RIA-4260
Fixed an issue in symbology encoding, where a "square" mark was drawn too small. With this fix the given size will equal the length of the side of the square.

Bug fixDefense Symbology

RIA-4454
Fixed an issue with the Contain symbol, where the arrow was not always drawn perfectly perpendicular to the opening of the circle.

2023.0.04

Bug fixLuciadRIA

RIA-4442
Fixed a divide-by-zero error when editing a shape draped on a TileSet3DLayer. It occurred when dragging a handle close to the edge of the viewport.

2023.0.03

ImprovementLuciadRIA

Icon3DStyle: the initial load time of glTF models has been improved, specifically for models that have parts that reference the same texture.

ImprovementLuciadRIA

RIA-3846
IconStyle.modulationColor is now also applicable when drawing icons on a non-hardware accelerated map.

Bug fixLuciadRIA

RIA-4422
Fixed an issue where drawing complex stroke lines on a non-hardware accelerated map resulted in throwing exceptions when switching to the fallback pattern.

Bug fixLuciadRIA

RIA-4434
KMLLayer draws image icons, coming from KMZ image resources, scaled to the height of 32 pixels preserving the width to height ratio. Before the fix, the resource images where resized to 32x32 pixel image, making them non-uniformly scaled.

Bug fixLuciadRIA

RIA-4435
ParameterizedPointPainter: an error was thrown when a FeatureLayer with a ParameterizedPointPainter was removed from the map and later added again.

Bug fixDefense Symbology

RIA-4437
Fixed an issue where helper lines were not drawn when creating a military symbology feature that has a GeoBuffer shape.

Bug fixDefense Symbology

RIA-4429
Fixed an issue with editing military symbology features, where you could not move tactical graphics with constrained shapes.

2023.0.02

ImprovementLuciadRIA

RIA-4405
FeatureLayer: the initial load time when multiple FeatureLayer are added to a map has been improved.

Bug fixLuciadRIA

RIA-4419
Fixed an exception thrown when loading a 3D Icon from a GLB file that has 16 bits integer colors per vertex.

Bug fixLuciadRIA

RIA-1755
WFSFeatureStore works properly when the data coordinate reference from WFS capabilities is represented as a well-known text (WKT). Before the fix, in such a situation WFSFeatureStore could not be instantiated.

2023.0.01

ImprovementLuciadRIA

RIA-4399
Properties of features in an OGC 3D tile set can now be retrieved from the Batch Json table and used as Feature ID or in the style's expressions (only applies to 1-dimension numerical values).

ImprovementLuciadRIA

RIA-3761
ReferenceProvider.parseWellKnownText now also supports parsing topocentric references.

ImprovementLuciadRIA

RIA-4367
Bundled image resources in a KMZ file are now loaded and used to properly visualize KML features on KMLLayer. Before, bundled resources in a KMZ file were not handled.

ImprovementLuciadRIA

RIA-4396
ReferenceProvider.createTopocentricReference now allows you to specify an identifier for the created topocentric reference. This can either be done by passing the identifier directly (see CreateTopocentricReferenceOptions.identifier), or by specifying an authority name and code using which the identifier is constructed (see CreateTopocentricReferenceOptions.authorityName and CreateTopocentricReferenceOptions.authorityCode).

ImprovementLuciadRIA

ReferenceProvider now additionally supported WKT strings/EPSG codes with the following datums:
  • Korean Datum 1985
  • Macao 1920

ImprovementLuciadRIA

RIA-3820
MeshUrlIcon3DStyle now extends the HttpRequestOptions interface. This makes it possible to provide authentication headers.

Bug fixLuciadRIA

RIA-4414
Fixed an issue with HSPC tile loading caused by WKT references that have a trailing null character.

Bug fixLuciadRIA

RIA-4170
The spherical and ellipsoidal Geodesy.area and Geodesy.shortestDistanceToLine implementations didn't return correct results when passing input defined in a reference that is not geodetic. The cartesian Geodesy.area implementation now also throws a programming error when passing input defined in a geocentric reference: the area calculation is 2D, while a geocentric reference defines 3D points. This would result in incorrect results.

Bug fixLuciadRIA

RIA-4398
GeodesyFactory didn't allow creating a cartesian, spherical nor ellipsoid geodesy for topocentric references.

Bug fixLuciadRIA

RIA-4396
Topocentric references are now better supported when using a WebGLMap. Among others, it was not possible to fit on a map using bounds defined in a topocentric reference.

Bug fixLuciadRIA

RIA-4397
Visualizing vector data that is defined in a topocentric reference on a 3D map now works. Before this fix no data appeared and a TypeError was logged on the developer console.

Bug fixLuciadRIA

RIA-4378
Fixed an issue where edit handles would not stick to terrain while toggling visibility of an elevation layer.

Bug fixLuciadRIA

RIA-4249
Web worker issues due to destroying the map quickly after it was created are now correctly caught.

Bug fixLuciadRIA

RIA-4365
A LoadingStrategy with refresh settings will now clear its internal timer resources when a FeatureLayer configured with that loading strategy is removed from the map.

Bug fixLuciadRIA

RIA-4041
Large geocentric polygons were not flat, but followed the ellipsoid's curvature in 3D.

Bug fixLuciadRIA

RIA-4351
Improved the query process with the clustering transformation and simultaneous model updates. Before the fix it could happen that LayerTreeNode.whenReady promise was resolved before the model updates were handled.

Upgrade considerationLuciadRIA

RIA-4332, RIA-4359
Icon3DStyle: the pbrMetallicRoughness.baseColorFactor defined in glTF files was not applied correctly, resulting in a wrong color to be visualized. This fix also applies to OGC 3D Tiles visualized in a TileSet3DLayer. This fix might result in a different visualization of your model when the glTF file does not define a color texture or color vertex attribute. To get the correct visualization in this case you need to enable PBR via the PBRSettings property on Icon3DStyle or on MeshStyle.

2023.0

New featureLuciadRIA

RIA-4152
The SLD support is extended with the possibility to define custom functions and to use a set of pre-defined functions. For more information about defining and using those functions, see the article SLD custom functions - Usage and examples. The symbology encoding sample has been extended to incorporate a custom function altering the width of the roads based on their type.

New featureLuciadRIA

RIA-3020, RIA-3705

WMTS support is extended to handle Tile Matrix Sets of which the first Tile Matrix has more than 8 columns and 8 rows, only in the case of a WebGL-enabled maps.

RasterTileSetLayer can now display a red hatched rectangle instead of any actual imagery data when zoomed out to a fair distance from the data. More information can be found in the article Why does my imagery layer show a red (hatched) rectangle on a WebGL map?

You can customize the style of the raster outline drawn when zoomed out far from the data. For more information please refer to the article Learn how to visualize and style raster data using a RasterTileSetLayer. and the API documentation of RasterStyle, where you can find the new fillStyle and lineStyle properties.

New featureLuciadRIA

On point clouds, a large number of points displayed on the screen can cause a decrease in performance. To counteract this effect, the number of points displayed in a layer can now be limited using the new performanceHints.maxPointCount property. This only applies to point clouds. See Limiting the number of points in a layer for more details

New featureLuciadRIA

You can now deal with "WebGL context loss" events in LuciadRIA. For more information, read the API documentation of WebGLMap.webGLContext and WebGLMap.reboot().

New featureLuciadRIA

The WMTS support is extended to handle Tile Matrix Sets that are not organized as a quad-tree.

ImprovementLuciadRIA

RIA-4335
GeoBuffer contours can now be accessed through theGeoBuffer.contour field.

ImprovementLuciadRIA

Improved support for ScalingMode.ADAPTIVE_WORLD_SIZE for HSPC point clouds. ScalingMode.ADAPTIVE_WORLD_SIZE is now the recommended setting for all point clouds.

ImprovementLuciadRIA

RIA-4313
It is possible to define LoadSpatially to request data with a single query object for the whole 3D scene. For more information please consult LoadSpatiallyStrategyConstructorOptions API.

ImprovementLuciadRIA

The TileSet3DLayer class has a new property named loadingStatus, which is an object that represents the layer's current status of tile loading and rendering. You can listen to changes in this status by subscribing to the "LoadingStatusChanged" event.

ImprovementLuciadRIA

RIA-4286
LuciadRIA provides now a simple Cursor implementation that iterates over an array of elements. For more details, please consult ArrayCursor API.

ImprovementLuciadRIA

RIA-3586

You can now use complex stroke lines with a width in world units, for example meters. See the ComplexStrokedLineStyle.uom property for details.

You can also scale your icon or text decorations in world size, see the size property on their factory method options.

World-sized complex stroke lines are not supported in a non-WebGL Map.

ImprovementLuciadRIA

RIA-4178
The Transformation class now has two new properties: inputReference and outputReference.

ImprovementLuciadRIA

RIA-4178
The Transformation class now has a new property inverseTransformation that allows you to do transformations from output reference back to input reference.

Bug fixLuciadRIA

Draping of vector and raster data has been improved. Cases where vector or raster data could be blurry, or would be clipped at the sides have been fixed.

Upgrade considerationLuciadRIA

RIA-3882
LuciadRIA imports now always include the file extension. This allows LuciadRIA modules to be resolved by the browser's native module resolver, as well as build tools using NodeJS' ECMAScript module resolution rules. LuciadRIA sample code has been updated to use these new ES module resolution rules:
  • A sample's package.json now mentions "type": "module".
  • A sample's tsconfig.json now sets "moduleResolution": "nodenext".
  • Imports in samples now also contain the file extension (.js or .jsx)
It's expected that most users will not run into any issues upgrading. If your application has a non-trivial, multi-package setup that doesn't treat LuciadRIA as a regular dependency, you might have to adapt your setup. See ES modules as of LuciadRIA 2023.0 for more details

Upgrade considerationLuciadRIA

The creation of WMTSTileSetModel now can create a RasterTileSetModel that does not have a quad-tree tile set structure.

Users of a WebGL enabled map are not affected by this change as the rendering supports this type of tile set structures.

Users of a Canvas map are affected as this map only supports raster tile sets that have a quad-tree structure. You need to update the call for the WMTS model creation to restrict use to Tile Matrix Sets that have a quad-tree. You can do this by adding the option useQuadTreeOnly: true in the WMTSTileSetModelCreateOptions when calling the method createFromURL or createFromCapabilities.

Upgrade considerationLuciadRIA

The RasterTileSetModel can now represent tile sets that are not a quad-tree. It allows to create tile sets where the bounds on different levels are not exactly the same and for which the number of rows and columns is not a power of two with respect to the top level. The bounds for each level in the tile set must be aligned in the top-left corner.

The constructor options for the following raster models are affected by this change. They now use a new way to express the tile set structure.

To maintain backward compatibility these constructor options have an equivalent with Deprecated in their name, i.e., RasterTileSetModelConstructorDeprecatedOptions for RasterTileSetModelConstructorOptions. When using TypeScript type declarations you may need to update your code to use the deprecated options type.

Upgrade considerationLuciadRIA

You can now use world-sized lines for non-draped 3D lines. Before, these were always draped on terrain.

The behavior is now in line with other shape painting: the line will be draped if you explicitly enable draping in your style, or if the line is 2D (Z=0 and depth=0). Otherwise, the line is not draped.

If you have 3D lines with a world size, these were always draped before, so if you want to keep that behavior, specify draped: true in your ShapeStyle.

Upgrade considerationLuciadRIA

You can now use complex stroke lines for non-draped 3D lines. Before, these were always draped on terrain.

The behavior is now in line with other shape painting: the line will be draped if you explicitly enable draping in your style, or if the line is 2D (Z=0 and depth=0). Otherwise, the line is not draped.

If you have 3D lines with complex strokes, these were always draped before, so if you want to keep that behavior, specify draped: true in your ShapeStyle.

In addition, the width of draped complex strokes is now much more stable, also when looking at the horizon.

Non-draped pixel-sized 3D lines with complex strokes are oriented towards the viewer. Draped strokes, or world-sizes strokes are never screen-oriented.

Keep in mind that certain deformations of your pattern is expected, particularly when looking along the line.

Complex strokes on 3D lines
Example of complex strokes on 3D lines.

2022.1

2022.1.09

ImprovementDefense Symbology

RIA-4314
The rendering of APP-6A Sea Mine symbols has been improved. The outline of their icon is now painted black, where it used to be painted in the affiliation color.
APP-6A Sea Mines before the change
APP-6A Sea Mines before the change.
APP-6A Sea Mines after the change
APP-6A Sea Mines after the change.

Bug fixLuciadRIA

RIA-4348
The Vertical View Sample no longer crashes when you're not using a hardware accelerated (WebGL) map.

Bug fixLuciadRIA

RIA-4341
Selection of 3D icons didn't work as expected anymore.

Bug fixDefense Symbology

RIA-4328

The default hierarchy icon line color for Sea Mine symbols is now always black #000000 instead of the symbology style's color (MilSymStyle.color).

.

This improves consistency with the other symbols where the symbology style's color is only used to color offset lines, direction of movement arrows and other icon decorations.

2022.1.08

Bug fixLuciadRIA

RIA-4331
3D Tiles did not fade in correctly when the fading time is bigger than 0 and the transparency flag is enabled in the 3D tile layer.

Bug fixLuciadRIA

RIA-4333
Fix for an exception thrown when changing the isDrapeTarget boolean on a TileSet3DLayer if the layer is already loaded.

2022.1.07

Bug fixLuciadRIA

RIA-4304
FeatureLayer: complex polygons would be rendered with artifacts when crossing the world boundary of the projection used on the map.

Bug fixDefense Symbology

RIA-4327
Fixed an issue where on a non-hardware accelerated map the framerate in the "military symbols overview" was too low.

Bug fixDefense Symbology

RIA-4319
Fixed an issue where the non-hardware accelerated map freezes sometimes when switching to an icons layer in the "military symbols overview" sample.

Bug fixDefense Symbology

RIA-4312
Fixed an issue where on a non-hardware accelerated map icons disappear briefly on hovering or selection.

2022.1.06

Bug fixLuciadRIA

Parts of a polygon (or another type of surface) were not always filled correctly when visualized on a 3D map. This was a regression in the previous patch release.

Bug fixLuciadRIA

RIA-4309
Fixed a discretization issue on a non-hardware accelerated map. As a consequence, long lines were drawn too straight comparing to the same lines rendered on hardware accelerated maps.

Bug fixLuciadRIA

RIA-4306
Fixed an issue, where LuciadRIA called FeaturePainter.paintLabel and FeaturePainter.paintBody too excessively on hardware-accelerated maps.

Bug fixLuciadRIA

RIA-4303
LuciadRIA no longer calls FeaturePainter.drawLabel when a FeatureLayer is invisible in the LayerTree.

Bug fixLuciadRIA

RIA-4293
Fixed an issue where lighting with shadows combined with certain shapes could result in errors.

2022.1.05

ImprovementLuciadRIA

RIA-4290, RIA-4292
You can now draw world-sized fill images with FillStyle.uom, in a similar way as you draw world-sized icons. FillStyle.width and FillStyle.height behave the same as IconStyle.width and IconStyle.height.

ImprovementLuciadRIA

RIA-4218
Improved clustering transformation performance when processing big datasets.

ImprovementDefense Symbology

RIA-4232

The rendering of APP-6B Sea Mine symbols has been improved. The outline of their icon is now painted in the MilSymStyle.color, where it used to be painted in the affiliation color. If you want the effect as in the image below, you need to add color: "#000000", in your MilSymStyle. The default color of the outline is white ("#FFFFFF").

APP-6B Sea Mines before the change
APP-6B Sea Mines before the change.
APP-6B Sea Mines after the change
APP-6B Sea Mines after the change.

The rendering of Sea Mine symbols has been improved when their fill is disabled for various standards. When their symbol fill is disabled, the hierarchy representation is no longer filled, revealing additional details such as the 'N' icon inside the "Ground (Bottom) Non-Mine Mine-Like Contact" MIL-STD-2525c symbol. This makes the Sea Mine symbols more recognisable. This change affects the Sea Mine symbols in the following standards: APP-6D, MIL-STD-2525c, MIL-STD-2525d.

Unfilled MIL-STD-2525c Sea Mines before the change
Unfilled MIL-STD-2525c Sea Mines before the change.
Unfilled MIL-STD-2525c Sea Mines after the change
Unfilled MIL-STD-2525c Sea Mines after the change.

ImprovementDefense Symbology

RIA-4254
It is now possible to customise the line-color MilSymStyle.color for unframed icon symbols, line symbols, off-set lines of icon symbols and for movement direction arrows. The new default color is white ("#FFFFFF"), to make sure that behavior does not change for you when not using this new parameter.

Bug fixLuciadRIA

RIA-4270
Fixed an issue where closed shapes that have a geocentric reference and are defined parallel to the Y/Z plane were not correctly tessellated. As a consequence, they were not rendered properly with a fill style.

Bug fixLuciadRIA

RIA-4262
Fixed an issue in symbology encoding, where the graphic fill pattern was not using the correct size (when using pixel unit of measure).

Bug fixLuciadRIA

RIA-4261
Fixed an issue for symbology encoding, where some mark-shapes (like stars and triangles) were not nicely closed (which became apparent when using a line-width beyond 1px).

Bug fixLuciadRIA

RIA-3850
FeaturePainter: Vertical polygons could have a missing segment on the outline when styled with a LineStyle.

Bug fixLuciadRIA

RIA-4283
FeaturePainter: points with a geocentric reference were incorrectly draped when their z-coordinate is 0.

2022.1.04

Bug fixLuciadRIA

RIA-4282
Fixed an issue where EditHandle.onDrawLabel would not be called when editing a GeoBuffer shape.

Bug fixLuciadRIA

RIA-4277
GeoJsonCodec no longer removes the closing point when decoding a geometry object to a LuciadRIA Polygon.

Bug fixLuciadRIA

RIA-4269
Fixed an issue where the crosshair cursor would disappear while creating a point, for example when double-clicking.

Bug fixLuciadRIA

RIA-4273
Fixed an issue where Chrome would log warnings about non-passive event listeners being used in LuciadRIA.

Bug fixLuciadRIA

RIA-3908
Updated the list of supported features and limitations in the documentation of OGC 3D Tiles models.

Bug fixDefense Symbology

RIA-4248
Fixed an issue where an accidental clash of style-hashing caused the APP-6A warm front and upper warm front getting styled in the exact same way, depending on the order in which they were added to the model.

2022.1.03

Bug fixLuciadRIA

RIA-4251
Fixed an issue where shapes drawn in postRender on top of transparent components of the map would not display.

Bug fixLuciadRIA

RIA-4252
Fixed an issue where the 'original' shape would remain visible while editing a shape (in some cases). This only occurred when the EditController was activated before the feature/shape was processed by the layer. For example, when immediately activating an EditController after adding the layer to the map.

Bug fixLuciadRIA

RIA-4250
Fixed an issue with black flickering on a WebGLMap that has a TileSet3DLayer, a "PostRender" event listener and an active EditController.

Bug fixLuciadRIA

RIA-3929
Fixed an issue where attributes containing the characters '+' or '-' in Color Expressions would interfere with expression evaluation.

Bug fixLuciadRIA

RIA-4083
Fixed an issue where compressed textures in 3D tile sets were sometimes not recognized properly.

2022.1.02

ImprovementLuciadRIA

RIA-4009

LuciadRIA now contains a sample that illustrates how to handle IFC datasets. The geometry is loaded as OGC 3D Tiles, the metadata information is loaded via a GeoJSON dataset. The sample shows how to combine geometry and metadata into a single application.

IFC sample application
Screenshot of the IFC sample application.

Bug fixLuciadRIA

RIA-4213
GestureEvent.modifier (CTRL, ALT, SHIFT) is now also set for touch events. Users equipped with a keyboard and touchscreen can now press shift and touch the screen to select multiple features.

Bug fixDefense Symbology

RIA-4229
Corrected the jet stream symbol for the APP-6A, APP-6B, APP-6D symbologies.
APP-6A APP-6B APP-6C Jet stream
The corrected symbol for the APP-6A, APP-6B and APP-6C jet stream symbols.

Bug fixDefense Symbology

RIA-4227
Changed the default label position from "EAST" to "CENTER" for all symbols where the location is not predefined (all freeform/polygon shaped tactical graphics), for all supported symbologies (MIL_STD_2525b, MIL_STD_2525c, MIL_STD_2525d, APP-6A, APP-6B, APP-6C, APP-6D) to closer follow the specifications. You can override this default by means of the MilSymStyle.labelPosition property.

Bug fixDefense Symbology

RIA-4225
Corrected the icons for the APP-6A and APP-6B Thunderstorm symbols W*A*ST----***** and W*A*STR---*****.
APP-6A APP-6B Thunderstorm
The corrected icons for the APP-6A and APP-6B Thunderstorm symbols.

Bug fixDefense Symbology

RIA-4099
Fixed the definition for MIL-STD-2525d and APP-6D Linear Targets symbols, which, according to the specification, require "exactly" two anchor points in stead of "at least" two.

2022.1.01

ImprovementLuciadRIA

The Geodesy.distance3D method now also accepts a LineType parameter. This means that it can now also be used for rhumb lines.

Bug fixLuciadRIA

RIA-1564
Improved performance of the clustering process when features are attributed to a classification definition that does not request clustering (noClustering = true).

Bug fixLuciadRIA

RIA-4221
Prevented the non-hardware accelerated Map from importing Photon code, which caused issues on machines without WebGL support.

Bug fixLuciadRIA

RIA-3900
Fixed issue on M1 Macs for Safari where positioning of 3D data would be jittery.

Bug fixLuciadRIA

RIA-4217
Fixed a bug where not defining a SEPainterCreateOptions.DrapeTarget led by default to draping on terrain. Now the default DrapeTarget is undefined, which means that if the shape has zero Z, it will be draped on terrain and if it has non-zero Z, it will not be draped.

Bug fixLuciadRIA

RIA-4216
KMLCodec decodes KML 'Polygon' geometry without inner boundaries to RIA Polygon, instead of to RIA ComplexPolygon.

Bug fixLuciadRIA

RIA-4209
Fixed an issue where using map.effects.eyeDomeLighting in combination with map.effects.environmentMap 's skybox could produce some visual artifacts.

Bug fixLuciadRIA

RIA-4172
Fixed an issue in symbology encoding to correct visualisation in Firefox when using svg inline content without width and height attributes.

Bug fixLuciadRIA

RIA-4173
The Geodesy.distance3D method didn't return correct results when using a geodetic reference.

2022.1

New featureLuciadRIA

LuciadRIA now supports draping of 2D raster and vector data on OGC 3D Tiles data. You can use the new DrapeTarget enumeration on objects such as a ShapeStyle, IconStyle and RasterStyle to indicate whether the data needs to be draped on 3D Tiles and/or on terrain. You can also choose which 3D Tiles layers need to be taken into account for draping by means of a new isDrapeTarget flag on TileSet3DLayer. The use of this API is demonstrated in the "OGC 3D Tiles" sample, which has been extended with a walking tour draped on top of the Marseille 3D tiles mesh data. For more information, see the Draping on 3D Tiles article.

Draping of vector data on an OGC 3D Tiles layer
An area of interest that is draped on an OGC 3D Tiles layer with a city model.

New featureLuciadRIA

To strive for specification completeness for OGC Symbology Encoding, LuciadRIA now supports:
  • For point symbolizers:
    • The use of SVG images through the icon provider.
    • The use of UOM-aware stroke widths for marks.
  • For line symbolizers:
    • The use of line joins (mitre, round or bevel) and line caps (butt, round or square) in strokes.
    • The combination of a stroke with a graphic stroke (dash-array, graphic rotation).
    • The use of displacement and anchor points for the graphics in a graphic stroke.
    • The use of perpendicular offset without gaps or overlaps at the line joins.
    • The use of UOM-aware graphic fill for strokes.
  • For polygon symbolizers:
    • The use of the same improved stroke support as for line symbolizers.
    • The use of UOM-aware graphic fills.
    • The use of UOM-aware displacement.
    • The use of UOM-aware perpendicular offset.

For a complete overview of the supported SLD styling capabilities, see the SLD styling - Supported versions and capabilities article.

Showcase the use of newly supported features.
A park area from the OGC Symbology Encoding sample, combining several of the line and polygon styling improvements. A first polygon symbolizer uses a black fill with a displacement to apply a shadow effect. A second polygon symbolizer defines the park area’s fill and outer stroke, which is a combination of a dashed stroke and an icon with a shifted anchor point. A third polygon symbolizer with a negative perpendicular offset is used to draw the smaller green area on top.

New featureLuciadRIA

LuciadRIA now has API to customize creation and editing behavior. The new Editor and EditHandle classes give fine-grained access to the way how features or shapes should be edited and created. Users can implement their own editor or extend from one of the many out-of-the-box implementations available for LuciadRIA's shape types. The use of this API is demonstrated in the "Create and Edit" sample, which has been extended with a few common custom creation and editing use cases. Read the Customizing creation and editing guide to get started.
Custom arrow shape editor
Editing of a custom arrow shape, including helper lines and custom labels that show the arrow width.

New featureLuciadRIA

LuciadRIA now has API to work with mouse cursors on the Map. See Map.cursorManager, Controller.cursor and the Implementing custom user interaction guide for more details.

New featureLuciadRIA

RIA-3611, RIA-3561
LuciadRIA's default map behavior is now exposed in the API through the following controllers: These controllers have hooks that you can override in order to tweak the default map behavior. For more information, see the Customizing the default map behavior tutorial.

New featureLuciadRIA

LuciadRIA now supports undo/redo through the newly introduced Undoable and UndoManager API. The use of this API is demonstrated in the samples that focus on creation and editing, such as the "Create and Edit" sample. See Adding undo/redo support to your application for more information.

New featureLuciadRIA

You can now add bloom to shapes. Bloom is a glow effect that you can use to make shapes appear very bright, and draw focus to them.

Bloom vs. no bloom
Airspaces in the Trajectory sample with Bloom enabled (left) and bloom disabled (right).

For more information, see BloomStyle and BloomEffect. You can also read the "Bloom effect" section in Configuring WebGL Map effects.

New featureDefense Symbology

You can now define a BloomStyle for your military symbology layers on WebGL maps. To do so, you set a bloom: BloomStyle in your MilSymStyle when creating a MilitarySymbologyPainter. You can choose to apply the style to a certain PaintState only.

ImprovementLuciadRIA

RIA-4125
LuciadRIA now supports the PropertyExists function of the OGC filter encoding standard. You can for example use this function in an SLD style to skip painting labels for non-existing properties in your dataset (instead of painting them as "undefined").

ImprovementLuciadRIA

RIA-4102
LuciadRIA now supports HSPC datasets with a reference expressed in WKT (projection-wkt property). Before, only HSPC references expressed with an EPSG code (projection-epsg property) were supported.

ImprovementLuciadRIA

The performance of visualizing many points with the same 3D icon has been significantly improved. An example scenario is visualizing many trees with the same tree 3D icon.

ImprovementLuciadRIA

RIA-3959, RIA-3354
You can now chain multiple controllers together with CompositeController. This was already available in sample code, but has been promoted to API.

ImprovementLuciadRIA

The SLD implementation now supports adding a box around a label. Using an SLD text symbolizer, you can configure the fill and stroke of the box, as well as the desired padding between the box and the label. The article How to draw a box around labels illustrates the addition of a label box with an example.

Bug fixLuciadRIA

RIA-3933
FeaturePainter: when a shape with the same geometry but a different reference (e.g. topocentric with different origin) was submitted for drawing, it was not visually updated on the map.

Upgrade considerationLuciadRIA

EditController has 2 new events: "Restarted" and "EditShape". If you extended EditController and you added extra events, you'll have to update your EditController extension to account for these extra events.

Upgrade considerationLuciadRIA

RIA-3777
Feature, Store and Codec implementations are now type guarded with generics. Please refer to the TSDoc for more details. If the inferred type is too restrictive, force a more generic type.

      // Let TS compiler know that feature's shape is a point and its properties can contain the population field.
      interface CityProperties { name: string; population?: number};
      const cityFeature = new Feature<Point, CityProperties>(point, { name: 'Leuven'});
      // Let TS compiler know that the store can accept features with a polyline or a polygon shape and any properties.
      const store = new MemoryStore<Feature<Polyline | Polygon, FeatureProperties>>(data: [polylineFeature]);
    

Upgrade considerationLuciadRIA

CreateController.onObjectCreated now has a return type of void | Promise<void>. This reflects the actual implementation. The old boolean return value was already ignored.

Upgrade considerationLuciadRIA

The layer of a CreateController and EditController is now typed more accurately as FeatureLayer instead of Layer.

Upgrade considerationLuciadRIA

The following third party libraries have been updated:
  • libcurl: updated to version 7.86.0
  • openssl: updated to version 1.1.1s
  • zlib: updated to version 1.2.13

Upgrade considerationLuciadRIA

A dependency to the ms-gsl library version 3.1.0 has been added. This library is used in internal code. No code changes are needed.

2022.0

2022.0.07

Bug fixLuciadRIA

RIA-4160
Fixed a problem when an on-path label is placed in the focus point of the underlying path instead along the path. This situation can occasionally happen on WebGL maps after zooming in from scales when the shape was hardly visible in the view.

Bug fixLuciadRIA

RIA-4148
Spherical and ellipsoidal Geodesy instances returned a distance in degrees instead of meters for the shortestDistanceToLine method.

Bug fixLuciadRIA

Geodesy.area could return incorrect results for triangles with coinciding points.

Bug fixLuciadRIA

RIA-4167
Fixed an issue where the ruler controller was placed incorrectly on point clouds with gap filling enabled.

Bug fixLuciadRIA

RIA-4156
Fixed an issue where the ruler controller was placed incorrectly on point clouds with adaptative world size scaling.

2022.0.06

ImprovementLuciadRIA

RIA-4135
Corrected the TypeScript signature of the WFSFeatureStore.query and WFSFeatureStore.spatialQuery methods. The returned type is a promise of the Cursor only.

ImprovementLuciadRIA

RIA-4044
It is possible now to send queries to a WFS service with the OGC SortBy condition. For more information please consult the WFSQueryOptions.sortBy API.

Bug fixLuciadRIA

RIA-4144
Fixed an issue when labels drawn by a Controller disappear from a non-hardware accelerated map after feature layers repaint their labels.

Bug fixLuciadRIA

RIA-4142
RasterLayer: For some specific camera positions it was possible that parts of the terrain were missing. This resulted in gaps in the visualization of the terrain and possibly large camera movements when navigating.

Bug fixLuciadRIA

RIA-4117
Fix for transparent point clouds disappearing when gap filling is enabled. Transparent point clouds with gap filling will now appear but gap filling will be disabled.

Bug fixLuciadRIA

RIA-4111
GoogleLayer is no longer supported on Internet Explorer 11. GoogleLayer used the Google Maps API to embed Google Maps data in a LuciadRIA non-hardware accelerated 2D Map. Google dropped support for running the Google Maps API in Internet Explorer 11 in November 2022. The Google Maps API now exits with an error if you try to load it in Internet Explorer.

2022.0.05

Bug fixLuciadRIA

RIA-4105
A label that is created with LabelCanvas.drawLabelOnPath is now redrawn when its associated shape is mutated. Before the fix, on-path labels were not repainted along their mutated shapes.

2022.0.04

ImprovementDefense Symbology

RIA-4091
We added the possibility to define your own speedLeaderLengthRatio inside MilSymStyle. The length in pixels of your speed leader is calculated as speed(m/s)*speedLeaderLengthRatio*iconSize and is clipped between 1*iconSize and maxRatioMovementDirectionArrow*iconSize.

Bug fixLuciadRIA

RIA-4063
Fixed a possible memory leak when loading OGC 3D Tiles containing physically based rendering (PBR) data.

2022.0.03

ImprovementLuciadRIA

RIA-4064
The label placement procedure takes now into account the fact that the corresponding body is painted with the OcclusionMode style that makes the shape visible even if it is obscured by other objects. In this case the feature's corresponding label stays visible too.

ImprovementLuciadRIA

RIA-4065
The LoadSpatially strategy will log a warning message when the computed spatial BBOX object has a 0 width or height value. Such a situation can happen when there is no intersection between the current view extent and the FeatureModel.bounds, provided the model bounds is defined.

ImprovementLuciadRIA

RIA-1000
Improved the LoadSpatially strategy behavior when the underlying WFSFeatureStore requests a limited number of features with the WFSQueryOptions.maxFeatures query parameter. In this case, the layer might not re-query the data after zooming in. Now, after zooming in, a new query is launched to get a new set of features when relevant to the new view extent.

ImprovementDefense Symbology

RIA-4062
The MilSymStyle has been extended with a property labelStyleGroup, Put it to "NON_DECLUTTERED" to disable label decluttering for all symbols on the map. More information can be found in LabelStyle.group.

ImprovementDefense Symbology

RIA-4056
We added sample-only functionality to the AllSymbols sample to make it a large, live addendum to the documentation. You can now:
  • Use the search bar to easily find a certain symbol by name or code.
  • Use the "Anchor Points" layer to see the anchor points and their order used to create the symbol.

ImprovementDefense Symbology

RIA-3477
We improved the experience for users of the symbology applications using WebGL Maps:
  • We introduced two new MilSymStyle properties that define the appearance of tactical graphics: skeleton to indicate that you want a simplified style without decorations for your tactical graphics (false by default), and body to indicate that you prefer the full, correct styling for your tactical graphic (true by default).
  • We offer the possibility to make your MilitarySymbologyPainterConstructorOptions. stylePaintState -dependent.
We used this new military symbology API to improve usability for both the Symbology and the AllSymbols sample. On a WebGL map, tactical graphics are pre-loaded using a skeleton style. Only after, symbols are invalidated one by one and redrawn with their body style. We also use the skeleton style as a selection style to improve the response upon selection. To further improve the user experience, we now track the loading progress of the fully styled tactical graphics on the layer. For more information, see this article in the Military Symbology documentation section.

Bug fixLuciadRIA

RIA-4053
Fixed an issue with controller rendering on WebGLMap. In rare cases, it could throw an error if many updates were performed while resolving icon styles.

2022.0.02

ImprovementLuciadRIA

RIA-3918
Added support for 3D Tiles that use coloring as vertex colors.

Bug fixLuciadRIA

RIA-866
Fixed an issue when a feature is selected even when it does not pass FeatureLayer.filter predicate. In such a situation such a feature was painted on a non-hardware accelerated map. This situation happened when a filter predicate was set on a layer before the layer was added to a map.

Bug fixLuciadRIA

RIA-4042
Fixed an issue where creation of Bounds did not finish properly.

Bug fixLuciadRIA

RIA-2905
GMLCodec decodes now the MultiLineString GML geometry.

Bug fixLuciadRIA

RIA-4039
LuciadRIA no longer throws an error when a WMS GetCapabilities response contains no layers.

Bug fixLuciadRIA

RIA-3613
Added support for GLTF version 1 files with KHR_binary_glTF extension that do not conform with the GLTF version 1 standard.

Bug fixLuciadRIA

RIA-4040
Fixed an issue with fitting on bounds that were below the surface (ellipsoid).

Bug fixLuciadRIA

RIA-3523
The visibility of point labels on 3D maps is improved when changing the camera position and pitch. Before, point labels could unexpectedly disappear at certain camera pitch values.

2022.0.01

ImprovementLuciadRIA

RIA-3948
When creating a WFSFeatureStore from a WFS capabilities object you can override the service URL both for the GET and the POST method. Before you could override the service URL for the GET method only. For more details please consult WFSFeatureStoreCreateOptions.serviceURL API.

ImprovementLuciadRIA

RIA-4020
By default GeoJsonCodec encodes a ShapeList instance to a GeoJSON geometry based on its child shapes. With the GeoJsonCodecConstructorOptions.encodeShapeListAsGeometryCollection API you can override this behavior so that a ShapeList instance is always encoded as a GeoJSON 'GeometryCollection'.

ImprovementLuciadRIA

RIA-3999
EditController and CreateController now emit a EditShape event whenever the shape is edited.

ImprovementLuciadRIA

RIA-2944
FeatureModel, with a WFSFeatureStore created from WFS capabilities, sets the spatial extent of the data (FeatureModel.bounds) based on the bounds reported in the WFS capabilities object. That way you can fit on model bounds even if WFS data is not yet loaded.

ImprovementLuciadRIA

RIA-4019
Now labels, that are styled for hovering or selection, reuse the position of the already painted label. This prevents sudden jumps of label position when labels are hovered or selected.

ImprovementLuciadRIA

RIA-3997
GMLCodec can decode now GML Circle geometries: a 'Circle' (defined by 3 points) and 'CircleByCenterPoint'.

Bug fixLuciadRIA

RIA-3961
Fix for vertical stretched artefacts on some 2D projections.

Bug fixLuciadRIA

RIA-4010
Creating a WFSFeatureStore from a WFSCapabilities object can use now otherReferences if the defaultReference is not known in the ReferenceProvider.

Bug fixLuciadRIA

RIA-4016
Corrected TypeScript type of the WFSCapabilitiesFeatureType.otherReferences property, which is now string[] instead of string.

Bug fixLuciadRIA

RIA-2914
Fixed an issue with labels for 3D icons. They would often disappear because they were obscured by the 3D icon itself.

Bug fixLuciadRIA

RIA-3984
Creating a WMTSTileSetModel from a WMTSCapabilities object now no longer throws an error if the GetCapabilities response contains a CoordinateReference that is not known in the ReferenceProvider. TileMatrixSets with such a CoordinateReference are disregarded instead.

Bug fixLuciadRIA

RIA-3998
GMLCodec decodes GML 'Polygon' and 'PolygonPatch' geometries without an interior ring to RIA Polygon, instead of to ComplexPolygon.

Bug fixLuciadRIA

RIA-3993
Fix for some geometries that could be misplaced in rare 3D tilesets that would reuse mulitple times the same assets.

Bug fixDefense Symbology

RIA-4028
Fixed an issue where dynamic affiliation color changes were no longer correctly picked up due to an error in caching.

2022.0

New featureLuciadRIA

LuciadRIA now supports 3D Tilesets that contain KTX2/Basis Universal images.

New featureLuciadRIA

LuciadRIA now supports 3D Tilesets that contain CRN images.

New featureLuciadRIA

You can now enable GPU texture compression on TileSet3DLayer for OGC 3D Tiles mesh data. This can greatly reduce the amount of GPU memory needed, improve performance and stability.

Enable when displaying meshes with large textures, such as reality capture reconstructions. By default, texture compression is enabled.
Disable when displaying meshes with lookup textures, such as CAD models.

If your environment does not support GPU texture compression, setting the flag has no effect. Use the "Device Support" sample to verify if texture compression is supported on your device.

New featureLuciadRIA

Added support for HTMLVideoElement as a texture on a mesh. For more information, see MeshCreateOptions.image. See the how-to guide on visualizing 3D icons for more information on how to use video as texture.

New featureDefense Symbology

LuciadRIA has been extended to support all military symbology standards in stand-alone mode. You no longer need a symbology service, because LuciadRIA now includes all military symbology icons by default. Next to displaying tactical plans, you can also preview icons, or include them in various UI elements. To allow you to retrieve such a preview, LuciadRIA offers new API: MilitarySymbologyPainter#createSymbolImage.

New featureDefense Symbology

You can now visualize MGRS grids on a LuciadRIA WebGLMap. This new feature is demonstrated in the "MGRS Grid" sample. For more information, read the MGRSGrid API documentation.

ImprovementLuciadRIA

LuciadRIA now support OGC 3D Tiles point clouds with Draco-compressed PNTS tiles. LuciadFusion also supports creating such datasets.

ImprovementLuciadRIA

A new performanceHints property has been added to FeatureLayerConstructorOptions. It provides settings that can dramatically improve the layer's data loading performance in some situations. Please refer to the API reference documentation for more information on when these settings can be applied.

ImprovementLuciadRIA

A new expression `frontFacing` has been added to `ExpressionFactory`.
It can be used to distinguish pixels that are part of front-facing triangles. This expression for example makes back-facing pixels transparent: map.layerTree.addChild(new TileSet3DLayer(model, { transparency: true, meshStyle: {colorExpression: ifThenElse(frontFacing(), defaultColor(), multiply(defaultColor(), color("rgba(255, 255, 255, 0.3")))} })); Note that if you just want to hide back-facing triangles, it's better to use the facetCulling option. map.layerTree.addChild(new TileSet3DLayer(model, { meshStyle: {facetCulling: FacetCullingType.BACKFACE_CULLING} }));

ImprovementLuciadRIA

New expression functions `normalize` and `length` have been added to `ExpressionFactory` that work on a vector of length 3 (`Point` or `Vector3`) or 4 (`Color`).

ImprovementLuciadRIA

RIA-3936
You can now use a displacement expression on point clouds, similar to displacement of 3dtiles meshes. See `PointCloudStyle.displacementExpression` for details.

ImprovementLuciadRIA

RIA-3762
We've done various improvements to draping of vector and raster data. Many cases where draped data appeared blurry, have been fixed.

ImprovementLuciadRIA

You can now set WebGLMap.maxMemoryUsageHint.cpuMB and WebGLMap.maxMemoryUsageHint.gpuMBto values higher than 4000MB. Previously, this would be capped at 4000MB. This allows you to use more memory in your application. It is intended for software that is run on high-end clients.

It is intended for use on high-end devices with enough available memory. Setting this number too high can cause instability.

ImprovementLuciadRIA

We replaced the PointCloudStyle.scalingMode option with PointCloudStyle.pointSize, which gives you more control over the point cloud dot size.

You can still use the existing scalingMode option for backwards compatibility.

ImprovementLuciadRIA

RIA-3775

LuciadRIA now supports Hexagon Smart Point Clouds (HSPC) in 2D EPSG references.

Before, we supported only HSPC datasets in 3D geocentric (EPSG:4978) coordinates, and non-referenced datasets.

Note that we still recommend to process your HSPC data in 3D geocentric coordinates, for optimal streaming performance. When relying on Hexagon's HSPC conversion functionality available in myVR, you can do this for example with these conversion parameters: mHSPCConverter --source_projection EPSG:7415 --output_projection EPSG:4978.

ImprovementLuciadRIA

We did various improvements to our point cloud rendering visual quality and performance, in particular for Hexagon Smart Point Cloud (HSPC). For details, see the documentation of PointCloudStyle and the documentation articles Tuning performance and visual quality of point clouds and Visualize Hexagon Smart Point Cloud (HSPC) data.

Performance
We improved raw painting performance of all point clouds. Your map will be more interactive and fluent when loading lots of points.
We added a new option PointCloudStyle.pointShape which influences how points are drawn, and how overlap between points is handled. When using SPHERE, overlap result in a high quality visual coverage of your data, but at the cost of performance. We propose to use DISC when you have a small point size as it improves performance. The default is DISC for HSPC, SPHERE for OGC 3D Tiles.

World-sized dots
Next to the existing PIXEL_SIZE and ADAPTIVE_WORLD_SIZE, there is a new scaling mode WORLD_SIZE. This mode is particularly useful for HSPC. It allows points to grow larger when you get close to them, based on a physical size in meters. This helps creating a visually closed surface up-close instead of having interspersed small dots. For details see the pointSize property on PointCloudStyle.

Incremental and partial tile painting
We now display HSPC point cloud tiles partially, based on their level-of-detail. This avoids highly visible transitions between tiles of different level-of-detail. This is automatically enabled for HSPC.

Gap-filling post-processing effect
We added an optional point cloud post-processing effect that intelligently fills up small gaps between points. This helps creating a visually closed surface by in-painting gaps of 1 or 2 pixels. You can enable it using the gapFill property on PointCloudStyle.

ImprovementLuciadRIA

RIA-1437
It is now guaranteed that the reference that is set on constructor for WFSFeatureStore and UrlStore will be propagated to the underlying codec on each query request. Also, it is possible now to specify in GeoJsonCodec and GMLCodec the reference of decoded shapes, which will override the default reference from data that is being decoded.

ImprovementLuciadRIA

RIA-3617
IconStyle: with IconStyle.modulationColor it is now possible to configure a color that is modulated with the icon. For example using an icon with gray-scale colors and a red modulation color will result in a resulting painted icon with red hues. Note that this will only be applied on a WebGL map.

ImprovementLuciadRIA

Transparency flag has now been added to Icon3DStyle in order to allow for correct rendering of meshes with transparent components. This should be set to true when a mesh either has a color or texture with an alpha channel less than 1.0. Note that setting it to true might impact performance.

Bug fixLuciadRIA

RIA-1016
Fixed an issue where labels drawn by FeaturePainter.paintLabel() or Controller.onDrawLabel() are not displayed on the WebGLMap, if the painter or controller does not also draw bodies for label shapes.

Upgrade considerationLuciadRIA

A dependency to the fast_float library version 3.4.0 has been added. This library is used to parse floating point values from strings.

Upgrade considerationLuciadRIA

LuciadRIA now uses the Earcut library. This new dependency requires no code changes.

Upgrade considerationLuciadRIA

RIA-3960
The zlib library has been updated to v2.1.12.

Upgrade considerationLuciadRIA

LuciadRIA now depends on the libraries myVRPointCloud, jsoncpp, pdqsort, and zstd to support Hexagon Smart Point Cloud (HSPC). These new dependencies require no code changes.

Upgrade considerationLuciadRIA

@luciad/ria/shape/format/MGRSPointFormat and @luciad/ria/shape/format/GARSPointFormat have been moved to LuciadRIA's Defense Symbology component. They have also been renamed. You can now find these in @luciad/ria-milsym/text/mgrs/MGRSFormat and @luciad/ria-milsym/text/gars/GARSFormat.

Additionally, the GARSFormatPrecision, MGRSFormatPrecision and MGRSFormatType enums have been moved into their own modules: @luciad/ria-milsym/text/gars/GARSFormatPrecision, @luciad/ria-milsym/text/mgrs/MGRSFormatPrecision and @luciad/ria-milsym/text/mgrs/MGRSFormatType

Upgrade considerationLuciadRIA

LuciadRIA now uses the Basis Universal library. This new dependency requires no code changes.

Upgrade considerationLuciadRIA

LuciadRIA now uses the Goofy library. This new dependency requires no code changes.

Upgrade considerationLuciadRIA

LuciadRIA now uses the Crunch library. This new dependency requires no code changes.

Upgrade considerationLuciadRIA

LuciadRIA now uses WebGL 2.0 instead of WebGL 1.0. WebGL 2.0 is supported by the latest versions of all modern browsers. To verify that your browser supports WebGL 2.0, run the LuciadRIA WebGLMap support sample. Note that a WebGL2RenderingContext is now passed in the callback of the PostRender event, instead of a WebGLRenderingContext.

Upgrade considerationLuciadRIA

RIA-3710
WFSFeatureStore.createFromURL and WFSFeatureStore.createFromCapabilities use now the options parameter of the same type WFSFeatureStoreCreateOptions. That way both the creation functions can use the same set of input parameters. Before the version property was missing in the options for WFSFeatureStore.createFromURL.

2021.1

2021.1.11

Bug fixDefense Symbology

RIA-3975
Fixed an issue where the content of the speedLabel (a text modifier) affected the length of the movement direction arrow for symbologies APP_6A, APP_6B and MIL_STD_2525b, where it shouldn't according to the specifications.

2021.1.10

Bug fixLuciadRIA

RIA-3925
On a 3D map with elevation data present, parts of the terrain were missing when the terrain data used a reference other than a geodetic (WGS84) reference.

Bug fixLuciadRIA

Fixed an issue where it was impossible to interact with point editing handles in 2D for points / lines that have an altitude.

Bug fixLuciadRIA

RIA-3966
Fixed an issue where non-draped shapes defined in a "height-above-terrain" reference, with a datum different from the map reference's datum, were visualized at the wrong altitude. Most notably, this affected editing handles for shapes that are defined in a non-WGS84 datum.

Bug fixLuciadRIA

RIA-3963
Fixed an issue with running npm run dev in the samples. The following webpack-cli error was triggered:
      [webpack-cli] TypeError: cli.isMultipleCompiler is not a function
    

2021.1.09

Bug fixLuciadRIA

RIA-3938
IconStyle: draped icons for points defined in a reference with another geodetic datum than the world reference would appear to be moving in a 3D view when navigating.

Bug fixLuciadRIA

RIA-3937
Fix for some draco compressed 3D tilesets that were wrongly displayed. They are now displayed correctly.

2021.1.08

ImprovementLuciadRIA

LCD-12276
WKT now supported strings that contain a "Local" projection parameter, which corresponds to an orthographic projection.

Bug fixLuciadRIA

RIA-3923
Fixed an issue where a text cursor would be shown when the mouse is over a label.

Bug fixLuciadRIA

RIA-3932
In TileSet3DLayer, we now identify mimetype image/jpg as JPEG. Previously, this was limited to image/jpeg, but now both forms are accepted.

Bug fixLuciadRIA

RIA-3930
Fixed a case where a change in zOrder on ShapeStyle wasn't picked up on a WebGLMap.

2021.1.07

Bug fixLuciadRIA

RIA-3920
Fixed an issue where LayerGroup.whenReady() was timing out when one of its children nodes was a hidden layer, that is a layer with visible state set to false.

Bug fixLuciadRIA

RIA-3916
Fixed an issue where mouse event listeners attached to labels would not be triggered on a WebGLMap.

Bug fixLuciadRIA

RIA-3914
Some HSPC point clouds were invisible if the camera was not sufficiently close. They are now displayed at any zoom level.

2021.1.06

ImprovementLuciadRIA

RIA-3901
The hovering functionality on the KMLLayer is enabled by default only when the underlying KML data defines highlight styles for features. Before the change, the KMLLayer turned on the hoverable state by default, which resulted in a needless performance penalty.

ImprovementLuciadRIA

RIA-3891
Improved performance of computing clusters - only these features that are visible in the current view extend or are in the vicinity of the visible area are subject to clustering transformation. Before this improvement all features in the model were clustered, even if they were far away from the visible part of the map.

ImprovementLuciadRIA

RIA-3910
You can now create Polar Stereographic references with an increased extent. The extent is how far the projection extends outwards from the poles, in degrees latitude. For example, you can use this to show data located on the south hemisphere, on a map with a north polar stereographic projection. See ReferenceProvider's parseWellKnownText and ReferenceOptions.polarStereographicLatitudeExtent for more details.

ImprovementLuciadRIA

RIA-3890
You can now disable "freehand" creation CreateController by setting CreateControllerConstructorOptions.freehand to false.

Bug fixLuciadRIA

RIA-3898
Fixed an issue in GMLCodec where a MultiGeometry (MultiCurve, MultiPoint, MultiPolygon, or MultiSurface) with multiple member elements was decoded to RIA ShapeList with a single member only. Now such a GML geometry is properly decoded to the ShapeList with all child members.

Bug fixLuciadRIA

RIA-3897
Fixed an issue in GMLCodec where a PolygonPatch with many interior rings was decoded to RIA ComplexPolygon with a single interior shape only. Now such a GML geometry is properly decoded to the ComplexPolygon with many holes.

Bug fixLuciadRIA

RIA-3571
WKT references didn't always correctly take a non-zero prime meridian and a different angular unit into account. This could result in:
  • an incorrect prime meridian shift
  • a prime meridian shift that was applied twice
  • incorrect projection parameters

Bug fixLuciadRIA

RIA-3902
WKT references using the mercator projection with a non-zero central meridian were parsed incorrectly. They always ended up with a zero central meridian.

Bug fixLuciadRIA

RIA-3895
Fixed cases where 3D Tiles and Point Clouds were displayed with less details than expected.

Bug fixLuciadRIA

RIA-3894
Fix an issue where, in some cases, 3D tiles data were loaded but never released from memory. This would impact framerate and memory usage.

Bug fixDefense Symbology

RIA-3903
Fixed an issue where Chrome throws ERR_INSUFFICIENT_RESOURCES when the queue of requests to the symbology service is too long.

2021.1.05

ImprovementLuciadRIA

RIA-3862
Introduced the adjustDepthRange property on WebGLMap. This allows you to specify whether the distance to the near and far planes of the map's camera should automatically adjust when the camera or terrain gets updated.

Bug fixLuciadRIA

RIA-3880
Fixed an issue with drawing shapes filled with hatched patterns on the non-hardware accelerated Map. The fill visualization for such shapes blinks on selection or can even disappear completely. Military Symbology tactical symbols with hatched patterns were affected by this issue.

Bug fixDefense Symbology

RIA-3887
Fixed an issue where bad requests to the symbology service triggered an infinite loop of repeating requests.

2021.1.04

ImprovementDefense Symbology

RIA-3877
Added the possibility to define the max ratio for the length of the movement direction arrow with respect to the size of an icon.

Bug fixLuciadRIA

RIA-3878
Fixed an issue where an error was thrown when map.mapNavigator.zoom was called immediately after creating a 2D WebGLMap.

Bug fixLuciadRIA

RIA-3871
A few references are defined using axes that point west and south, instead of the usual east and north:
  • EPSG:2065
  • EPSG:5513
  • EPSG:8352
The coordinates of these references are now correctly interpreted and transformed.

Bug fixLuciadRIA

RIA-2906
Encoding Polygon shapes with GeoJsonCodec will never duplicate the last point. Before the fix the closing point could be encoded twice.

Bug fixLuciadRIA

RIA-3780
The KMLLayer now prevents drawing lines that are styled with the width property set to 0 in KML data. Before the fix attempts to draw such lines caused GL errors being logged on the console.

Bug fixLuciadRIA

RIA-3799
Fixed a regression issue introduced by the RIA-992 enhancement. Now, as before RIA-992 implementation, a Point that is passed to ShapeFactory.createPolyline() or ShapeFactory.createPolygon() is cloned. That way, if the same point is used to create different Polyline and Polygon shapes, then its subsequent mutations will not affect these shapes. Before this fix these shapes were affected. Note: for performance reason, please favor passing a collection of PointCoordinates into ShapeFactory.createPolyline() and ShapeFactory.createPolygon().

Bug fixLuciadRIA

RIA-1891
The UrlStore now also applies requestParameters in query(). Before this fix you could pass requestParameters to the constructor, but they were not applied. You can now also alter requestParameters at runtime.

Bug fixDefense Symbology

RIA-3874
Fixed an issue where icons were no longer fetched from the symbology service after a wrong query.

2021.1.03

ImprovementLuciadRIA

RIA-3847
You can now plug into the GMLCodec a feature ID provider to generate consistent IDs for features that do not contain IDs in the decoded data. For more information please consult GMLCodecConstructorOptions.idProvider API.

ImprovementDefense Symbology

RIA-3840
The movement direction and speed modifiers configuration has been changed for a number of symbols hierarchies to make them more consistent with the other hierarchies. The movementDirection modifier was added to the following symbol hierarchies:
  • MIL-STD-2525D: 01 - Air
  • MIL-STD-2525D: 02 - Air Missile
  • MIL-STD-2525D: 05 - Space
  • MIL-STD-2525D: 06 - Space Missile
  • MIL-STD-2525D: 30 - Sea Surface
  • MIL-STD-2525D: 35 - Sea Subsurface
  • APP-6C: 01 - Air
  • APP-6C: 02 - Air Missile
  • APP-6C: 05 - Space
  • APP-6C: 06 - Space Missile
  • APP-6C: 30 - Sea Surface
  • APP-6C: 35 - Sea Subsurface
The speedLabel modifier was added to the following symbol hierarchies:
  • MIL-STD-2525D: 35 - Sea Subsurface
  • APP-6C: 01 - Air
  • APP-6C: 02 - Air Missile
  • APP-6C: 05 - Space
  • APP-6C: 06 - Space Missile
  • APP-6C: 30 - Sea Surface
  • APP-6C: 35 - Sea Subsurface
The movementDirection modifier was removed from the following symbol hierarchies:
  • MIL-STD-2525D: 20 - Land Installations
  • APP-6C: 20 - Land Installations
  • APP-6D: 11 - Land Civilian Organization
  • APP-6D: 20 - Land Installation
  • APP-6D: 25 - Control Measure
The speedLabel modifier was removed from the following symbol hierarchies:
  • MIL-STD-2525D: 20 - Land Installations
  • APP-6C: 20 - Land Installations
  • APP-6D: 11 - Land Civilian Organization

ImprovementDefense Symbology

RIA-3806
The MilitarySymbologyPainter exposes some new style properties that can be used to affect the way icons are visualised:
  • MilSymStyle.symbolIcon defaults to true.
  • MilSymStyle.symbolFrameEnabled defaults to true.
  • MilSymStyle.symbolFill defaults to true.
  • MilSymStyle.symbolFillPercentage defaults to 1,0.
  • MilSymStyle.affiliationColorEnabled defaults to true.
. The effect of changing these style properties can be seen in the image below.
Image showing the effect of the new style properties on an icon.
Image showing the effect of the new style properties on an icon.

Bug fixLuciadRIA

RIA-3255
SEPainterFactory: the painter did not always respect the order of drawing as defined in a Symbology Encoding file on a WebGLMap.

Bug fixLuciadRIA

RIA-3793
LayerGroup now checks for unique layer tree node IDs in canAddChild and throws an error when children with overlapping IDs are added with addChild. This was previously not enforced but could lead to unexpected problems.

Bug fixLuciadRIA

RIA-3827
Fixed an issue where LoadEverything strategy rejects loading data on changing map scale levels. This situation can happen when the load everything strategy uses QueryProvider that defines multiple query level configurations, of which one returns the null query object. This query object means that the model should be queried for all data.

Bug fixDefense Symbology

RIA-3841
Fixed an issue where the selection rectangle for an icon was no longer aligned with the icon in a 3D view.

2021.1.02

ImprovementLuciadRIA

RIA-3783
Added support for 16-bits RGB colors in HSPC point clouds.

ImprovementLuciadRIA

RIA-3832
ParameterizedPointPainter: a small performance improvement was done to reduce the loading time of a large set of points using the same styling.

2021.1.01

Bug fixLuciadRIA

RIA-3765
MeshStyle: When a displacement expression was set with a parameter that was not a vector, an error would be thrown.

Bug fixLuciadRIA

RIA-3524
Parts of the terrain were missing when pitching the camera if the map in krovak projection was displayed in 3D without any elevation.

Bug fixLuciadRIA

RIA-3764
FeaturePainter: the type of the density property was wrong. To configure the density you need to set an object literal with a ColorMap, this is now reflected in the TypeScript typing correctly.

Bug fixLuciadRIA

RIA-3808
Implemented a workaround for an issue with WebGLMap on Chrome 95 on Windows. The WebGLMap would crash frequently, with 'WebGL context lost' errors being logged on the console. See https://bugs.chromium.org/p/chromium/issues/detail?id=1272238 for details.

Bug fixLuciadRIA

RIA-3804
Fixed issue where the default hovering behavior would not mark the features that would be selected when clicking on the same position if the features were in the same layer and overlap.

2021.1

New featureLuciadRIA

It is now possible to connect to HERE Maps and use its data in your LuciadRIA application. A new class @luciad/ria/model/tileset/HereMapsTileSetModel allows to create a model for the desired HERE data, which can then be added to a LuciadRIA map using a RasterTileSetLayer. Different HERE maps showing aerial imagery, roads and traffic data.

New featureLuciadRIA

Introduced an environment map effect on GraphicsEffects. This allows you to visualize an environment map to improve the realism of your scenes.

New featureLuciadRIA

Introduced the PBRSettings property on Icon3DStyle and MeshStyle. This allows the use of the PBR material information in glTF files to visualize objects in a more realistic, physically based way.

An industry plant CAD model visualized with PBR.

New featureLuciadRIA

The LuciadRIA Symbology Encoding implementation now also supports world-sized TextSymbolizers as specified in the OpenGIS Symbology Encoding specification version 1.1.0 (OGC 05-077r4). These TextSymbolizers have a uom in meters or feet. The use of a world-sized TextSymbolizer is illustrated in the Symbology Encoding sample for large cities and roads.

New featureLuciadRIA

RIA-3719
LuciadRIA can now load glTF files that reference WebP compressed textures. This applies to glTF files used via Icon3DStyle and OGC 3D Tiles.

New featureLuciadRIA

RIA-3698
LuciadRIA can now load glTF files that are compressed using Draco. This applies to glTF files used via Icon3DStyle and OGC 3D Tiles.

ImprovementLuciadRIA

RIA-3805
LuciadRIA's HSPC (Hexagon Smart Point Cloud) support was updated to version 22, produced by mHSPCConverter version 2021.10. See HSPCTilesModel for details.

ImprovementLuciadRIA

The LuciadRIA samples have been updated to use React for the UI components. An explanation of the new structure of the sample code can be found in the Editing, building and running the sample code how-to article. Note that LuciadRIA does not require the use of React; it can be combined with any UI library that you prefer to use in your application.

ImprovementLuciadRIA

The glTF format support in Icon3DStyle has been extended:
  • it can now handle glTF files with multiple textures; previously, only the first encountered texture was used for visualization,
  • the texture wrapping is now also parsed and used for visualization.

ImprovementLuciadRIA

Added createTranslationTransformation and createRotationTransformation to Affine3DTransformation to have additional building blocks to position and orient a non-referenced dataset.

ImprovementLuciadRIA

Added createTopocentricReference to ReferenceProvider for creating topocentric references, which are local, georeferenced, cartesian coordinate references. Topocentric references are supported by the TransformationFactory as well, allowing conversions between topocentric and any other spatial references.

ImprovementLuciadRIA

WebGLMap now emits events named "PostRender". The callback on this event hook gets called every frame, after the LuciadRIA layers have been rendered, and gets the WebGL rendering context as a parameter. This allows you to add externally rendered graphics to a LuciadRIA map.

ImprovementLuciadRIA

It is now possible to create an oriented box with ShapeFactory.createOrientedBox.

ImprovementLuciadRIA

addSelection from @luciad/ria/view/feature/FeaturePainterUtil now supports selection styling of ComplexStrokedLineStyle and text with a halo set.

ImprovementLuciadRIA

RIA-3734
To ease connecting to OpenStreetMap tile services, a new how-to article has been added as well as an extension to the Data Formats sample to show this in practice.

ImprovementLuciadRIA

Symbology Encoding: Added an IconProvider to the SEPainterFactory factory methods. This IconProvider allows mapping ExternalGraphics elements onto icon images or URL's.

ImprovementLuciadRIA

Symbology Encoding: Added support for the vendor option named "conflictResolution". Setting this option to 'false' in a TextSymbolizer will disable decluttering for those labels. The default value for this vendor option can be adjusted in the SEPainterCreateOptions.

ImprovementLuciadRIA

Symbology Encoding: For TextSymbolizers which explicitly declare a PointPlacement, LuciadRIA will now apply this placement strictly, meaning that it will no longer move the label around when it would otherwise fall outside of the view. Additionally, the rotation tag in this PointPlacement is now supported as well.

Bug fixLuciadRIA

RIA-3597
Fixed an issue in Symbology Encoding regarding the Graphic element. If a size is specified, the height of the graphic will be scaled to that size and the corresponding aspect ratio will be used to determine the width.

Bug fixLuciadRIA

Fixed an issue where non-WebGLMaps would not resize correctly when used in a CSS flex layout.

Bug fixLuciadRIA

RIA-3778
Fixed issue where the FlickerController ended up in a broken state when a click event happened before first configuring which layers to flicker between.

Bug fixLuciadRIA

RIA-3774
Fixed an issue where GestureEventType.TWO_FINGER_DRAG touch events are only recognized if the touch movement starts with a vertical movement.

Bug fixLuciadRIA

RIA-3772
The FeatureModel now also implements the Model interface.

Bug fixLuciadRIA

Fixed parsing of WFS feature type keywords from a WFS 2.0.0 capabilities document.

Upgrade considerationLuciadRIA

TileSet3DLayer: the default loading strategy is now TileLoadingStrategy.OVERVIEW_FIRST. This change was done as this strategy typically yields a better user experience. You can restore the old default by setting TileSet3DLayer.loadingStrategy to TileLoadingStrategy.DETAIL_FIRST.

Upgrade considerationLuciadRIA

LuciadRIA now uses the stb library. This new dependency requires no code changes.

Upgrade considerationLuciadRIA

RIA-3715
LuciadRIA now uses the libwebp library. This new dependency requires no code changes.

Upgrade considerationLuciadRIA

RIA-3711
LuciadRIA now uses the Draco library. This new dependency requires no code changes.

2021.0

2021.0.09

Bug fixLuciadRIA

RIA-2964
Adding a WMS layer in the Data Formats sample should now fit on the model instead of always fitting on the entire world bounds.

Bug fixLuciadRIA

RIA-3766
Fixed issue with certain TIFF images being used as elevation data. Before this would cause errors on the console and prevent elevation from working properly.

2021.0.08

Bug fixLuciadRIA

RIA-3768
The propertyColorExpressions set via the constructor options of ParameterizedLinePainter and TrajectoryPainter were not set correctly, and thus had no effect.

Bug fixLuciadRIA

RIA-3760
Fixed an issue where running npm run dev in RIA samples gave errors. This was caused by an issue in webpack-cli.

Bug fixLuciadRIA

RIA-3758
Fixed an issue where the default selection style of extruded shapes was the same as the regular style.

Bug fixLuciadRIA

RIA-3757
Corrected TypeScript definition for the optional FeatureModel.remove() method.

Bug fixLuciadRIA

RIA-3753
Fixed an issue in FeatureModel where the setter for modelDescriptor used to create a copy of the passed object. Now modelDescriptor that is passed to the model and retrieved from the model is strictly the same object.

Bug fixLuciadRIA

RIA-3755
Fixed an issue where WMTSTilesetModels created with urls containing query parameters would fire invalid requests. This also affected models created with WMTSCapabilities

Bug fixLuciadRIA

RIA-3717
Corrected the TypeScript type of keywords in WMTSCapabilities to be an array of OGCCapabilitiesKeywords. Also, the type property in OGCCapabilitiesKeywords is optional and can now also be null.

2021.0.07

ImprovementLuciadRIA

RIA-3486
The clustering transformation can now also cluster features with other shapes than points. Features with other shapes than points are treated as points located at shape's focusPoint. Before only features with the Point shape were eligible for clustering.

Bug fixLuciadRIA

RIA-3696
Fixed issue where semi-transparent point clouds would be completely invisbile in a 2D WebGL map.

Bug fixLuciadRIA

RIA-3738
Fixed a regression where TileSetAttributionProvider emitted AttributionStringsChanged and AttributionLogosChangedEvents events with string[][] values instead of string[] values

Bug fixLuciadRIA

RIA-3750
Fixed an issue with font metrics computation that is used for drawing text.

Bug fixLuciadRIA

RIA-3677
Fix for wrong images displayed during zooming in CRS1 map reference.

2021.0.06

ImprovementDefense Symbology

RIA-3729
Added the possibility to create the Isolate symbol with an CircularArcByCenterPoint shape. Note that only the center point, the radius and the start azimuth are taken into account, since the specification subscribes a fixed open angle of 30 degrees. The advantage over using a 2-point polyline is merely a better fit of the bounds.

Bug fixLuciadRIA

RIA-3735
Fixed an issue with running npm run dev in the RIA samples. If you specified a CLI option (for example, --port), the webpack devserver would not run. It failed with a "Unknown option" error.

Bug fixLuciadRIA

RIA-3722
CreateController: in some cases the created shape would remain visible on the map, even when removing the layer.

Bug fixLuciadRIA

RIA-3730
Fixed an issue when invalidating a RasterTileSetModel on a WebGLMap, either by calling invalidate() explicitly, or implicitly by changing settings on WMSTileSetModel and others. In rare cases, some old tiles would still be visible and would not be updated.

2021.0.05

ImprovementLuciadRIA

RIA-2888
The clustering transformation reuses now cluster features whenever it is possible. Before the change, cluster features were always recreated on every request, e.g. when a new query request is triggered or when an individual feature is updated in the model. Recreating all cluster features impacted performance as all clusters were repainted on the map, even if majority of them were not really changed.

ImprovementLuciadRIA

RIA-3708
IconStyle: image with a height larger than 510 pixels could appear blurry, this threshold has now been increased to 2046 pixels.

Bug fixLuciadRIA

RIA-3718
Fixed an issue with running npm run dev in a sample. Starting the webpack devserver resulted in a Invalid configuration object error.

Bug fixLuciadRIA

RIA-3714
Fixed an issue with GestureEventType.PINCH touch events. These events were not always correctly recognized.

2021.0.04

ImprovementLuciadRIA

RIA-3532
Greatly improved shader compilation times for panoramic imagery on Windows platforms. Before this improvement, painting a panoramic image the first time during a browser session could take a few seconds. This has has been reduced by over 90%. As a consequence of this change, it is now no longer possible to blend more than 2 panoramic images together at the same time.

ImprovementLuciadRIA

RIA-3699
It is now possible to configure the service URL in the static createFromURL() and createFromCapabilities() factory methods on WMSTileSetModel, WMSImageModel, WMTSTileSetModel, FusionTileSetModel and WFSFeatureStore. This allows you to override the URLs returned by the server's GetCapabilities response.

Bug fixLuciadRIA

RIA-3704
GeoBuffer.copy() now correctly copies GeoBuffer.endCapStyle as well.

Bug fixLuciadRIA

RIA-3703
Fixed an issue with editing of GeoBuffer that have EndCapStyle.CAP_BUTT: while changing the width of these shapes, a helper geobuffer with EndCapStyle.CAP_ROUND was drawn.

Bug fixLuciadRIA

RIA-3534
HttpRequestOptions that are passed to the static createFromURL() method in WMSTileSetModel, WMSImageModel, WMTSTileSetModel, FusionTileSetModel and WFSFeatureStore are now also used when performing the GetCapabilities request to the service.

Bug fixLuciadRIA

RIA-3675
The UrlTileSetModel now also applies requestParameters in getTileURL(). Before this fix you could pass requestParameters to the constructor, but they were not applied. You can now also alter requestParameters at runtime.

Bug fixDefense Symbology

RIA-3542
Fixed an issue where some labels were missing the ENY part, indicating a hostile icon. Also fixed an issue where labels could potentially show modifiers that were not supported for a specific symbol, but still provided.

2021.0.03

Bug fixLuciadRIA

RIA-3676
The FusionTileSetModel now also supports domain rotation when generating tile URLs. Use the {s} placeholder in the model's URL. The list of domains can be configured through the subdomains constructor and runtime property.

Bug fixLuciadRIA

RIA-3669
Fixed issues with EditController when it was used as a delegate of another controller.

Bug fixLuciadRIA

RIA-3659
FeaturePainter: Lines with an altitude not equal to 0, styled with a non-draped ComplexStrokedLineStyle were visualized incorrectly and caused selection problems. Since at the moment it is not possible to use a non-draped ComplexStrokedLineStyle, draping is now enforced for this style.

2021.0.02

Bug fixLuciadRIA

RIA-3668
Fixed an error when loading nested OGC 3D Tiles, in particular when a tileset.json refers to another tileset.json in a subfolder, which in turn refers to another tileset.json that has nodes without content.

Bug fixLuciadRIA

RIA-3663
Parallel query requests that yield feature cursors with latency can lead to a situation when an error is thrown with the message "the Store already contains a Feature with ID ...". When this happens the layer's WorkingSet emits the QueryError event. The fix prevents the parallel cursor processing by handling the last successfully resolved cursor.

Bug fixLuciadRIA

RIA-3664
Fixed an issue in the "Create and edit" and "Dual map" samples where pressing the Enter key while drawing a shape, would trigger clicks on buttons in the drawing toolbar, deactivating the current controller.

Bug fixLuciadRIA

RIA-3640
FeatureLayer: when hovering was enabled on a layer, an error indicating a feature couldn't be hovered was sometimes thrown incorrectly.

2021.0.01

ImprovementLuciadRIA

RIA-3660
Added support for query parameters in FusionPanoramaModel. Now URL's that contain key-value pair request parameters at the end of the request will have those key-value pairs passed to the image server.

ImprovementLuciadRIA

RIA-3646

Added new API to allow facet culling of meshes in OGC 3D Tiles. The new API is available in MeshStyle.facetCulling. By default, nothing changes and all meshes are painted without culling. This means both the back and the front of each triangle is painted. This is the most robust, but also at a slight cost of rendering performance.

Backface culling can result in performance improvements. It only renders the front of each triangle. This also allows you to visualize the interior of a room while observing it from the outside, which can be useful in some applications.

Looking inside an interior from the outside using backside facet culling.

Front-face culling can be used in cases where the orientation of the triangles of the dataset are inverted. This depends on the dataset itself.

Bug fixLuciadRIA

RIA-3590
Fixed an issue where the map would freeze when you remove a layer while editing features in that layer.

Bug fixLuciadRIA

RIA-3616
Fixed an issue where tiles were not displayed in 2D WebGL. This happened only when you have tiles that could not be fully projected on the map's world reference.

Bug fixLuciadRIA

RIA-3591

If you have a read-only store (without an add, put or remove), FeatureLayer.editable now defaults to false. You'll also get an error if you set editable to true if the layer is backed by a readonly store.

On top of that, EditController and CreateController now respect FeatureLayer.editable. These controllers will now deactivate if you try to use them with a layer that is not editable. They will also deactivate if the layer is not visible in the layer tree (LayerTreeNode.visibleInTree).

Bug fixLuciadRIA

RIA-3649
Fixed an issue where requests coming from a TileSet3DLayer would not include query parameters correctly.

2021.0

New featureLuciadRIA

LuciadRIA's WebGLMap now uses WebAssembly behind the scenes. This reduces load times of applications using a WebGLMap and results in small performance gains as well.

New featureLuciadRIA

The LuciadRIA Symbology Encoding implementation now also supports world-sized icons as specified in the OpenGIS Symbology Encoding specification version 1.1.0 (OGC 05-077r4). The use of world-sized icons is illustrated in the Symbology Encoding sample for large and medium cities.

New featureLuciadRIA

You can now apply a specific style on features when the mouse cursor is hovered over them. Styling on mouse hover The PaintState parameter of paint function in the FeaturePainter now has a hovered property to indicate whether or not the feature is hovered over. New API was also added on Map to handle the new hover state of features:
  • "HoverChanged" event: Event hook that is called when the set of objects that is being hovered over changes.
  • Map.hoveredObjects: set of objects which are currently displayed as "hovered".
  • Map.hoverObjects(): Updates the set of objects which are displayed as "hovered".
  • Map.isHovered(): Determine whether a particular object on a layer is displayed as "hovered".
  • Map.clearHovered(): Clear the current set of hovered objects.

New featureLuciadRIA

You can now draw "world-sized" icons in LuciadRIA. The size of these icons is expressed in a length unit, such as meters or feet, instead of in pixels. The icons don't have a fixed size on the screen, but grow or shrink when you zoom in and out on the map.

Pixel sized (red) vs world sized (green) icons

In the illustration, the red icon has a size in pixels. It always has the same size on the screen. The green icon has a size in meters. It grows and shrinks when you zoom in and out.

You can draw world-sized icons with IconStyle.uom. When you set it to a specific unit of measure, the values of IconStyle.width, IconStyle.height, IconStyle.offsetX and IconStyle.offsetY will be interpreted in that unit of measure.

Alternatively, you can specify a length unit inside a string value for IconStyle.width, IconStyle.height, IconStyle.offsetX and IconStyle.offsetY. For example:


const worldSizedIconStyle = {
  url: "http://example.com/icon.png",
  width: "50m",
  height: "50m"
};

New featureLuciadRIA

You can now plug properties from external data into a TileSet3DLayer in LuciadRIA. These properties will be linked to feature properties of the model residing in the layer through the idProperty. The layer properties integrate nicely with the model properties originating from the OGC 3D tiles data itself (the batch table properties). Layer properties take precedence over batch table properties. You can update the values for these properties and use their values for expression-based styling. The layer will inform you of features coming in to view and going out of view through a callback, so you can act on that information by either updating or erasing property values. See the Plugging in properties from external data sources article for more information.

New featureLuciadRIA

You can now visually compare multiple layer sets by swiping or flickering using SwipeController and FlickerController.

SwipeController in action

Swiping is done by dragging a swipe line horizontally or vertically, hiding the right/bottom part of the first layer set and the left/top part of the other layer set.

FlickerController in action

Flickering is done by (quickly) clicking the mouse button and toggling visibility of two or more layer sets. You can customize these controllers or use them to implement actions that swipe or flicker programmatically. These visual change detection tools work in 2D WebGL and 3D WebGL. As an illustration, you can enable the swipe or flicker controller in many of our samples with a button in the upper left corner.

ImprovementLuciadRIA

RIA-3621
TileSet3DLayer now supports Z-up 3D tiles datasets.

ImprovementLuciadRIA

RIA-2144
Improved TileSet3DLayer's fading effect when switching tiles levels of detail. This improvement aims at limiting the flickering effect that could be witnessed when quickly transitioning between LODs (quick zoom in / out actions).

ImprovementLuciadRIA

LuciadRIA samples now use NPM workspaces instead of Lerna. Make sure you're using at least NPM version 7 when running npm install in the root of the release.

ImprovementLuciadRIA

ExpressionFactory: a log expression has been added which returns the natural logarithm of its parameter.

ImprovementLuciadRIA

RIA-3492
The internal HSPC format parser has been updated to now support HSPC up to version 19.

ImprovementLuciadRIA

KMLLayer: if a KML file defines highlighted styles for features, these styles are now applied when moving the mouse cursor over these features.

ImprovementLuciadRIA

KMLLayer: the color element of an KML IconStyle (modulation color of icons) is now supported.

ImprovementLuciadRIA

KMLCodec: KML screen overlays are now parsed by the codec. A "KMLScreenOverlay" event is emitted by the KMLCodec and the KMLModel when a KML screen overlay element is encountered. The event will return a KMLScreenOverlayFeature with all the necessary properties to visualize the KML screen overlay.

ImprovementLuciadRIA

LuciadRIA's Controller will now fire "Activated" and "Deactivated" events when Controller.onActivate(map) and Controller.onDeactivate(map) are called. You can use these events to set up and clean up UI elements or listeners related to the controller and the map.

ImprovementLuciadRIA

You can now visualize rotated and non-draped (floating at a certain altitude) KML GroundOverlays with createGroundOverlayLayer from @luciad/view/kml/KMLUtil. For more information, consult the API documentation or the "Visualize KML data" tutorial.

ImprovementLuciadRIA

You can now register a listener on KMLModel and KMLCodec for a KMLFatalError event. This event will be emitted when an error occurs during parsing from which the KMLCodec cannot recover. A non-fatal parsing error will be reported in KMLFeatureProperties.errorMessages. If applicable, the KMLCodec will provide a fallback value.

ImprovementLuciadRIA

KMLFeature: the TimeStamp and TimeSpan properties of a KML feature are now accessible via the KMLFeatureProperties of a KMLFeature.

ImprovementLuciadRIA

RIA-3404
The webpack configuration in @luciad/ria-sample-common now supports loading TypeScript files. This makes it easier for other samples to use TypeScript.

ImprovementLuciadRIA

RIA-3404
In a sample with TypeScript code, you can now run npm run transpile-to-js to convert the sample to JavaScript. After running this script, you'll find a transpiled version of the sample in ./transpiled, relative to the sample source directory. If you also want to generate TypeScript declarations inside this directory, you can run npm run transpile-declarations. More information can be found in the 'Editing, building and running the sample code' tutorial.

ImprovementLuciadRIA

You can now implement request abortion in custom raster models and feature stores. LuciadRIA will now pass an AbortSignal into RasterTileSetModel.getImage, Store.query and Store.spatialQuery. AbortSignal and AbortController are built-in in all browsers supported by LuciadRIA. LuciadRIA will fire the "abort" event on this AbortSignal when it no longer needs the requested data. For example, the data is no longer visible in the view or newer data has already been downloaded. class MyRasterTileSetModel { getImage(tile, onSuccess, onError, abortSignal) { abortSignal.addEventListener("abort", () => { // this data is no longer relevant, abort the download }); } } Note that you can pass this AbortSignal to the standard fetch. You can look at the sample samples/common/store/RestStore.query() for an example. The most prevalent cases where promise.cancel() were used, were with animations ( MapNavigator and AnimationManager.putAnimation).

Bug fixLuciadRIA

RIA-3618
Fixed a few regressions in the draping algorithm that could cause blurry data or coarse tile selection for draped data.

Bug fixLuciadRIA

RIA-2942
The native library path is cleared when starting up the LuciadRIA sample server. Before this fix, it was possible that certain sample services threw an UnsatisfiedLinkError because an incompatible sqlite version was loaded by the VM.

Bug fixLuciadRIA

RIA-3390, RIA-2355
Fix for flipped images that would appear in complex strokes that were part of a style shared among multiple curves.

Upgrade considerationLuciadRIA

The type of options in Store.query and Store.spatialQuery has changed. If you're using TypeScript, make sure options has a type of QueryOptions, or a type that extends from it.

Upgrade considerationLuciadRIA

If you implemented a Controller that fires events, you will have to add the new "Activated" and "Deactivated" events to the signature of Controller.on. You will also have to make sure that these events are properly forwarded to the base Controller implementation.

Upgrade considerationLuciadRIA

LuciadRIA 2021.0 no longer supports Internet Explorer. If your project still relies on Internet Explorer, you can still use older versions of LuciadRIA.

Upgrade considerationLuciadRIA

RIA-3085
LuciadRIA now uses TypeScript 4.1 to generate the TypeScript definitions. See TypeScript 4.1 for changes in the TypeScript specification. If you do not use TypeScript in your project this will not affect you.

Upgrade considerationLuciadRIA

SelectionStyleOptions, which is a parameter of functions on FeaturePainterUtil, has been renamed to StyleMutationOptions. This new name better reflects its usage since it is now also used in the context of hover styling. You will only need to update your code if you explicitly used this as a type, the properties on the interface have not changed.

Upgrade considerationLuciadRIA

MapNavigator operations are now always asynchronous. Now, you always have to wait for the returned Promise to resolve if you want to be sure the map is in the correct position (even for non-animated operations).

Upgrade considerationLuciadRIA

AMD modules are no longer included in LuciadRIA. You must switch to to ES modules. The "Migrating LuciadRIA projects from AMD to ES6 modules" guide explains how to refactor your code.

Upgrade considerationLuciadRIA

WMSGetFeatureInfoResponse.getHeader now returns a string or null, instead of string or undefined. The typings were also updated to reflect this change.

Upgrade considerationLuciadRIA

LuciadRIA's WebGLMap now uses WebAssembly behind the scenes.

Because WebAssembly instances are instantiated asynchronously, the following API was changed:

  • MapNavigator.fit/pan/zoom/rotate: You now always have to wait for the returned promise to resolve, if you want to be sure that the navigation action completed.
  • ExpressionFactory expressions created by this factory are now validated when they are visualized, instead of when they are created.
  • Expressions set on TileSet3DLayer.meshStyle and TileSet3DLayer.pointCloudStyle are now validated once the layer is added to the map, instead of when the layer is created.

WebAssembly is supported on all browsers supported by LuciadRIA.

Upgrade considerationLuciadRIA

Evented: the options parameter has been removed from Evented.on. This optional parameter was unused in the LuciadRIA API.

Upgrade considerationLuciadRIA

You can no longer call promise.cancel() on Promises returned by the LuciadRIA API. As an alternative, you should now use an AbortSignal if you want to support cancellation. For example:

        const abortController = new AbortController();
        const animationPromise = AnimationManager.putAnimation(map.cameraAnimationKey, myAnimation, false,
        abortController.signal);
        // abort the animation after 0.5 seconds
        setTimeout(() => {
        abortController.abort(); // this will abort the animation, instead of animationPromise.cancel()
        }, 500);
      

Upgrade considerationLuciadRIA

RIA-3074
LuciadRIA no longer comes with its own Promise (@luciad/ria/util/Promise has been removed). If you were using this Promise, you can use the ES6 built-in Promise instead.

2020.1

2020.1.20

Bug fixLuciadRIA

RIA-3627
The Polyline.move2DPoint() and Polygon.move2DPoint() do not change anymore the Z-coordinate of the referenced point. It is a regression issue, introduced with changes for RIA-992 enhancement, where point's original Z-coordinate was reset to 0.

Bug fixAdvanced GIS Engine

RIA-3624
Fixed an issue where ConstructiveGeometry and Topology operations would throw errors when you pass in empty ShapeLists or ShapeLists that contain empty ShapeLists.

2020.1.19

Bug fixLuciadRIA

RIA-3555
IconStyle: draped icons were sometimes slightly distorted when the camera was looking at the horizon.

Bug fixLuciadRIA

RIA-3610
Icon3DStyle: transparent parts of a mesh could get colored with the color of the object behind it when ambient occlusion was enabled.

Bug fixLuciadRIA

RIA-3599
Fixed an issue where creating the seize symbol started wrong.

Bug fixLuciadRIA

RIA-3580
Fixed an issue where editing of the decoy mine fenced symbol was no longer possible.

Bug fixLuciadRIA

RIA-1454
Feature layers with clustering transformation re-cluster features whenever FeatureLayer.filter is updated. Before the fix the clustering transformation was not triggered automatically.

2020.1.17

Bug fixLuciadRIA

RIA-3600
Fixed an issue with editing on a WebGLMap. An occasional error could be thrown during snapping.

Bug fixLuciadRIA

RIA-3598
Updated the sample server startup scripts to be compatible with Java 15. Before this fix the scripts exited with an error complaining about UseConcMarkSweepGC not being supported when starting the sample server with Java 15.

Bug fixLuciadRIA

RIA-3585
LuciadRIA will use by default a LoadEverything strategy for layers where the model's reference is incompatible with the map's reference, even if the layer's model implements spatialQuery() API. Before the fix the defaulted LoadSpatially strategy was throwing errors when querying the model spatially. These errors were due to the fact that the map bounds, referenced in a Cartesian reference for example, could not be converted to model's geo-referenced bounds. If LoadSpatially strategy is set explicitly on the layer then ProgrammingError will be thrown with an informative message.

Bug fixLuciadRIA

RIA-3592
Fixed problem in LuciadRIA 2019.x with importing `WFSFeatureStore` in strict mode, which is the case when building your application with Angular 8 framework.

2020.1.16

Bug fixLuciadRIA

RIA-3587
Fixes an issue that would permanently disable elevation layers when moved between a 2D and a 3D map.

Bug fixLuciadRIA

RIA-3589
Fixed an issue in the COP sample where it was not possible to modify a spot report in the Mission Control theme.

Bug fixLuciadRIA

RIA-3588
Fixed an issue in the COP sample where selecting a spot report in the Mission Control theme threw an error instead of showing a balloon with a form.

Bug fixLuciadRIA

RIA-3582
Fixed an issue with freehand creation of constrained shapes, like some military symbology shapes. Using freehand drawing to create these shapes would result in errors being thrown.

2020.1.15

ImprovementLuciadRIA

RIA-1029

Bug fixLuciadRIA

RIA-3569
Fixed a bug where the coordinates of LookFrom.eye were not always expressed in the Camera's worldReference. This occurred when a lookFrom() was done earlier, with an eye that was not in the Camera's worldReference.

Bug fixLuciadRIA

RIA-3562
IconStyle: when only the rotation was changed when switching the style, the new rotation would not be applied on a WebGL map.

Bug fixLuciadRIA

RIA-3554
A feature could be painted twice when it was being edited. This would occur when the feature was being edited and panned out of the view bounds.

Bug fixLuciadRIA

RIA-3539
Icon3DStyle: previously a glTF file was required to have a material defined, this is now no longer required, as this is also optional in the glTF specification.

Bug fixLuciadRIA

RIA-3540
Fixed a problem in KML data visualization where labels were not drawn for KML placemarks that were styled with a fully transparent icons.

Bug fixPanoramic

RIA-1029
Added support for request parameters for PanoramaModel.

2020.1.14

Bug fixLuciadRIA

RIA-3553
EditController gets deactivated properly when the edited shape belongs to a cluster. Before the fix the controller was frozen waiting for the feature update confirmation on the edited shape.

Bug fixLuciadRIA

RIA-3547
Fixed an issue which would use the precise terrain offset generation algorithm for TileSet3DLayer by default, while documentation stated it should not be the case. As this has been fixed, it is possible terrain behavior changes under a TileSet3Dlayer. If it is not fitting, be sure to request precise offsetTerrain at layer's construction time.

2020.1.13

ImprovementLuciadRIA

RIA-3489
You can now plug into the GeoJsonCodec a feature ID provider to generate consistent IDs for features that do not contain IDs in the decoded data. Features with consistent IDs can improve data re-loading performance on model re-queries, for example when a layer uses LoadSpatially loading strategy. For more information please consult GeoJsonCodecConstructorOptions.idProvider API.

Bug fixLuciadRIA

RIA-3537
Icon3DStyle: for glTF 2.0 meshes the default alpha mode was not applied correctly. When the alpha mode is not defined, the mesh will now always be opaque as defined by the specification.

Bug fixLuciadRIA

RIA-3309
We will no longer throw an error when destroying the map while some icons are still loading.

Bug fixLuciadRIA

RIA-3536
Icon3DStyle: for some glTF files the vertex colors were not applied correctly, as a result the mesh would appear completely white.

Bug fixLuciadRIA

RIA-3526
The WebSocketNotifier in the sample code has been refactored to a WebSocketStoreDecorator. The WebSocketNotifier could end up in an endless update loop when combined with the RestStore. The WebSocketStoreDecorator can prevent this by not updating the decorated Store when a WebSocket message is received.

2020.1.12

Bug fixLuciadRIA

RIA-3533
Fixed a memory leak that would occur if you would update the mesh on Icon3DStyle regularly.

2020.1.11

ImprovementLuciadRIA

RIA-3518
Performance has been improved when using the CreateController and EditController in cases where the map has a relatively high number of layers that are either non snappable or have snapping disabled.

Bug fixLuciadRIA

RIA-3520
The FilterFactory.identifiers function signature is corrected: the second argument featureIds is optional.

Bug fixLuciadRIA

RIA-3503
Fixed a problem with drawing complex stroke patterns on a non-WebGL map when a pattern with relative length was drawn over a long distance. When drawing such complex stroke patterns, like the pattern used by the Military Symbol APP-6A "Specified Area - Search Area/Reconnaissance Area", could cause LuciadRIA to end up in an infinite loop that would eventually lead to crashing the browser.

Bug fixLuciadRIA

RIA-3506
Fixed an issue where draped lines defined in a non-wgs84 vertical datum would float above the terrain.

2020.1.10

ImprovementPanoramic

RIA-3392
Improved behavior regarding to flickering and artefacts appearing when using ProjectionTarget.CLOSEST_SURFACE and looking at the projection from a relatively far distance.

Bug fixLuciadRIA

RIA-3501
Fixed an issue when HTML document gets unexpectedly resized while drawing labels on a map. This situation could occur when the page was rendered from a Virtual DOM structure, for example when using React framework.

Bug fixLuciadRIA

RIA-3244
Fixed an error with WebGL RasterTileSetLayer rendering. When moving the layer, or toggling visibility of layers below the raster layer, a
TypeError: self.cancelTile is not a function
error was thrown in some cases.

Bug fixLuciadRIA

RIA-3500
It is now possible to replace a Map with a WebGLMap in "first sample". Webpack no longer crashes with an out of memory error.

Bug fixLuciadRIA

RIA-3496
Fixed an issue with GeoBuffer editing: the outline shape would not move when moving the entire geobuffer shape. This was only an issue for GeoBuffers inside a ShapeList, as is usually the case for military symbology shapes.

Bug fixLuciadRIA

RIA-3495
Fixed an issue with editing shapes in a ShapeList: editing would not respect the min/max point count set on the controller.

Bug fixLuciadRIA

RIA-3494
Fixed an issue with GeoBuffer creation: creation would not finish when the max point count limit was reached.

Bug fixPanoramic

RIA-3498
Fixed panoramic images not correctly being released from memory after they are no longer used.

2020.1.09

Bug fixLuciadRIA

RIA-3490
Fixed crash when recreating WebGLMap.

Bug fixLuciadRIA

RIA-3487
Fixed terrain not updating when elevation layer model was changed.

Bug fixLuciadRIA

RIA-3484
GridLayer: when a grid layer was set invisible, the labels would not be shown when it was turned visible again.

2020.1.08

ImprovementLuciadRIA

RIA-3464
GeoTiff elevation tiles now support GDAL's nodata field.

ImprovementDefense Symbology

RIA-3450
MilitarySymbologyPainter can now render a halo around icons and movement direction arrows. See MilSymStyle.haloColor and MilSymStyle.haloWidth for more information.

Bug fixLuciadRIA

RIA-3478, RIA-3479
Fixed issues when drawing a GeoBuffer shape that is based on a closed shape where its points are overlapping or can be removed. An error could be thrown or the browser could freeze in an endless loop when performing contour simplification on such shapes.

Bug fixLuciadRIA

RIA-3476
Fixed an issue where parseWellKnownText would sometimes not parse the geographic reference parameters correctly.

Bug fixLuciadRIA

RIA-3474
You can now construct WMSTileSetModel and WMSImageModel instances with URLs that contain request parameters. Before this fix, the models could generate incorrect GetMap and GetFeatureInfo request URLs because the implementation assumed URLs without request parameters.

Bug fixLuciadRIA

RIA-3470
Fixed an issue where the ReferenceProvider would not parse correctly some parameters of Krovak WKT parameters.

Bug fixLuciadRIA

RIA-3468
Fixed an issue with showing balloons for frequently updated objects. In such cases errors could be thrown when referencing internal undefined objects.

Bug fixLuciadRIA

RIA-3467
Fixed an issue where the ReferenceProvider would not parse correctly Krovak_(North_Orientated) projections.

Bug fixDefense Symbology

RIA-3465
Fixed an issue where the selection rectangle of a symbology icon changed wrongly when the icon properties were altered in such a way that a new icon needed to get fetched from the icon server.

Bug fixDefense Symbology

RIA-3460
Fixed an issue where moving symbology icons and their label started flickering (also visible when editing the position of the icon).

Bug fixPanoramic

RIA-3367
Fixed an issue where in certain situations a cube outline was visible when using ProjectionTarget.CLOSEST_SURFACE.

Bug fixPanoramic

RIA-3348, RIA-3430
Fixed an issue where layers above a panorama layer were taken into account when using ProjectionTarget.CLOSEST_SURFACE, even though they shouldn't be.

Bug fixPanoramic

RIA-3366
Fixed an issue where in certain situations some flickering could be noticed when transitioning between panoramas when using ProjectionTarget.CLOSEST_SURFACE,

2020.1.06

ImprovementLuciadRIA

RIA-3458
You can control now whether or not text should be draped on top of the terrain using TextStyle.draped API.

ImprovementLuciadRIA

RIA-3454
TextStyle.occlusionMode now allows to paint text in 3D in front of other 3D data even if the drawn text would be normally obscured.

ImprovementLuciadRIA

RIA-3399, RIA-1252, RIA-992
The Polyline and Polygon shapes are refactored to improve the performance for data loading and visualization. Decoding GeoJSON, KML and GML formats is now faster by at least 20%
ShapeFactory allows now to create Polyline and Polygon shapes without creating an array of individual Point geometries. The example below shows a new preferred way to create a polyline or polygon.

      const polyline = createPolyline(reference, [[0,0], [5,2]]);
      const polygon = createPolygon(reference, [[0,0,1000], [5,2,1000], [0,4,1000]]);
    

ImprovementLuciadRIA

RIA-3350
ReferenceProvider now has support for WKT and EPSG references that use the Krovak projection. The following EPSG codes that use this projection are now supported:
  • EPSG:2065
  • EPSG:5221
  • EPSG:5513
  • EPSG:5514
  • EPSG:8352
  • EPSG:8353

ImprovementDefense Symbology

RIA-2053
Tactical graphics with a crossing in their axis of advance now have their crossover point between the first two points of the symbol, as specified by the standard. This affects the following symbols:
  • MIL-STD-2525b: G*G*OLAV--****X - Friendly Aviation
  • MIL-STD-2525b: G*G*OLAA--****X - Friendly Airborne
  • MIL-STD-2525c: G*G*OLAV--****X - Aviation
  • MIL-STD-2525c: G*G*OLAA--****X - Airborne
  • MIL-STD-2525d: 10002500001514010000 - Friendly Airborne/Aviation
  • APP-6A: G*C*MOLAF-***** - Friendly Aviation
  • APP-6A: G*C*MOLAA-***** - Friendly Airborne
  • APP-6B: G*C*MOLAF-***** - Friendly Aviation
  • APP-6B: G*C*MOLAA-***** - Friendly Airborne
  • APP-6C: 10002500001513000000 - Airborne/Aviation Axis Of Advance
  • APP-6D: 10002500001514010000 - Friendly Airborne/Aviation

ImprovementDefense Symbology

RIA-2447
Changed the editing behaviour of the 'Rectangular Target' symbol to more closely match the symbol definition in the military standards: the symbol is now defined by a center point and the "length", "width", and "attitude" text modifiers. Creating such a symbol programmatically with two or more points will revert back to the legacy visualization and editing behaviour, where the points define the start and end point of the buffer axis. The following symbols are affected by this change:
  • MIL-STD 2525b: 2.X.4.3.1.1 - Rectangular Target
  • MIL-STD 2525c: 2.X.4.3.1.1 - Rectangular Target
  • APP-6C: 10002500002306000000 - Rectangular Target

ImprovementDefense Symbology

RIA-2110
Improved creation and editing of Weapon/Sensor Range Fan symbols to better match the symbol definition in the military standards. Creation now follows the next steps:
  1. Indicate the origin point A
  2. Indicate a point B on the minor radius of the first sector
  3. Indicate a point C on the left side of the first sector
  4. Indicate a point D on the right side of the first sector Note: the major radius is defined by the point (C or D) that is furthest away from B.
  5. Repeat steps 2, 3 and 4 for the subsequent sectors.

ImprovementDefense Symbology

RIA-2797
Support was added for rounding of the corners of tactical graphics. The default behaviour will still be to apply no rounding. To activate rounding, you'll need to adjust your MilitarySymbologyPainter and add a style-property cornerSmoothness with a value between 0 (no rounding) and 1 (very smooth rounding).

ImprovementDefense Symbology

RIA-2588
Support was added for the following symbologies:
  1. MIL-STD-2525d
  2. APP-6D
In SymbologyNode, the method createTemplate was deprecated in favor of createTemplates because it's possible that multiple geometries are supported for a symbol.

Bug fixLuciadRIA

RIA-3457
Fixed a circular dependency between RIA's internal Quaternion and Vector3 modules.

Bug fixLuciadRIA

RIA-3455
Fixed a problem with drawing rasterized text (GeoCanvas.drawText()) on a hardware-accelerated map, where the same text is drawn in place of requested ones. This situation can happen when there are many draw text requests for a single geometry.

Bug fixLuciadRIA

RIA-3443
Fixed a problem with the creation of OGC FilterFactory.sub filter with a negative FilterFactory.literal value.

Bug fixDefense Symbology

RIA-3369
Icon caching in the Military Symbology Painter now also discriminates on affiliation colors. Military symbols in a single layer are now rendered correctly when different features use different affiliation color schemes and when affiliation color schemes are adjusted at runtime.

Bug fixPanoramic

RIA-3439
Fixed an issue where FusionPanoramaModel did not properly pass the credentials and requestHeaders constructor options to the base PanoramaModel.

2020.1.05

Bug fixLuciadRIA

RIA-3403
Fixed an issue when an Uncaught ReferenceError is thrown when rendering axis on a vertical view map. This problem can occur when an application is built in the production mode with specific configuration.

Bug fixLuciadRIA

RIA-787, RIA-3405
The WebSocketNotifier no longer uses emit() on the delegate Store to signal changes, but updates the delegate Store instead. The emit() method was an internal method and was removed. This broke the Tracks and the COP sample.

2020.1.04

Bug fixLuciadRIA

RIA-3370
Fixed an issue where point count constraints, set by CreateController.setPointCount were ignored when creating a military symbology feature.

Bug fixLuciadRIA

RIA-3385
Fixed an issue in WebGL maps with a cartesian reference when using geoCanvas.drawIcon3D would cause an error and the 3D icon was not visualized.

Bug fixLuciadRIA

RIA-3364
Fixed an issue that could cause warnings to be logged when using TileSet3DLayer's styling expressions capabilities.

Bug fixLuciadRIA

RIA-3374
Fixed an issue when switching a line from draped to non-draped. The line would disappear.

Bug fixLuciadRIA

RIA-3398
Fixed an issue where an error is thrown when attempting to insert null to MemoryStore. This situation can happen when a layer uses LoadSpatially strategy with different scale levels on a 3D map.

Bug fixLuciadRIA

RIA-3394
Fixed an issue where a NotImplementedError was thrown when right-clicking on a shape that is being edited.

2020.1.03

ImprovementLuciadRIA

RIA-3355
Improved behavior for launching query requests on model changes (FeatureModel emits ModelChanged events). Now the LoadingStrategy does not trigger query requests when model changes and the layer does not use ClusteringTransformer.

ImprovementLuciadRIA

RIA-3357
Some HSPC datasets could present misaligned attributes per WebGL standards, preventing their visualization. In such cases, data is now realigned to offer a reliable visualization of the data.

ImprovementLuciadRIA

RIA-997
MemoryStore can now be created with spatial index allowing to run spatial queries on stored features. For more information please consult MemoryStoreConstructorOptions.spatialIndex API.

Bug fixLuciadRIA

RIA-3365
Fixed an issue when using a 3D mesh icon for two features, where one feature has elevation 0 and the other does not. This caused internal state errors resulting in errors on the browser console.

Bug fixLuciadRIA

RIA-3363
Improved throughput of feature updates in cases where the features are distributed over many layers. This improvement is most noticeable on Windows+Chrome.

Bug fixLuciadRIA

RIA-3358
WMS Capabilities parsing will no longer fail if Exception formats are missing in the GetCapabilities response. Although the XML Exception tag is mandatory, some servers may omit it. WMSCapabilities.exceptionFormats() will return an empty array in that case.

Bug fixLuciadRIA

RIA-3352
If the GetFeatureInfo operation is missing from GetCapabilities response, the WMSCapabilities.operations array no longer contains an invalid null entry.

2020.1.02

ImprovementLuciadRIA

RIA-3351
The default scrollwheel zoom implementation is now more performant on 3D maps.

Bug fixLuciadRIA

RIA-3315
Fixed an issue with CreateController when creating shapes with a limited point count (as is the case for some tactical graphics). The controller would deactivate before it handled a SINGLE_CLICK_CONFIRMED event. This event would 'leak' into the default map event handling, triggering a selection on the newly created shape.

Bug fixLuciadRIA

RIA-3202
Fixed an issue where errors were thrown when a 3D map has a width or height of 0 pixels.

2020.1.01

ImprovementLuciadRIA

RIA-3303
HSPCTilesModelDescriptor now exposes the data type of a property when available. Using this information, it is possible to estimate what is the effective range of a property and style accordingly.

ImprovementLuciadRIA

RIA-3335
It is now possible to change how a quality factor given to a TileSet3DLayer behaves in the distance. Using the newly introduced attribute TileSet3DLayer.qualityFactorDistanceFalloff, a multiplier over the quality factor can be applied at specified distances. This can help in finding the balance between performances and visual quality, for instance by having a higher factor in the foreground than in the background.

ImprovementDefense Symbology

RIA-3299
The following symbols are now supported:
  • MIL-STD-2525b: Wind Plot - WAS-WP----P----
  • MIL-STD-2525c: Wind Plot - WAS-WP----P----
  • APP-6A: Wind Barb - W*A*W-----*****
  • APP-6B: Wind Barb - W*A*W-----*****
  • APP-6C: Wind Barb - 10004500001126000000

Bug fixLuciadRIA

RIA-3320
Fixed an issue where a ProgrammingError not defined error occurs when the WMS service doesn't have the specified layer. Now an error indicating that the layer doesn't exist in the service will be thrown.

Bug fixLuciadRIA

RIA-2825
Fixed an issue with fitting (MapNavigator.fit) on near-worldwide bounds. The map would fit on a location near lon-lat [0,0], zoomed in too much. Now, it correctly shows the entire globe.

Bug fixLuciadRIA

RIA-3334
Fixed an issue in which data attributes were not correctly parsed from HSPC datasets prior to version 8. This caused issues when trying to use expressions with such data, leading to attributes that could not be found while effectively there.

Bug fixLuciadRIA

RIA-3296
Fixed an issue in the Rich Client API where GetCapabilities documents could not be parsed if the service URL contained a question mark.

2020.1

New featurePanoramic

You can now visualize panoramas in LuciadRIA. To do this, you call GeoCanvas.drawPanorama in FeaturePainter.paintBody after assigning a PanoramaModel to FeatureLayer.panoramaModel. If you want to visualize panorama data processed by LuciadFusion, you should use FusionPanoramaModel. LuciadRIA can visualize panoramas in a cubemap image format, or in equirectangular format. The panoramic imagery can be multileveled as well (in both formats). Please refer to the API documentation for details. The "Panorama" sample also demonstrates how you can use the RIA panorama API. Note that you'll need a license for the LuciadRIA "Panoramics" optional module for this API to work.

ImprovementLuciadRIA

RIA-1669
The default styling of editing handles was changed to a non-draped circle icon. If you prefer the old EditController handle icons, you can still set that style using:

      const editController = new EditController(layer, feature, {
        handleIconStyle: {
          image: IconFactory.rectangle({ // from samples/common (@luciad/ria-sample-common/IconFactory)
            stroke: "rgb(0,0,0)",
            strokeWidth: 1,
            fill: "rgb(255,255,255)",
            width: 10,
            height: 10
          }),
          width: "10px",
          height: "10px",
          zOrder: 10
        }
      });
    

ImprovementLuciadRIA

You can now schedule the automatic data reloads in a FeatureLayer using LoadingStrategy API. The new LoadingStrategy.refresh property accepts the following values:
  • number - the loading strategy refreshes every n milliseconds.
  • Date object - the loading strategy will refresh at that time.
  • null - the loading strategy never refreshes.
This API can be used to implement a KML layer, created based on KMLNetworkLinkFeature, that reloads data according to KMLLink object.

ImprovementLuciadRIA

HSPCTilesModelDescriptor now exposes more information about its metadata properties. Properties now have a role that describes their type. It is now possible to detect if a model exposes colors or intensity for instance. This can be useful for styling and filtering.

ImprovementLuciadRIA

RIA-2545
It is now possible to decode KMZ files with LuciadRIA. Both KMLModel and KMLCodec accept KMZ files.

ImprovementLuciadRIA

RIA-1337
KMLCodec is introduced which can be used with existing Store implementations. For example, you can now connect to a WFS service that returns KML using the KMLCodec in combination with the WFSFeatureStore.

ImprovementLuciadRIA

LuciadRIA can now parse version 2.3 KML files with the following:
  • Placemark items
  • Network links
  • Container elements
  • Ground overlays
  • KMZ data can now be parsed.
For more information on these new features have a look at the documentation on KMLCodec and KMLModel. A KML sample was also added to demonstrate how the new API can be used to create a tree view UI component.
See also the how-to article on visualization of KML data.

ImprovementLuciadRIA

RIA-3265
Draco compressed pnts datasets are now detected, with a proper warning logged to notify they are not supported yet.

ImprovementLuciadRIA

RIA-3099
It is now possible to obtain the bounds of a tile in a RasterTileSetModel. This may come in handy if you have to pass the tile bounds in tile requests.

ImprovementLuciadRIA

FeaturePainter implements the Evented interface and exposes the "Invalidate", "InvalidateById" and "InvalidateAll" events that are emitted when corresponding invalidation methods are called.

ImprovementLuciadRIA

You can now have transparent objects in a TileSet3DLayer, for example based on an OGC 3D Tiles mesh dataset. The transparency can originate from transparent pixels in an rgba texture, transparent colors in a vertex attribute, or transparent colors from a color expression.

Since painting with transparency can have a performance impact, it is disabled by default. You can enable it with the new flag transparency on TileSet3DLayer. When disabled, any transparent surfaces will just be opaque.

ImprovementLuciadRIA

RIA-1370
Use the LoadingStrategy.shouldUpdate API to decide if an existing feature should be replaced by a feature that comes from a processed query cursor. You can implement a custom shouldUpdate predicate to control how changes to features should be handled by LuciadRIA. This API is extended now to include the LoadEverything strategy too. Please note that LoadSpatially already exposes this API since releases 2018.1.

ImprovementLuciadRIA

It is now possible to displace terrain geometry by setting a RasterStyle.displacementExpression on the RasterTileSetLayer.rasterStyle of an elevation layer. This can for example be used to flatten the terrain in an area where you want to place a 3D mesh of a building.

ImprovementLuciadRIA

It is now possible to add an outline to a TileSet3DLayer by using TileSet3DLayer.outlineStyle. Additionally it is now also possible to make your TileSet3DLayer visible when it is obscured by another layer, for example underground pipes beneath another mesh. To enable this you need to set an OcclusionStyle via TileSet3DLayer.occlusionStyle. With OcclusionStyle.bodyColorExpression you can control the color of the occluded part of the layer. An outline can also be configured for the occluded part of the layer using OcclusionStyle.outlineStyle.
Building in a 3D tiles layer with an outline and occlusion style.
Building in a 3D tiles layer with an outline and occlusion style.

ImprovementLuciadRIA

RIA-3209
Improved TypeScript definition for Decoration.alignment property. The property accepts now only expected string literals: "left", "center" or "right".

ImprovementLuciadRIA

The Icon3DStyle now accepts both glTF version 1.0 and 2.0. Additionally it's now possible to use binary glTF as well.

ImprovementLuciadRIA

Labels drawn on borders of a Cartesian map are positioned by default as follows:
  • PointLabelPosition.SOUTH for labels drawn on the bottom border
  • PointLabelPosition.WEST for labels drawn on the left border

ImprovementLuciadRIA

Cartesian references which can be created with ReferenceProvider.createCartesianReference can now be used as the world reference on a WebGLMap. This allows you to visualize non-georeferenced data on a WebGLMap, e.g. timeline, image defined in CRS:1, etc.

The use of a WebGLMap with a Cartesian reference is demonstrated in the timeline, vertical view and image viewer sample.

A WebGLMap with a Cartesian reference has the following limitations:

  • For raster data the reference of the data and the map must be equal, e.g. both must use CRS:1.
  • World sized styling is not supported.
Timeline on a WebGLMap with a Cartesian reference
A WebGLMap with a Cartesian reference can be used to create this timeline for example.

ImprovementLuciadRIA

RIA-3114
The type of Feature.properties is FeatureProperties instead of object. Now it's no longer needed to cast Feature.properties to a specific type in order to prevent typing issues when accessing an arbitrary property.

ImprovementLuciadRIA

The atmosphere effect of GraphicsEffects was enhanced. The atmosphere can now more accurately visualize time of day. See LightScatteringAtmosphere for more details.

ImprovementLuciadRIA

RIA-3100
The model accessor of RasterTileSetLayer is now more precisely typed with RasterTileSetModel | null instead of Model | null.

ImprovementLuciadRIA

LuciadRIA now supports HSPC version 12.

Bug fixLuciadRIA

Fixed the type definition of BasicFeaturePainter.setStyle and BasicFeaturePainter.getStyle. It no longer takes a complete PaintState object, but rather just an object literal with a selected property (no need to specify a level, which isn't used by BasicFeaturePainter).

Bug fixLuciadRIA

RIA-3115
Fixed the ordering of multiple icons at the exact same 3D location. The painting now follows the regular ordering based on layer and z-order.

Bug fixLuciadRIA

RIA-2968
Improved the performance of feature updates through model changes on a WebGLMap. This is particularly noticeable when regularly updating thousands of track positions. Such scenarios had regressed compared to LuciadRIA 2019 and LuciadRIA 2018. Now its performance has improved by up to 50% compared to previous releases.

Bug fixLuciadRIA

RIA-3121
The ContextMenuManager in the samples now only consumes click events on the document.body node when the context menu is being displayed. This makes the ContextMenuManager compatible with UI frameworks like React. Before this change, React components would not respond to click events.

Bug fixDefense Symbology

RIA-3230
The caching for symbols retrieved from the SymbologyServer is now optimised to make sure that for each symbol only a single request is sent to the server.

Upgrade considerationLuciadRIA

HSPCTilesModelDescriptor now exposes the properties as an object. Before 2020.1, they were exposed as an array of strings encoding their names. The format is now aligned on the one given in the OGC3DTilesModelDescriptor. If you were reading the property array, you will need to change the logic to loop on the members of this new object.

Upgrade considerationLuciadRIA

The KMLLayer.painter now respects the visibility flag when drawing KML features. Prior to 2020.1 release, KML features were always visible disregarding the visibility. The previous behavior can be restored by forcing the visibility value to "true".
      layer.workingSet.on("QueryFinished", () => {
        layer.workingSet.get().forEach(kmlFeature => kmlFeature.properties.visibility = true);
        layer.painter.invalidateAll();
      });
    
An alternative solution is to create a user interface to control visibility of KML features. The "KML" sample demonstrates how to create such a UI component.

Upgrade considerationLuciadRIA

Codec.decode can now also return a Promise<Cursor>. If you are using this you will need to do a type check first.

Upgrade considerationLuciadRIA

The RasterStyle interface was moved to its own module. Since this is a type only import, only TypeScript projects are affected by this change. In your TypeScript code you will need to update the import to import {RasterStyle} from "@luciad/ria/view/style/RasterStyle"

Upgrade considerationLuciadRIA

The ES modules version of LuciadRIA no longer has out-of-the-box support for Internet Explorer 11. This makes the LuciadRIA modules smaller in size and it results in more performance on modern browsers. If you do still need Internet Explorer 11 support, you can use the AMD version of LuciadRIA. Alternatively, you can transpile LuciadRIA's ES modules down to ES5 with IE11 support, using a transpiler like Babel. The "Supporting Internet Explorer 11" how-to article explains how you can do this. Note that LuciadRIA samples will no longer run on Internet Explorer 11 out-of-the-box.

Upgrade considerationLuciadRIA

Functions that had Promise<number> | Promise<string> in their return type, now return Promise<number | string>. As a result you might need to change some casting in your TypeScript code. This change affects functions on WorkingSet and FeatureModel.

Upgrade considerationLuciadRIA

The way inheritance is implemented in the constructor of ES5 classes, has changed. If you subclassed a RIA class in ES5, like this:
      function SubClass() {
        SuperClass.call(this, arg1, arg2);
        this._field = arg1;
      }

      SubClass.prototype = Object.create(SuperClass.prototype);
      SubClass.prototype.constructor = SubClass;
    

You'll have to change the implementation of the constructor, like this:

    function SubClass() {
      var _this = Reflect.construct(SuperClass, [arg1, arg2], this.constructor);
      _this._field = arg1;
      return _this;
    }

    SubClass.prototype = Object.create(SuperClass.prototype);
    SubClass.prototype.constructor = SubClass;
    

Note that Reflect.construct is not available on Internet Explorer. If you're targeting Internet Explorer, you will have to make sure that a polyfill for Reflect.construct is available.

If you're using ES6 classes, no changes are necessary.

Upgrade considerationLuciadRIA

LayerTreeVisitor has been converted to an interface, thus you can no longer extend from it. The default implementation had no functional use, thus removing the inheritance from your code does not change any functionality.

2020.0

2020.0.19

Bug fixLuciadRIA

RIA-3277
Fixed an issue where icons and atmosphere could flicker when there were two active WebGLMap maps in a single application.

Bug fixLuciadRIA

RIA-3274
Fixed a bug where the GoogleLayer would start flickering when zooming in on areas where no imagery is available at high zoom levels.

Bug fixLuciadRIA

RIA-3273
Fixed an issue which prevented you from zooming out in some cases when scale snapping was enabled on the MapNavigator. Also, adding a RasterTileSetLayer to a map with scale snapping enabled will now work.

Bug fixLuciadRIA

RIA-3267
Fixed an issue where an error was thrown if a controller was invalidated or deactivated after the map has been destroyed.

Bug fixLuciadRIA

RIA-3258
Fixed an issue where a KML feature with altitudeMode element set to relativeToGround was drawn on the surface of the ground. This situation happened when the lowest Z-coordinate of all shape's points was equal to 0.

2020.0.18

ImprovementLuciadRIA

RIA-3256
Fixed an issue where the longitude passed into LonLatPointFormatformat method would not be taken into account.

Bug fixLuciadRIA

RIA-3247
Fixed an issue that could lead to badly interpreted attributes from 3D tiles datasets, preventing styling expressions from working correctly.

2020.0.17

Bug fixLuciadRIA

RIA-3238
Fixed an issue with HSPC data URL creation which could present patterns like "//". This could cause problems to retrieve the data depending on a server's security settings.

2020.0.15

ImprovementLuciadRIA

Introduced GARSPointFormat to convert points with WGS84 lon lat coordinates into GARS coordinate strings and the other way around.

ImprovementLuciadRIA

RIA-2426
MGRSPointFormat now supports parsing MGRS coordinates into points with WGS84 lon lat coordinates.

ImprovementLuciadRIA

RIA-3227
Now supporting OGC 3D Tiles' B3DM files with misaligned buffers in memory. This can help with older datasets having unaligned buffers.

Bug fixLuciadRIA

RIA-3239
Fixed a potential crash scenario within 3D Tiles, caused by any failure to retrieve geometry from data files.

Bug fixLuciadRIA

RIA-3221
Fixed an issue with drawing a multi-line text on a WebGLMap. The rasterized text was clipped at the bottom for specific TextStyle definitions.

2020.0.14

ImprovementLuciadRIA

RIA-3193
LuciadRIA now tries to find an offset which is a quad-tree in the specified TileMatrixSet when WMTSTileSetModel was created with a tile matrix set which is not entirely quad-tree.

Bug fixLuciadRIA

RIA-3226
Corrected a regression where normals within 3D tiles could be incorrectly transformed. This could lead to badly lit surfaces.

Bug fixLuciadRIA

RIA-3211
Fixed performance issue on canvas map with drawing closed shapes with frequently rescaled images as fill patterns.

Bug fixLuciadRIA

RIA-3210
Fixed an issue with creating a complex stroke's icon pattern (PatternFactory.icon), where the IconPatternOptions.credentials property was disregarded.

Bug fixLuciadRIA

RIA-2487
Fixed an issue in 3D WebGLMap, where a vector layer in combination with a raster layer would sometimes not display the layers in the correct order. This would happen on maps without a global imagery base-layer.

2020.0.12

ImprovementLuciadRIA

LuciadRIA now supports HSPC version 12.

Bug fixLuciadRIA

RIA-3101
Fixed an issue with drawing repeated labels along a path where the user defined OnPathLabelRepeatOptions.minimumGap option was disregarded.

Bug fixLuciadRIA

RIA-3201
The method signature of the canAddChild method in the LayerTree class has been revised, the type of the positionReference parameter has been changed to LayerTreeNode.

Bug fixLuciadRIA

RIA-3178
Fixed an issue with the type definition of WMSTileSetModel.getTileURL. The return type did not include null.

Bug fixLuciadRIA

RIA-3184
Fixed an issue with the type definition of requestHeaders in various places of the API. The type definition did not include null.

Bug fixLuciadRIA

RIA-3172
Fixed an issue when using two WebGLMaps in a single page: textures of one map would be used in the other map, causing warning messages and visual glitches.

Bug fixLuciadRIA

RIA-2637
Fixed a documentation issue in Map.viewToMapTransformation. This getter is shorthand for getViewTransformation(LocationMode.TERRAIN), not getViewToMapTransformation(LocationMode.CLOSEST_SURFACE).

Bug fixLuciadRIA

RIA-3169
Fixed a memory leak in ClusteringTransformer when layer's query provider is invalidated and the underlying store returns a cursor with features that have different IDs on each query() request.

Bug fixLuciadRIA

RIA-3157
Fixed a regression in TileSet3DLayer that could potentially lead to badly transformed tile bounds. Also fixed an issue that could lead to tiles being visualized incorrectly in the world.

Bug fixLuciadRIA

RIA-3147
Fixed an issue where PerspectiveCamera.copyAndSet only took into account the options.eye argument if it had a different reference from the camera.

Bug fixLuciadRIA

RIA-3110
Fixed a case where large polygons (> 5x5 degrees) were missing a part of their fill in a 3D view. It was caused by floating point rounding errors, so didn't happen very often. For polygons that did have the problem, the part of fill was missing both for draped and non-draped cases.

Bug fixLuciadRIA

RIA-2984
Fixed an issue with automatic icons displacement in 3D: it should only be calculated based on non-draped icons. This could cause icons to be displaced far off their anchor point when combining draped and non-draped icons.

Bug fixDefense Symbology

RIA-3200
In MilitarySymbologyPainter, the typing of the MilitarySymbologyPainterConstructorOptions was corrected in accordance with the documentation.

2020.0.11

Bug fixDefense Symbology

RIA-3181
Fixed an issue on IE11 where hatch fill patterns on tactical graphics were missing.

2020.0.10

Bug fixDefense Symbology

RIA-3177
Fixed an issue where labels of a military symbol were not drawn by default, but only after the symbol had been selected.

2020.0.08

ImprovementLuciadRIA

RIA-1654

`FeatureLayer` now processes a limited amount of model updates before the next frame, rather that after. This reduces visual jitter when you adjust camera based on a changing `Feature`, for example when following a moving airplane.

If you do more changes than can be processed before the next frame, the rest will be done asynchronously and be visible in later frames only. The amount that can be processed is dependent on the changes and your browser performance.

ImprovementLuciadRIA

RIA-3158
The array-like accessors [0], [1], [2] and length have been removed from Point. These had been deprecated and removed from the API but still showed up on Point objects which could make debugging with certain tools more difficult.

ImprovementLuciadRIA

RIA-3128
Microsoft Edge Chromium (also known as Microsoft Edge Anaheim) was added to the list of supported browsers.

Bug fixLuciadRIA

RIA-3165
Fixed an issue where switching painting a line with begin marker to a line with end marker didn't appear on screen.

Bug fixLuciadRIA

RIA-3162
Fix an issue where MapNavigator.constraints could not be disabled in some cases (e.g. when disabling it through assignment of an object literal: map.mapNavigator.constraints.above = {terrain: false};).

Bug fixLuciadRIA

RIA-3160
Addressed an issue on a non-WebGL map with drawing closed shapes styled with repeated image patterns. Patterns based on ImageIconStyle could be incorrectly used in some situations.

Bug fixLuciadRIA

RIA-3156
Fixed a problem on a software-rendered map with drawing complex polygons where the inner shapes have the same winding orientation as the outer shape. In such a situation a complex polygon was drawn with the fill style covering inner shapes.

2020.0.07

ImprovementLuciadRIA

RIA-3061
Narrowed the type of TileSet3DLayer's model to OGC3DTilesModel | HSPCTilesModel instead of the generic Model.

ImprovementLuciadRIA

RIA-3117
Added an interface for the ReferenceProvider.createCartesianReference options called CreateCartesianReferenceOptions.

Bug fixLuciadRIA

RIA-3127
Prevented TileSet3DLayer from accessing the map after it has been destroyed. This could occur in some rare cases where the map would be destroyed while a new layer is being created.

Bug fixLuciadRIA

RIA-3122
Fixed an issue that broke the complex stroking API in Microsoft Edge Anaheim.

2020.0.06

ImprovementLuciadRIA

RIA-3105
Prevented error from being thrown because asynchronous operations are completing after the WebGL canvas has been destroyed.

ImprovementLuciadRIA

RIA-3102
Updated all samples using sunlight to use UTC time instead of timezone-dependant time. This fixes the issue of the geolocate sample being dark when viewed in locations that were far away from the Marseille dataset. Note that this change only affects sample code.

Bug fixLuciadRIA

RIA-3111
The referenceName property in WMTSCapabilitiesTileMatrixSet that was accidentally deleted in version 2020.0 has been added again.

Bug fixLuciadRIA

RIA-3090
Fixed a problem with drawing grid's parallel lines on 2D maps when map's reference contains the origin of longitude different than 0.

2020.0.05

ImprovementLuciadRIA

Deprecated Layer.getModelBoundsVisibleOnMap. Instead, Map.mapBounds should be used.

Bug fixLuciadRIA

RIA-3075
Fixed an issue for TileSet3DLayer where Layer.getModelBoundsVisibleOnMap would always return null.

2020.0.04

ImprovementLuciadRIA

RIA-3093
The dataType and samplingMode properties have been added to WMSTileSetModel and WMTSTileSetModel. These properties can be used to add custom elevation data, served through WMS or WMTS protocols.

ImprovementLuciadRIA

RIA-3089
Transformed `AxisConfiguration` from a type to an interface.

Bug fixLuciadRIA

RIA-3098
Addressed an issue where a WMTS layer couldn't be added to the map if ContactInfo values were empty in the GetCapabilities response.

Bug fixLuciadRIA

RIA-3088
Fixed a bug in TileSet3DLayer: errors could occur when setting an expression on layers with a geo-location transformation.

Bug fixLuciadRIA

RIA-3087
Fixed a 2020.0 regression where Point.move3D would not move the point's z coordinate if the z argument === 0.

Bug fixLuciadRIA

The factor and targetScale property of the MapNavigatorZoomOptions interface can also be of type [number, number].

Bug fixLuciadRIA

RIA-3082
GMLCodec parses now correctly a GML MultiGeometry shape with multiple inner geometries. Before the fix, the resulting LuciadRIA ComplexPolygon shape contained only a single Polygon shape that corresponded to the first inner GML geometry.

2020.0.03

Bug fixLuciadRIA

RIA-3077
Fixed a type issue in Map.restoreState. The animate option was missing a boolean union type, so you could not use map.restoreState(savedState, {animate: true}); in TypeScript.

Bug fixLuciadRIA

RIA-3080
Fixed an issue when SEPainterFactory throws errors if the symbology encoding data contains a filter definition of type and or or.

Bug fixLuciadRIA

RIA-3067
Options of Affine3DTransformation's createIdentityTransformation are no longer mandatory.

2020.0.02

Bug fixLuciadRIA

RIA-3073
Fixed an issue where WMTSTileSetModel.createFromCapabilities() threw a TypeError with message "Object doesn't support property or method parseFloat" on Internet Explorer 11.

2020.0.01

ImprovementLuciadRIA

RIA-2990
Labels on 3D maps are drawn with the culling effect, which means that labels positioned close the horizon are not drawn.

ImprovementLuciadRIA

RIA-3017
The WMTSTileSetModel can now also include dimension request parameters in tile requests. You can configure the dimensions at construction time by setting the dimensions construction parameter, or at runtime by modifying the dimension property on the WMTSTileSetModel instance. Please refer to the reference documentation for more details.

ImprovementLuciadRIA

RIA-3016
WMS Capabilities information now contains information about user-defined symbolization. Refer to the API reference documentation of the userDefinedSymbolization property of the WMSCapabilities class for more information.

ImprovementLuciadRIA

RIA-2992
Features are now decoded lazily in incremental way when processing query cursors. That way handling big data sets is smoother, especially when using the spatial loading strategy.

Bug fixLuciadRIA

RIA-3056
Fixed an issue where WFSFeatureStore.createFromCapability's error handling. An undefined variable error was thrown instead of the intended error.

Bug fixLuciadRIA

RIA-3052
Fixed an issue when a feature layer is never reported as ready by whenReady(), if the layer's query provider uses QueryProvider.QUERY_NONE. In such a situation the query status of layer's workingSet was QueryStatus.QUERY_PENDING and now it is promoted to QueryStatus.QUERY_FINISHED.

Bug fixLuciadRIA

RIA-3025
Removed polyfill of HTML DOM children property. The polyfill was used for no longer supported browser Internet Explorer 9.

Bug fixLuciadRIA

RIA-2999
Fixed an issue on WebGLMap where labels created by a controller flicker. This situation happened when label's position changed on controller's interaction with the map.

Bug fixLuciadRIA

RIA-2993
Fixed an issue with resolving image urls for balloon's contents on a KML Layer.

Bug fixLuciadRIA

RIA-3018
Fixed a memory leak issue when using drawText for many features that update regularly.

Bug fixLuciadRIA

RIA-2962
Fixed a problem with drawing grid's parallel lines on 2D maps when LonLatGrid is configured with a deltaLon value for which the expression: 180 modulo deltaLon evaluates to a non-0 value. In such cases grid's parallel lines were partially drawn on 2D maps.

Bug fixLuciadRIA

RIA-2991
Fixed performance regression when drawing labels.

Bug fixLuciadRIA

RIA-2920
Fixed an issue in tessellation of extruded shapes. In some cases, the outline didn't match the fill, and either or both could be missing a small part.

2020.0

New featureLuciadRIA

LuciadRIA is now shipped as a set of ES6 modules, packaged as npm packages. You can find the npm packages in the packages/es6 directory of the release.

Once you've installed the packages into an npm registry, you can use install and use them like any other npm package:

LuciadRIA installation using npm
Use npm install to install LuciadRIA packages

The packages include Typescript definition files with documentation for all the public API.

ImprovementLuciadRIA

Added an option to TileSet3DLayer constructor to allow the offsetTerrain to be specified with a desired offset in meters. Have a look at the constructor option in TileSet3DLayerConstructorOptions for more information.

ImprovementLuciadRIA

You can now instruct LuciadRIA to load a license file by providing a choice of URL locations using License.loadLicenseFromUrls API.

ImprovementLuciadRIA

RIA-2908
It is now possible to perform GetFeatureInfo requests on WMS server versions 1.3.0, 1.1.1, 1.1.0 and 1.0.0. Previously GetFeatureInfo requests were only supported for WMS version 1.3.0.

ImprovementLuciadRIA

The LuciadRIA release now has improved support for integrating it in a TypeScript project. The 'luciad.d.ts' file has been removed, instead now each module has it's own definition file. These new definition files are derived directly from TypeScript code, as a result they are more robust than the previous 'luciad.d.ts' file. See the how-to article on TypeScript to get started.

ImprovementLuciadRIA

Added various options to manipulate the behavior of TileSet3DLayer. You can now set a TileLoadingStrategy that influences how tiles are loaded. It is also possible to change the duration of the tile fading-in and fading-out animation, or to turn it off entirely, using TileSet3DLayer.fadingTime. You can also now specify whether a 3D dataset is part of the terrain, using TileSet3DLayer.isPartOfTerrain. For more details, please consult the relevant API documentation.

ImprovementLuciadRIA

When styling mesh data of TileSet3DLayers with MeshStyle, you can now use a default color expression. This is for example useful if you want to create a color expression that is in some way based on the texture color. See MeshStyle for more details.

ImprovementLuciadRIA

We have added a referenceType property on ths CoordinateReference class. That property, as its name indicates represents the type of reference it is. Its value is one of the values in the ReferenceType enum.

ImprovementLuciadRIA

You can now also configure the ambient and diffuse color of the lights. See LightEffect for more details.

ImprovementLuciadRIA

We have added support for the HSPC point cloud format. You can use a HSPCTilesModel to create a model, and visualize the result of that using TileSet3DLayer.

ImprovementLuciadRIA

LuciadRIA API has been converted to ES6 (ECMAScript 2015) modules. In this context, the following changes were made.
  • The LuciadRIA API is now distributed as ES6 modules. For backward compatibility, the AMD version of the API is still included. In order to run LuciadRIA on a browser that does not support ES6 module loading, the code has to be bundled. For the LuciadRIA samples this is done using webpack, as demonstrated in samples/common/webpack.config.
  • LuciadRIA folder structure has been changed to match npm style. LuciadRIA classes are located under the packages folder. AMD classes can be found in the packages/amd folder and ES6 classes can be found in the packages/es6 folder. LuciadRIA, Defense Symbology and Advanced GIS Engine modules are stored in their own directories separetely.
  • The samples have also been converted to the ES6 module structure. A ready-to-run version is already included in the release and can be accessed by running the startSampleServer.[sh|bat] script. If you want to make changes to the samples, you can modify the source code and run the webpack dev server to inspect your changes. See the developer guide for more information the samples.

ImprovementLuciadRIA

You can now make a selection in a TileSet3DLayer if the underlying dataset contains metadata. For styling, MeshStyle now supports a selected color expression. This convenience expression will be used when a part of a TileSet3DLayer is selected. Have a look at the documentation of the TileSet3DLayer class, or the RIA developer guide for more information.

ImprovementLuciadRIA

RIA-2904
You can now instruct the GMLCodec how it should react when an unsupported geometry type is detected in the decoding data. For more information please consult GMLCodec constructor API.

ImprovementLuciadRIA

RIA-2898
Improvement in GMLCodec to detect the number of coordinate values used in a position. The optional srsDimension attribute used on top level geometry element can be now correctly interpreted (default placement is posList element).

ImprovementLuciadRIA

TileSet3DLayer now supports setting manually the time tiles will take to fade in / out when appearing / disappearing. More information can be found by taking a look at TileSet3DLayer#fadingTime.

ImprovementLuciadRIA

RIA-2149
Improved documentation about what to do when TileSet3DLayer's dataset is too detailed.

ImprovementLuciadRIA

RIA-2699
In some cases, the GPU memory used by a TileSet3DLayer could temporarily exceed the maximum memory configured on a WebGLMap. While usually harmless, this could cause your browser to crash or stop the webpage. This has been resolved. Note that if your TileSet3DLayer needs more memory than allowed, it will automatically reduce quality, and log this on the browser console. See WebGLMap.maxMemoryUsageHint for more information on how to configure your map's memory settings. See TileSet3DLayer.qualityFactor to adjust amount of detail that is loaded pro-actively.

ImprovementLuciadRIA

IconStyle and ShapeStyle now allow shapes to be painted in 3D in front of other 3D data if they are normally obscured. A new property occlusionMode allows you to configure this:
  • Mode OcclusionMode.VISIBLE_ONLY shows only the part of a shape that is not obscured by other 3D data. This is the default.
  • Mode OcclusionMode.ALWAYS_VISIBLE shows the entire shape even if behind by other 3D data. The shape will appear in front of other objects.
  • Mode OcclusionMode.OCCLUDED_ONLY shows only the part of the shape that is behind other 3D data. You typically use this to display obscured shapes in combination with another style that uses "VISIBLE" mode.
See IconStyle.occlusionMode or ShapeStyle.occlusionMode for details and limitations.

ImprovementLuciadRIA

Added new LocationMode to Map.getViewToMapTransformation(). The new mode is LocationMode.ELLIPSOID, and it allows you to transform a position in view coordinates onto the ellipsoid of the map reference, at an optionally specified height offset. This functionality is useful for creating controllers that require event handling on a fixed-height plane, such as dragging an editing handle perpendicular to the globe. Note that this new LocationMode only has effect in on a 3D map. In a 2D map, there is no height information on the map, so all LocationMode values will return the same result.

ImprovementLuciadRIA

RIA-1809
The ParameterizedPointPainter now supports labels. To do so, implement paintLabel in your painter in the same way as for other FeaturePainters. Note that the labels are evaluated and drawn using the normal cpu-based algorithms.

ImprovementLuciadRIA

Added new cartesian reference with identifier "LUCIAD:XYZ". This cartesian reference is 3D, with its axes defined in meters. The X-axis points to the east, the Y-axis points to the north, and the Z-axis points upward. The cartesian reference is not georeferenced, meaning that it can not be positioned on the globe by itself. To position a model with the "LUCIAD:XYZ" reference on the globe, have a look at Affine3DTransformation.

ImprovementLuciadRIA

RIA-2473
You can now override a RasterTileSetModel's getTileData method to submit compressed (png) or raw images in ArrayBuffers next to HTML5 Image objects. For more information please refer to the RasterTileSetModel, PixelFormat and TileData API documentations.

ImprovementLuciadRIA

OGC3DTilesModel now uses the LUCIAD:XYZ reference for datasets that are not georeferenced. In order to visualize these datasets, you will have to apply an Affine3DTransformation on the resulting TileSet3DLayer. On top of this, both the TileSet3DLayer and OGC3DTilesModel now have a box3d property that contains a tight-fitting non-axis aligned box around the dataset. On a model level, this will be in the reference of the dataset, which is potentially LUCIAD:XYZ. On a layer level, this will be the output reference of the layer transformation (See Affine3DTransformation).

ImprovementLuciadRIA

Added new geolocation sample that lets you position unreferenced TileSet3DLayer layers on the map. The sample uses a GeoLocationController in combination with an Affine3DTransformation to apply a runtime transformation on the TileSet3DLayer it is controlling.

ImprovementLuciadRIA

RIA-1516
WFSFeatureStore auto-detects the Codec object to use based on constructor's outputFormat property if codec is not provided.

ImprovementLuciadRIA

Added Affine3DTransformation to the API. This transformation encapsulates an affine transformation that can be used to position, scale and rotate a TileSet3DLayer.

ImprovementLuciadRIA

LuciadRIA now supports anti-aliasing. For more details, see map.effects.antiAliasing.

ImprovementLuciadRIA

LuciadRIA now supports the eye-dome lighting (EDL) technique to improve depth perception in 3D data sets. For more details, see map.effects.eyeDomeLighting and luciad/view/EyeDomeLightingEffect. See also the section "Configuring WebGL Map effects" in the LuciadRIA Developer's Guide.

ImprovementLuciadRIA

When styling mesh data of TileSet3DLayers with MeshStyle, it is now possible to configure a visibility expression and displacement expression. With visibility expressions you can make (parts of) your mesh visible or invisible based on available attributes and parameters. The displacement expression allows you to translate (parts of) the mesh. See TileSet3DLayer.meshStyle and MeshStyle for details and limitations.

ImprovementLuciadRIA

RIA-2783
3D Tiles meshes now use the color given in their material, provided it's a B3DM with an internal GlTF version 2. The used data is given through pbrMetallicRoughness.baseColorFactor in the material linked to a Primitive.

ImprovementLuciadRIA

RIA-2745
Improved documentation to specify that color expressions in TileSet3DLayer have their alpha disregarded (no transparency possible).

ImprovementLuciadRIA

RIA-2776
Improved some of the custom camera controls in the camera sample. The OrbitController and FirstPersonController now both use map.cameraAnimationKey as a the key for animations. This allows for better interactions with any other animations in the map. Both of the controllers now also use performance instead of Date for more accurate animations. The FirstPersonController has also been enhanced in how it handles key presses: It now treats each of the 6 directions as a separate values. This prevents the problem of sticky keys when rapidly navigating around the map. We have also enhanced the effect of holding down shift to accelerate the camera.

ImprovementLuciadRIA

RIA-2765
Added basic support for underground visualization. You can use map.mapNavigator.constraints = { above: { terrain: false, mesh: false } }; to allow navigation to go under the terrain. You can also use map.camera yourself to do your own navigation underground. Note that there are various technical limitations, in particular:
  • Draped content will not show up properly when underground.
  • Some imagery tiles can be missing underground, near the "horizon".
  • When disabling or re-enabling the above terrain constraint, the bottom-most layer will reload its data.
See also release note on transparent terrain below.

ImprovementLuciadRIA

RIA-2762
Added support for transparent terrain on a WebGLMap in 3D for the bottom-most RasterTileSetLayer. You can use myRasterTileSetLayer.rasterStyle = {alpha: 0.5};. Before, the bottom-most imagery layer could not be made transparent in 3D. Note that there are still various technical limitations, in particular:
  • When zoomed out, the back of the globe may be visible through the front.
  • When switching the fully opaque to transparent or back, the layer will reload its data.
See also release note on underground visualization above.

ImprovementLuciadRIA

RIA-2758
Invalidating a RasterTileSetModel on a WebGLMap no longer clears the layer map before loading new tiles. Instead the map keeps rendering the old tiles until the new tiles are loaded. This was already the case for non-WebGL Maps, but now it is also the case for WebGLMap.

ImprovementLuciadRIA

RIA-2724
Reduced some aliasing artifacts caused by the ambient occlusion graphical effect.

ImprovementLuciadRIA

RIA-2738
You can now set HTTP headers and credentials that will be sent with every HTTP request to WMTS service, using WMTSTileSetModel constructor's options: requestHeaders and credentials. Also, the style and format options are optional now. Form more information please consult WMTSTileSetModel API.

ImprovementLuciadRIA

RIA-949
WFSFeatureStore can be instantiated with an optional geometryName, which refers to the property that should be used along with the BBOX spatial filter to retrieve a feature's geometry.

ImprovementLuciadRIA

RIA-2636
The visual style of the ambient occlusion graphical effect has been modified to emphasize corners and other areas where light can get trapped.

ImprovementLuciadRIA

It is possible to request images from a WMTS service using WMTSTileSetModel API. Previously the WMTSTileSetModel module was a sample code and now it is exposed in the API.

ImprovementLuciadRIA

The following improvements have been made to the Symbology Encoding painter.
  • The painter supports the following elements for TextSymbolizer: IsAligned, IsRepeated, Gap, InitialGap, PerpendicularOffset.
  • It now supports Rotation, AnchorPoint and Opacity for Graphic elements.
  • Support for GraphicStroke elements has been added.
  • The painter can handle the uom attribute from LineSymbolizer and PolygonSymbolizer elements to draw lines in world size units.
  • It now supports Mark, Size, Rotation and Opacity for Graphic elements used in a GraphicFill element.
  • Added support for the SVG format, SVG images can now be used with both InlineContent and OnlineResource elements.

ImprovementLuciadRIA

To make connecting to OGC services (WFS, WMS, WMTS) and the LuciadFusion LTS service easier, LuciadRIA now includes capabilities parsing. You can access the list of offered data sets in a capabilities response from the service, and automatically detect all settings (version, tile dimensions, encoding formats, and more) for the creation of a model or store. The functionality to access the capabilities is available in the new classes WFSCapabilities, WMSCapabilities, WMTSCapabilities and LTSCapabilities in the package luciad.model.capabilities. To expedite the creation of a model / store for these web services, the following convenience methods have been added to WFSFeatureStore, WMSImageModel, WMSTileSetModel, WMTSTileSetModel and FusionTileSetModel:
  • A createFromCapabilities method accepting the capabilities and the name of the desired data set
  • A createFromURL method accepting the service URL and the name of the desired data set

ImprovementLuciadRIA

You can now implement and schedule your own animations via the new Animation and AnimationManager. Animations can be used for various use case e.g. camera animations, moving objects, etc. For more information see the JSDoc of Animation and AnimationManager.

ImprovementLuciadRIA

Improved performance and stability of 3D Tiles (TileSet3DLayer) in various ways:
  • Loading times have been improved by using tight-fitting oriented bounds for tile selection. This means less tiles will be downloaded.
  • Framerate while loading has been improved by removing and optimizing some cpu-intensive operations. This also improves loading latencies.
  • Overall memory consumption was significantly reduced.
  • TileSet3DLayer follows the map's allowed memory usage (see WebGLMap.maxMemoryUsageHint, and other release note below), resulting in caching that adapts to the dataset, as well as avoiding crashes.

ImprovementLuciadRIA

The EPSG:4979 coordinate reference is now supported. Use the ReferenceProvider#getReference method to retrieve the reference.

ImprovementLuciadRIA

It is now possible to customize the default coordinate axis order policy applied by the GML, GeoJson, WFS and WMS components. The classes GMLCodec, GeoJsonCodec, WFSFeatureStore, WMSImageModel and WMSTileSetModel can be instantiated with a swapAxes option that dictates for which references the default coordinate axis order should be swapped.

ImprovementLuciadRIA

RIA-2582
LoadSpatially loading strategy uses the multi-scale approach on 3D maps when user defines on the layer a minimum scale or a maximum scale at which the layer should render features (minimumScale and maximumScale options of the FeatureLayer constructor). For more information please refer to the LoadSpatially API documentation.

ImprovementLuciadRIA

RIA-2554
ShapeList#contains2DCoordinates no longer throws an error and instead returns false for an empty ShapeList

ImprovementLuciadRIA

You can now change the size, rotation and opacity of images used as fill for shapes. For more information see the JSdoc for FillStyle.

ImprovementLuciadRIA

You can now toggle and configure built-in camera constraints using MapNavigator.constraints. Consult the JSdoc of MapNavigatorConstraints for more information.

ImprovementLuciadRIA

You can use new Camera API to manipulate the map's camera. Consult the JSdoc of the luciad.view.camera package, and Map.camera for more information.

ImprovementLuciadRIA

You can now create sun lights which cast shadows for 3D WebGLMaps. See luciad/view/Map#effects and luciad/view/LightEffect for more details. The shadows are cast from all 3D content, on all 3D content.

ImprovementLuciadRIA

The raster tile loading for WebGLMap has been improved. Previously imagery and/or elevation tiles would be loaded incrementally (i.e. from low detail to the detail required for the current map scale). Because of this incremental loading, it could take some time before the view stabilized and the required raster detail level was shown on the map. To improve this the WebGLMap will now request the required tiles for the current map scale first. This results in the view stabilizing and displaying the required imagery/elevation for the current map scale more quickly. Note that if elevation data is being loaded from a slow server, you might see small gaps between tiles. These automatically go away when the elevation data is fully loaded.

ImprovementLuciadRIA

WebGLMap now automatically limits the amount of memory used by its internal data structures, both CPU/RAM usage as well as GPU/video RAM usage. By default, this limit is 500 MB CPU and 1GB GPU, but you can configure this limit yourself, see WebGLMap.maxMemoryUsageHint or WebGLMap constructor. These hints only apply to internal data managed by the WebGLMap, not to any user data present in the application. For more information and notes, see the documentation of WebGLMap.maxMemoryUsageHint.

ImprovementLuciadRIA

PatternFactory.icon offers to create a complex stroke's icon pattern with additional properties: rotation, opacity and size.

ImprovementLuciadRIA

RIA-2334
The scale indicator in the sample code has been enabled again, but only on 2D maps, as it makes no sense for 3D maps.

ImprovementLuciadRIA

RIA-2511
Invalidating a RasterTileSetModel on a non-WebGL accelerated map no longer clears the layer map before loading new tiles. Instead the map keeps rendering the old tiles until the new tiles are loaded.

ImprovementLuciadRIA

LuciadRIA allows drawing lines expressed in world size units (e.g. meters, feet) using LineStyle.uom API. The following style properties are taken into account when drawing world-size lines: line width, dash pattern, dash pattern offset and line marker's size and width.

ImprovementLuciadRIA

RIA-2514
LayerTreeNode#whenReady now resolves to the LayerTreeNode instead of to undefined

ImprovementLuciadRIA

RIA-2341
LuciadRIA now exposes information on axes ordering through CoordinateReference.axisInformation. This information can be used to determine the order in which to decode and encode coordinates, for example when implementing a Codec.

ImprovementLuciadRIA

Added support to change the opacity of icons for both 2D and 3D maps. You can now change the opacity value of an icon through the IconStyle.opacity property.

ImprovementLuciadRIA

RIA-2499
Ignoring url parameters in 3d tiles metadata content.url field to help with server requests.

ImprovementLuciadRIA

RIA-2498
Missing geometric error parsing in 3d tiles now defaulting to a node's parent's one instead of 0. This should fix the loading of some tilesets.

ImprovementLuciadRIA

RIA-2496
Improved memory consumption for 3d Tiles with textures.

ImprovementLuciadRIA

LuciadRIA now offers ambient occlusion and depth of field graphical effects on 3D WebGL maps. See Map.effects, GraphicEffects.ambientOcclusion and GraphicEffects.depthOfField for details. When enabled, they are applied on all the data on the map.

ImprovementLuciadRIA

LuciadRIA now allows styling mesh data of TileSet3DLayers with MeshStyle. This can be used for example to override the color of OGC 3DTiles meshes. Currently, color styling expressions are limited to either a fixed color, the color in the mesh texture, or an expression based on the vertex position. Additionally, you can use MeshStyle to enable lighting on your data, based on the lighting configured on your map through Map.effects.light. The lighting uses the normal vectors present in your data. If the data has no normals, local derivatives are used instead. See TileSet3DLayer.meshStyle and MeshStyle for details and limitations.

ImprovementLuciadRIA

RIA-2079
Added support to change the color of the globe for a 3D WebGL map. This new property can be set with Map.globeColor.

ImprovementLuciadRIA

RIA-2490
It is now possible to control the order of drawing airspace features by using AirspaceStyle.zOrder property.

ImprovementLuciadRIA

RIA-2486
Non-indexed meshes now supported in 3d tiles B3DM files.

ImprovementLuciadRIA

Added SVG image support for both 2D and 3D maps, SVG images can now be used with IconStyle and FillStyle.

ImprovementLuciadRIA

RIA-2235
You can now set HTTP headers / credentials that RIA will send with every AJAX request, by using the requestHeaders and credentials properties on UrlTileSetModel, WMSImageModel, GoogleImageModel, UrlStore, WFSFeatureStore and OGC3DTilesModel. For more information, consult the JSdoc.

ImprovementLuciadRIA

Enhancements when drawing labels: - repeat labels along a path (OnPathLabelStyle.repeat), - place labels away from a line (OnPathLabelStyle.perpendicularOffset)

ImprovementLuciadRIA

RIA-2451
Documented that BasicCreateController does not support creation of complex polygons, shape lists and extruded shapes. Also introduced runtime checks for these cases.

ImprovementLuciadRIA

LuciadRIA now offers AirspacePainter API. It allows you to use an inner border, outer border and outline style to draw closed shapes that represent airspaces.

ImprovementLuciadRIA

RIA-2342
ShapeProvider exposes methods from the Evented object. You can emit custom events and register event listeners.

ImprovementLuciadRIA

RIA-2417
The timeout for loading AMD modules in RIA samples has been disabled. This timeout caused issues when opening a RIA sample on a slow connection.

ImprovementLuciadRIA

RIA-2276
MapNavigator.fit now does tighter fits on large geodetic bounds in 3D.

ImprovementLuciadRIA

RIA-2307
OGC 3D Tiles parsing is more robust, by having an improved behaviour when parsing GlTF scenes.

ImprovementLuciadRIA

RIA-2410
OGC 3D Tiles parsing is more robust, by enabling GlTF accessors to have optional byteOffset field.

ImprovementLuciadRIA

RIA-2148
OGC 3D Tiles have a better lighting integration for meshes, helping visualization of small details when textures are missing.

ImprovementLuciadRIA

You can now use images as fill for shapes on a WebGLMap. For more information, see the JSdoc for FillStyle.image and FillStyle.url.

ImprovementLuciadRIA

RIA-2208
3D tiles can now handle the "ADD" refinement set in tileset.json files.

ImprovementLuciadRIA

RIA-2143
Improved 3d tiles parsing and rendering to be able to handle multi-mesh GlTF files.

ImprovementLuciadRIA

RIA-2328
Point cloud visualisation : added a security when deducing point size for rendering. This should improve visualization with datasets having a geometric error not related to the actual point density.

ImprovementLuciadRIA

RIA-2287
Fixed a shape discretization issue when a vertical view map contains layers with various but compatible Cartesian references.

ImprovementLuciadRIA

RIA-2255
Improved tile selection in 3D for very large low level tiles. This solves some of the blurry tiles that would sometimes occur when panning to some specific camera angles.

ImprovementLuciadRIA

LoadSpatially on 3D maps now uses the multi-scale approach to load features for each visible scale level zone as defined in QueryProvider. This improvement limits the memory usage and reduces the visual clutter for less detailed zones.

ImprovementLuciadRIA

Use the LoadSpatially.shouldUpdate API to decide if an existing feature should be replaced by a feature that comes from a processed query cursor. You can implement a custom shouldUpdate predicate to control how changes to features should be handled by LuciadRIA.

ImprovementLuciadRIA

RIA-2307
GlTF parsing in B3DM for 3D Tiles will not require a 'scene' field in its json content anymore.

ImprovementLuciadRIA

LuciadRIA now exposes a 'Complex Stroke' API. Using this API, you can stroke a line with repeated patterns and decorations. For example, a waved line with an arrow at the end and some text in the middle of the line. For more information, see the JSdoc for the modules in luciad/view/style/complexstroke, most notably ComplexStrokedLineStyle and PatternFactory.

ImprovementLuciadRIA

RIA-2299
3D Tiles parser is more lenient in some cases when parsing metadata.

ImprovementLuciadRIA

RIA-2296
You can now draw begin- and endMarker lines on a WebGLMap. For more information, see the JSdoc for LineStyle.beginMarker and LineStyle.endMarker.

ImprovementLuciadRIA

RIA-2281
You can now draw dashed lines on a WebGLMap. For more information, see the JSdoc for LineStyle.dash and LineStyle.dashOffset.

ImprovementLuciadRIA

CreateController will no longer deactivate when the user clicks outside of the Map's projection bounds.

ImprovementLuciadRIA

The ECDIS WMS sample (samples/ecdis/S52DisplaySettingsPanel.js) now has UI options to set the ship's beam and air draft. These settings affect the visualization of the safety of fixed bridges in InlandECDIS (IENC) datasets.

ImprovementLuciadRIA

RIA-2247
You can now limit the point count for editing, just like you can limit it for creation. For more information, seeEditController.setPointCount.

ImprovementLuciadRIA

RIA-2251
Improved tileset tree traversal to make it more robust and precise.

ImprovementLuciadRIA

RIA-2241
Added a warning to notify when glTF data have misaligned accessors.

ImprovementLuciadRIA

RIA-2115
The whenReady promise is resolved a soon as QueryStatus.QUERY_ERROR is reported for the underlying feature layer.

ImprovementLuciadRIA

RIA-2158
Terrain is now only pushed downward if needed, when encountering a 3D tiles dataset.

ImprovementLuciadRIA

RIA-2141
Improved flexibility for decoding OGC 3D Tiles metadata : now content.url and content.uri are both supported.

ImprovementLuciadRIA

RIA-1026
Improved the messages for license errors.

ImprovementLuciadRIA

RIA-2139
KMLModel now supports DOMStrings with object URLs created with URL.createObjectURL().

ImprovementLuciadRIA

RIA-2065
Symbology Encoding painter (created by SEPainterFactory) supports now symbology encoding definition containing Mark element with WellKnownName symbols. The following values for WellKnownName symbols are supported: square, circle, triangle, star, cross, x, pentagon and hexagon. Other values are defaulted to square.

ImprovementLuciadRIA

RIA-2126
It is now also possible to invalidate() a RasterImageModel.

ImprovementLuciadRIA

When using FeatureLayers with LayerTypeDYNAMIC on a WebGLMap, the background processing will be optimized for better throughput of updates. Changes will appear on the screen faster. Painting performance (frames per second) may decrease in this case. For more information, see API documentation of LayerType.

ImprovementLuciadRIA

RIA-327
Map will now fire ControllerChanged events whenever a new controller becomes active on the Map.

ImprovementLuciadRIA

RIA-865
LuciadRIA now supports creation and editing of Bounds shapes.

ImprovementLuciadRIA

RIA-2081
The 'double-click-to-fit' behavior of the sample LayerTreeControl is now restricted to just the label of the layer. This avoids issues with the fit being triggered at undesired moments, for example when rapidly toggling visibility.

ImprovementLuciadRIA

RIA-1086
GeoCanvas#drawText is now also supported by WebGL maps

ImprovementLuciadRIA

LuciadRIA now includes an OGC3DTilesModel and TileSet3DLayer for displaying mesh data and point clouds Example:
      OGC3DTilesModel
      .create("dataset.json")
      .then(function(model, { label: "My dataset" }) { return new TileSet3DLayer(model); })
      .then(function(layer) { map.layerTree.addChild(layer); });
    

ImprovementLuciadRIA

RIA-2029
GeoCanvas.drawText is now also supported on hardware-accelerated maps.

ImprovementLuciadRIA

RIA-2056
findLayerById, findLayerGroupById and findLayerTreeNodeById methods now can be used on all layer tree nodes, instead of only the layer tree.

ImprovementLuciadRIA

RIA-1909
Added Geodesy.calculate3D method to calculate a distance in a 3D Cartesian space.

ImprovementLuciadRIA

Added Ellipse.interpolate() method to calculate points on an ellipse using parameterization.

ImprovementLuciadRIA

RIA-111
luciad/shape/Point is no longer a subtype of Array

ImprovementLuciadRIA

RIA-2319
LabelCanvas now also allows HTMLElement as first parameter for its drawLabel, drawLabelInPath & drawLabelOnPath methods.

ImprovementLuciadRIA

RIA-2031
Geodesy's function interpolate now supports negative distances. This result in the computation on the corresponding positive distance with the opposite azimuth.

ImprovementLuciadRIA

RIA-2009
3D maps now have a field of stars in the background. It can be disabled by setting the starfield effect to false. See GraphicsEffects.starfield or Map.effects for more details.

ImprovementLuciadRIA

RIA-2011
The sample TimeSlider now performs fits without any margin, and with allowWarpXYAxis set to true. This allows for more accurate timeline fits that change the X/Y scale ratio of the TimeSlider.

ImprovementLuciadRIA

RIA-1987
luciad/symbology/canvas/ModifierStroke now supports an alignment option for the start and end of the line.

ImprovementLuciadRIA

RIA-1312
Added support for "CRS:1" in ReferenceProvider. This reference is not georeferenced and projects coordinates directly to on-screen pixel values, using an affine cartesian transformation. It allows you to visualize regular images on a map, using the same API, controllers and functionality as a georeferenced map. The new image viewer sample demonstrates this functionality.

ImprovementLuciadRIA

You can select a feature by clicking on its label or on its painted shape.

ImprovementLuciadRIA

The Map API (pickAt, pickAtRectangle, pickClosestObject, and pickClosestObjectRectangle) allows you to retrieve features at a particular location that overlaps with one of the paint representations of the object:
  • The object body
  • The object label. This option is inactive by default.

ImprovementLuciadRIA

RIA-1982
Non-WebGLMaps can now be rotated just like 2D WebGLMaps. Note that rotation will still be disabled in the following cases (both for Non-WebGLMaps and WebGLMaps):
  • A navigation restriction is set on the Map (with Map#restrictNavigationToBounds)
  • Axes are configured on the Map
  • There is a GoogleLayer present on the Map

ImprovementLuciadRIA

RIA-1335
GeoJsonCodec can now handle features with null value for the geometry property.

ImprovementLuciadRIA

RIA-1972
WorkingSet now always emits the clear event when the loading strategy query has changed.

ImprovementLuciadRIA

RIA-1888
The LayerTreeControl in RIA sample code now allows the user to collapse layer groups by clicking on the folder icon.

ImprovementLuciadRIA

RIA-1948, RIA-531
MemoryStore now has a clear method that allows you to remove all features from the store at once

ImprovementLuciadRIA

RIA-1926
Fixed an issue when using an HTML5 Image object in IconStyle in a WebGLMap. If the image was already loaded, it wasn't applied to the icon.

ImprovementLuciadRIA

RIA-1795
Enhanced ExpressionFactory.map to support a larger number of icons. This makes it easier to create icon animations using the ParameterizedPointPainter.

ImprovementLuciadRIA

The in-path labeling algorithm by default attempts alternative locations when a label threatens to go off-screen. You can deactivate this behavior by setting the InPathLabelStyle.inView property to false.

ImprovementLuciadRIA

RIA-1743
When using webpack, you no longer need to set the {node: { fs: 'empty' }} flag in order to make packing work with WebGLMaps.

ImprovementLuciadRIA

The terrain sample has been renamed to terrain services sample. The functionality of this sample has been extended to make use of two web services. The first service provides retrieval of the height at a given location. The second service provides a line of sight calculation providing you information on what objects you may see in your surroundings. By default the samples services are used. Customers having LuciadFusion Advanced or LuciadFusion Pro have access to the sample code for the server part of these web services.

ImprovementLuciadRIA

RIA-278
Controllers can now draw labels by implementing the Controller#onDrawLabel method. See the Controller JSdoc for more details and the updated Ruler sample for a usage example (cfr. RulerController#onDrawLabel).

ImprovementLuciadRIA

RIA-1431
ClusteringTransformer: changing between clustering transformers on a FeatureLayer now no longer causes a model query, if not necessary.

ImprovementLuciadRIA

RIA-1881
LayerTree nodes now have a readonly map property

ImprovementLuciadRIA

RIA-163
LuciadRIA now attempts alternative locations when placing labels along a line, which increases the chance that on-path labels will stay visible.

ImprovementLuciadRIA

RIA-1874
LuciadRIA now supports shapes of type Sector

ImprovementLuciadRIA

RIA-1583
It is now possible to change the label of a layer or layer group

ImprovementLuciadRIA

RIA-1863
The Position parameter of LayerGroup#MoveChild() is now optional and defaults to "top" when not present

ImprovementLuciadRIA

RIA-1863
The Position parameter of LayerGroup#MoveChild() is now optional and defaults to "top" when not present

ImprovementLuciadRIA

RIA-1830
You can now prevent labels being drawn outside of bounds of painted shapes by configuring the restrictToBounds property in the InPathLabelStyle object literal.

ImprovementLuciadRIA

RIA-1854
LayerGroup#moveChild now also supports moving layers between different layer groups

ImprovementLuciadRIA

RIA-1856
LayerGroup#addChild falls back to LayerGroup#moveChild whenever the layerTreeNode already has a parent

ImprovementLuciadRIA

RIA-1845
LuciadRIA can now parse WKT strings that represent projected coordinate systems that use an azimuthal equidistant projection.

ImprovementLuciadRIA

RIA-1839
ShapeProvider supports invalidating shapes for individual features using invalidate or invalidateById methods. Invalidating an individual feature guarantees that the object will be repainted with a new shape during the next map render.

ImprovementLuciadRIA

RIA-1534
ShapeProvider#invalidate() (without arguments) is deprecated and replaced by ShapeProvider#invalidateAll(), which is optimized for better performance.

ImprovementLuciadRIA

RIA-1823
Possibility to decorate the left border with icons and labels on the vertical view. The left border decorations are painted only when PaintRepresentation.LEFTBORDERBODY and PaintRepresentation.LEFTBORDERBODY are enabled on layers used on the vertical views. By default these paint representations are disabled.

ImprovementLuciadRIA

RIA-1802
MapNavigator#lookFrom and Map#restoreState now have animated versions. See the JSDoc for details.

ImprovementLuciadRIA

RIA-1786
GeoJsonCodec#decode can handle object.content that is represented as a JavaScript object.

ImprovementLuciadRIA

RIA-1657
LuciadRIA is now shipped with a TypeScript declaration file for the LuciadRIA API. This allows you to use LuciadRIA in a TypeScript declaration and hawe the TypeScript compiler check the valid use of the API.

ImprovementLuciadRIA

RIA-1770
The baseURL property of URLTileSetModel is now a writable property. Assigning a new value to it will invalidate the UrlTileSetModel, which will refresh the visualization.

ImprovementLuciadRIA

RIA-1679
A URLTileSetModel can now rotate between multiple subdomains when retrieving tiles from a tile service. You can do so by using the {s} subdomain hook in the baseURL and setting the subdomains property of the model.

ImprovementLuciadRIA

RIA-1722
UrlStore andWFSFeatureStorenow accept new optional constructor parameterswithCredentialsandrequestHeaders`. They are added to each HTTP request (XmlHttpRequest) to the server. That way the server can authenticate the user and respond accordingly.

ImprovementLuciadRIA

RIA-1740
You can now compensate for Tile Services whose Y axis for tile coordinates is reversed with respect to the Y axis direction used in LuciadRIA. If tile rows appeare to be visualized incorrectly, you can correct this by using the {-y} placeholder in the baseURL, the model will automatically calculate the correct value for the y coordinate. Before this, you had to override the getTileURL() method of the UrlTileSetModel to calculate the correct y-coordinate value.

ImprovementLuciadRIA

RIA-1673
The getTileURL() method from UrlTileSetModel now replaces all occurrences of {x}, {y} and {z} in the base URL instead of only the first occurrence.

ImprovementLuciadRIA

LuciadRIA now provides API to set the License text programmatically. If you don't call this API, the license will still be retrieved from the default location, i.e. luciad/license/luciadria_development.txt and luciad/license/luciadria_deployment.txt See luciad/util/License for more information on how to use the API.

ImprovementLuciadRIA

Because LuciadRIA does not depend on dojo, the dojo library has been moved to samples/lib.

ImprovementLuciadRIA

RIA-1717
Elevation is now supported on RasterTileSetModel. Introduced new RasterDataType and RasterSamplingMode enumerations to identify whether a tileset is image or elevation, and whether it should be area or point sampled. This enhancement lets you add elevation tilesets to LuciadRIA without using FusionTileSetModel. As an example, it can be used to connect to a WMTS service that serve elevation. Elevation RasterTileSetModel instances are limited to Quad-tree like structures served as 32-bit floating point TIFF files, or 16-bit unsigned integers. For more information on custom elevation tilesets, please consult the developer guide.

ImprovementLuciadRIA

RIA-1763
Use the browser native implementation of ES6 map if it exists, or otherwise a polyfill map.

ImprovementLuciadRIA

RIA-1746
Map#restoreState will now work for states that were saved on a Map with another reference.

ImprovementLuciadRIA

Introduced the ParameterizedPointPainter and associated classes for WebGL accelerated views. The ParameterizedPointPainter enables GPU based filtering and expressive styling of points, as well as visualizing density plots (heatmap). See the "Timeline" sample for an example.

ImprovementLuciadRIA

RIA-1006
The QueryError event is emitted on the WorkingSet whenever an error occurs while processing a Cursor.

ImprovementLuciadRIA

RIA-1716
Any errors that may occur while querying a store are reported in the browser's log.

ImprovementLuciadRIA

RIA-523
Context menu items created by the EditController and CreateController now have a 'id' property. You can use this id in Map.onShowContextMenu to change the way these context menu items are presented (for example, change the label to a different language). See the JSdoc of ContextMenu.Identifier for more information.

ImprovementLuciadRIA

RIA-1713
The atmosphere on 3D maps can now be toggled off by setting map.effects.atmosphere to false. For more information, read the JSdoc of GraphicsEffects.atmosphere.

ImprovementLuciadRIA

The GeoJsonCodec now always generates IDs (UUID) for features that have no ID, if you do not explicitly configure generateIDs. As before, if you configure the GeoJsonCodec with generateIDs set to true, it will override existing IDs. If generateIDs is set to false, no IDs will be generated, but an error will be thrown if a Feature without an ID is encountered.

ImprovementLuciadRIA

RIA-1709
WebGL maps now support non-world-covering tilesets. Previously you were limited to only using tilesets with references that covered the entire world, but this restriction has been lifted.

ImprovementLuciadRIA

RIA-1701
The performance of feature visualization has been improved on Internet Explorer 10.

ImprovementLuciadRIA

RIA-1697
It is now possible to calculate the area of a polygon by using the area method on Geodesy.

ImprovementLuciadRIA

RIA-965, RIA-1663
It is now possible to configure the tiling structure and the amount of scale levels on a WMSTileSetModel. You can do this by passing tileWidth, tileHeight, level0Columns, level0Rows and levelCount to the WMSTileSetModel constructor. These settings allow you to adjust the tile structure, for example to make it match the TileGrid configured on a GeoWebCache server.

ImprovementLuciadRIA

For convenience, the filter predicate function can be passed to the constructor of FeatureLayer.

ImprovementLuciadRIA

RIA-1677
Controller now exposes an Invalidated event, indicating that the Controller's appearance has changed and its onDraw method should be called in the next rendering pass.

ImprovementLuciadRIA

RIA-1656
On WebGLMap, labels for small polyline of 2 points could be not displayed sometimes, now it has been fixed.

ImprovementLuciadRIA

RIA-1589
In non-hardware accelerated rendering, the position of labels drawn by drawLabelInPath can be recalculated to remain in the view if its shape is partially visible. This can be activated by using an InPathLabelStyle with its new property "inView" set to true.

ImprovementLuciadRIA

RIA-1586
In non-hardware accelerated rendering, the position of labels drawn by drawLabelInPath has been improved. The label will also avoid to be drawn in a hole in case of a complex polygon.

ImprovementLuciadRIA

LuciadRIA now supports basic OGC Filter specification 2.0 for creation filter expressions. Filter expressions can be used to encode query requests to OGC WFS 2.0 services, as well to build predicate functions for filtering features on the client side. Please refer to the FilterFactory documentation for details.

ImprovementLuciadRIA

RIA-1617
In some cases, feature layers were not refreshed when they were made visible after navigation while they were invisible. This affected feature layers using LoadSpatially and also feature layers using ClusteringTransformer.

ImprovementLuciadRIA

RIA-1619
ClusteringTransformer : in a 3D view, the features at the back of the globe will now also be clustered, to prevent that unclustered features are temporarily visible when panning to the other side of the globe.

ImprovementLuciadRIA

RIA-1001
You can specify the labeling placement order for decluttering by submitting an array of the label positions instead of a bitwise-OR of them. It only impacts OnPathLabelStyle and PointLabelStyle.

ImprovementLuciadRIA

RIA-1572
Improved memory clean up when calling map.destroy() on a non-WebGLMap.

ImprovementLuciadRIA

The default zooming behavior now supports 'precision zooming'. Hold the SHIFT key while zooming with the scroll wheel to zoom slowly. Note that precision zooming works better when scale snapping ( MapNavigator.defaults.snapToScaleLevels) is disabled.

ImprovementLuciadRIA

Scale snapping for MapNavigator operations is now configurable through the MapNavigator.defaults.snapToScaleLevels property. It can also be configured for individual calls to MapNavigator.zoom and MapNavigator.fit. If you value smooth zooming over pixel-perfect raster scale levels, you should disable scale snapping. For backwards compatibility, the initial value of MapNavigator.defaults.snapToScaleLevels is true. See the MapNavigator JSdoc for more information.

ImprovementLuciadRIA

RIA-664
Improved support for MacBook touchpad and Apple Magic Mouse zooming.

ImprovementLuciadRIA

RIA-1029
LuciadRIA now has a file (samples/projection/resources/epsgcoordref.txt) that contains all the references from the EPSG database that can be parsed by using the ReferenceProvider.parseWellKnownText method. Now you can pick the references that you need for your application from this file, as shown in the projection sample.

ImprovementLuciadRIA

RIA-1558
Improved DOM compatibility by replacing new Image() instances with document.createElement('img').

ImprovementLuciadRIA

RIA-1447, RIA-1317
It is now possible to add custom references to the ReferenceProvider by using the ReferenceProvider.addReference method. Once a reference is added, it can be retrieved by using the ReferenceProvider.getReference method with the same identifier. ReferenceProvider.isValidReference will return true for that identifier. Additionally, creating above-terrain references from custom references previously added to the ReferenceProvider is now also possible. See the ReferenceProvider.getHeightAboveTerrainReference documentation. This used to be limited to the references available by default in the ReferenceProvider. Note that this also permits using custom references in GMLCodec and GeoJsonCodec without knowing your references up-front.

ImprovementLuciadRIA

RIA-402
GestureEvents now have a 'viewPoint' property. This property is similar to 'viewPosition', but it is a Point instead of an Array. This makes it easier to transform the locations of GestureEvents to different references. Before, you would have to construct a Point using the coordinates of the 'viewPosition' array. Now you can just use 'viewPoint' and directly pass it to Transformation.transform.

ImprovementLuciadRIA

RIA-1547
ClusteringTransformer: the performance of the clustering algorithm has been improved.

ImprovementLuciadRIA

RIA-69
You can now double click with the right mouse button to zoom out on the map, just like you already could double click with the left mouse button to zoom in on the map.

ImprovementLuciadRIA

RIA-1172
RIA will now detect and discard Bing Maps tiles that contain no imagery.

ImprovementLuciadRIA

The MapNavigator API has been overhauled. All previously existing methods have been reduced to 4 new ones: pan, zoom, rotate and fit. You can configure each operation to your needs by passing an options object. All existing functions on MapNavigator are deprecated. Their deprecation notes show how you can replace them with the new functions. Please refer to the API documentation for details.

ImprovementLuciadRIA

RIA-811
It is possible to configure SLD, SLD_BODY and dimension (for example, TIME and ELEVATION) request parameters on WMSImageModels and WMSTileSetModels. The STYLES property is now also exposed and writable on both models. Before, you could only configure STYLES at construction time. These parameters will be sent with each GetMap and GetFeatureInfo request.

ImprovementLuciadRIA

RIA-811
It is now possible to to add arbitrary request parameters to WMS GetFeatureInfo and GetMap requests, both for WMSTileSetModels and WMSImageModels. You can do this by assigning an object literal to the model's requestParameters property, or by passing requestParameters at construction time.

ImprovementLuciadRIA

The new "Multispectral Analysis" sample shows two multi-spectral raster datasets that you can visually compare by instantly cross-fading layers. It also demonstrates how to use WMS with an SLD/SE RasterSymbolizer.

ImprovementLuciadRIA

The new "Timeline" sample demonstrates how to use a non-georeferenced LuciadRIA Map to display time-based data. See the TimeSlider.js file for a re-usable component.

ImprovementLuciadRIA

The WMS, WMTS, WFS, Fusion, Bing, KML and GML samples have been replaced with the single "Data Formats" sample. See the various "DataLoader" files for snippets on how to load data for a certain format.

ImprovementLuciadRIA

It is now possible to create 3D icons in LuciadRIA by using the GeoCanvas#drawIcon3D method. Icon3DStyle allows you to set the 3D Mesh that will be used for your icon, as well as its scale, rotation, translation and orientation. A 3D icon can be created in two ways:
  • By decoding a glTF file. LuciadRIA includes support for single-texture based glTF files (Note that custom shaders, animations and skins are not supported). You can decode a glTF file by specifying its path in the Icon3DStyle class.
  • By creating a custom 3D Mesh using the MeshFactory class.
The 3D icons sample demonstrates how to create different types of 3D Meshes. It also provides some custom code to generate basic 3D primitives such as spheres, domes and cones.

ImprovementLuciadRIA

The rasterStyle.alpha of a RasterTileSetLayer is now also applied in a WebGLMap.

ImprovementLuciadRIA

You can now enable lighting on a WebGLMap. You have three options:
  • a light based on your camera (this is the default)
  • a sun light based on a specific time
  • no lighting
See luciad/view/Map#effects and luciad/view/LightEffect for details.

ImprovementLuciadRIA

RIA-1348
Calling Map.selectObject for a feature that is contained in a cluster will now take that feature out of the cluster and select it.

ImprovementLuciadRIA

RIA-1367
Transformations efficiency has been improved by reusing existing OutOfBoundsException exceptions instead of creating new ones for failed transformations.

ImprovementLuciadRIA

LuciadRIA now has a sample that shows what features of a WebGLMap are supported on your device and browser. The report gives you an overview of supported features, unsupported features and limitations of a WebGLMap due to the capabilities of your device and browser. See "samples/devicesupport/index.html". You can include the report when you submit a support question.

ImprovementLuciadRIA

GridLayer can now also be used in a luciad/view/WebGLMap. The styling is similar as in luciad/view/Map except that the stroke for labels defined in TextStyle is ignored.

ImprovementLuciadRIA

IconStyle now has a 'heading' property, which can be used to rotate icons based on an azimuth (a compass direction). This feature is available for both luciad/view/WebGLMap and luciad/view/Map.

ImprovementLuciadRIA

RIA-1369, RIA-789
You can now use GridLayer in all supported projections.

ImprovementLuciadRIA

The clustering sample now demonstrates how you can wrap a regular FeaturePainter that is not aware of clustering with a FeaturePainter that handles the clustered features.

ImprovementLuciadRIA

RIA-1315
The Geodesy interpolate method now takes the z-coordinate into account. In case of interpolation between two points, the z-coordinate is interpolated linearly. In the case where a point is calculated given an input point, distance and azimuth, the z-coordinate is copied from the input point.

ImprovementLuciadRIA

LuciadRIA now no longer depends on an external dojo deployment. This means that: - when developing applications with LuciadRIA, you no longer have to configure the module loader with the location of the dojo toolkit as it is no longer needed. - when using modules from the luciad namespace, the global dojo object will no longer be registered on the global window object. - users have greater flexibility in their choice of build-tools. Due to dojo specific features in the dojo modules, it was not always possible to use Javascript minification tools other than the dojo deployment tools. While the luciad developer api is no longer dependent on an external dojo deployment, the samples that are shipped with the release continue to rely on the dojo release that is included with the release. That is because the samples continue to rely on many of the utility functionality from dojo and many of the UI-components from dijit.

ImprovementLuciadRIA

LuciadRIA WebGLMap now supports all references supported by a non-WebGLMap. See the ReferenceProvider documentation for more details, or the Geodetic References chapter of the Developer's Guide.

ImprovementLuciadRIA

Added support for decoding GML 3.1 and GML 3.2 geometry that conform to Simple Feature level SF-0. A GMLCodec has been added to the API that can easily be used in combination with a WFSFeatureStore or a UrlStore, to load data from a WFS service or a specific url respectively.

ImprovementLuciadRIA

RIA-1324
The luciad/view/feature/FeaturePainter#invalidateById method has now been added. This method allows users to invalidate the visualization of a Feature by its identifier. This is useful in situations where a user does not have a reference to the actual Feature-instance, but does have access to the identifier value.

ImprovementLuciadRIA

RIA-1162
The code First Sample of LuciadRIA has been reduced to the bare minimum that is necessary to start a LuciadRIA application.

ImprovementLuciadRIA

RIA-936
When using a luciad/view/Map, it is possible to use an SVG icon for the luciad/view/style/IconStyle#image property.

ImprovementLuciadRIA

RIA-1271
WFS sample: the smaller cities, shown when zoomed in enough, are now painted with a smaller icon to distinguish them from the large cities that are always shown.

ImprovementLuciadRIA

RIA-1262
Vertical View sample: the vertical view is no longer completely rebuilt when selecting the same trajectory again.

ImprovementLuciadRIA

RIA-897
The following redundant methods have been deprecated:
  • Shape:
    • contains2D(x, y) in favor of contains2DCoordinates(x, y)
    • contains2D(point) in favor of contains2DPoint(point)
  • Bounds:
    • contains2D(bounds) in favor of contains2DBounds(bounds)
    • contains3D(point) in favor of contains3DPoint(point)
    • contains3D(bounds) in favor of contains3DBounds(bounds)

ImprovementLuciadRIA

KML now supports IconStyle.hotSpot, meaning that KML placemarks with icons will have anchorpoints attached to them.

ImprovementLuciadRIA

RIA-988
The default settings for the LonLatGrid constructor now provide a grid that adjust to your zoom level. Previously you had to specify this switch behavior yourself.

ImprovementLuciadRIA

The BasicCreateController provides now sensible default values for the minimum number of points that should be created for polygons (3) and polylines (2).

ImprovementLuciadRIA

It is now possible to introduce clustering to help reduce the clutter when there are many objects in a LuciadRIA view. You can configure a FeatureLayer to use a ClusteringTransformer, which will aggregate model elements that are close together into a cluster.

For more information, please refer to the LuciadRIA Developer's Guide chapter "Clustering".

ImprovementLuciadRIA

RIA-921
The TreeLayerControl now always emits events when you change the selected layer. Previously only clicking exactly on the text label caused the events to be emitted. Now you can also click on the icon or whitespace next to the label.

ImprovementLuciadRIA

LuciadRIA now has support for WebGL hardware-accelerated 3D and 2D maps. You can configure your current application for WebGL using luciad/view/WebGLMap instead of luciad/view/Map (otherwise identical). To enable 3D, use luciad.view.WebGLMap with constructor option { reference: ReferenceProvider.getReference("EPSG:4978") }. For more information, please refer to the LuciadRIA Developer's Guide chapter "Working with WebGL 2D or 3D maps".

ImprovementLuciadRIA

LuciadRIA now supported "above-terrain" vertical references. This is useful for modeling 2D data that is located on the ground instead of ellipsoid or geoid, or for 3D data measured relative the ground. See luciad.reference.ReferenceProvidergetHeightAboveTerrainReference function documentation for more details.

ImprovementLuciadRIA

RIA-933
When using the LoadSpatially strategy, the FeatureLayer will no longer query the model when zooming in. This is because the features that were retrieved for the previous extent cover completely the area of the new extent.

ImprovementLuciadRIA

LuciadRIA now officially supports Microsoft Edge.

ImprovementLuciadRIA

Selection is now more accurate on touch devices.

ImprovementLuciadRIA

It is now possible to use LuciadRIA on heterogeneous devices that have both a mouse and a touch screen.

ImprovementLuciadRIA

Introduced the TrajectoryPainter for WebGL accelerated views. The TrajectoryPainter enables GPU based styling of trajectory lines, with time filtering and highlighting. See the "Trajectories" sample for an example.

ImprovementLuciadRIA

Introduced the ParameterizedLinePainter for WebGL accelerated views. The ParameterizedLinePainter enables GPU based filtering and styling of lines, with per-point styling, as well as visualizing density plots (heatmap). See the "Parameterized Lines" sample for an example.

ImprovementLuciadRIA

On WebGL maps, each painter can now enable density maps (heatmaps) using the FeaturePainter.density property. See the "Tracks" sample for an example.

ImprovementLuciadRIA

RIA-889
Configuring the WFSFeatureStore's reference and the FeatureModel's reference has now been made more transparent:
  • When a FeatureModel is constructed without explicitly setting the reference, it will borrow the reference from the WFSFeatureStore.
  • When the reference of the FeatureModel is not identical to the reference of its WFSFeatureStore, a warning will be logged to the console explaining this discrepancy. It is a restriction of the WFSFeatureStore that its reference is identical to the reference of the FeatureModel it is added to.

ImprovementLuciadRIA

LuciadRIA now has support for performing boolean operations on shapes. This functionality is part of the new optional component 'Geometry'.

ImprovementLuciadRIA

RIA-876
When editing a ShapeList, using the handle to translate a sub-shape will also translate all the other sub-shapes.

ImprovementLuciadRIA

Improved the performance and precision of several projections:
  • Albers Equal Area Conic
  • Azimuthal Equidistant
  • Cassini
  • Dutch Stereographic
  • Eckert IV and VI
  • Lambert Azimuthal Equal Area
  • Lambert Conformal
  • Mollweide
  • Oblique Mercator
  • Orthographic
  • Polyconic
  • Spherical Oblique Mercator
  • Stereographic
  • Swiss Oblique Mercator
  • Transverse Mercator

ImprovementLuciadRIA

RIA-862
It is now possible to calculate the shortest distance from a point to a line or line segment by using the shortestDistanceToLine method on Geodesy.

ImprovementLuciadRIA

LuciadRIA now has support for extruded shapes. Extruded shapes are 3D volumes created by extruding a 2D line or area with a minimum and maximum height. You can create an extruded shape using ShapeFactory.createExtrudedShape. The "Create and Edit" sample allows you to create an extruded shape based on a base shape using a context menu item.

ImprovementLuciadRIA

RIA-774
It is now possible style a GoogleLayer. Styling adheres to the [Styled Maps](https://developers.google.com/maps/documentation/javascript/styling) specification of the Google Maps JavaScript API.

ImprovementLuciadRIA

RIA-749
The WMS layers now sends the PIXELSIZE parameter when making requests to a WMS server. If the WMS server supports it, it can take the clients pixel size into account when determining scale ranges. The LuciadLightspeed WMS server supports this PIXELSIZE parameter. This way, the scale calculations in the RIA application and on the server can match.

ImprovementLuciadRIA

RIA-739
luciad/geodesy/GeodesyFactory#createCartesianReference now also accepts non-spatial references (created with luciad/reference/ReferenceProvider.createCartesianReference()) when creating Geodesy instances. Note that an Error will be thrown if you try to create a non-cartesian Geodesy instance with such a reference.

ImprovementLuciadRIA

RIA-779
The warning messages about a license that will expire soon are no longer shown in an alert box. Instead, this warning is now only printed on the console.

ImprovementLuciadRIA

You can now create references based on Well-Known Text strings. This means you can now support more references than those supported by ReferenceProvider.getReference(). See ReferenceProvider.parseWellKnownText for more details

ImprovementLuciadRIA

RIA-747
The slider in the Selection sample will now smoothly filter the data, while the user is dragging. Previously, the data was only filtered when the user released the slider.

ImprovementLuciadRIA

When a navigation restriction is set on the map with Map#restrictNavigationToBounds, and the user tries to pan the map outside the extent, the map shows visual feedback to show it has reached the edge or edges of the restriction. This feedback is a grey bulb that expands from one or more of the edges, getting larger the more the user tries to pan in the wrong direction.

ImprovementLuciadRIA

Added support for WMS GetFeatureInfo requests. You can get feature information on a certain view location by calling getFeatureInfo on WMSImageLayer or WMSTileSetLayer. Calling this method will perform a GetFeatureInfo request that matches what is painted in the view. luciad.view.image.WMSImageLayer and luciad.view.tileset.WMSTileSetLayer are new classes. If you do not need GetFeatureInfo requests, you can keep using the regular RasterImageLayer and RasterTileSetLayer.

ImprovementLuciadRIA

RIA-729
Added the EPSG:2319, EPSG:2320, EPSG:2321, EPSG:2322, EPSG:2323, EPSG:2324 and EPSG:2325 spatial references to the ReferenceProvider.

ImprovementLuciadRIA

It is now possible to convert any given point to a MGRS (Military Grid Reference System) coordinate using luciad.shape.format.MGRSPointFormat.

ImprovementLuciadRIA

Added the 'Number' unit of measure. This quantity kind of this unit is 'Dimensionless'. Use this unit if the values do not represent a physical quantity.

ImprovementLuciadRIA

RIA-644
The following spatial references are now supported: EPSG:5253, EPSG:5254, EPSG:5255, EPSG:5256, EPSG:5257, EPSG:5258, EPSG:5259, SR-ORG:7869, SR-ORG:7870, SR-ORG:7871, SR-ORG:7872.

ImprovementLuciadRIA

RIA-613
It is now possible to configure a background color for a WMSTileSetModel

ImprovementLuciadRIA

RIA-280
FeatureModel now has a bounds property. This property corresponds to the bounds of the entire dataset. This property is optional. This FeatureModel's bounds does not necessarily correspond to the bounds of the the data that is visualized in the FeatureLayer. This is because the layer may have queried only a subset of the data from the model. Instead, use the FeatureLayer.workingSet.bounds property to retrieve the bounding box of all the data that is queried by the FeatureLayer.

ImprovementLuciadRIA

RIA-518
It is now possible to change the styling of editing handle icons. See the "handleIconStyle" option in the EditController constructor.

ImprovementLuciadRIA

RIA-554
It is now possible to modify the opacity of a RasterTileSetLayer and a RasterImageLayer by setting their rasterStyle property.

ImprovementLuciadRIA

RIA-255
It is now possible to finish interactive shape editing or creation by single-clicking on the map background instead of double-clicking. This is demonstrated in the Create and Edit sample. See also documentation of CreateController or EditController.

ImprovementLuciadRIA

RIA-550
The selection heuristics have been improved when using the Map's pickClosestObject method. It is now easier to select by touch or mouse the correct object from a collection of overlapping shapes or icons of varying sizes. This is because the new heuristics also take into account the distances from the edge and from the center of the bounding box of the object, to the pick position.

ImprovementLuciadRIA

RIA-541
The findLayerTreeNodeById and the findLayerGroupById methods have been added to luciad.view.LayerTree.

ImprovementLuciadRIA

RIA-547
It is possible now to configure the paintRepresentation visibility of a LayerGroup in a LayerTree

ImprovementLuciadRIA

RIA-481
Two new events have been added to the Map. ShowBalloon and HideBalloon. These fire when a balloon opens and closes respectively.

ImprovementLuciadRIA

If the requestReference parameter of the WMSTileSetModel is used, a warning message will be logged to the console. This parameter was incorrectly documented in the API doc, and should not be used.

ImprovementLuciadRIA

RIA-471
It is now possible to add raster layers to a map, when the layer's model reference is not identical to the reference of the map. This is only possible when coordinates of the spatial reference system of the model can be converted to coordinates of the spatial reference system of the map by multiplying them with with a scaling factor. For example, this is useful if you have a LuciadRIA map configured with the EPSG:32663 reference (which uses an equidistant projection, and has a unit of measure in meters), but you would like to connect to the WMS server with the more commonly available OGC CRS:84 reference. In such a scenario, the WMSTileSetModel or the WMSImageModel may be configured with a bounds expressed in coordinates of the CRS:84 reference.

ImprovementLuciadRIA

It is now possible to request WMS images that cover the entire Map using a WMSImageModel. The size of this image matches the pixelsize of the map. This avoids certain visual effects, such as pixelized text or cut-off labels, that can occur when tiles are stretched or compressed using the existing WMSTileSetModel.

ImprovementLuciadRIA

It is now possible to visualize an object with an icon or an label on the border of the map using the optional FeaturePainter#paintBorderBody and FeaturePainter#paintBorderLabel methods. It is also possible to connect an object in a border with its position on the map using the optional IconStyle#stem line-style property.

ImprovementLuciadRIA

It is now possible to create, visualize and edit various additional shapes using the luciad.shape.ShapeFactory.
  • Circles: see luciad.shape.Circle. Circles are defined by center point and radius (luciad.shape.CircleByCenterPoint) or by three points on the circumference (luciad.shape.CircleBy3Points).
  • Ellipses: see luciad.shape.Ellipse. Ellipses are defined by center point, major axis length, minor axis length and major axis rotation azimuthal angle.
  • Circular arcs: see luciad.shape.CircularArc. Circular Arcs are defined by center point and radius (luciad.shape.CircularArcByCenterPoint), by start, intermediate and end points (luciad.shape.CircularArcBy3Points), or by two points and bulge (luciad.shape.CircularArcByBulge).
  • Elliptical arcs: see luciad.shape.Arc. Elliptical arcs are defined by an ellipse, a start azimuthal angle and an arc azimuthal angle.
  • Arc bands: see luciad.shape.ArcBand. Arc bands are sectors, defined by a center point, a minimum and maximum range, a start azimuthal angle and an arc azimuthal angle.
  • GeoBuffers: see luciad.shape.GeoBuffer. They are defined by a base shape, which can be a polyline or polygon, and a width.
The Create and Edit sample illustrates the new shapes. You can interactively create these shapes using the luciad.view.controller.CreateController and luciad.view.controller.BasicCreateController, and edit them using luciad.view.controller.EditController. The sample also shows how you can exchange these shapes with a web service using a custom JSON codec. Note that the new shapes are not covered by the GeoJSON standard and require a custom Codec.

ImprovementLuciadRIA

RIA-486
AirspaceShapeProvider now covers more edge cases and can handle any number of airspace-trajectory intersection points

ImprovementLuciadRIA

RIA-473
The following spatial references are now supported: EPSG:23035, EPSG:23036, EPSG:23037, EPSG:23038, EPSG:2206, EPSG:2207, EPSG:2207, EPSG:2208, EPSG:2209, EPSG:2210, EPSG:2211, EPSG:2212.

ImprovementLuciadRIA

RIA-459
KML now throws error messages and console warnings when KML files do not contain any Placemark features.

ImprovementLuciadRIA

RIA-406
It is now possible to invalidate a RasterTileSetModel using the "invalidate" method. This will signal that the underlying image tiles have changed. If this model is added to a map using a RasterTileSetLayer, calling this method will thus trigger a refresh of the visualization.

ImprovementLuciadRIA

RIA-441
It is now possible to configure the layers of a WMSTileSetModel using the "layers" properties of the model.

ImprovementLuciadRIA

RIA-433
Calling 'Polygon.insertPoint()' or 'Polyline.insertPoint()' now no longer copies the given point. This means that you now have more control over what is inside a polygon or a polyline. To make sure your points are not altered after an 'insertPoint()' call, make sure you copy them before you call 'insertPoint()'. Note that this does not affect previous usage of this method.

ImprovementLuciadRIA

We now support a PointLabelStyle with an offset that is an array instead of a number. This allows more precise labeling control in view space.

ImprovementLuciadRIA

We now support snapping for both creation and editing of shapes. Snapping is automatic if you edit near an existing point. Hold down the Ctrl modifier key to temporarily disable snapping. To make sure a FeatureLayer is not a snap target, set the FeatureLayer#isSnapTarget property to false.

ImprovementLuciadRIA

Support for KML has been added. You can load KML data using a luciad/model/kml/KMLModel, which can be visualized in a luciad/view/kml/KMLLayer. Please refer to the reference documentation for the list of supported features and limitations.

ImprovementLuciadRIA

It is now possible to insert and delete vertices when editing a polyline or polygon. Adding vertices can be done by activating the control point in the middle of a line segment of the shape. Deleting vertices is done by long pressing a vertex, holding the ctrl-key while clicking the vertex, or by selecting the delete option from the context menu.

ImprovementLuciadRIA

RIA-398
When setting a FeatureLayer's query property, the data in the layer's workingSet will not be cleared until the new model data has been loaded. This helps to avoid a "flicker" of the layer data on the map between the time the query property is set, and the time the result of the model has been retrieved.

ImprovementLuciadRIA

RIA-403
When the map is configured with a border, labels are now correctly positioned.

ImprovementLuciadRIA

RIA-391
When trying to paint labels for a feature which has no bodies, no TypeError should be thrown. The label will just be invisible in that case.

ImprovementLuciadRIA

RIA-279
The parameter of MapNavigator#panTo is now a "bounded" and not limited to be a point anymore.

ImprovementLuciadRIA

RIA-54
Now the CreateController for polylines and polygones adds a point on the double click that terminates the creation operation. A preview of the next point is also shown when you move the mouse.

ImprovementLuciadRIA

RIA-176
The painting order respects labels' priorities in a non-decluttered way.

ImprovementLuciadRIA

It is now possible to add Google image data to the map. To do this, construct a RasterImageLayer with a GoogleImageModel and add it to the map. Please review Google's terms of conditions carefully to determine if your application can use the Google Maps image service.

ImprovementLuciadRIA

It is now possible to add a Google Map widget inside a LuciadRIA map as a Layer. This requires you to also include the Google Map Javascript API (v3) on the page by importing it with a script tag.

ImprovementLuciadRIA

RIA-378
The map now emits an "idle" event. This event is fired when the map comes to rest, for example after a user has stopped panning.

ImprovementLuciadRIA

RIA-348
Adding rotation support to icons

ImprovementLuciadRIA

RIA-62
You can now select multiple objects by pressing the "Shift" key while selecting objects.

ImprovementLuciadRIA

RIA-100
luciad/view/Map#selectObjects() now allows adding and removing objects to and from the current selection.

ImprovementLuciadRIA

RIA-305
A function has been added to the TileSetScaleUtil to return the level of a RasterTileSetLayer's model which best correspond to the scale of the map.

ImprovementLuciadRIA

RIA-89
WMS Sample: Hitting enter in the Layer text field makes the same query as clicking on the 'Show WMS layer' button.

ImprovementLuciadRIA

RIA-347
It is now possible to retrieve the current status of a query from a FeatureLayer's WorkingSet using the queryStatus property.

ImprovementLuciadRIA

RIA-267
It is now possible to create new LayerGroups. This enables you to organize layers in the map's layerTree using multiple levels. Previously, layers could only be organized in a flat list.

ImprovementLuciadRIA

The EPSG:3306 coordinate reference is now supported. Use the ReferenceProvider#getReference method to retrieve the reference.

ImprovementLuciadRIA

It is now possible to mix default selection styling into an existing painter using the addSelection() method on FeaturePainterUtil.

ImprovementLuciadRIA

Renamed StrokeStyle literal to LineStyle literal for consistency reasons.

ImprovementLuciadRIA

Reduced poleward latitude limits of Mercator projection to avoid large empty polar areas on maps.

ImprovementLuciadRIA

RIA-313
Added support for CRS:83 (NAD 83) to the ReferenceProvider.

ImprovementLuciadRIA

RIA-312
When a bounds with a geodetic reference is wider than 360 degrees, the longitude (the "x" property) will no longer be snapped to the dateline (-180 degree). Removing this side-effect avoids having to perform some redundant normalization. Functionally, this has no impact on any of the other public API of LuciadRIA.

ImprovementLuciadRIA

To set the dimensions and position of a luciad.shape.Bounds object more efficiently, you can now use the new setTo2D and setTo3D methods.

ImprovementLuciadRIA

RIA-127
Improved documentation on the dependency on the dojo toolkit has been added to the Developer's Guide.

ImprovementLuciadRIA

RIA-254
The .painter property of a FeatureLayer is now no longer read-only. It is thus possible to set the painter of a FeatureLayer after the construction of the layer.

ImprovementLuciadRIA

It is now possible to use a pin to connect a label to an anchor point on the map. Use a new optional "pin" property on the luciad.view.style.PointLabelStyle to do so. See luciad.view.style.PinStyle and luciad.view.style.PinEndPosition for more details about the styling and placement properties of the pin.

ImprovementLuciadRIA

HTML and CSS can now be used to specify the contents and styling of a label. Using these technologies, it is possible to create labels with multiple lines of text, enable rich styling options for halos, colors and fonts, or embed external resources, like images, in the label. See the luciad.view.style.LabelCanvas for details on how to place HTML on the map.

ImprovementLuciadRIA

Support for generating a LuciadRIA FeaturePainter based on an OGC Symbology Encoding has been added. Please refer to the Developer's Guide for details on supported styling and limitations.

ImprovementLuciadRIA

RIA-204
It is now possible to configure a client-side feature filter on a layer. This filter determines what features in the layer's WorkingSet will be visualized. This filter can be a simple javascript function or an OGC filter created with luciad.ogc.filter.FilterFactory.

ImprovementLuciadRIA

It is now possible to set a minimum and maximum scale on the map. When set, it is impossible to zoom in further than the maximum scale or zoom out further than the minimum scale.

ImprovementLuciadRIA

It is now possible to constrain the navigation on the map to a bounds. When set, it is impossible for a user to pan or zoom the map beyond this area.

ImprovementLuciadRIA

RIA-275
It is now possible to draw a shape of type BOUNDS on the map by using the drawShape method of a luciad.view.style.GeoCanvas.

ImprovementLuciadRIA

RIA-273
The methods of the luciad.view.MapNavigator which trigger animations now return a promise (luciad/util/Promise) for the completion of the animation. This promise resolves when the animation has completed. The promise is rejected when the animation is interrupted.

ImprovementLuciadRIA

Support for dashed line styles has been added. These can be configured with the dash and dashOffset properties in luciad/view/style/LineStyle.

ImprovementLuciadRIA

RIA-224
Added documentation to the Developer's Guide: prerequisites for running Jetty server included in a LuciadRIA release.

ImprovementLuciadRIA

LuciadRIA now supports the visualization of non-georeferenced data in a chart. A vertical view sample is provided to illustrate the power of this enhancement. Please refer to the Developer's Guide to configure a non-georeferenced view.

ImprovementLuciadRIA

RIA-108
There have been several improvements in LuciadRIA for dealing with large datasets.
  • To avoid long running scripts and improve responsiveness of the application, the FeatureLayer will process the results of a model query in small batches.
  • Developers can now also enable incremental rendering by setting the FeatureLayer.options.incrementalRenderering flag to true. This way the visual representations of Features is processed in small batches, and drawn to the screen in small increments.
  • The Developer's Guide now includes a chapter on how to create applications when dealing with large datasets. This includes information on web caching strategies, as well as Javascript and LuciadRIA tips and tricks to improve performance.

ImprovementLuciadRIA

An example of how to display a WMTS Layer on a Map is added to the samples under samples/model/tileset/WMTS.

ImprovementLuciadRIA

RIA-208
WorkingSet, FeatureModel and Store now support registration of listeners that only receive events related to objects that match a query filter.

ImprovementLuciadRIA

In the WFSFeatureStore, it is now possible to filter properties from a feature when querying the model. This corresponds to adding the 'propertyName' parameter in a WFS getFeature request.

ImprovementLuciadRIA

RIA-169
The set of features loaded by a FeatureLayer can now be accessed via the workingSet property of the layer.

ImprovementLuciadRIA

The contains2D method has been added to the Shape class.

ImprovementLuciadRIA

RIA-113
TileSetModels can now be instantiated when the pixel-density of the width and height of its tiles are different. For example; the pixel width and the pixel height of a tile which measures 90 degrees longitude by 90 degrees latitude must now not be the same.

ImprovementLuciadRIA

RIA-101
In a FeatureLayer, it is now possible to control the order in which Features are visualized on a Map. A developer can specify this order by setting the zOrder parameters on the style objects which are accepted by the GeoCanvas paint methods.

ImprovementLuciadRIA

RIA-209
Improved context menu documentation.

ImprovementLuciadRIA

RIA-173
Clients can now subscribe to new events via the workingSet property of a FeatureLayer to get notified about the status of a query. These events include the QuerySuccess and QueryError events. The first notifies the client when the layer was successful in querying the model. The second notifies the client when an error occurred during querying the model.

ImprovementLuciadRIA

RIA-206
The fit() method on the MapNavigator no longer throws an exception if you call it with a bounds with zero width and height. Instead it assumes you will be fitting on a point and adapts the scale accordingly.

ImprovementLuciadRIA

It is now possible to add a Longitude-Latitude grid to your Map. Use a luciad.view.grid.LonLatGrid to define your longitude and latitude grid. Then, add it to the map using a luciad.view.grid.GridLayer.

ImprovementLuciadRIA

Samples have been refactored. Samples are now divided into two groups: one set of samples for desktop and tablet computers, and another for small screen mobile devices. All samples can be found under %MyProjectInstallation%/samples. The small-screen mobile samples are grouped under %MyProjectInstallation%/samples/mobile.

ImprovementLuciadRIA

It is now possible to format longitudes and latitudes to a text string. Create a luciad.shape.format.LonLatPointFormat to define a format. You can define your own custom patterns. Then, transform the longitudes and latitudes to a string using the .format() method.

ImprovementLuciadRIA

RIA-172
The luciad.ogc.filter.FilterFactory now allows to create OGC functions.

ImprovementLuciadRIA

It is now possible to use fill patterns as fill for shapes by passing a luciad.view.style.FillStyle instance as fill in the GeoCanvas#drawShape method. For convenience, the luciad.view.style.HatchedImageBuilder class has been introduced which allows to create hatched pattern images programmatically.

ImprovementLuciadRIA

RIA-174
Added mapBounds property to luciad.view.Map. This property reflects the map's extent in the maps' reference.

ImprovementLuciadRIA

RIA-68
Hibernate logging in sample server is significantly reduced. All logging is now configurable through samples/resources/jetty-logging.properties.

ImprovementLuciadRIA

halo and haloWidth are now available when defining text styles. Please refer to the documentation of the drawText method in luciad/view/style/GeoCanvas.

ImprovementLuciadRIA

LuciadRIA now supports querying and visualizing feature data from an OGC Web Feature Service (WFS). A new class luciad/model/feature/WFSFeatureModel allows to retrieve feature data in the GeoJSON format from an OGC WFS 1.0/1.1. Data queries can be formulated using the OGC Filter specification, enabling users to perform a fine-grained selection of the required data. A new module luciad/ogc/filter has been added to support the creation of these OGC Filter queries. See the "WFS sample" for a demonstration of the new functionality.

ImprovementLuciadRIA

LuciadRIA now supports decluttered labeling. This allows you to easily visualize textual information on a map while maintaining readability. You can define labeling-strategies by implementing the paintLabel method from a luciad/view/feature/FeaturePainter. See the "Labeling sample" for a demonstration of the new functionality.

ImprovementLuciadRIA

The rendering performance of raster and vector data has been improved significantly. The raster tile loading is now much smoother and vector features are rendered up to 3 times faster.

ImprovementLuciadRIA

Improved pickAt documentation.

ImprovementLuciadRIA

RIA-4
Tiles painting improvements: enhancements in the detection of the appropriate level of detail.

ImprovementLuciadRIA

RIA-106
General optimizations in discretization and shape code.

ImprovementLuciadRIA

RIA-98
Small optimizations to polygon rendering.

ImprovementLuciadRIA

LuciadRIA is a new Luciad product providing an easy-to-use, object-oriented JavaScript API designed to build geospatial situational awareness applications targeted to run in a browser.

ImprovementAdvanced GIS Engine

LuciadRIA now has support for performing boolean operations on shapes. In order to do so, you can use a ConstructiveGeometry object. ConstructiveGeometryFactory allows you to create ConstructiveGeometry objects performing boolean operations using a cartesian, spherical or ellipsoidal topology.

The following operations are supported:

  • Union
  • Intersection
  • Difference

ImprovementDefense Symbology

WebGLMap now supports tactical graphics.

ImprovementDefense Symbology

RIA-2196
For improved packability, you can now load your symbology by importing luciad/symbology/military/<SymbologyName> as a module, instead of through the SymbologyProvider. Loading a symbology with the SymbologyProvider has been deprecated.

ImprovementDefense Symbology

RIA-1815
We now display the T modifier label for all symbols.

ImprovementDefense Symbology

RIA-920
It is now possible to set the affiliation of a symbol with all the affiliation values defined in the standard. The affiliation values for some symbols are limited by the symbology standards and if you want to stick to the standard (e.g. a listing in a GUI) you can still invoke the luciad/symbology/military/MilitarySymbol#possibleValues method to obtain the available affiliation values for a specific symbol.

ImprovementDefense Symbology

RIA-1050
The readability of the Military Symbology sample code has been enhanced by moving the clustering related code to the SymbologyClusteringManager class.

ImprovementDefense Symbology

It is now possible to load a luciad/symbology/Symbology without using the AMD-plugin method. Instead, you can now just call luciad/symbology/Symbology#getSymbology to retrieve a Symbology for a given code.

The advantage of loading symbologies with this approach is that it does not rely on the AMD-plugin API. This API is generally well supported when using build-tools from the AMD ecosystem, but may not be well supported with other toolchains or JS module systems.

ImprovementDefense Symbology

Military symbols now show movement direction arrows.

The following modifiers affect the arrows:

  • "movementDirection": a number indicating the heading of the object. Must be an azimuth: degrees, clock-wise, 0 is north.
  • "speedLabel": a string expressing the movement speed, for example "17 km/h" or "11 kn". Affects the length of the arrow. Only relevant for APP-6C and MIL-STD-2525C.

Ground units will have an arrow starting from a vertical stem.

The length of the arrow is determined by the existing style property "iconSize" in combination with the "speedLabel" modifier if available. The line-width of the arrow is determined by the existing style properties "lineWidth".

ImprovementDefense Symbology

RIA-1328
Military symbols can now be painted in a 3D map without draping on terrain. This is mostly used for icon symbols to get orient them towards the viewer instead of flat on the ground.

ImprovementDefense Symbology

RIA-578
The deploy script of the Symbology Service servlet can now also create an obfuscated version of the Symbology Service. This makes it possible to use deployment licenses requiring obfuscation.

ImprovementDefense Symbology

RIA-950
It is now possible to configure the MilitarySymbologyPainter to include cookies as part of CORS requests to the symbology service.

ImprovementDefense Symbology

The Symbol.AffiliationColorEnabled property is now available, and enabled by default.

ImprovementDefense Symbology

Support for the military standard APP-6C has been added. It is now possible to create and visualize MilitarySymbol instances using the new 20-digit SIDC codes. luciad.symbology.SymbologyProvider also exposes the new domain hierarchy.

ImprovementDefense Symbology

It is now possible to use a Polygon, CircularArc, Arc, ArcBand, Circle, Ellipse, GeoBuffer, ComplexPolygon or ShapeList as geometry for a line-shaped or area-shaped tactical symbol. The supportsShapeType method in SymbologyNode can be used to check whether a shape type is suitable for a symbol.

ImprovementDefense Symbology

There is now visualization support for all APP-6 (A/B) and MIL-STD-2525 (B/C) objects, including tactical line-based symbols. In addition, interactive creation and editing is also supported for all symbols.

Relevant components are located in the luciad.symbology namespace. Important modules are:

  • luciad.symbology.SymbologyProvider: an AMD plugin which allows you to load a particular symbology standard
  • luciad.symbology.military.MilitarySymbologyPainter: a configurable painter for military symbols.

Bug fixLuciadRIA

RIA-2980
WFSFeatureStore.createFromCapabilities() and WFSFeatureStore.createFromURL() now take into account options.methods. Before this fix, only methods returned in the server's capabilities response were used.

Bug fixLuciadRIA

RIA-2972
Fixed WMTSTileSetModel.createFromCapabilities() and WMTSTileSetModel.createFromURL() so that these methods will now create a model with a bounds that corresponds with the TileMatrixSet defined in the server's capabilities response. If the TileMatrixSet does not explicitly define the bounds, one will be deduced from the TileMatrices in the set. Before this fix, it was possible that image data was positioned incorrectly on the map.

Bug fixLuciadRIA

RIA-2976
Fixed an issue where adding a world covering WMSTileSetModel in a WebMercator reference resulted in missing terrain data near the dateline.

Bug fixLuciadRIA

RIA-2951
Fixed an issue where the touch controls were not working in desktop versions of Chrome (version 70 and later).

Bug fixLuciadRIA

RIA-2963
Fixed a problem with duplicated dependency in `WFSFeatureStore` that prevents executing the babelify utility on LuciadRIA code.

Bug fixLuciadRIA

RIA-2929, RIA-2970
The logic to skip drawing complex stroke's decorations is now the same both on a Map and on a WebGLMap. A non-gap decoration is skipped when:
  • it goes outside the beginning or the end of the line (unless the decoration is placed at the beginning or at the end of the line)
  • it overlaps with a previous decoration
Before the fix, decorations in such cases on a software-rendered maps were drawn being shifted along the line.

Bug fixLuciadRIA

RIA-2919
Fixed a problem with drawing a label pin when the pin style is defined with endPosition set to PinEndPosition.MIDDLE_BORDER. Before, the label pins were showing up and disappearing erratically when labels were repainted.

Bug fixLuciadRIA

RIA-2930
The labelStyle.priority is now respected when drawing labels for selected features. Before the fix, the priority property was disregarded by the de-cluttering mechanism when drawing labels for selected features. In such situations the order of calling label commands determined the visibility of labels.

Bug fixLuciadRIA

RIA-2931
Fixed situations where shadows could be cast by terrain on objects underneath it, even when it would be displaced and visually not occluding. This was for instance possible with TileSet3DLayer, combined with the offsetTerrain flag.

Bug fixLuciadRIA

RIA-2909
Fixed an issue where the builder script couldn't be run due to usage of the browser specific window variable in MapLoader in the samples.

Bug fixLuciadRIA

RIA-2892
Fixed the handling of an empty WMTS layer style identifier in WMTSTileSetModel.

Bug fixLuciadRIA

RIA-2889
Handle case when WMS 1.3.0 service use incorrect XML property for reference (SRS instead of CRS)

Bug fixLuciadRIA

RIA-2891
Fixed parsing bounds with swap axis in WMSCapabilities for WMS 1.3.0

Bug fixLuciadRIA

RIA-2884
Fixed an issue where GML data is incorrectly decoded when LinearRing, LineString or LineStringSegment geometry is defined with gml:pos elements.

Bug fixLuciadRIA

RIA-2700
Fixed TileSet3DLayer not logging its warning when memory budget does not allow it to fully load a dataset at its requested quality factor.

Bug fixLuciadRIA

RIA-2837
Fixed an issue in the contains2D functions on a lon-lat geo buffer. When using a polyline with more than 4 points as base shape, testing a point that is within the bounds of the buffer, but not within the buffer itself caused an error. This is now resolved.

Bug fixLuciadRIA

RIA-2828
Fixed an issue when layer's loading strategy rejects to reload features after zooming in and out on a map so that strategy's scale levels change back and forth, and one of the scale levels defines the query object with QueryProvider.QUERY_NONE.

Bug fixLuciadRIA

RIA-2814
Fixed an issue for OGC 3D Tiles datasets where the nodes had multiple primitives per mesh, it would occasionally cause a misaligned low-level buffer to be generated, causing missing tiles in the dataset.

Bug fixLuciadRIA

RIA-2300
KML polygon outlines are now painted on the same level as the polygon's area. Previously outlines were sometimes painted above other polygons.

Bug fixLuciadRIA

RIA-2811
When performing a WMS GetFeatureInfo operation, the SLD, SLD_BODY, STYLES and dimensions parameters are now also present in the request. This ensures that GetFeatureInfo requests match the GetMap requests performed by the Map.

Bug fixLuciadRIA

RIA-2794
Fixed an issue of drawing on-path and in-path labels on WebGL maps from a controller ( Controller.onDrawLabel() API). Before the fix the on-path and in-path labels were not repainted where the underlying geometry has changed.

Bug fixLuciadRIA

RIA-2792
Fixed issue with PerspectiveCamera.lookFrom where the camera's direction was not correctly determined when lookFrom.eye was different from the camera's worldReference.

Bug fixLuciadRIA

RIA-2646
Added the CassiniSoldner projection which allows Ellipsoidal computation for Cassini projections.

Bug fixLuciadRIA

RIA-2788
Fixed issue with shadows not disappearing when you made a layer invisible.

Bug fixLuciadRIA

RIA-2777
GMLCodec decodes now the gml:MultiPoint geometry to a LuciadRIA ShapeList containing Points.

Bug fixLuciadRIA

RIA-2782
Fixed a problem when a selected feature was losing its selection representation on a WebGLMap. This situation used to happen in certain map configurations when after panning a selected feature got invisible and then visible again.

Bug fixLuciadRIA

RIA-2784
Fix for excessive memory usage when drawing shapes filled with an image pattern, that is frequently resized. Before the fix image patterns of various sizes were cached without pruning.

Bug fixLuciadRIA

RIA-2705
The depth-of-field graphical effect is now also applied to partially transparent objects.

Bug fixLuciadRIA

RIA-2250
Fixed an issue where point clouds could be painted with very small points if other layers were added behind them.

Bug fixLuciadRIA

RIA-2771
Fixed an issue where shapes that were painted "above terrain" would not be updated entirely when a TileSet3DLayer was set invisible. In practice, they were updated correctly, but one additional repaint frame was needed to get the results on screen.

Bug fixLuciadRIA

RIA-2766
Reduced memory usage for each FeatureLayer on a WebGLMap, even if empty. This effect is noticeable when adding many (100+) layers on your map.

Bug fixLuciadRIA

RIA-2769
Fixed an issue when using terrain offset in combination with 3D tiles data (see TileSet3DLayer option offsetTerrain). There was a regression in 2019.0 that caused gaps would appear at the edges of the offset area. Note that you can still have gaps at the edge of your screen if you navigate very close to the offset terrain.

Bug fixLuciadRIA

RIA-2764
View-sized lines no longer cast a shadow. The reason is because their width depends on the camera position, casting a shadow did not make sense.

Bug fixLuciadRIA

RIA-2577
Fixed a problem where in-path labels (LabelCanvas.drawLabelInPath API) were not drawn on a hardware-accelerated map if the shape's body was painted without a fill style.

Bug fixLuciadRIA

RIA-2751
Fixed an issue when displaying polygons that are vertical (i.e. exactly perpendicular to the ellipsoid). Such polygons had triangle-shaped artifacts and holes.

Bug fixLuciadRIA

RIA-2620
Fixed a problem of drawing a complex polygon that contains a single shape crossing the date line.

Bug fixLuciadRIA

RIA-2747
Fixed a problem with encoding the wildCard and escapeChar attributes of the OGC is like filter (created by FilterFactory.like API) in WFS requests.

Bug fixLuciadRIA

RIA-2739
Fixed a problem with a predicate function created by FilterFactory.toFeaturePredicate API, that is based on an OGC IsLikeOperator filter (created by FilterFactory.like) where the predicate function disregards the filter's matchCase attribute.

Bug fixLuciadRIA

RIA-2480
Fixes an instance where TransformationFactory.createTransformation threw an error

Bug fixLuciadRIA

RIA-1435
Performance of the clustering functionality has been improved by avoiding to re-cluster features when panning in a 3D view or when the map scale has not changed significantly.

Bug fixLuciadRIA

RIA-2696
Fixed an issue where RIA would call the constructor of LayerTreeNode subclasses with invalid arguments.

Bug fixLuciadRIA

RIA-1718
Fixed a problem in the clustering functionality when it is not possible to override the default noClustering parameter by a class specific configuration. This situation happens when a ClusteringTransformer is defined with defaultParameters.noClustering set to true.

Bug fixLuciadRIA

RIA-2698
Fixed an issue where it was difficult to select lines that overlap with polygons on a WebGLMap.

Bug fixLuciadRIA

RIA-1399, RIA-1637, RIA-2530
Fixed issue where large icons could not be used in WebGL view. The icons are resized according to the size specified by the user or the maximum supported size before they are drawn on the map. Additionally, a message that states this is logged in the browser's console.

Bug fixLuciadRIA

RIA-2692
The "Projection" sample no longer needs the "swapAxes" flag on the WMS models for the "Lambert Azimuthal Equal Area" and "Transverse Mercator" projections. Both LuciadRIA and LuciadFusion apply to correct axis ordering for these projections.

Bug fixLuciadRIA

RIA-2458
Fixed a problem in a software-rendered map when a complex stroke style, defined with decorations and a regular pattern of a relative length, is incorrectly drawn. In this case, decorations reduce the available space which would cause the regular pattern not to fit anymore.

Bug fixLuciadRIA

RIA-2479
Fixed a problem in canvas maps when a complex stroke's elliptical arc, defined with an ArcPattern, was drawn as a circle arc.

Bug fixLuciadRIA

RIA-2523
Fixes incorrect z value of Shape#focusPoint for bounds and certain other shapes in 3D maps

Bug fixLuciadRIA

RIA-2547
GMLCodec will throw an error when the reference of decoded data is not recognized, instead of defaulting to the reference WGS:84. When such a situation happens, please register the unrecognized reference first, using ReferenceProvider.addReference(ReferenceProvider.parseWellKnownText(wkText, authorityName, authorityCode)).

Bug fixLuciadRIA

RIA-2460
Controller labels can be now de-conflicted together with other labels. When a controller draws labels with LabelStyle.group explicitly set to "DEFAULT" or a group that is used with other labels then the labels drawn by the controller are subject to the de-cluttering mechanism. By default controller labels are drawn on top of other labels.

Bug fixLuciadRIA

RIA-2308
Labels drawn by a controller are now placed above drawings painted by the controller.

Bug fixLuciadRIA

RIA-2601
Fixed an issue when the BBOX filter used for WFS spatial queries is out of accepted range. The problem used to happen when the view bounds crosses the anti meridian.

Bug fixLuciadRIA

Fixed an issue where the map would flicker when you resize the browser in Edge.

Bug fixLuciadRIA

RIA-2612
Fixed an issue where a 3D WebGLMap resulted in a black screen when using an Intel HD GPU on a 4K monitor on Chrome.

Bug fixLuciadRIA

RIA-2590
The matchCase attribute of the "is like" filter expression created by FilterFactory.like is now properly encoded in query requests.

Bug fixLuciadRIA

RIA-2578
WKTReferenceParser didn't interpret the latitude origin for Cassini projections correctly. This also impacted ReferenceFactory for EPSG references EPSG:2314, EPSG:3068, EPSG:3140, EPSG:3377-3385, EPSG:4390-4398, EPSG:24500, EPSG:28191, EPSG:28193 and EPSG:30200.

Bug fixLuciadRIA

RIA-2579
Fixes a problem with corrupted balloon's anchor when a feature does not exist in the layer's model.

Bug fixLuciadRIA

RIA-2573
Fixes a bug in EllipsoidalGeodesy and SphericalGeodesy that would yield incorrect results when using the distance3D method.

Bug fixLuciadRIA

RIA-2576
Fixes Methods of GeoJsonCodec missing in TypeScript def have been added

Bug fixLuciadRIA

RIA-2572
Fixes a bug that prevented luciad.transformation.LocationMode from being used in TypeScript

Bug fixLuciadRIA

RIA-2571
Fixes TileSetAttributionProvider#getAttributionStrings being mentioned as TileSetAttributionProvider#getAttributionString in the Typescript def, making it impossible to use that method when using Typescript

Bug fixLuciadRIA

Restoring the tilt (pitch) of the camera in 3D WebGLMaps using right mouse drag didn't work well

Bug fixLuciadRIA

RIA-2481
Correction in documentation code snippets related to 3D tiles layers construction.

Bug fixLuciadRIA

RIA-2533
Fixed problem with performance of drawing partially visible complex stroke lines on canvas maps.

Bug fixLuciadRIA

RIA-2532
Partially visible lines with dash pattern are now drawn without visual artifacts when panning or zooming on canvas maps.

Bug fixLuciadRIA

RIA-2527
Balloons for features above terrain appear now in expected place.

Bug fixLuciadRIA

RIA-2529
You can use FeaturePainterUtil to apply selection on lines with complex stroke style.

Bug fixLuciadRIA

RIA-1636, RIA-1411
You can now configure outsideTimeRangeWeight on TrajectoryPainter. This option configures the weight in the density map of parts of lines that are outside of the configured time window. The default is 0.01, resulting in the same visualization as before. Setting this option to 0 completely removes parts outside of the time window from the density.

Bug fixLuciadRIA

RIA-2521
Fixed an issue when query requests are called twice on adding a layer to a map.

Bug fixLuciadRIA

RIA-2513
Fixed an error in the documentation of BasicCreateController.onObjectCreated. It did not indicate that it might return a Promise<Boolean> as well as a Boolean.

Bug fixLuciadRIA

RIA-2505
Fixed an issue when KML data is incorrectly decoded above terrain.

Bug fixLuciadRIA

RIA-1602
Improved the accuracy of the curvature of the top and bottom plane of large extruded shapes.

Bug fixLuciadRIA

RIA-2482
In some cases, parts of the outline of polygons was missing in 3D. This is now resolved.

Bug fixLuciadRIA

RIA-2483
Fixed an issue where the AirspaceShapeProvider returned a faulty result when the trajectory ended on the border of an airspace

Bug fixLuciadRIA

Fixed an issue with devices that support touch events. On these devices, a larger interaction radius would also be used when editing with the mouse. Now, the larger interaction radius is only used for touch events.

Bug fixLuciadRIA

RIA-1602
The accuracy of the top and bottom of extruded shapes along the earth's curvature was increased. This avoids some intersection with terrain. Note that extruded shapes can still intersect with terrain because of low-quality terrain, or because the bottom is actually lower than the terrain itself.

Bug fixLuciadRIA

RIA-2469
Releasing handlers to ShapeProvider when FeatureLayer is removed from a map.

Bug fixLuciadRIA

RIA-2261
Fixed an issue in the label de-cluttering algorithm when the padding property defined in a label style was not correctly used. The padding is used to apply an invisible border around labels so that de-cluttering algorithm has more chances to reject neighboring labels.

Bug fixLuciadRIA

RIA-2467, RIA-2917
Fixed an issue with fitting on bounds that have (near) 0 width/height, when using a WebGLMap. This issue was a regression, introduced by improvement RIA-2276.

Bug fixLuciadRIA

RIA-2471
Fixed an issue when using elevation data defined in feet instead of meters. In some cases, combining this elevation with an imagery tileset resulting in wrong elevation.

Bug fixLuciadRIA

RIA-2463
Fixed an issue when incorrect level-of-detail bounds is computed in certain situations for spatial queries when a layer uses LoadSpatially strategy on 3D maps with multiple scale levels.

Bug fixLuciadRIA

RIA-2337
Fixed an issue when draping content defined in a non-WGS84 geodetic datum and ellipsoid. Floating draped content could happen when you had a combination of layers (elevation, imagery or vector) specified in a WGS84 and non-WGS84 geodetic datum.

Bug fixLuciadRIA

RIA-2440
Fixed a bug where EPSG:3996 would be misrepresented.

Bug fixLuciadRIA

RIA-2455
Fixed an issue when painting selected lines painted with TrajectoryPainter. These selected lines didn't apply the head and trail highlighting effect. Instead it used to paint the line with a single solid color.

Bug fixLuciadRIA

RIA-2453
Fixed an issue with memory leak when destroying a map. FeatureLayer releases now its underlying WorkingSet object.

Bug fixLuciadRIA

RIA-2343
EditController and CreateController now draw labels for features being created and edited.

Bug fixLuciadRIA

RIA-2445
Fixed an issue when feature layers with different references based on a Well Known Text are incorrectly displayed.

Bug fixLuciadRIA

RIA-2444
Fixed an issue with MapNavigator.rotate. It would throw an error if the 3D globe was not under the top-left pixel of the map.

Bug fixLuciadRIA

RIA-2439
Fixed an issue with alignment of multi-line text drawn by geoCanvas.drawText in WebGL maps. The TextStyle.textAnchor property controls how every element of a multi-line text is horizontally aligned.

Bug fixLuciadRIA

RIA-2438
Fixed an issue in WebGL maps when a multi-line text drawn by geoCanvas.drawText overlap each other.

Bug fixLuciadRIA

RIA-2427
Fixed an issue when painting a feature with 3 or more icons. In that case, you could get errors resulting in obsolete icons stuck on the screen, or icons not showing up.

Bug fixLuciadRIA

RIA-2428
Fixed an issue where the lon/lat boundaries calculation of some projections (Dutch stereographic, stereographic and Albers equal-area conic projections) failed.

Bug fixLuciadRIA

RIA-2226
Fixed an issue where NodeJS imports (require('fs'), require('path') and require('crypto')) are included when importing a WebGLMap. While these require calls were never evaluated, module bundlers would complain about them (as they can not resolve these modules).

Bug fixLuciadRIA

RIA-2306
Fixed an issue in 3D maps where labels created by a controller jump between possible positions.

Bug fixLuciadRIA

RIA-2416
type: Removed the zOrder setting from ParameterizedPointPainter and ParameterizedPointStyle. These were accidentally made public, but didn't have any effect. They can't have effect because of how the technical implementation works.

Bug fixLuciadRIA

RIA-2364
The wave pattern with a relative width is now correctly painted in canvas maps.

Bug fixLuciadRIA

RIA-2314
Fixed an issue where bounds larger than 180 degrees wide were painted incorrectly on a WebGLMap.

Bug fixLuciadRIA

RIA-2363
The arrow pattern is now correctly painted in canvas maps when a complex stroke style object contains different colors for line and fill properties.

Bug fixLuciadRIA

RIA-2292
Fixed an issue where errors were thrown when editing geometry with many co-located points.

Bug fixLuciadRIA

RIA-2413
Fixed an issue where, in some cases, creating a bounds with clicks would not stop immediately when releasing the mouse button.

Bug fixLuciadRIA

RIA-2315
Fixed issues with creating and editing geodetic bounds across the dateline.

Bug fixLuciadRIA

RIA-2310
The map's scale now takes into account projection's unit of measure into account.

Bug fixLuciadRIA

RIA-2370
Fixed a case where editing of military symbols with hatch patterns, icons and labels on a WebGLMap would result in an inconsistent state.

Bug fixLuciadRIA

RIA-2352
Fixed additive refinement not properly loading data in some cases, for OGC 3d tiles.

Bug fixLuciadRIA

RIA-2349
Fixed a regression with certain GLTF files where you would get an error message stating that setPosition is undefined.

Bug fixLuciadRIA

RIA-2335
Fixed an problem when painting multiple icons for a single feature in a WebGLMap. In some cases, this resulted in an error, and possibly some discrepancies on the screen: missing icons or too many.

Bug fixLuciadRIA

RIA-2302
Fixed the parsing of color information in KML files. Previously, certain colors would be parsed as numbers instead of strings, causing certain placemarks to be the wrong color. All colors are now properly parsed as strings instead.

Bug fixLuciadRIA

RIA-2318
classList polyfill has been re-added to the sample code, because classList support is only partial in IE11, and this caused the LayerControl in IE11 to behave incorrectly in 2018.0+

Bug fixLuciadRIA

RIA-2309
Fixed problem with maxFeatures parameter in WFSFeatureStore when WFS version is "2.0.0" or greater. LuciadRIA now sends the WFS GetFeature request with COUNT parameter when a user wants to limit the number of features returned from WFS service. For more details, please consult WFSFeatureStore.query and WFSFeatureStore.spatialQuery API.

Bug fixLuciadRIA

RIA-1296
Preventing from executing multiple parallel WFS requests when a map uses LoadSpatially strategy.

Bug fixLuciadRIA

RIA-1134
Extruded shapes with a line as base shape (polyline, arc or circular arc) were not filled, even when using a fill style. This is now resolved. The sides of extruded lines are now filled. The top and bottom of the extruded line is not filled of-course.

Bug fixLuciadRIA

RIA-2286, RIA-2039
In some cases, extruded shapes with a line as base shape (polyline, arc or circular arc) could become closed when they were big (larger than 2 degrees). This is now resolved. Extruded lines are never closed.

Bug fixLuciadRIA

RIA-2289
Default type for model descriptor of image & tileset models should always be RasterDataType.IMAGE. This wasn't the case and has been changed by this fix

Bug fixLuciadRIA

RIA-2283
Fixed problem with measuring label text size when font changes.

Bug fixLuciadRIA

RIA-2271
Fixed an issue in WebGLMap when using icons with offsets larger than 128, or anchors larger than 256. The offsets and anchors were clamped to these ranges. Now, they can be much larger.

Bug fixLuciadRIA

RIA-2024
The outlines of extruded shapes with no fill are now properly painted in 3D. Before, only the base shape was painted in this case.

Bug fixLuciadRIA

RIA-2275
Fixed an issue where an Error was thrown when the user clicked outside of the Map's projection bounds while creating a Bounds shape.

Bug fixLuciadRIA

RIA-2267
Using subdomains in a WMSTileSetModel now works as expected. Before this fix, the WMSTileSetModel constructor would throw an error when you tried to specify a getMapRoot with a subdomain pattern.

Bug fixLuciadRIA

RIA-2264
Fixed TypeScript definition & documentation for Pointlabelstyle, PinStyle & TextStyle:
  • widths for TextStyle & PinStyle are now defined as number instead of string in docs & Typescript def, in correspondence with other numeric widths in LuciadRIA
  • Typescript def now requires position property to be a valid PointLabelPosition or array of PointLabelPositions
  • docs not also mention position property should be a valid PointLabelPosition or array of PointLabelPositions
  • docs now correctly mention PointLabelPosition.NORTH & PointLabelPosition.SOUTH instead of PointLabelPosition.ABOVE & PointLabelPosition.BELOW

Bug fixLuciadRIA

RIA-2263
Fixed a faulty AMD module import resulting from RIA-2238

Bug fixLuciadRIA

Fixed TypeScript definition for Layer.getModelBoundsVisibleOnMap(). It should be a function returning a Bounds, not a property of type Bounds.

Bug fixLuciadRIA

RIA-2259
Documentation & TypeScript declaration for Store#remove previously mention String, Number or a Promise to String / Number as possible return values while actual implementations returned Boolean or Promise to Boolean. Documentation & TypeScript declaration have been changed to correspond with implementations.

Bug fixLuciadRIA

RIA-2255
Fixed an issue where image tiles were not always refined when zooming in. This issue showed up when using a Web Mercator tileset in WebGL.

Bug fixLuciadRIA

Fixed TypeScript definition for RasterTileSetModel.getImage. The onError callback takes 2 arguments, not one.

Bug fixLuciadRIA

Added Typescript missing definitions for UrlTileSetModel.

Bug fixLuciadRIA

RIA-2240
Improved stability and flexibility of 3d tiles metadata decoding capability's detection. It now accounts for empty lines / spaces / tabulations before the json body.

Bug fixLuciadRIA

RIA-2238
Fixed an issue with multitouch gestures on devices that support force touch (aka 3D touch). You had to apply a lot of pressure before the gesture was recognized.

Bug fixLuciadRIA

RIA-2237
GMLCodec has been added to Typescript definition file.

Bug fixLuciadRIA

Fixed an issue with the TypeScript definition for Controller.onKeyEvent. This function accepts a KeyEvent, not a GestureEvent.

Bug fixLuciadRIA

RIA-478
Fixed an issue with freezing application for a while when model's Store does not return a feature id in reaction to CRUD operations.

Bug fixLuciadRIA

RIA-2221
Fixed an issue with getting duplicated features when KMLModel is re-queried.

Bug fixLuciadRIA

RIA-2223
Fixed problem with rendering features drawn by ParameterizedLinePainter when the shapes reference is the same as the map reference.

Bug fixLuciadRIA

RIA-2024
Use the default color for drawing lines when LineStyle.color property is set to null.

Bug fixLuciadRIA

RIA-2197
Improved support and performance for 3D tiles dataset, mainly ones having tiles with large triangle count.

Bug fixLuciadRIA

RIA-2195
Errors that are related to HTTP request that may occur when creating OGC3DTilesModel are reported now in the rejected promise as RequestError object.

Bug fixLuciadRIA

RIA-2200
Fixed problem with setting PointCloudStyle.scalingMode. Now it is possible to use ScalingMode.PIXEL_SIZE mode for point cloud data visualization.

Bug fixLuciadRIA

Added TypeScript definition for FeaturePainter.invalidateById.

Bug fixLuciadRIA

RIA-2121
Fixed an issue with setting a style for Circular Arc and Circle shapes in BasicFeaturePainter.

Bug fixLuciadRIA

RIA-2137
Vertical alignment of DrawText now works correctly for multiline texts in WebGL maps

Bug fixLuciadRIA

Fixed TypeScript definition: The subdomains option for UrlTileSetModel's constructor is now correctly marked as optional.

Bug fixLuciadRIA

RIA-2046
Fixed an issue in WebGL maps of showing on-path labels associated with relatively short geometries.

Bug fixLuciadRIA

RIA-2131
Symbology Encoding painter supports Rotation parameter when drawing image symbols.

Bug fixLuciadRIA

RIA-2130
Corrected an issue where LuciadRIA threw an error when invalidating a RasterImageModel or when altering a property of WMSImageModel.

Bug fixLuciadRIA

RIA-2122
Double-clicking on a layer in the LayerTreeControl outside of the label has been re-enabled. Double-clicking is now disabled only for the "visibility" & "more actions" buttons. This prevents the fit being accidentally triggered when clicking these buttons while still allowing a fit by double-clicking anywhere else on the layer.

Bug fixLuciadRIA

Added TypeScript definition for ShapeType.SECTOR.

Bug fixLuciadRIA

Added documentation on ContextMenu.items for items that are separators. Also updated the TypeScript definition for ContextMenuItem.

Bug fixLuciadRIA

Added TypeScript definitions for static functions on luciad/util/Promise.

Bug fixLuciadRIA

Added Controller.onDrawLabel to RIA's TypeScript definition.

Bug fixLuciadRIA

RIA-1696
Fixed green atmosphere painting when using a WebGLMap with Firefox 51 or later.

Bug fixLuciadRIA

RIA-1822, RIA-1837
Fixed an issue when labels were not rendered for geometries that were close or over the horizon in 3D views.

Bug fixLuciadRIA

RIA-2069
Fixed an issue where features were not rendered correctly in Webmercator with non-0 central meridian.

Bug fixLuciadRIA

RIA-2080
Fixed an issue when using a polar stereographic projection with a true scale latitude almost on the pole as world reference wouldn't work.

Bug fixLuciadRIA

RIA-1973
The point visibility check is improved for 3D scenes. In certain cases Map.mapToViewTransformation.transform() could throw OutOfBoundsError for a visible 3D point.

Bug fixLuciadRIA

RIA-2107
Fixed an issue where bounds could not be created using ShapeFactory.createShape, and by extension the BasicCreateController.

Bug fixLuciadRIA

RIA-2106
In the ECDIS Sample, changes to Shallow Contour, Safety Contour and Deep Contour in the UI are now propagated to the SLD that is sent to the server. At startup, the correct buttons are now made active.

Bug fixLuciadRIA

Fixed an issue where artifacts (holes) were visible on edges between adjacent raster tiles.

Bug fixLuciadRIA

RIA-2089
Fixed an issue with License#loadLicenseFromUrl. This method of loading the license broke by changes introduced for RIA-2005 (in 2017.1.03).

Bug fixLuciadRIA

RIA-2083
Fixed an issue in the API documentation for MapNavigator.zoom. Values for factor larger than 1 cause the map to be zoomed in instead of zoomed out.

Bug fixLuciadRIA

Added the subdomains option to UrlTileSetModel's constructor in the LuciadRIA TypeScript declaration file.

Bug fixLuciadRIA

RIA-2060
Added the dataType and samplingMode properties to RasterTileSetModel in the LuciadRIA TypeScript declaration file.

Bug fixLuciadRIA

Fixed an error in the LuciadRIA TypeScript definition: LayerTreeNode did not implement luciad.util.Evented.

Bug fixLuciadRIA

Fixed a typo in the LuciadRIA TypeScript definition: MapNavigator#rotate takes a targetRotation option instead of a targetLocation.

Bug fixLuciadRIA

RIA-2019
WKTReferenceParser didn't parse references using the azimuthal equidistantprojection correctly.

Bug fixLuciadRIA

RIA-2041
Corrected version declaration for GML namespace when used for WFS requests with OGC filters.

Bug fixLuciadRIA

RIA-2459
Fixed an issue with RasterTileSetLayer: for maps with a stretched aspect ratio (width >= 3 * height), tile selection was incorrect in some cases.

Bug fixLuciadRIA

RIA-2033
Fixed an issue in WebGL maps when an error is thrown when anchor position is not provided due to excessive label size.

Bug fixLuciadRIA

RIA-2032
WFS requests for versions 2.0.x do not contain the xmlns:ogc namespace declaration anymore. WFS servers may reject such requests due to unexpected namespace.

Bug fixLuciadRIA

RIA-2026
Fixed an issue when drawing a label for a shape that is an empty ShapeList.

Bug fixLuciadRIA

RIA-2023
Fixed an issue when selecting objects that were "above terrain". It was sometimes not possible to select such objects in 3D.

Bug fixLuciadRIA

RIA-2017
Fixed an issue where a WMSImageLayer would jitter slightly while panning slowly.

Bug fixLuciadRIA

RIA-2015, RIA-1998
Fixed an issue with selecting lines painted with TrajectoryPainter or ParameterizedLinePainter using a range (for example a time range). It was sometimes not possible to select these lines when clicking on the line close to the end of that range.

Bug fixLuciadRIA

RIA-2005
Fixed an issue with License.loadLicenseFromUrl: it incorrectly returned a Dojo Promise (without a .catch function) instead of A+ Promise.

Bug fixLuciadRIA

RIA-2004
Fixed an issue with RasterImageLayer where, when panning erratically, the image might be rendered at the wrong location.

Bug fixLuciadRIA

Fixed an issue with the sample GetFeatureInfoController: it would keep showing the 'loading' cursor when no feature was clicked.

Bug fixLuciadRIA

Fixed an issue in LuciadRIA's TypeScript definition: Ellipse did not extend Shape.

Bug fixLuciadRIA

RIA-1979
The product version in package.json has been fixed; leading zeros in the patch number are now removed.

Bug fixLuciadRIA

RIA-1985
The startSampleServer scripts now also work on Java 9.

Bug fixLuciadRIA

RIA-1916
ShapeProvider.invalidateAll does not trigger any more the model query reprocess.

Bug fixLuciadRIA

RIA-1954
Balloon functionality takes into account the position of provided shape when clicking on a feature.

Bug fixLuciadRIA

RIA-1748
Grid is no longer rendered incorrectly in Webmercator with non-0 central meridian.

Bug fixLuciadRIA

RIA-1971
ClusteringTransformer no longer throws an error when a model is updated and that model or its store always returns a Promise from its query method.

Bug fixLuciadRIA

RIA-1719
Fixed a bug when using TrajectoryPainter or ParameterizedLinePainter when changing a feature's properties. In that case, the styling did not reflect the property change.

Bug fixLuciadRIA

RIA-1957
Fixed a bug where the BingMapsTileSetModel did not always load the adequate tile for the zoom level the map was showing. Because of that, a less detailed tile was shown in arbitrary locations.

Bug fixLuciadRIA

Typescript definition: LayerTreeNode's typing declaration now indicates that it implements Evented

Bug fixLuciadRIA

Typescript definition: Fixed module declaration of luciad/view/input/GestureEvent

Bug fixLuciadRIA

RIA-517
The CreateController now correctly shows the snap icon for the initial point.

Bug fixLuciadRIA

RIA-1934
The 'snap-to-scale-level' that happens whenever a layer is added to the map, now respects map.mapNavigator.defaults.snapToScaleLevels.

Bug fixLuciadRIA

RIA-1931
GetFeatureInfo requests using the FeatureInfoController (sample code) can now handle mime types that include charset information.

Bug fixLuciadRIA

RIA-1889
Fix for misplacing labels when FeaturePainter draws more than a single shape for a feature.

Bug fixLuciadRIA

RIA-1915
For hardware-accelerated maps the FeaturePainter.drawLabel function passes shape parameter provided by layer's ShapeProvider. That way the the meaning of the shape parameter is consistent for both the hardware-accelerated maps and canvas maps.

Bug fixLuciadRIA

RIA-1910
Resolved errors when re-using a ParameterizedLinePainter or TrajectoryPainter instance in multiple maps (for example, switching from a 2D map to a 3D map).

Bug fixLuciadRIA

RIA-1908
Fixed errors in LuciadRIA's TypeScript definition that triggered when running a TypeScript compiler with the noImplicitAny option enabled.

Bug fixLuciadRIA

RIA-1900
Fixed an issue where drag events were not propagated to the map's controller if the controller ignored the first drag event.

Bug fixLuciadRIA

RIA-1860
Fixed various minor issues with the Typescript definition (added missing modules, corrected signatures...).

Bug fixLuciadRIA

RIA-1886
Fixed an issue where labels drawn by a Controller would jitter when drawn on a WebGLMap.

Bug fixLuciadRIA

RIA-1875
Fixed issue when editing complex polygons with many points.

Bug fixLuciadRIA

RIA-1876
Fixed an error when FeaturePainter#invalidateById is used on hardware-accelerated maps.

Bug fixLuciadRIA

RIA-1877
Fixed an error when ShapeProvider invalidation methods are used on hardware-accelerated maps.

Bug fixLuciadRIA

RIA-1652
FeaturePainter#invalidateById method is exposed in the API documentation.

Bug fixLuciadRIA

RIA-1858
Fixed an issue with not showing labels at the end of X axis on vertical maps.

Bug fixLuciadRIA

RIA-1853
Fixed casing of some http-headers. This fixes the missing elevation bug in Chrome 60 and up.

Bug fixLuciadRIA

RIA-990
Re-ordering of layers within the same layer group no longer causes all data to be reloaded or the "NodeAdded" and "NodeRemoved" events to be triggered

Bug fixLuciadRIA

RIA-1834
Axis for vertical views are painted without blurry edges.

Bug fixLuciadRIA

RIA-1848
Corrected the TypeScript method signatures for Map.pickAt() and Map.pickClosestObject().

Bug fixLuciadRIA

RIA-1846
Fixed errors when using WebGLMap with a map <div> that is not visible (width or height 0). While harmless, you could get errors while labeling or during selection in this case.

Bug fixLuciadRIA

RIA-1817
GeoBuffer's bounds were not always covering its contour when using a geodetic reference. This was also preventing the GeoBuffer.contains2D method from working properly. GeoBuffer's bounds are now calculated correctly.

Bug fixLuciadRIA

RIA-1840
Refreshing the left border decorations after resizing a vertical view.

Bug fixLuciadRIA

RIA-1821
For some type and function combinations, an ifThenElse-expression inside another expression was not considered valid.

Bug fixLuciadRIA

RIA-1792
Bounds shapes with width greater than 180 degrees that stretch over the 180th meridian are drawn correctly now.

Bug fixLuciadRIA

RIA-1777
Making the GoogleLayer invisible now works correctly.

Bug fixLuciadRIA

RIA-1772
Corrected API documentation for GeoCanvas method signatures: drawIcon and drawText.

Bug fixLuciadRIA

RIA-1768
Geodetic bounds with a height of (approximately) 180 degrees were not always transformed correctly to a reference with a different geodetic datum.

Bug fixLuciadRIA

RIA-1646
The baseURL parameter is now correctly passed as an argument when getTileURL() is called on WMSTileSetModel. Before the fix, the parameter was undefined, making it harder to override the method.

Bug fixLuciadRIA

RIA-1747
The ReferenceProvider now picks up the central meridian parameter when a web mercator reference is created by means of a WKT string.

Bug fixLuciadRIA

RIA-1745
HandleEventResult#clearRequestFinish cleared the REQUESTDEACTIVATION flag instead of the REQUESTFINISH flag.

Bug fixLuciadRIA

RIA-1736
For drawLabelInPath with "inView" set, labels for shapes outside of the view could end up without any labels when the their shapes are again visible. This has been fixed.

Bug fixLuciadRIA

RIA-1730
Removed cursor: default; CSS property on LuciadRIA DOM elements. This allows you to override the cursor used on the Map.

Bug fixLuciadRIA

RIA-1706
Fixed an issue where, in some cases, the GestureEvent.modifier property was not properly set.

Bug fixLuciadRIA

RIA-1704
For drawLabelInPath with "inView" set, labels for shapes outside of the view could end up on the Greenwich Meridian. This has been fixed.

Bug fixLuciadRIA

RIA-1675
Fixed an issue where non-animated versions of MapNavigator operations did not interrupt ongoing animations.

Bug fixLuciadRIA

RIA-1667
Fixed an issue when using a combination of clustering, map destroys and model updates. Errors could occur when you used model updates on a layer with clustering on after its map was destroyed.

Bug fixLuciadRIA

RIA-1622
Fixed an issue where, sometimes, a pitch-related Error was thrown during fitting.

Bug fixLuciadRIA

RIA-1630
Fixed an issue when updating line shapes that were painted with a TrajectoryPainter or ParameterizedLinePainter. Changing the shape (for example inserting a point) and doing a model update (using FeatureModel.put) resulted in an error and no visual update of the shape.

Bug fixLuciadRIA

RIA-1642
Fixed an issue where input on IE9 could be off by several pixels.

Bug fixLuciadRIA

RIA-1595
Resolved an issue in LoadEverything: on Internet Explorer, there could be an error after invalidating a layer through its QueryProvider.

Bug fixLuciadRIA

RIA-1616
Fixed an issue with the equality filter definition in SLD file, where an expected value is a number. The equality filter definitions are properly evaluated by SE painters when the expected value is a number.

Bug fixLuciadRIA

RIA-1615
Fixed an issue with not taking into account the matchCase parameter in filter definitions in SLD files. The matchCase parameter is now taken into account while evaluating features by painters created by SEPainterFactory (based on SLD files).

Bug fixLuciadRIA

RIA-1613
Fixed an issue with filter definitions in SLD file, where the expected value is a string starting with a number value. The filter definitions in SLD files are properly evaluated by SE painters when the expected value is a string starting with a number value.

Bug fixLuciadRIA

RIA-1631
ClusteringTransformer: selected objects no longer disappear when zooming in and out while the clustering transformer is configured to not cluster.

Bug fixLuciadRIA

RIA-1418
LuciadRIA can now handle mercator projections with a true scale latitude (mercator variant B).

Bug fixLuciadRIA

RIA-1603
Mouse input no longer uses the PointerEvent API when available. This resolves issues with mouse input on RIA maps embedded in MFC components or legacy browsers.

Bug fixLuciadRIA

RIA-1576
Map.pickAt no longer returns duplicate results.

Bug fixLuciadRIA

RIA-1600
Fixed an issue where 3D icons were not rendered by the FeaturePainter when using the CreateController.

Bug fixLuciadRIA

RIA-1455
Fixed an issue where a balloon that was clicked open, would not be closed when the associated feature got filtered out.

Bug fixLuciadRIA

RIA-1594
Fixed an issue that would cause BingMaps to display camera icons when zoomed in on a WebGLMap.

Bug fixLuciadRIA

RIA-1338
Fixed an issue with displaying large circles in 2D: circles larger than a hemisphere are now correctly filled. Before, the fill of such circles was inverted: the area inside the circle was empty, and the area outside the circle was filled.

Bug fixLuciadRIA

RIA-1590
Fixed an issue with map.restoreState on 3D maps. The rotation of the restored camera state would deviate slightly from the saved camera state. This deviation was especially noticeable for zoomed-out heavily pitched camera positions.

Bug fixLuciadRIA

RIA-996
Added new API whenReady on LayerTreeNode to wait until all processing is reflected on the screen. This includes:
  • Data loading (tiles, features) caused by navigation etc.
  • Feature processing caused by painter invalidations etc.
LayerTreeNode.whenReady returns a promise that resolves when all changes leading up this call are processed and the screen is up-to-date. This can be used to wait for specific changes to be processing completely. Notes that LayerGroup (including map.layerTree) is also a LayerTreeNode, so also has this API available. Example:
      map.mapNavigator.fit({bounds: somewhere});
      map.layerTree.whenReady().then(makeScreenshot);
    

Bug fixLuciadRIA

RIA-1565
Fixed an issue where calling MapNavigator.fit on a map with a GoogleLayer present, would cause the GoogleLayer to not render until the map was zoomed.

Bug fixLuciadRIA

RIA-1570
Fixed a memory leak when using a RasterTileSetLayer in a WebGLMap with frequent model invalidations (for example, changing SLD on a WMSTileSetModel).

Bug fixLuciadRIA

RIA-1571
Fixed an issue where calling map.saveState() on a 3D WebGLMap would throw an error.

Bug fixLuciadRIA

Fixed an issue with calling BasicFeaturePainter.setStyle when the painter is already attached to a layer.

Bug fixLuciadRIA

RIA-1413
Fixed an issue where input events could be off-target when the map was inside a scrollable container.

Bug fixLuciadRIA

RIA-1555
A feature layer with levels of detail on its painter is now updated correctly when you toggle its visibility.

Bug fixLuciadRIA

RIA-1551
GridLayer will now also fire PaintRepresentationVisibilityChangedEvents.

Bug fixLuciadRIA

RIA-1550
LuciadRIA loads now resources properly when cache-busting is enabled, even when window.__LUCIAD_ROOT__ is not set.

Bug fixLuciadRIA

RIA-1538
Fixed an issue with the deprecated MapNavigator.panTo in 2D, and the deprecated MapNavigator.zoomTo in 3D. Note that it is recommended to use the new MapNavigator.pan and MapNavigator.zoom instead of these deprecated functions.

Bug fixLuciadRIA

RIA-1529
Fixed fitting with allowWarpXYAxis set to true on maps with cartesian references.

Bug fixLuciadRIA

RIA-1462
The helper line used during GeoBuffers creation follows now the mouse cursor properly. This issue was caused by a bug introduced when RIA-1308 was fixed.

Bug fixLuciadRIA

RIA-1015
When using WebGL maps, it is now possible to submit a different shape than the feature shape to the labelCanvas in your FeaturePainter.paintLabel. However, it has the following limitations :
  • Features that aren't submitted to the geoCanvas in your FeaturePainter.paintBody will not be labeled
  • In 3D, the submitted shape has to be either a point or one of the shapes submitted in the paintBody for the corresponding feature

Bug fixLuciadRIA

RIA-1059
When using WebGL maps, if you submit a ShapeList in your FeaturePainter.paintLabel, it will use the largest shape instead of the first one to determine the label location.

Bug fixLuciadRIA

RIA-1442
LuciadRIA now also configures CORS headers when the application is served from port 80 and tries to access imagery services on the same server but served from a different port.

Bug fixLuciadRIA

RIA-1440
Airspaces in the vertical view are now updated correctly after editing a trajectory in the Vertical View sample.

Bug fixLuciadRIA

RIA-1428
In some cases, WebGL views did not show the latest state of the model. This could happen, for instance, when disabling or enabling clustering.

Bug fixLuciadRIA

RIA-1427
Editing a shape with a fill and no stroke on a WebGLMap could sometimes make it appear incorrectly on the map.

Bug fixLuciadRIA

RIA-1425
Grid scale is updated accordingly to the zoom level even if all the map bounds don't change

Bug fixLuciadRIA

RIA-1349
Fixed an issue where it was sometimes impossible to select features that are obscured by a feature from an unselectable layer. Note that Map.pickAt now also returns features from layers that are not selectable. If you only want to retrieve selectable features, filter the 'pick info' objects that are returned by Map.pickAt, using pickInfo.layer.selectable.

Bug fixLuciadRIA

RIA-1393
CORS HTTP headers are now only configured when image data is loaded from another domain. CORS headers are only required when images are loaded from other domains. However, LuciadRIA configured them always, even when images were loaded from the local domain. The use of these headers in combination with web authentication methods (cookies, for example) could result in credential information being omitted from the HTTP requests, even when the requests were sent to the same domain that hosts the LuciadRIA application. This is now no longer the case.

Bug fixLuciadRIA

RIA-1284
Fixed a rare exception that could occur when invalidating a ShapeProvider for a layer that uses a LoadSpatially strategy.

Bug fixLuciadRIA

RIA-1347, RIA-1246
The selection of unclustered features is now preserved when you navigate in a view while clustering is active.

Bug fixLuciadRIA

FeatureLayer: changing the transformer property before adding the layer to a map now works as expected.

Bug fixLuciadRIA

RIA-1336
FeatureLayer: the transformer set trough the transformer constructor option can now also be retrieved trough the transformer property of the layer

Bug fixLuciadRIA

RIA-1401
Rectangular draped icons were not painted correctly: they would appear as square draped icons instead.

Bug fixLuciadRIA

RIA-1396
ClusterTransformer will now keep features rejected by the filter of a FeatureLayer out of clusters. This prevents unwanted features from being included in a cluster feature.

Bug fixLuciadRIA

RIA-1392
The credentials option is no longer ignored when creating a WMSTileSetModel.

Bug fixLuciadRIA

RIA-1352
During label painting, it was possible to have errors logged to the console when drawing labels to an empty ShapeList. This has now been resolved.

Bug fixLuciadRIA

ClusteringTransformer can now handle models where all points are on the same longitude or latitude.

Bug fixLuciadRIA

RIA-1383
During label painting, it was possible to have errors logged to the console when drawing to points that were sub-shapes of other shapes. This has now been resolved.

Bug fixLuciadRIA

RIA-1371
Bounds transformations involving references that use the Oblique Mercator projection don't produce NaN values any more.

Bug fixLuciadRIA

RIA-1372
In 3D, bounds from map.mapBounds always include the poles if they are visible.

Bug fixLuciadRIA

RIA-1359
The Geodesy#interpolate method now produces correct results when using a SphericalGeodesy.

Bug fixLuciadRIA

RIA-773
The LuciadRIA modules in the luciad namespace are now compatible with the r.js JavaScript minifier (cf. http://requirejs.org/). Previously, due to some dojo-specific features, the r.js minifier could not resolve the AMD module dependencies.

Bug fixLuciadRIA

RIA-1332
Fixed performance regression on Internet Explorer when using LoadSpatially (for example for a WFS store).

Bug fixLuciadRIA

RIA-1333
Fix some calculations for Polyconic projection

Bug fixLuciadRIA

RIA-1319
After setting a painter with the FeatureLayer#painter setter, calls to FeaturePainter#invalidate and FeaturePainter#invalidateAll no longer throw errors. This bug in invalidation did not occur when the painter was passed along as one of the options in the FeatureLayer constructor. It only occurred after a painter has been set with the FeatureLayer#painter setter.

Bug fixLuciadRIA

RIA-1079
There is no more artifact for large self-intersecting polygon on hardware-accelerated maps.

Bug fixLuciadRIA

RIA-1308
CreateController updates now GeoBuffers properly after the first creation click.

Bug fixLuciadRIA

RIA-1200
LuciadRIA can now connect to image services that require authentication parameters in the headers of the image request. Previously, there would be errors because LuciadRIA always submitted anonymous requests. It was therefore impossible for example to require basic http authentication for an image request. To enable this functionality, there have been following additions to the API: - luciad/view/style/IconStyle#withCredentials: setting this flag to true will add credentials to the headers of the image request - luciad/model/tileset/UrlTileSetModel: all implementations of a UrlTileSetModel can now make credentialed image request, by setting the optional credentials flag to true - luciad/model/tileset/WMSImageModel: you can now configure this model to submit authenticated image requests

Bug fixLuciadRIA

RIA-1032
There have been various modifications to the luciad/model/codec/GeoJsonCodec decoding functionality to improve the consistency of its API. - A mismatch between the implementation of luciad/model/codec/GeoJsonCodec#decodeGeometry and its documentation has been resolved. The documentation required the first parameter to be a String, however the implementation expected an Object. The implementation now correctly requires a String. When you use an Object instead of a String, a warning method will now be logged to the console. - Two additional methods have been added: GeoJsonCodec#decodeGeometryObject and GeoJsonCodec#decodeObject. Both allow you to decode GeoJson that is represented as an Object instead of as a String. - The GeoJsonCodec#decode method now correctly states that it delegates the decoding of geometries to the #decodeGeometryObject method. If you have overridden the decodeGeometry method, you will need to change this to decodeGeometryObject to avoid warning messages to the console.

Bug fixLuciadRIA

RIA-1301
When using 2D data on a non-standard ellipsoid in a 3D view, it was draped but with a height above ground. This caused the data to shift according to the camera viewpoint.

Bug fixLuciadRIA

RIA-1297
A problem with loading tiff elevation tiles from LuciadFusion was resolved. The tiff tiles could not be loaded if they contained 16-bit signed integers.

Bug fixLuciadRIA

RIA-1300
Showing a balloon for a Shape instead of a Feature now works as expected.

Bug fixLuciadRIA

RIA-1226
Selecting icons by tapping or mouse-click is now more accurate when the icon has an offset.

Bug fixLuciadRIA

RIA-1013
A balloon will now be removed from the map when the layer it corresponds to is made invisible.

Bug fixLuciadRIA

RIA-1052
The ReferenceProvider can now also parse WKT strings that encode a reference with a Gnomonic projection.

Bug fixLuciadRIA

RIA-1028
Improved performance for draped density data in a WebGL view.

Bug fixLuciadRIA

RIA-1008
When updating a feature with the MemoryStore#put method, if the feature is not present in the store, it should be added. Previously, the implementation did not match this documented "upsert" behavior.

Bug fixLuciadRIA

RIA-998
Moving layers in the map's LayerTree is now more robust. Before, in certain situations with multiple nested LayerGroups, it was possible that a Layer would not be visualized on the Map in the correct order after moving it.

Bug fixLuciadRIA

The WorkingSet#getWorkingSetReference method has been removed from the jsdoc API. This method was undocumented, and was part of the documentation due to a documentation processing error.

Bug fixLuciadRIA

RIA-999
The visibility of a layer is now correctly taken into account when selecting features from a map using the Map#pick methods. Previously, if a FeatureLayer was a child of an invisible LayerGroup, features from that Layer could still be selected, even though that FeatureLayer was in turn invisible as well.

Bug fixLuciadRIA

RIA-991
Some colors in KML files were parsed incorrectly, leading to partial evaluation of some KML files. This has now been fixed.

Bug fixLuciadRIA

RIA-989
Map#selectedObjects method returns now data for layers with selected objects only. It used to be like that but the behavior changed accidentally after fixing RIA-885.

Bug fixLuciadRIA

RIA-918
EPSG:32663 now correctly uses an ellipsoidal equidistant cylindrical projection, instead of a spherial one. The spherical equidistant cylindrical projection has identifier EPSG:32662. The default map projection now is EPSG:32662 (spherical). EPSG:4087 is now supported as well.

Bug fixLuciadRIA

RIA-966
The WFSFeatureStore#spatialQuery method now takes into account the maxFeatures and propertyNames options.

Bug fixLuciadRIA

RIA-961
The XML-Encoding of the between, lte, and, gte filters to the OGC Filter 1.0.0 and 1.1.0 standards now works correctly.

Bug fixLuciadRIA

RIA-956, RIA-957
The allowWarpXYAxis parameter will now be ignored when calling mapNavigator.fit on a map with geographic data. This is because stretching or compressing geographic data over the X or Y axis creates an incorrect visualization if the data on the map is geographic: it distorts the properties of the projection of the map's spatial reference. This change also resolves the issue that in some situations a GoogleLayer would no longer be visible after a fit completed where the warping was set to true. This change has no effect on maps with a reference with other units of measure.

Bug fixLuciadRIA

RIA-929
Labeling of lines with an OnPathLabelStyle has now been made more robust. Previously, labels sometimes were not positioned along one or more lines even though there may have been sufficient place to do so.

Bug fixLuciadRIA

RIA-900
Instead of passing the bounds constructor parameter to a WMSTileSetmodel, you can now also use the reference parameter. This makes it easier to create a WMSTileSetModel for which the WMS model extent cannot easily be determined at runtime.

Bug fixLuciadRIA

RIA-932
Fitting on layers when there is a constraint on the map has now been made more robust.

Bug fixLuciadRIA

RIA-915
Fixed an issue where touch event locations were not always correctly calculated when the page is scrolled.

Bug fixLuciadRIA

RIA-917
WMSTileSetLayer#getFeatureInfo no longer throws an unexpected error when the input coordinate is outside the bounds of the model data.

Bug fixLuciadRIA

RIA-885
Map#selectedObjects now correctly returns selected objects from Layers that are children of a LayerGroup.

Bug fixLuciadRIA

RIA-277
You can now rotate text when drawing it to the GeoCanvas. Use the TextStyle.angle parameter.

Bug fixLuciadRIA

RIA-892
The Vertical View sample no longer uses internal classes of LuciadRIA.

Bug fixLuciadRIA

References with a Lambert Conformal projects now properly indicates that a point outside its projection bounds cannot be transformed to a point on the world.

Bug fixLuciadRIA

ReferenceProvider.parseWellKnownText now properly handles WKT strings that refer to ellipsoidal equidistant projections. Previously it returned references that used spherical calculations. Now they use ellipsoidal calculations.

Bug fixLuciadRIA

RIA-873
It is now possible to translate a complex polygon during editing.

Bug fixLuciadRIA

BasicFeaturePainter now also applies default styling when painting Bounds.

Bug fixLuciadRIA

RasterImageLayer now triggers a repaint when its source data changes. For instance, when you change the layers of a WMSImageModel, the view will now be automatically updated.

Bug fixLuciadRIA

RIA-859
Some LuciadRIA classes could not find their resources when LuciadRIA was used with the AMD loader of require.js. This has now been fixed.

Bug fixLuciadRIA

RIA-848
Under certain conditions, when adding a RasterTileSetLayer to a Map, fitting on a certain bounds did not succeed. This was caused by a race-condition bug introduced in 2015.1. This has now been fixed.

Bug fixLuciadRIA

RIA-637
To determine the order of objects when using the Map#[pickAt|pickClosestObject] methods, the selection-status of the object is now correctly taken into account. Selected objects are visualized on top of other objects: to determine interaction, these selected objects are now correctly receiving preference over unselected objects that are visualized below them.

Bug fixLuciadRIA

RIA-745
It is now possible to make a GoogleLayer invisible. Also when panning, the GoogeLayer is not rendered because the Google Maps zoom animation and LuciadRIA Map zoom animation cannot be synchronized.

Bug fixLuciadRIA

RIA-718
When the stroke-style is undefined on a luciad/view/style/ShapeStyle, a default stroke will be used so the object will be visible on the map. Previously, when the stroke was undefined, no default stroking was used; this caused the object to be invisible.

Bug fixLuciadRIA

RIA-785
Touch input was incorrect when the page was scrolled. This has been fixed.

Bug fixLuciadRIA

RIA-783
When editing the shape of polyline, polygon or geobuffer, you can now ctrl-click a point to remove it. You can also still long-press the point to remove it, as before.

Bug fixLuciadRIA

RIA-780
The Luciad logo no longer covers the Google logo in the GoogleLayer Widget sample.

Bug fixLuciadRIA

RIA-740
The visualization of icons and text drawn to the bottom-border, using BorderGeoCanvas#drawIcon or BorderGeoCanvas#drawText respectively, is no longer cut off at where the border meets the Y-axis on the left. This means that part of the icons or text may be visualized in the bottom-left corner where the left and bottom border overlap. This behavior also applies to labels (using BorderLabelCanvas#drawLabel). Do note that this visualization will only be drawn as long as the anchor point is situated the right of the Y-axis. Once this anchor point is moved to the left of the Y-axis, the icons and labels will no longer be visible.

Bug fixLuciadRIA

RIA-734
Dash patterns from stem-lines now start from the border. Previously, the pattern would start from the point on the map. The practical result is that you can interleave dash patterns. When the stems are aligned, even if they would have different lengths, the dash patterns will now no longer "shift" positions since they share a same start point.

Bug fixLuciadRIA

RIA-614
When constructing a FusionTileSetModel, the constructor parameter to configure the number of levels in the model is now taken into account. It was ignored before.

Bug fixLuciadRIA

RIA-754
KML files with combinations of multiple styles could not always be read correctly, causing some KML files not to be read correctly. Parsing of such files has now been made more robust.

Bug fixLuciadRIA

RIA-772
In a KML file, PlaceMark-elements without a geometry will now be silently ignored. Previously, an error would be logged on the console, and the KMLLayer would not be properly visualized.

Bug fixLuciadRIA

Some KML files could not be loaded. Specifically, KML files that contained nested shape lists could not be decoded. This is now fixed.

Bug fixLuciadRIA

RIA-743
It is now possible to label shapes in the FeaturePainter#paintLabel method with arbitrary shapes that do not have a body representation. This did not work in certain edge-cases when the shape of the feature to be labeled was a ShapeList.

Bug fixLuciadRIA

RIA-742
Mouse cursor is now updated correctly when editing GeoBuffers and ShapeLists.

Bug fixLuciadRIA

RIA-721
Labels which are drawn to the bottom border (using FeaturePainter#paintBorderBody) are now no longer cut off at the Y-axis. This is to improve legibility of the label. The behaviour of label decluttering in the border and the visualization of the bodies in the border remain unaltered. This is to preserve the alignment of the border content with the content on the map.

Bug fixLuciadRIA

RIA-634
The TileSetAttributionProvider no longer throws an Error when a Map's LayerTree contains LayerGroup instances.

Bug fixLuciadRIA

RIA-730
Conversion parameters for the European Datum 1950 were corrected for the following references:
  • EPSG:23035
  • EPSG:23036
  • EPSG:23037
  • EPSG:23038
  • EPSG:2206
  • EPSG:2207
  • EPSG:2208
  • EPSG:2209
  • EPSG:2210
  • EPSG:2211
  • EPSG:2212

Bug fixLuciadRIA

RIA-731
ReferenceProvider#isValidReferenceIdentifier now returns true for all documented supported references.

Bug fixLuciadRIA

RIA-633
A luciad.view.google.GoogleLayer can now be added to a LayerGroup.

Bug fixLuciadRIA

RIA-723
Bodies and labels that are painted in the bottom border are now correctly invalidated when calling FeaturePainter#invalidate or FeaturePainter#invalidateAll.

Bug fixLuciadRIA

RIA-685
On IE11, releasing the mouse button outside the browser window now correctly ends the panning of the map.

Bug fixLuciadRIA

RIA-650
Improved robustness for handling input events on Windows 8/IE11.

Bug fixLuciadRIA

RIA-639
The datum for the Google models is now correctly CRS:84.

Bug fixLuciadRIA

RIA-641
Rendering lines with an arrow marker no longer breaks the paint loop.

Bug fixLuciadRIA

RIA-635
Labels of a longitude-latitude grid are now positioned correctly when the Map is configured with a left border.

Bug fixLuciadRIA

RIA-424
A FeatureLayer will no longer query the model when it is added to the map and outside the visible minimum and maximum scale range

Bug fixLuciadRIA

RIA-600
Automatic label placement now correctly takes into account the dimensions of the left border (if any).

Bug fixLuciadRIA

RIA-437
When a GoogleLayer is added to the map, and it is showing the terrain map, you can no longer zoom beyond the 15th zoom level. There is no data beyond that level. The 15th zoom level refers to one of the scale breaks defined by Google.

Bug fixLuciadRIA

RIA-482
After closing a balloon of a a selected object, clicking on the object will now show the balloon again.

Bug fixLuciadRIA

RIA-626
Rendering of military symbols is now correct again (some were not visualized).

Bug fixLuciadRIA

RIA-620
A non-georeferenced view will now render correctly in IE10 that reports to be IE9.

Bug fixLuciadRIA

RIA-616
Is is now possible to select large icons. Previously, it was sometimes difficult to select large icons by clicking near their edges.

Bug fixLuciadRIA

RIA-606
It is now again possible to move layers in the Map`s LayerTree.

Bug fixLuciadRIA

RIA-571
Added support for EPSG:2154 (RGF93 / Lambert-93)

Bug fixLuciadRIA

RIA-476
Click and double click detection in Chrome is now more robust.

Bug fixLuciadRIA

RIA-567
Sample server now again logs normally using SLF4J with java util logging binding.

Bug fixLuciadRIA

RIA-587
jMNDS logging is now turned off. On startup, the startSampleServer script will no longer show the distracting debug logs of the jMNDS component.

Bug fixLuciadRIA

RIA-586
A regression was introduced with RIA-269. This caused zooming in not to work on Firefox. This has now been resolved.

Bug fixLuciadRIA

RIA-584
You can now pass any shape to GeoCanvas#drawText rather than only points. The implementation now reflects the documentation.

Bug fixLuciadRIA

RIA-608
It is now possible to specify multiple styling rules when constructing a GoogleImageModel. In order to do so, use an array of style-rules for the style member of the requestParameters option. Previously, it was only possible to use a single style rule. This was not conform the API of the Google Static Maps API.

Bug fixLuciadRIA

RIA-269
A LuciadRIA-map now works on devices which support MS-pointer and MS-gesture input events. For example, you can now run LuciadRIA in Internet Explorer (10 or higher) on a Microsoft Surface Tablet or on a smart phone with a WP OS.

Bug fixLuciadRIA

RIA-562
When constructing a RasterTileSetLayer with the visible option set to false, no images are requested from the model.

Bug fixLuciadRIA

RIA-577
A TypeError is no longer thrown when trying to pick objects from the map at a location which is outside the projection bounds.

Bug fixLuciadRIA

RIA-572
Correcting documentation of HandleEventResult

Bug fixLuciadRIA

RIA-535
Build scripts for custom builds of the samples now work again.

Bug fixLuciadRIA

RIA-566
Selecting rotated icons is now possible.

Bug fixLuciadRIA

RIA-560
Upgraded dojo to 1.10.x. This version resolves broken touch support in IOS8.

Bug fixLuciadRIA

RIA-553
Corrected EditController API documentation. It now no longer documents private methods.

Bug fixLuciadRIA

RIA-552
This fixes a regression, introduced by RIA-550. An error was thrown when trying to select features of which part of the visualization was text. This was for example the case for objects that were drawn with the drawText() method in the paintBody implementation of a FeaturePainter, or for military symbols which had some text elements).

Bug fixLuciadRIA

The "create" functions on ShapeFactory without coordinate reference have been deprecated. You should always call the create methods with a coordinate reference.

Bug fixLuciadRIA

RIA-548
When icons are positioned on the map, their position is now snapped to an exact pixel location. This avoids anti-aliasing effects.

Bug fixLuciadRIA

RIA-546
Labels do not disappear any more when drawing lines containing begin/end markers.

Bug fixLuciadRIA

RIA-470
The optional requestReference parameter of the WMSTileSetModel constructor was ignored. Furthermore, this parameter could conflict with the reference of the mandatory bounds parameter. To improve the internal consistency of the constructor, this parameter has been removed from the API documentation. Since this parameter was ignored, this will not affect any implementations who may have set this parameter. A warning message is logged to the console if this parameter is used.

Bug fixLuciadRIA

RIA-544
ShapeStyles with a beginMarker or endMarker property now work again. Previously, an error would be thrown and logged to the console.

Bug fixLuciadRIA

RIA-537
It is now possible to correctly edit nested shape lists.

Bug fixLuciadRIA

RIA-538
Shape lists are more robust and can contain empty shapes.

Bug fixLuciadRIA

RIA-534
The luciad.reference.CoordinateReference#equals method now no longer returns false negative responses for some reference comparisons. These faulty comparisons used to occur for example with reference having the ED50 datum.

Bug fixLuciadRIA

RIA-528
ShapeProvider now invalidates correctly when configured through FeatureLayer constructor.

Bug fixLuciadRIA

RIA-529
When the query property on a FeatureLayer is set, any pending query from that layer will be canceled. This resolves a race-condition issue. Before this fix, it was possible that the result of an earlier query would supplant the result of a later query if the response of the former would arrive later than the response of the latter.

Bug fixLuciadRIA

RIA-487
The GeoJsonCodec constructor now behaves like a normal constructor, making it easier to subclass GeoJsonCodec.

Bug fixLuciadRIA

RIA-461
When a balloon refreshes, it now no longer shows multiple close buttons.

Bug fixLuciadRIA

RIA-368
Implementations of FeaturePainter can now have method names that start with "paint". Previously, an error would be thrown because only the method names paintBody and paintLabel were allowed. This restriction was due to a bug in the implementation of FeaturePainter and not due to a hard restriction on naming conventions.

Bug fixLuciadRIA

RIA-452
Detecting whether the user is interacting with text on the map (which was drawn with GeoCanvas#drawText) now no longer always returns true. This improves the selection behavior.

Bug fixLuciadRIA

RIA-451
The context menu is now also enabled on long press, both for touch interaction and mouse interaction. This means that the onCreateContextMenu callback of the featureLayer will now also be invoked when performing a long press.

Bug fixLuciadRIA

RIA-448
WMSTileSetModel no longer sends GetMap requests with an empty EXCEPTIONS parameter.

Bug fixLuciadRIA

RIA-445
Fixed a problem where all features in the layer were rendered (could occur in case of incremental rendering, when features were not labeled)

Bug fixLuciadRIA

RIA-443
PathLabelRotation.NO_ROTATION is now interpreted correctly again.

Bug fixLuciadRIA

RIA-442
Label priorities are now applied correctly again

Bug fixLuciadRIA

RIA-439
Fixed problem with caching of image-based fill patterns for polygons. Now is is possible to use the 'HatchedImageBuilder' to display different images for different polygons.

Bug fixLuciadRIA

RIA-429
Added documentation for the public equals() method to luciad/shape/Shape and luciad/reference/CoordinateReference.

Bug fixLuciadRIA

RIA-420
Fixed a problem with the CreateController that it would ignore a set minimum and maximum pointcount.

Bug fixLuciadRIA

RIA-483
When a FeatureLayer is outside its allowed scale range, features will no longer be selectable. Previously, when a layer was outside its valid scale range, these features were still selectable, even though they were invisible.

Bug fixLuciadRIA

RIA-409
When calling invalidateAll on a FeaturePainter, all labels will be refreshed when the incrementalRendering layer option is set to true.

Bug fixLuciadRIA

RIA-408
The hemisphere indicator in a LonLatPointFormat formatting string now also works for longitude coordinates.

Bug fixLuciadRIA

RIA-388
Removed dependency on non-public ArrayCursor from RestStore in the COP sample.

Bug fixLuciadRIA

RIA-381
The 'selected' array in the selection event no longer contains all the selected object, but instead contains only the newly selected features as expected. Use the selectedObjects on luciad/view/Map to retrieve all the selected features.

Bug fixLuciadRIA

RIA-377
In the symbology encoding sample, clicking a layer in the layer control did not show the associated SE stylesheet.

Bug fixLuciadRIA

RIA-386
Disabling label decluttering by using "NON_DECLUTTERED" for the group name of a label did not work.

Bug fixLuciadRIA

RIA-212
It is now possible to define namespaces when creating a PropertyName element with the OGC FilterFactory. When the filter is configured on a WFS request, these namespaces will be encoded to XML.

Bug fixLuciadRIA

RIA-323
The OGC Filter Encoder can now generate an XML without <Filter> as root node.

Bug fixLuciadRIA

RIA-376
The calculateScaleForTilesetLevel did not return the correct value.

Bug fixLuciadRIA

RIA-371
Previously, lon lat polygons or polylines could return bounds that were smaller than expected.

Bug fixLuciadRIA

RIA-284
WFSFeatureStore query method now accepts a unique filter. If an array of filters is given as argument, only the first one is used and a deprecation warning is written on the console

Bug fixLuciadRIA

RIA-308
The OGC FilterFactory allows now to set the matchCase attribute on the relevant filters. When encoding and decoding filters to and from XML, the matchCase attribute is taken into account.

Bug fixLuciadRIA

The API documentation for LayerTreeNode incorrectly listed a "name" property. The correct property name is "label".

Bug fixLuciadRIA

Fixed a license checking error where correct licenses were wrongfully considered invalid.

Bug fixLuciadRIA

RIA-335
Configured grid line width to 1 instead of 0.5, to avoid disappearing grid lines on Chrome mobile.

Bug fixLuciadRIA

RIA-333
Corrected Bounds calculation of a shape that covers the poles. The focus point of a ShapeList now corresponds with the center of its bounds instead of the focus point of the first Shape in the ShapeList.

Bug fixLuciadRIA

RIA-322
If the container node of the map has no dimensions (ie. its width or its height measure zero pixels) when the map is constructed, the map will no longer create an invalid y-scale.

Bug fixLuciadRIA

RIA-321
Fixed bugs in selection synchronization in Vertical View sample between the map and the vertical view.

Bug fixLuciadRIA

RIA-320
Label priority in COP sample (Cities layer) is now correct.

Bug fixLuciadRIA

RIA-318
Corrected bounds calculation for projected (grid) references.

Bug fixLuciadRIA

RIA-310
Order of draw commands issued on the GeoCanvas is now always respected if the zIndex in the ShapeStyle object literal is the same for each command.

Bug fixLuciadRIA

RIA-307
The BingMapsTileSetModel now correctly handles the zoomMin and zoomMax optional constructor parameters.

Bug fixLuciadRIA

RIA-300
Downloaded icons (the url property in IconStyle) are no longer forced to be 16 by 16 pixels in size. The default size is now the size of the image.

Bug fixLuciadRIA

RIA-298
Plugged a memory leak which arose when requesting many images.

Bug fixLuciadRIA

RIA-296
Vector data is now drawn on the screen with sub-pixel floating point precision.

Bug fixLuciadRIA

RIA-179
A WFSFeatureStore now produces a meaningful error message when the WFS server responds with a valid service exception.

Bug fixLuciadRIA

RIA-294
When luciad/util/Promise.when is called with a single input variable, it now consistently returns a Promise. This simplifies the usage of this function because the type of the return object is now independent of the type of the input variable. For example, it allows users to transparently chain synchronous and asynchronous values. The behavior remains unchanged when .when() is called with more than a single variable (ie. it includes also the success or error handlers).

Bug fixLuciadRIA

RIA-272
The map now emits MapChange events during animated pans and zooms.

Bug fixLuciadRIA

RIA-276
Removed the use of undocumented property Map#xScale from sample code.

Bug fixLuciadRIA

RIA-292
Removed the use of undocumented FeatureChanged event from COP sample.

Bug fixLuciadRIA

RIA-270
Polygon stroke should now appear closed, also when the polygon crosses the date line.

Bug fixLuciadRIA

RIA-265
Polygons that cover the poles in cylindrical projections are now filled correctly.

Bug fixLuciadRIA

RIA-263
Only the single top layer of type BASE should be visualized on the Map. The behaviour did not reflect the documentation. This is now corrected.

Bug fixLuciadRIA

RIA-234
The LayerType of a layer can now be accessed through the Layers's read-only ".type" property.

Bug fixLuciadRIA

RIA-285
An OnPathLabelPosition object literal can now correctly include a 'positions' attribute. This property used to be ignored in favor of 'position' (without the 's').

Bug fixLuciadRIA

RIA-129
The BasicCreateController will not add a Feature to the model of the Layer if the user did not create a shape with a valid bounds.

Bug fixLuciadRIA

RIA-210
Improved ComplexPolygon and ShapeFactory documentation.

Bug fixLuciadRIA

RIA-213
When creating an OGC bounding box with FilterFactory.bbox, users can specify an optional geometryName parameter. Previously, when encoding such a bounding box to XML, LuciadRIA would add a default <ogc:PropertyName>Geometry</ogc:PropertyName> tag inside the <ogc:Bbox> tag. This is no longer the case, as this default behaviour is not always compatible with receivers of this XML.

Bug fixLuciadRIA

RIA-191
Corrected luciad/util/Promise documentation.

Bug fixLuciadRIA

RIA-219
The type property of Bounds instances is now ShapeType.BOUNDS instead of undefined.

Bug fixLuciadRIA

RIA-218
Painters no longer throw TypeErrors when issuing multiple drawLabel commands in paintLabel().

Bug fixLuciadRIA

RIA-217
First point of a polyline created with mouse in freehand mode now behaves normally when moving the entire polygon.

Bug fixLuciadRIA

RIA-216
CreateController#onChooseLayer now iterates over layers from top to bottom instead of bottom to top.

Bug fixLuciadRIA

RIA-215
ShapeFactory documentation no longer refers to API methods that do not exist.

Bug fixLuciadRIA

RIA-214
luciad/shape/Polygon#insertPoint() does no longer throw NotImplementedError.

Bug fixLuciadRIA

Various corrections were made to the LuciadRIA reference documentation, as well as small modifications to the documentation formatting and styling.

Bug fixLuciadRIA

RIA-125
A layer can now no longer be added to more than one map. An error will be thrown when an attempt is made to try to add the layer to a second map.

Bug fixLuciadRIA

Corrected equals method for Polar Stereographic Projection.

Bug fixLuciadRIA

RIA-118
Firefox 10.0.Xesr no longer hangs when displaying sparse tilesets. A sparse tileset is a tileset that does not define a tile for every possible tile coordinate (level, row, column).

Bug fixLuciadRIA

RIA-117
Removed anti-aliasing effects on tiles in case of Firefox browsers.

Bug fixLuciadRIA

RIA-112
The layer's visible property can now be configured when the layer is not yet added to map.

Bug fixLuciadRIA

RIA-105
Added luciad/shape/ShapeType. The .type property of a luciad/shape/Shape now is a value of the ShapeType enumeration. A related bug, caused by a mismatch between the type of a shape and the one which was expected by luciad/view/feature/BasicFeaturePainter, has been resolved.

Bug fixLuciadRIA

RIA-110
Holes of luciad/shape/ComplexPolygon are drawn regardless of the orientation of the Polygons it contains. Before this fix, in order for holes to be drawn correctly, the orientation (clockwise/counter-clockwise) of the outer ring (1st polygon) in the ComplexPolygon needed to be opposite the orientations of the inner rings.

Bug fixLuciadRIA

RIA-96
Geodetic bounds calculation of LonLat Polylines and LonLat Polygons now approximates geodetic interpolation of these shapes.

Bug fixLuciadRIA

Layer's EditableChanged event is now emitted correctly.

Bug fixLuciadRIA

RIA-103
GeoJSON codec now decodes LinearRings that are not closed (first point and last point are different) correctly; they are closed implicitly. Encoding of a LinearRing will always write correct GeoJSON: first and last point are equal.

Bug fixLuciadRIA

RIA-104
Can now create polygons with less than three points (which are in fact lines or points).

Bug fixLuciadRIA

Fixed faults in custom build configuration & scripts. Custom builds now also work for the COP demo.

Bug fixLuciadRIA

RIA-95
Misspelled property in ReferenceProvider: 'supportedReferenceIdentifierPatterns'.

Bug fixLuciadRIA

RIA-30
Low resolution tiles were shown where better ones were available.

Bug fixLuciadRIA

RIA-178
When adding a FeatureLayer to a map, prevent the FeatureLayer from querying the model when it is not necessary.

Bug fixLuciadRIA

RIA-175
Invoking map.selectedObjects does not throw a TypeError anymore when a RasterTileSetLayer is added to the map.

Bug fixAdvanced GIS Engine

RIA-1912
Fixed an issue where the intersection between a shape and a polygon would result in a ShapeList of 2 Points.

Bug fixAdvanced GIS Engine

RIA-1532
Fixed an issue where ConstructiveGeometryFactory.createSpherical would modify ellipsoid parameters of the reference that was passed in.

Bug fixDefense Symbology

RIA-1753
Fixed bug introduced in version LuciadRIA 2016.1.15 that could mess up the rendering of labels.

Bug fixDefense Symbology

RIA-776
Label decluttering has been improved for Military Symbols. Labels do not disappear any more when zooming in or out and they get close to a Military Symbol that does not contain a label.

Bug fixDefense Symbology

RIA-1356
Military symbols icons where no longer painted correctly when selecting.

Bug fixDefense Symbology

RIA-1339
MIL-STD-2525C is now using ISO 3166-1 instead of FIPS Pub 10 for country codes.

Bug fixDefense Symbology

RIA-903
Short-Range Air Defense Engagement Zone label is fixed as SHORADEZ in MIL-STD-2525C.

Bug fixDefense Symbology

RIA-899
Labels located at the left of Military Symbols display negative numbers properly now.

Bug fixDefense Symbology

RIA-818
Made Label more consistent with GXY/Lsp labels.

Bug fixDefense Symbology

One-Way Traffic, Alternating Traffic and Two-Way Traffic symbols are now visualized correctly in APP-6A/B and MIL-STD-2525B/C. The arrows at the top of these symbols were not visible.

Bug fixDefense Symbology

RIA-759
Labels for military icon symbols that contain whitespace are not wrapped to the next line anymore.

Bug fixDefense Symbology

RIA-753
The legs of the MIL-STD-2525B G*T*US----****X symbol sometimes briefly changed positions during zooming, causing a flickering effect. This is now resolved.

Bug fixDefense Symbology

RIA-728
Ambush (G*O*VU----*****) APP-6A/B symbol is now properly visualized as an icon.

Bug fixDefense Symbology

RIA-732
When visualizing the Radioactive Area (G*C*BWA---*****), Biologically Contaminated Area (G*C*BWC---*****) and Chemically Contaminated Area (G*C*BWH---*****) APP-6A/B symbols, the icons displayed in these symbols now adhere to the respective APP-6 specification.

Bug fixDefense Symbology

RIA-623
The creation of the mine cluster military symbol is fixed.

Bug fixDefense Symbology

RIA-601
It is now possible to edit the Friendly Occupied (Only if a unit must stop in the attack position) GUC-MOOTC------- symbol.

Upgrade considerationLuciadRIA

Previously the LuciadRIA release contained a single TypeScript definition file (luciad.d.ts). From now on each module has its own definition file. These new definition files may contain some incompatible changes in regards with the 'luciad.d.ts' file. The following incompatibilities might affect your existing TypeScript project:
  • Namespaces are no longer used to differentiate our modules. To handle this change you will need to update your type imports.
  • Names of several interfaces have changed to have a more consistent naming across the LuciadRIA API. Interfaces for option objects used in constructors have the following naming scheme: {ClassName}ConstructorOptions, for example FeatureModelConstructorOptions. For other option objects, the interface name will always end with 'Options'.
  • Some class and interface properties are now optional. This is because the old 'luciad.d.ts' file contained some bugs, causing it to be out of sync with the actual API. This implies that you might need to add an undefined check before using these properties.
  • Our definition files are generated with non-nullable types, as a result of this our typing now explicitly contains null and undefined.
Note that all these changes will result in compile errors generated by the TypeScript compiler.

Upgrade considerationLuciadRIA

AnimationManager no longer implements Evented. This was a documentation error, as there were no events for which a callback could be registered.

Upgrade considerationLuciadRIA

The shape creation functions on ShapeFactory without georeference as first argument have been removed. These functions were already deprecated since 2015.0. You can use the functions with the same name and pass a null georeference as first argument.

Upgrade considerationLuciadRIA

The following changes were made in the LuciadRIA Evented API.
  • The Evented class has been renamed EventedSupport and the Evented class has been changed to an interface. Custom classes that extend the old Evented class must now implement the Evented interface. Classes that implement the Evented interface can delegate requests to the EventedSupport class. We recommend using the delegate pattern for this.
  • The emit function has been deleted from the Evented interface. As such, users will not be able to emit any events in one of the LuciadRIA classes anymore; For example, the 'ModelChanged' event in the FeatureModel cannot be triggered by users, but is automatically triggered by LuciadRIA when an object is added to the model.
  • The static functions on and once are also no longer available on Evented since this is now an interface. These functions are however available on the new EventedSupport
For more information on how to use the LuciadRIA Evented API, please see the LuciadRIA developer guide.

Upgrade considerationLuciadRIA

Changed the behavior of util/Promise#when to always wrap the result in a promise. Previously this was not always done for optimization purposes. Promise.when(value, resolvedCallback, errorCallback) now has been deprecated in favor of using Promise.resolve(value) .then(resolvedCallback).catch(errorCallback) as this is equivalent and doesn't need the LuciadRIA extension of Promise.

Upgrade considerationLuciadRIA

Our internal polyfills for Map, Set, Object, Promise and performance have been removed as these are now supported in the most used browsers (except for IE 11). If you want to deploy LuciadRIA on a browser without support for these classes, consider using core-js as illustrated in our samples (entry point in samples/common/webpack.config).
Note that we still expose our own util/Promise class that extends from the native Promise.

Upgrade considerationLuciadRIA

ExpressionFactory#true and ExpressionFactory#false have been removed from the public API as those function names are reserved keywords and can not be used as names for ES6 module exports. These expressions can be replaced by ExpressionFactory.boolean(true) and ExpressionFactory.boolean(false).

Upgrade considerationLuciadRIA

You can now configure how the 3D camera interacts with terrain and meshes while navigating. See MapNavigatorConstraints for details. You can choose what data the map navigation takes into account to push the camera upwards:
  • Terrain: if enabled, the camera will stay above the data in elevation layers. On by default.
  • Mesh: if enabled, the camera will stay above the data loaded in 3D tiles layers. Off by default.
  • None: the camera is not restricted, and can go under or inside the terrain and mesh data.
Note that compared to LuciadRIA 2018.x, the camera no longer interact with the mesh by default. If you want this behavior, you can easily re-enable it using map.mapNavigator.constraints.above = {mesh: true};. Also note that if you enable the above-mesh constraint, LuciadRIA now uses coarse-grained intersection tests, instead of fine-grained tests. This may result in different map navigation compared to LuciadRIA 2018.x;

Upgrade considerationLuciadRIA

LuciadRIA V2019 no longer supports WebGL maps (luciad.view.WebGLMap) on Internet Explorer 11. You can still use software-rendered maps (luciad.view.Map) on Internet Explorer 11.

Upgrade considerationLuciadRIA

The minMapScale, maxMapScale and restrictNavigationToBounds on Map have been deprecated. Instead, to constrain the map navigation, constraints should be configured on MapNavigator using MapNavigatorConstraints.

Upgrade considerationLuciadRIA

RIA-2434
The winding orientation of closed shapes styled with borders is automatically normalized to properly identify the inner and the outer side of the shape. The discretized line for closed shapes is normalized to clockwise orientation. If you use a complex stroke style with border styles this can effect the position of decoration patterns.

Upgrade considerationLuciadRIA

The AirspacePainter API has been removed. The functionality to draw the inner border and the outer border for closed shapes is now exposed through BorderStyle API. If you were using AirspacePainter you need to replace an AirspacePainter instance by a FeaturePainter instance that draws shapes with ShapeStyle.innerBorder and ShapeStyle.outerBorder styling objects. For more information please refer to the user guide and LuciadRIA API documentation.

Upgrade considerationLuciadRIA

RIA-2540
Changed the default value of TileSet3DLayer.offsetTerrain to false when constructing a TileSet3DLayer. If you were already using this option explicitly in your TileSet3DLayer instances, then no further action is required. If you were using the default constructor for TileSet3DLayer, and would like to have the terrain automatically lowered for OGC 3D Tiles datasets, you will now explicitly have to set this option to true.

Upgrade considerationLuciadRIA

RIA-1023, RIA-1518, RIA-1568, RIA-2113, RIA-2508
LuciadRIA now correctly respects the order of coordinates while decoding and encoding geometry. Most notably, this affects:
  • OGC services (WMS and WFS)
  • GML decoding
  • OGC BBox filters
Especially when used in combination with the EPSG:4326 reference. Coordinates in the EPSG:4326 reference are now (correctly) decoded and encoded in lat-lon order, instead of lon-lat order. If you already implemented a workaround for swapping coordinates, then you will need to either remove this workaround or use the newly introduced swapAxes flag in the constructor of GMLCodec, GeoJsonCodec, WFSFeatureStore, WMSImageModel or WMSTileSetModel to customize the coordinate swapping behavior.

Upgrade considerationLuciadRIA

The withCredentials constructor option for UrlStore and WFSFeatureStore has been deprecated. Use credentials instead.

Upgrade considerationLuciadRIA

LuciadRIA V2018 no longer supports the browsers Internet Explorer 9 and Internet Explorer 10.

Upgrade considerationLuciadRIA

RIA-971
Because the LuciadRIA sample code no longer depends on Dojo, the Dojo library has been completely removed from samples/lib. LuciadRIA remains compatible with Dojo. If you want to use Dojo, you can still download it yourself at dojotoolkit.org and use Dojo's components in your LuciadRIA project. For more details, see our developer guide.

Upgrade considerationLuciadRIA

The default LayerType is now STATIC. Before, the default was DYNAMIC for FeatureLayer and KMLLayer and unspecified for other layers. Since the layer type can affect painting performance in both a WebGLMap or a Map, you should review your layers and adapt where necessary. For more information, see API documentation of LayerType.

Upgrade considerationLuciadRIA

RIA-1951
The luciad/resources directory has been removed from LuciadRIA. The content of file luciad/resources/css/luciad.css can now be found in samples/common/balloon/luciad-balloon.css.

Upgrade considerationLuciadRIA

RIA-1944
In the sample code, all paths relative to a module have been replaced by paths relative to the baseURL, improving the packability of the sample code

Upgrade considerationLuciadRIA

The majority of LuciadRIA static resources are now loaded properly without setting window.LUCIADROOT_ variable. This variable still needs to be defined in two cases: if the Military Symbology component API is used, or if you do not use the License API to provide the license information. In the latter case, LuciadRIA will look for the license file in the default location: luciad/license/. For more details, please consult the LuciadRIA developer guide.

Upgrade considerationLuciadRIA

RIA-971
luciad/resources/luciad.css, which is used for styling balloons in LuciadRIA, has been moved to sample code. It can now be found as samples/common/balloon/luciad-balloon.css. See Map#showBalloon() for more information about styling balloons.

Upgrade considerationLuciadRIA

The initial value of MapNavigator#defaults.snapToScaleLevels is now false.

Upgrade considerationLuciadRIA

RIA-1469
Due to a change in Google policy, the use of a Google Maps API authentication is now mandatory. If you try to construct a GoogleImageModel without an authentication parameter, an Error will be thrown.

Upgrade considerationLuciadRIA

Units of measures and quantity kinds now must be registered using the luciad/uom/UnitsOfMeasure#register[ConversionUnit|Unit] and luciad/uom/QuantityKind#registerQuantityKind and APIs. Previously, to register , users could register new entries by modifying the luciad/resources/uom/UnitsOfMeasure.json and luciad/resources/uom/QuantityKind.json files. If you have modified these files, your code will no longer be compatible. Instead, you will now need to use the above mentioned API calls. Please refer to the API documentation for examples.

Upgrade considerationLuciadRIA

You can now optionally set the window.__LUCIAD_ROOT__ global variable to configure the root directory of the LuciadRIA deployment. This variable is introduced so LuciadRIA can correctly locate resources other than Javascript modules, such as images, JSON configuration files, license files, or web workers. Previously, LuciadRIA depended on AMD specific functionality, which made it hard to integrate LuciadRIA with contemporary packaging tools. This is now no longer the case. If you continue to use AMD module loading tools and your AMD package configuration uses "luciad" as the package name for the LuciadRIA module location, no changes need to be made. If you are using a name other than "luciad", you must set that window.__LUCIAD_ROOT__ configuration accordingly. The advantage of this change is that users now have more flexibility in what tools they can use to setup and deploy applications that depend on LuciadRIA. Users now no longer are restricted to using a fully AMD-compliant module loader.

Upgrade considerationLuciadRIA

RIA-629
The behaviour of setting a navigation constraint on the map with Map#restrictNavigationToBounds has changed. When a navigation restriction is set, it is no longer possible to see any content outside that area. The practical consequence is that the user can no longer zoom out to an extent that exceeds the width or height of the bounds.

Upgrade considerationLuciadRIA

Data is now being loaded lazily from the server: data will only be loaded from the server if the layer is visible. Visibility can be configured through the visibility property, or by means of scale ranges on the layer. Before this change, LuciadRIA would always load data from the server, also if a layer was invisible. If your application is designed to respond to WorkingSet events for FeatureLayers that are invisible when they are added to the Map, your application will no longer work as expected. You can typically fix this by ensuring that layers are visible when added to a map. If the layers contain a lot of data, you can use a LoadingStrategy to better have better control over when data is loaded and what data is loaded.

Upgrade considerationLuciadRIA

RIA-203
It is now possible to equip a FeatureLayer with a LoadingStrategy which determines how the layer loads data. Currently, two loading strategies are supported: the AllLoadingStrategy and SpatialLoadingStrategy. The AllLoadingStrategy always loads all data from the server. This was the default behavior before it was possible to configure a data loading strategy on the layer. The SpatialLoadingStrategy only loads data that is in the current map view. When you pan or zoom, the view extent changes and additional data may be loaded. Both the AllLoadingStrategy and SpatialLoadingStrategy can also be configured with a QueryProvider. A QueryProvider allows you to define what data needs to be loaded from the server for different Map Scale levels. To facilitate these data loading strategies, the query property on FeatureLayer has been deprecated in favor of the use of a QueryProvider.

Upgrade considerationLuciadRIA

RIA-607
The optional styles parameter of the constructor of a WMSImageModel and a WMSTileSetModel is now an array. This is now consistent with the type of the layers-parameter. The old type of the styles parameter was a comma-delimited string and is now deprecated.

Upgrade considerationLuciadRIA

RIA-545
The beginMarker and the endMarker styling properties moved from luciad.view.style.ShapeStyle to luciad.view.style.LineStyle. A deprecation message will be logged to the console for shapeStyle objects that have either of these two properties.

Upgrade considerationLuciadRIA

RIA-423
IconStyle now supports both relative and absolute width/height and anchorX/anchorY parameters. These parameters have been changed to a String that contains a css-style value and a unit of measure. Examples of this are: "50%", or "16px". Relative values are given in percentages, absolute values are given in pixels. If you are now configuring the width and height with a simple number-value, please change it to a string-value of that number with the postfix "px". Because relative sizes can now be defined with width/height, the scaleX/scaleY properties have become deprecated. A scale of (for instance) "2", is equal to a width of "200%".

Upgrade considerationLuciadRIA

RIA-306
For naming consistency with the levelCount property, the levels optional configuration parameter of the RasterTileSetModel constructor is now deprecated in favor of the optional parameter levelCount. If you are using the 'levels' optional parameter, please rename it to 'levelCount'.

Upgrade considerationLuciadRIA

Methods on the luciad/ogc/filter/FilterFactory no longer accept strings as arguments where OGC expressions are expected. You must instead explicitly pass a literal or property name to factory methods. Please modify your code from <string> to FilterFactory.literal(<string>) or FilterFactory.property(<string>) respectively. The identifiers() factory method now allows the definition of both GmlObjectId and FeatureId identifiers. Previously, only FeatureIds could be created. To remain compatible, please modify existing calls to the identifiers() method from FilterFactory.identifiers(<list of FeatureIDs>) to FilterFactory.identifiers([], [<list of FeatureIDs>]);

Upgrade considerationLuciadRIA

The signature of the draw methods on the LabelCanvas (drawLabel, drawLabelOnPath, drawLabelInPath) has been changed. The text parameter value can now contain HTML, which will be rendered as such. The textStyle parameter has been removed in favor of CSS styling, which can be inlined in the text parameter or can be configured through CSS classes, which you must define in your application's CSS stylesheet.

Upgrade considerationLuciadRIA

GeoReference has been renamed to CoordinateReference. GeoReferenced has been renamed to CoordinateReferenced. This modification was done to accommodate the visualization on non-georeferenced data. CoordinateReference and CoordinateReferenced are applicable to both geographical references as non-geographical references.

Upgrade considerationLuciadRIA

The mapScale property of a Map now returns an Array of two Numbers, instead of a single Number value. Those numbers represent the scale along the X and Y axes.

Upgrade considerationLuciadRIA

RIA-171
The Store, Codec and FeatureModel API has been adjusted to provide a clean distinction between the client-server communication and the format specific logic (= the conversion between server-side data format and the LuciadRIA Features format). This makes it easy to extend existing Stores with support for additional data formats. Previously, the Store would convert the response of the server into Javascript objects, and the FeatureModel would convert those objects into LuciadRIA features by using a Codec. This meant that both the Store and the Codec had knowledge of the format of the server response. If you wanted to support an additional format, you needed to adjust both the Codec and the Store. The new approach is to let the Store convert the server response into LuciadRIA features and pass them directly to the FeatureModel. Some of the Store implementations available in the API use a Codec to convert the server response into Features. This allows to support additional formats by providing a new Codec to the Store, without changing the Store. The benefit is that the Codec should only contain the logic related to the format, while all the client-server communication logic of the Store can be reused. Consult the documentation of the FeatureModel, Store and Codec classes for more information. This affects the following classes:
  • FeatureModel: the FeatureModel no longer uses a Codec. If you still pass one in the constructor, a warning will be logged. The conversion to Features should now happen in the Store.
  • Store: the Store API has been adjusted to work with Features. The event that is fired should now contain a Feature and no longer a Javascript object, and the query method should return a Cursor of Features. The getIdentity method has been removed as the Feature API allows to retrieve the ID. All Store implementations in the API have been adjusted (see below).
  • Codec: the Codec no longer encodes/decodes a single object into a Feature but now parses the whole server response into a Cursor of Features. This avoids that the format logic is contained in both the Store and the Codec. The GeoJsonCodec class has been adjusted to match this new API.
  • Cursor: the Cursor API has been completely changed. The previous methods and fields (forEach() and count) have been replaced by a hasNext and next() method. This allows to perform lazy-decoding of the server response and is better suited to handle large. The ArrayCursor class has been adjusted to match this new API.
The following Store implementations have been changed:
  • MemoryStore: the idPath option is no longer supported in the constructor. A warning will be logged when you still use this option. No Codec can be set on this Store as it stores the Feature instances in memory without converting them to another format.
  • UrlStore: the idPath option is no longer supported in the constructor. A warning will be logged when you still use this option. The decode method has been replaced by the possibility to specify a Codec in the constructor. It is up to the Codec to decode the server response to LuciadRIA features.
  • RestStore: this class has been removed from the API, and has been added to the samples. There is no standard behavior for REST servers for adding/updating elements. As such, it is very hard to provide an implementation which works for all servers. We opted to make our implementation available as sample code. This allows you to easily modify the behavior of the Store to match the one of the server. The Store has also been adjusted to the new API: the idPath option is no longer supported in the constructor, and the decode/encode methods have been replaced by a Codec.
  • WFSFeatureStore: this Store has been added to the API and replaces the WFSFeatureModel. It allows to replace the Codec in order to support different output formats. In order to create a WFS model you can use a standard FeatureModel in combination with the WFSFeatureStore. Note that some of the query options which were available on the WFSFeatureModel have been moved to the constructor of the WFSFeatureStore. Warnings will be logged when you pass the old options to the query method. The support for configuring multiple type names in one WFSFeatureModel has also been dropped. Each type name now requires its own model and own WFSFeatureStore. Consult the documentation of the constructor and query method of the WFSFeatureStore for a detailed list of what is supported.

Upgrade considerationLuciadRIA

All CSS class names used by LuciadRIA have now been prefixed with 'lcd' to avoid clashes with application specific CSS class names. This should only affect balloon styling.

Upgrade considerationLuciadRIA

The luciad.view.style.GeoCanvas#drawShape method now expects a luciad.view.style.FillStyle object literal to describe the fill and no longer a fill color as String. stroke and strokeWidth have been replaced by a luciad.view.style.LineStyle object literal in a similar fashion. The old options are still supported but is deprecated. A warning will be logged when passing the fill or stroke as a String, or when using the strokeWidth property.

Upgrade considerationLuciadRIA

Scale properties throughout the LuciadRIA API now express map scale. Map scale expresses the ratio of the on screen distance to the real world distance. E.g. if 1cm on the screen displays 30.000cm, the map scale is 1/30000. Note that map scale is only an approximation, because web browsers do not provide unambiguous means to determine how many pixels occupy 1cm of screen space. This is relevant when configuring for example the minScale and maxScale properties of a 'luciad/view/feature/FeatureLayer' or when invoking the setScale or zoomTo methods on a 'luciad/view/MapNavigator'.

Upgrade considerationLuciadRIA

Styling properties "stroke-width", "text-anchor" and "alignment-baseline" have been renamed to "strokeWidth", "textAnchor" and "alignmentBase" respectively. The old keywords are deprecated and will be removed in the future.

Upgrade considerationLuciadRIA

The paintLabel method is now passed a labelCanvas parameter instead of a GeoCanvas parameter to support label decluttering. Labeling in painters may break because of the different API and semantics that are realized by the LabelCanvas.

Upgrade considerationLuciadRIA

The order of children of a luciad/view/LayerTreeNode has been reversed to be compatible with other Luciad products. Apart from layer bookkeeping functionality, applications should not be affected by this modification. Additionally, the position keywords to add layers to the layer tree have been renamed from "first", "last", "before" and "after" have been renamed to "top", "bottom", "above" and "below" respectively. The old keywords still work but are deprecated; they will be removed in a future release.

Upgrade considerationDefense Symbology

You no longer need LuciadLightspeed to build and deploy the military symbology service. Instead, the military symbology service is now part of the LuciadFusion Defense Symbology Compononent. Deployment is much simpler; the symbology service is started automatically when you start the LuciadFusion Platform.

Upgrade considerationDefense Symbology

Several arrow symbols in the military symbologies were painted in the wrong direction. The direction of those symbols is now corrected by default.
Disabling the fix
If you want to disable this fix and keep the old behavior, you can set the MilitarySymbologyPainter.PAINT_LEGACY property to true.
Affected symbols
APP-6A / APP-6B
Name Code(SIDC) Hierarchy Code
Counterattack (CATK) G*T*GK----***** 2.X.1.1.7
Counterattack by Fire GFC*MOLAF-***** 2.X.1.1.7.1
Axis of Advance - Friendly Aviation GFC*MOLAF-***** 2.X.2.1.5.2.1.1
Axis of Advance - Friendly Airborne GFC*MOLAA-***** 2.X.2.1.5.2.1.2
Axis of Advance - Friendly Attack Helicopter GFC*MOLAH-***** 2.X.2.1.5.2.1.3
Axis of Advance - Friendly Ground Axis Of Supporting Attack GFC*MOLAS-***** 2.X.2.1.5.2.1.4
Axis of Advance - Friendly Ground Axis Of Main Attack GFC*MOLAM-***** 2.X.2.1.5.2.1.5
Axis of Advance - Enemy Confirmed GHC*MOLAE-***** 2.X.2.1.5.2.1.7
Axis of Advance - Enemy Templated GHC*MOLAT-***** 2.X.2.1.5.2.1.8
Direction Of Attack - Friendly Direction Of Supporting Attack GFC*MOLDS-***** 2.X.2.1.5.2.2.7
Direction Of Attack - Friendly Direction Of Main Attack GFC*MOLDM-***** 2.X.2.1.5.2.2.8
APP-6C
Name Code(SIDC)
Counterattack (CATK) 10002500003214000000
Counterattack by Fire 10002500003215000000
Airborne/Aviation Axis of Advance Aviation 10002500001513000000
Main Attack/Decisive 10002500001514000000
Supporting Attack/Shaping 10002500001515000000
Supporting Attack/Shaping - Feint 10002500001515010000
Advance to Contact 10002500003201000000
Mission Tasks/Verbs - Attack 10002500003204000000
MIL-STD-2525B / MIL-STD-2525C
Name Code(SIDC) Hierarchy Code
Counterattack (CATK) G*T*K-----****X 2.X.1.7
Counterattack by Fire G*T*KF----****X 2.X.1.7.1
Axis of Advance - Aviation G*G*OLAV------X 2.X.2.5.2.1.1
Axis of Advance - Airborne G*G*OLAA------X 2.X.2.5.2.1.2
Axis of Advance - Attack, Rotary Wing G*G*OLAR------X 2.X.2.5.2.1.3
Axis of Advance - Main Attack G*G*OLAGM-----X 2.X.2.5.2.1.4.1
Axis of Advance - Supporting Attack G*G*OLAGS-----X 2.X.2.5.2.1.4.2
Axis of Advance For Feint G*G*PA--------X 2.X.2.3.2