2020.1.05
Bug fixLuciadRIA
RIA-3403
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
2020.1
2020.1.04
ImprovementDefense Standards
RIA-2588
ImprovementDefense Standards
RIA-2797
ImprovementDefense Standards
RIA-2110
ImprovementDefense Standards
RIA-2447
- 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 Standards
RIA-2053
- 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
Bug fixLuciadRIA
RIA-3370
CreateController.setPointCount
were ignored when creating a military symbology feature.
Bug fixLuciadRIA
RIA-3385
geoCanvas.drawIcon3D
would cause an error and the 3D icon was not visualized.
Bug fixLuciadRIA
RIA-3364
Bug fixLuciadRIA
RIA-3374
Bug fixLuciadRIA
RIA-3398
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
NotImplementedError
was thrown when right-clicking on a
shape that is being edited.
Bug fixDefense Standards
RIA-3369
2020.1.03
ImprovementLuciadRIA
RIA-3355
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
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
Bug fixLuciadRIA
RIA-3363
Bug fixLuciadRIA
RIA-3358
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
GetFeatureInfo
operation is missing from GetCapabilities
response, the WMSCapabilities.operations
array no longer contains an invalid
null
entry.
2020.1.02
ImprovementLuciadRIA
RIA-3351
Bug fixLuciadRIA
RIA-3315
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
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
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 Standards
RIA-3299
- 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
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
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
Bug fixLuciadRIA
RIA-3296
2020.1
New featurePanoramics
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
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
FeatureLayer
using LoadingStrategy
API.
The new LoadingStrategy.refresh
property accepts the following values:
number
- the loading strategy refreshes everyn
milliseconds.Date
object - the loading strategy will refresh at that time.null
- the loading strategy never refreshes.
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
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
- Placemark items
- Network links
- Container elements
- Ground overlays
- KMZ data can now be parsed.
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
ImprovementLuciadRIA
RIA-3099
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
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
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
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
.

ImprovementLuciadRIA
RIA-3209
Decoration.alignment
property. The property accepts
now only expected string literals: "left", "center" or "right".
ImprovementLuciadRIA
Icon3DStyle
now accepts both glTF version 1.0 and 2.0. Additionally it's now
possible to use binary glTF as well.
ImprovementLuciadRIA
PointLabelPosition.SOUTH
for labels drawn on the bottom borderPointLabelPosition.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.

ImprovementLuciadRIA
RIA-3114
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
GraphicsEffects
was enhanced. The atmosphere can now more accurately
visualize time of day.
See LightScatteringAtmosphere
for more details.
ImprovementLuciadRIA
RIA-3100
model
accessor of RasterTileSetLayer
is now more precisely typed with
RasterTileSetModel | null
instead of Model | null
.
ImprovementLuciadRIA
Bug fixLuciadRIA
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
Bug fixLuciadRIA
RIA-2968
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
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 Standards
RIA-3230
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
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
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
Upgrade considerationLuciadRIA
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
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.