2020.1.14
Bug fixLuciadRIA
RIA-3553
EditController
gets deactivated properly when the edited shape belonged to a cluster.
Before the fix the controller was frozen waiting for the feature update confirmation on the edited shape.
Bug fixLuciadRIA
RIA-3547
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
2020.1.13
ImprovementLuciadRIA
RIA-3489
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
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
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
Icon3DStyle
regularly.
2020.1.11
ImprovementLuciadRIA
RIA-3518
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
FilterFactory.identifiers
function signature is corrected:
the second argument featureIds
is optional.
Bug fixLuciadRIA
RIA-3503
Bug fixLuciadRIA
RIA-3506
2020.1.10
ImprovementPanoramics
RIA-3392
ProjectionTarget.CLOSEST_SURFACE
and looking at the projection
from a relatively far distance.
Bug fixLuciadRIA
RIA-3501
Bug fixLuciadRIA
RIA-3244
RasterTileSetLayer
rendering. When moving the layer, or toggling
visibility of layers below the raster layer, a TypeError: self.cancelTile is not a functionerror was thrown in some cases.
Bug fixLuciadRIA
RIA-3500
Bug fixLuciadRIA
RIA-3496
Bug fixLuciadRIA
RIA-3495
ShapeList
: editing would not respect the min/max
point count set on the controller.
Bug fixLuciadRIA
RIA-3494
GeoBuffer
creation: creation would not finish when the max point count
limit was reached.
Bug fixPanoramics
RIA-3498
2020.1.09
Bug fixLuciadRIA
RIA-3490
Bug fixLuciadRIA
RIA-3487
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
nodata
field.
ImprovementDefense Standards
RIA-3450
MilSymStyle.haloColor
and MilSymStyle.haloWidth
for more information.
Bug fixLuciadRIA
RIA-3478, RIA-3479
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
parseWellKnownText
would sometimes not parse the geographic reference parameters correctly.
Bug fixLuciadRIA
RIA-3474
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
ReferenceProvider
would not parse correctly some parameters of Krovak WKT parameters.
Bug fixLuciadRIA
RIA-3468
Bug fixLuciadRIA
RIA-3467
ReferenceProvider
would not parse correctly Krovak_(North_Orientated) projections.
Bug fixDefense Standards
RIA-3465
Bug fixDefense Standards
RIA-3460
Bug fixPanoramics
RIA-3367
ProjectionTarget.CLOSEST_SURFACE
.
Bug fixPanoramics
RIA-3348, RIA-3430
ProjectionTarget.CLOSEST_SURFACE
,
even though they shouldn't be.
Bug fixPanoramics
RIA-3366
ProjectionTarget.CLOSEST_SURFACE
,
2020.1.06
ImprovementLuciadRIA
RIA-3458
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
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 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
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-2110
- Indicate the origin point A
- Indicate a point B on the minor radius of the first sector
- Indicate a point C on the left side of the first sector
- 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.
- Repeat steps 2, 3 and 4 for the subsequent sectors.
ImprovementDefense Standards
RIA-2797
MilitarySymbologyPainter
and
add a style-property cornerSmoothness
with a value between 0 (no rounding) and 1 (very smooth
rounding).
ImprovementDefense Standards
RIA-2588
- MIL-STD-2525d
- APP-6D
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
Quaternion
and Vector3
modules.
Bug fixLuciadRIA
RIA-3455
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
FilterFactory.sub
filter
with a negative FilterFactory.literal
value.
Bug fixDefense Standards
RIA-3369
Bug fixPanoramics
RIA-3439
FusionPanoramaModel
did not properly pass the
credentials
and requestHeaders
constructor options
to the base PanoramaModel
.
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.04
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.
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.