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

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 Standards

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 Standards

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.