Release Notes

IDDescription
2020.0.01
Enhancements
LMOB-772

TLcdWMTSModelFactory.queryLayers and TLcdWMTSModelFactory.decodeWMTSModel now allow you to add headers to requests that are sent to the WMTS service. This can for example be used for basic authentication.

2020.0
Fixes
LMOB-737

Added the missing exercise indicator (X) for the MIL-STD-2525 C ‘Moored Exercise Mine’ symbol for the Unknown, Pending, Friend, Assumed Friend, Neutral and Hostile affiliations.

LMOB-749

Changing the visibility of TLcdRasterTileSetLayer caused a NullPointerException when the layer was not on a map.

LMOB-760

The width of the halo configured on a TLcdLineStyle was not applied correctly when painting lines.

LMOB-765

Military symbology: fixed incorrect icon offset for headquarters symbols in APP-6C, APP-6D, and MIL-STD 2525D.

Enhancements
LMOB-611

Military symbology: now supports the damaged and destroyed status indicator for military icon symbols.

LMOB-620

LuciadMobile now supports the arm64-v8a architecture.

LMOB-748

TLcdRasterTileSetLayer would not paint raster data if the raster tileset only had data for a specific level range (e.g. level 8 to 12). As a result some MBTiles raster tile sets could not be visualized.

LMOB-767

Military symbology: MIL-STD 2525C and APP-6B joker icons no longer use a dotted outline.

Upgrade Considerations
-

The libpng library used by LuciadMobile is updated to 1.6.37.

-

The libwebp library used by LuciadMobile is updated to 1.0.3.

-

The ECW library used by LuciadMobile is updated to 5.5.

LMOB-536

LuciadMobile now uses the Android SQLite bindings v3.29.0, which replaces the previously used SQLite bindings. This update does not require code changes.

LMOB-688

The minimum required Android API level has been raised to 21 (Android 5.0). Additionally ARMv5 (armeabi) processors are no longer supported.

2019.0.03
Fixes
LMOB-742

Military symbology: echelons can now also get visualized for APP-6C/APP-6D/MIL-STD 2525D symbols.

LMOB-743

Military symbology: initialization of symbols is now thread-safe.

Enhancements
-

Rendering for non-quadtree structured raster tile sets has been improved when zooming. The screen will no longer blank when switching levels on a non-power of two raster tileset.

Upgrade Considerations
LMOB-741

Military symbology: ALcdMilitaryShapeSymbol#getPreview now returns null for shapes that don’t have a preview. Previously the preview was empty for APP-6C/APP-6D/MIL-STD 2525D symbols (LMOB-731). If you used this method before, make sure to add a null-check.

2019.0.02
Fixes
LMOB-720

Some military icons (for example Ground Track Unit in APP-6B) were missing and could not be drawn, this has been fixed.

LMOB-725

Military symbology: the Mine Cluster graphic symbol was only partially painted.

LMOB-726

Military symbology: fixed decoration position of the Isolate graphic symbols.

LMOB-729

Military symbology: wind barb icons were not rotated correctly.

LMOB-732

The transformations available on TLcdMapView, e.g. the view to map transformation, were not updated before the map listeners were called. As a result these transformations would return results based on the previous map state when used in a map listener.

LMOB-734

The map was not repainted when the layer ordering in the TLcdLayerTree changed.

Enhancements
LMOB-730

The Cassini projection now has been modified to support ellipsoidal transformations.

2019.0.01
Fixes
LMOB-684

Fixed an issue where not all shape style properties passed to feature were saved properly.

2019.0
Fixes
LMOB-676

ALcdMilitaryIconSymbol did not update its size when ALcdMilitaryIconSymbol#setProperties was called.

LMOB-677

The ProGuard configuration file contained a typo, keepclasseswithmember should be keepclasseswithmembers, this has now been corrected.

LMOB-702

Screen/Guard/Cover shapes are now drawn properly

LMOB-703

Outside text pattern disappearance does not depend on its size anymore

Enhancements
-

Military symbology: support has been added for all tactical graphics in APP-6A/6B and MIL-STD 2525b/c.

-

TLcdShapeFactory now allows passing coordinate values when creating points, polylines, and polygons.

-

The Bing Maps client now uses https for its connections.

-

Military symbology: support has been added for the military symbologies APP-6C/6D and MIL-STD 2525d. For APP-6C and MIL-STD 2525d, all icons and shapes are supported. For APP-6D, all icons and a limited selection of shapes are supported. The supported symbols can be enumerated using TLcdSymbologyProvider.

LMOB-496

The LuciadMobile samples now come with a build.gradle file so you can directly open and compile them using gradle or Android Studio.

Upgrade Considerations
-

ALcdSymbologyNode#getType now returns null for symbols that are neither icons or shapes. Nodes in a symbol hierarchy expose their type (ICON or SHAPE). ALcdSymbologyNode#getType used to return ICON for folder-only symbols (i.e. nodes that don’t correspond to actual symbols, but are purely there to group other symbols). Make sure you check all usages of the method to prevent a NullPointerException.

-

Support for the TAM 105 aid for Land Force symbols (B-GL-334-001/FP-001) is no longer included. Please contact support if you are affected by this change.

-

Introduced ALcdMilitarySymbol, which allows enumerating modifiers, querying possible modifier values and setting and retrieving modifier values.

LMOB-682

An ILcdBounds instance can now be undefined. This means that the instance does not describe a geographic region.

For this, there is a new method on ILcdBounds: isDefined().

Implementations must add this method. Usually, returning true is enough. Extensions of ALcd2DEditableBounds can use setDefined(boolean) to manage the defined status.

The behavior of the LuciadMobile bounds implementations is mostly the same. - Composite shapes such as ILcdShapeList, ILcdPointLists, ILcdPolygon, etc. will return undefined bounds if they are empty

When creating new bounds instances using LuciadMobile implementations: - default (empty) constructors -> undefined - constructors with values -> defined - copy constructor -> copies defined status - clone* -> copies defined status - equals/hashCode -> take defined status into account

When modifying bounds instances: - move?D, translate?D, setWidth, setHeight, setDepth -> instance becomes defined

When testing with bounds instances: - undefined.contains?D(anything) = false - undefined.interacts?D(anything) = false - defined.contains?D(undefined bounds) = false - defined.interacts?D(undefined bounds) = false - Note: this means that new TLcdLonLatBounds().contains2D(0, 0) now returns false instead of true

Calculating intersections: - Position, width and height are always updated as before - undefined.setTo?DIntersection(anything) -> stays undefined - defined.setTo?DIntersection(undefined bounds) -> becomes undefined - defined.setTo?DIntersection(defined bounds, but disjoint, no overlap) -> becomes undefined

Calculating unions: - undefined.setTo?DUnion(defined bounds) -> becomes defined, equal to given bounds - defined/undefined.setTo?DUnion(undefined bounds) -> no change in bounds or defined status - setToIncludePoint?D -> same as union

2018.1.01
Fixes
LMOB-633

TLcdWKTReferenceFormat did not always interpret the latitude_of_origin parameter for the polar stereographic projection correctly. Also, TLcdWKTReferenceFormat now formats the true scale latitude correctly.

LMOB-660

Labels for points that were not drawn as a body were not shown. For example, if an ‘ALcdFeaturePainter’ draws a circle on the map based on a point shape and uses the point shape to draw a label.

LMOB-672

TLcdLonLatHeightPointList#translate3D incorrectly translated the latitude and did not apply a translation to the height of the points in the list.

Enhancements
LMOB-673

A new class ALcdUriRasterTileSetModel is introduced to simplify the creation of raster tileset models for which the tiles can be retrieved through a Uri.

2018.1
Fixes
LMOB-663

‘TLcdRasterTileSetLayer would log debug statements without logging enabled.’

LMOB-664

‘A NullPointerException would occur when TLcdDimmingLayer was the first layer added to the view.’

Enhancements
LMOB-652

TLcdElevationColorMap.createDefaultElevationColorMap : the default color scheme for elevation data was enhanced to differentiate between levels of 3500m, 4000m, 4500m, 5000m, 5500m and 6000m. Each of these levels now has a different color. This will cause regions with high altitude, like e.g. the Himalayas, to show more details.

LMOB-661

The method ALcdRasterTileSetModel.getDataBounds can now be used to query the actual data bounds for MBTiles raster tile set data.

Upgrade Considerations
LMOB-665

A new method ‘getDataBounds()’ has been added to the interface ‘ILcdTileSet’, to enable users to describe the bounds of the data located in the tile set. Implementations of this interface can simply return the tile set bounds by delegating to ‘getBounds()’, if the data bounds are not available.

2018.0
Enhancements
-

TLcdElevationColorMap.createDefaultElevationColorMap : the default color scheme for elevation data was enhanced to have less saturated colors that are perceived more equally.

Should you still need the old color scheme, here is a code snippet to create it:

/**
 * Creates the elevation map that was used by default in LuciadMobile versions before 2018.0
 *
 * @return The old default elevation color map.
 */
public static TLcdElevationColorMap createLegacyElevationColorMap() {
  TreeMap<Double, Integer> colorMap = new TreeMap<Double, Integer>();
  colorMap.put(Double.MAX_VALUE, Color.WHITE);
  colorMap.put(3500.0, Color.WHITE);
  colorMap.put(2500.0, Color.rgb(144, 144, 144));
  colorMap.put(1400.0, Color.rgb(154, 78, 46));
  colorMap.put(1300.0, Color.rgb(180, 131, 82));
  colorMap.put(1200.0, Color.rgb(172, 133, 51));
  colorMap.put(1100.0, Color.rgb(200, 140, 61));
  colorMap.put(100.00, Color.rgb(229, 108, 53));
  colorMap.put(900.0, Color.rgb(229, 149, 71));
  colorMap.put(800.0, Color.rgb(231, 170, 80));
  colorMap.put(700.0, Color.rgb(237, 181, 79));
  colorMap.put(600.0, Color.rgb(242, 205, 96));
  colorMap.put(500.0, Color.rgb(247, 216, 101));
  colorMap.put(400.0, Color.rgb(237, 210, 131));
  colorMap.put(300.0, Color.rgb(132, 178, 100));
  colorMap.put(200.0, Color.rgb(117, 165, 82));
  colorMap.put(100.0, Color.rgb(103, 147, 73));
  colorMap.put(Double.MIN_VALUE, Color.rgb(85, 121, 61));
  colorMap.put(0.0, Color.rgb(140, 150, 210));
  colorMap.put(-1.0, Color.rgb(160, 224, 224));
  colorMap.put(-100.0, Color.rgb(128, 192, 192));
  colorMap.put(-500.0, Color.rgb(0, 192, 192));
  colorMap.put(-1000.0, Color.BLUE);
  colorMap.put(-Double.MAX_VALUE, Color.BLUE);

  return new TLcdElevationColorMap(colorMap);
}
LMOB-397

ALcdMilitaryShapeSymbol: added method createShape to create the appropriate shape for that symbol. Using the accompanying applyTemplateShape, you can adjust the shape to have an initial geometry that is appropriate for the symbol.

LMOB-616

It is now possible to rotate the map using a two-finger rotate gesture. This is supported by the new ROTATE gesture type in the TLcdGestureEvent API-class.

LMOB-659

TLcdMBTilesModelFactory was introduced for the decoding and visualization of MBTiles raster data in LuciadMobile.

2017.1.05
Fixes
LMOB-650

TLcdECWModelFactory : the image data could be misaligned in some cases. This is now fixed.

2017.1.04
Fixes
LMOB-639

ALcdMilitaryShapeSymbol : symbols containing arcs in their stroke are now rendered correctly on Android 6.0 and later. For instance, concertina, forward line of troops and line of contact symbols are now painted correctly.

Enhancements
-

APP6: added support for the “Phase Line” (2.X.2.5.3.2/GCOLP—*****) tactical graphic.

2017.1.03
Fixes
LMOB-649

TLcdUTMPointFormat.parseObject no longer reports a parse error if it successfully decoded a coordinate to an ILcdPoint.

Enhancements
LMOB-647

TLcdRasterTileSetLayer : keep the previous raster tiles in cache until new tiles are available. This improves the behavior when the network connection is interrupted.

2017.1.02
Enhancements
LMOB-646

TLcdWMTSModelFactory : improved compatibility with 3rd party WTMS servers. Specifically, WMTS capability documents that have <wmts:Style> elements with an empty identifier are now supported.

2017.1.01
Enhancements
LMOB-643

Improved the robustness of the ALcdCreateController.

2017.1
Fixes
-

TLcdReferenceFactory: the accuracy of a lot of projections was improved.

Enhancements
-

You can now be notified when a layer did not paint the real model contents due to memory constraints. See the reference documentation of ALcdLayerTreeNode.isProtectingAgainstMemoryOverload and ALcdLayerTreeNode.addOnProtectingAgainstMemoryOverloadStatusChangedListener for more details.

-

TLcdBingMapsModelFactory : added support for the new BingMaps styles:

  • CanvasDark
  • CanvasGray
  • CanvasLight

For more information on the new BingMaps style, please see Microsoft’s blog : https://blogs.bing.com/maps/September-2016/Bing-Maps-V8-August-2016-Update

LMOB-627

You can now be notified when a layer is finished loading its data. See the reference documentation of ALcdLayerTreeNode.isLoading and ALcdLayerTreeNode.addOnLoadingStatusChangedListener for more details.

LMOB-631

You can now set an ERDAS OEM Mobile Decode Key using TLcdECWModelFactory.setOEMMobileDecodeKey. This allows you to open local ECW files that are larger than one gigapixel.

LMOB-632

TLcdMapView now has a clearSelection method to efficiently deselect all features. ALcdFeatureLayer also has this method if you only want to clear the selection of a single feature layer.

2017.0.01
Fixes
-

TLcdTransformationFactory: bounds transformations were inaccurate in several cases. These have been fixed.

-

TLcdWKTReferenceFormat now recognizes well-known names of geodetic datums again.

2017.0
Enhancements
-

TLcdECWModelFactory was introduced for the decoding and visualization of ECW raster data in LuciadMobile.

2016.1.06
Enhancements
LMOB-609

The view now remains fast when zooming in on shapes that are painted with a TLcdDashPathEffect.

2016.1.05
Enhancements
LMOB-610

TLcdMapView now draws a placeholder bitmap in edit mode, instead of throwing an exception. This means you can preview it in the UI designer of Android Studio, for instance.

2016.1.04
Enhancements
LMOB-607

You can now also change the brightness and contrast of a TLcdRasterTileSetLayer. You can do this by setting a TLcdColorMatrixColorFilter on the TLcdRasterStyle. That class allows for more generic color transformations besides contrast and brightness operations too.

2016.1.03
Fixes
-

ALcdFeatureLayer: using a feature count limited loading with a very low minimum count could lead to errors. This has been fixed.

2016.1.02
Fixes
LMOB-606

The alpha value configured on TLcdRasterStyle was ignored if the layer was already painted. This is now fixed.

2016.1.01
Fixes
LMOB-606

The alpha value configured on TLcdRasterStyle was always ignored, as a result rasters were always painted at full opacity.

2016.1
Enhancements
LMOB-598

ALcdFeaturePainter: new lines in labels are now respected. If the label string contains line endings, the label will be painted with multiple lines.

For instance:

@Override
public void paintLabel(ALcdLabelCanvas aCanvas, ILcdFeature aFeature, ILcdShape aShape, ALcdLayer aLayer, TLcdMapView aMapView, TLcdPaintState aState) {
  aCanvas.drawLabel("Name:\n" + getFeatureName(aFeature), aShape, getTextStyle(), getLabelStyle());
}
2016.0.01
Enhancements
-

You can now retrieve the list of registered context menu actions from a ALcdFeatureLayer using the getContextMenuActions method.

2016.0
Fixes
LMOB-588

Several icons of “Reference Point” and “Air Control” symbols were incorrect and are now fixed.

Enhancements
LMOB-495

LuciadMobile is now available as an Android Archive Library (or .aar file). This means you can now easily import it into a Maven repository, for instance.

LMOB-587

The lightning arrows of several military tactical symbols no longer cross. Their behavior was made consistent with LuciadLightspeed. The affected symbols are the “Search Area/Reconnaissance Area” and “Security - Cover” symbols.

Upgrade Considerations
LMOB-569

Several arrow symbols in the military symbologies were painted in the wrong direction. They are now reversed and painted in the correct order.

Affected symbols

The affected symbols are:

  • APP6a / APP6b
    Name Code (SIDC) Hierarchy code
    Tasks - Fix G*T*GF----***** 2.X.2.1.1.11
    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
    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
  • MS2525b / MS2525c
    Name Code (SIDC) Hierarchy code
    Task Graphic - Fix G*TPF-----****X 2.X.1.11
    Axis of Advance - Aviation G*GPOLAV--****X 2.X.2.5.2.1.1
    Axis of Advance - Airborne G*GPOLAA--****X 2.X.2.5.2.1.2
    Axis of Advance - Attack, Rotary Wing G*GPOLAR--****X 2.X.2.5.2.1.3
    Axis of Advance - Main Attack G*GPOLAGM-****X 2.X.2.5.2.1.4.1
    Axis of Advance - Supporting Attack G*GPOLAGS-****X 2.X.2.5.2.1.4.2
    Direction Of Attack - Main Attack G*GPOLKGM-****X 2.X.2.5.2.2.2.1
    Direction Of Attack - Supporting Attack G*GPOLKGS-****X 2.X.2.5.2.2.2.2
  • TAM 105
    Name Code (SIDC) Hierarchy code
    Tasks - Fix G*T*GF----***** 2.X.2.1.1.11
    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 - Attack GHC*MOLAK-***** 2.X.2.1.5.2.1.9
    Axis of Advance - Advance to Contact GHC*MOLAC-***** 2.X.2.1.5.2.1.10

.

Disabling the fix

This fix can be disabled to prevent the reversal of arrows in existing applications. To disable the fix, specify the following metadata element in the manifest of your application:

<manifest>
  <!-- ... -->
  <application>
    <meta-data
      android:name="com.luciad.symbology.arrowsymbols"
      android:value="PAINT_LEGACY"/>
    <!-- ... -->
  </application>
  <!-- ... -->
</manifest>
2015.1.02
Fixes
LMOB-585

Improved the rendering of some icons when the icons are not filled. When an icon has white areas in it, these white areas remain visible when painting without a fill. This is consistent with how LuciadLightspeed paints them.

LMOB-585

Improved the rendering of some icons when the icons are not filled. When an icon has white areas in it, these white areas remain visible when painting without a fill. This is consistent with how LuciadLightspeed paints them.

2015.1.01
Fixes
-

Custom affiliation colors are now respected for sea mine symbols in the MS2525c symbology

2015.0.03
Fixes
-

APP6A/APP6B: some icons were not drawn in the appropriate affilation color. Several icons in the Tactical subtree of APP6A/APP6B were affected by this. These icons are now painted with the appropriate color of their affiliation.

2015.0.02
Enhancements
-

Added support for the x86_64 architecture.

2015.0.01
Fixes
LMOB-563

Fixed an issue where changed features were hidden from the map when the data loading strategy of a feature layer was set to limit the number of features. This could, for instance, happen when you changed a feature with the edit controller.

LMOB-564

Fixed NullPointerException that could occur when painting tactical graphics without an echelon.

2015.0
Fixes
LMOB-550

Geo references with a mercator projection did not allow data outside the [-85.0, 85.0] range. This is now fixed.

Enhancements
-

Changing the style of a TLcdLOSLayer will now refresh the map view automatically. The result will be shown in the previous style while the new style is still being applied.

LMOB-444

Added support for large feature databases that normally wouldn’t fit in memory. You can enable this behavior by setting an appropriate ALcdDataLoadingStrategy on an ALcdFeatureLayer. You can create the appropriate strategy by calling the ALcdDataLoadingStrategy#createFeatureCountLimitedStrategy method.

LMOB-482

Features can now be partially updated by using only the ID and the properties that need to be updated via ‘ALcdFeatureModel#update(long, Map<TLcdDataProperty, Object>)’.

LMOB-498

The set of supported datums has been extended.

Upgrade Considerations
-

The SQLite version used by LuciadMobile was updated from version v3.8.7.2 to v3.8.7.4

LMOB-525

Added ‘ALcdFeatureModel#update(long, Map<TLcdDataProperty, Object>)’ to allow updating of a feature by using only the ID and properties that need to be updated. To delete a feature using the ID, ‘ALcdFeatureModel#delete(long)’ was added. The same functionality has been added to ALcdDataObjectContentStore via ‘ALcdDataObjectContentStore#updateDataObject(Uri aUri, Map<TLcdDataProperty, Object> aUpdates)’.

2014.1.01
Fixes
LMOB-531

Fix rendering of complex polygons with inner rings.

LMOB-532

Spatial queries now fall back on the geometry table instead of failing when there is no spatial index.

LMOB-534

Fixed issue where the pen would wrongfully assume very wide bounds to wrap around the date line.

LMOB-538

Default styling for ILcdPolyline, ILcdArc and ILcdCircularArc is now consistent when using TLcdBasicFeaturePainter.

LMOB-539

When connecting to a LuciadFusion TileStore with one coverage that has an unsupported georeference encoding, it was not possible to open the others. Now it is possible to still open the supported TileStores.

LMOB-549

Fixed NullPointerException that could occur when painting a shapelist. This could look like the shapelist was flickering.

2014.1
Fixes
LMOB-529

GeoPackage decoder now loads tile matrix bounding box from gpkg_tile_matrix_set instead of from gpkg_contents.

LMOB-530

Restored support for GeoPackage WebP extension.

2014.0.03
Fixes
LMOB-523

Fix rendering of vertical or horizontal hatch pattern shader created with TLcdHatchShaderFactory.

Enhancements
LMOB-526

TLcdHatchShaderFactory can now create a shader with a background color.

2014.0.02
Fixes
LMOB-520

The echelon size for the tactical graphics Battle Position and Emplacement is now correctly shown.

2014.0.01
Fixes
LMOB-465

Fix label and balloon position for the following military symbols: boundary line, battle position and phase line.

LMOB-504

WKT reference strings containing affine transformation matrices are now parsed correctly.

Enhancements
LMOB-494

Improved exception message when performing a query on a disposed model.

LMOB-503

GeoPackage and LVDB files are now opened as read-only when write permissions are denied.

2014.0
Enhancements
-

By default tiles are now faded in using a short animation rather than being displayed instantaneously. This can be disabled using the TLcdRasterTileSetLayer#setTileFadeInEnabled method.

-

Updated SQLite to v3.8.6

-

Added methods to TLcdGeoPackageModelFactory to directly decode datasets from a GeoPackage using a Uri.

-

Added circle, ellipse, circular arc and elliptical arc as new shapes. These new shapes can be created and edited with the existing create and edit controllers. An extension was added to GeoPackage to be able to save these new shapes. LVDB can also be used to save the shapes, and they are supported by TLcdWKBShapeFormat/TLcdWKTShapeFormat.

LMOB-486

Updated EPSG reference database to revision 8.4

LMOB-488

Replaced us_cities.lvdb, us_rivers.lvdb and us_cities.lvdb with us_features.gpkg

Upgrade Considerations
-

The minimum required Android API level has been raised to 14 (Android 4.0).

2013.1.12
Fixes
LMOB-471, LMOB-500

Add support for the SWEREF99 datum in WKT reference strings.

LMOB-499

Corrected parsing and formatting of towgs84 parameter in PROJ.4 reference strings.

LMOB-502

Corrected behavior of TLcdLVDBFeatureModelFactory#createLVDBModel and TLcdGeoPackageModelFactory#createFeaturesModel when opening an existing database but passing in an incorrect reference.

Enhancements
LMOB-490

TLcdMapView: you can now override how features are selected. Override the onPickClosestObject to determine which of the possible selection candidates should actually be picked.

2013.1.11
Fixes
LMOB-489

Stroke width set via TLcdMilitaryShapeProperties is now always respected. For some military shapes the default stroke width has increased slightly.

2013.1.08
Fixes
-

Resolved issues in parsing certain Well-Known Binary geometries containing Z and/or M coordinates.

-

Reduced memory usage of TLcdRasterTileSetLayer.

2013.1.07
Fixes
LMOB-430

APP6B symbols (2.X.2.1.1.2.1.1.2, 2.X.2.1.1.2.1.1.3, 2.X.2.1.1.2.1.1.4) that were incorrectly rendered as a filled polygon are now rendered as a dashed line, as specified in the specification.

LMOB-470

Fix exception that occurred when all symbols were deleted in the military symbols sample.

LMOB-474

Fixed NPE in LOS calculations.

LMOB-479

Fixed issue with using an Arabic locale, which resulted in an exception.

LMOB-483

Fix decoding issues for GeoPackage tile pyramids that do not have tiles for all zoom levels

Enhancements
-

Improved tile set level selection heuristic for tile sets with non-square tiles.

LMOB-480

Label of phase line is now rotated when it is upside down to improve readability.

LMOB-484

Volatile models now return a source URI that uses a memory URI scheme.

2013.1.06
Fixes
LMOB-476

Fixed issue where chaining multiple draw commands prevented features to be selectable

LMOB-477

TLcdDTEDModelFactory now accepts a dted directory as input. DTED directories are scanned for DTED cells. The resulting tile set will contain the data of all of the detected DTED cells.

2013.1.05
Fixes
LMOB-304

Added methods to configure a margin on a feature layer. This prevents shapes disappearing when their anchor point is no longer inside the view.

LMOB-463

Fix NPE when application relaunches.

LMOB-475

Create controller was not correctly deactivated when an error occurred during the creation.

Enhancements
LMOB-467

Introduced TLcdDimmingLayer, which can be inserted between other layers. This layer allows to dim background layers.

2013.1.04
Fixes
LMOB-466

Fixed bug in WKT reference parsing. Some polar stereographic projections were incorrectly mapped on a stereographic projection.

Enhancements
LMOB-469

GeoPackage and LVDB decoders will now only generate metadata tables when a new database is being created. If an existing database is opened and an error in the metadata tables is detected a warning will be logged instead of overwriting the existing tables.

2013.1.03
Enhancements
LMOB-461

Expedite synchronization in the COP sample by setting the ContentResolver.SYNC_EXTRAS_EXPEDITED flag.

LMOB-462

Fixed array index out of bounds exception for MS2525 “Airspace Coordination Area (ACA) Irregular” tactical graphic.

2013.1.01
Fixes
LMOB-435

When decoding a complete DTED dataset, the model factory will now return a tileset with one level for each level that has at least one DTED cell available. Previous versions always created a tileset with three levels regardless of cell availability.

LMOB-452

TLcdMapNavigator methods called during the rendering of the map are now automatically postponed until the next map redraw.

LMOB-456

Changed styleable MapView attribute from android:colorFocusedHighlight to colorFreehandDrawingIndicator to allow compilation with Android API 13 or lower.

Enhancements
-

Updated libpng to 1.6.8

LMOB-350

ALcdFeaturePainter#paintLabel is now only called when a feature’s label will actually be painted. Earlier versions always called ALcdFeaturePainter#paint and ALcdFeaturePainter#paintLabel, regardless of label visibility.

LMOB-426

Improved DTED decoding performance

LMOB-455

Added TLcdMapNavigator#startAnimation which provides the infrastructure for custom map animations.

LMOB-457

Add level selection mode to TLcdRasterTileSetLayer you to choose between matching pixel sizes to minimize image scaling or matching source data scale. The latter mode is more appropriate for datasets where the contents of the data is highly scale dependent.

Upgrade Considerations
LMOB-457

Added ILcdRasterTileSet#getImageDensity(float) to allow raster tilesets to describe the density of the display (DPI) for which they were prepared. Certain datasets are created by scanning paper maps or rasterizing vector data at a certain density level. This property makes that information available to the tileset renderer, allowing it to better choose the most appropriate tileset level to use.

2013.1
Fixes
-

Resolved incorrect lon/lat grid line rendering when zooming in.

-

Corrected issue in KML integer attribute parser that could sometimes produce incorrect results.

LMOB-202

ALcdContentStore query method implementations now all support URIs referring to a specific object.

LMOB-380

When taking a picture in the COP sample while the camera was not available a NullPointerException could occur.

LMOB-390

Extended KML decoder with support for icon URLs of the form root://icons/palette-x.png.

LMOB-393

ALcdSymbology instances will now return null from getIconSymbol and getShapeSymbol when the requested symbol is not available.

LMOB-402

The fort symbol is now available as both an icon and a shape style in all military symbologies.

LMOB-405

ALcdFeatureModel#insert implementations now retain the ID of the feature to insert if it is set to a non-null value.

LMOB-411

Resolved divide by zero error on certain devices when rendering zoomed in image tiles.

LMOB-416

TLcdMapView now also retains selection and balloon visibility state. This state is stored by the TLcdMapView#onSaveInstanceState and TLcdMapView#saveState methods and is restored by TLcdMapView#onRestoreInstanceState and TLcdMapView#restoreState.

LMOB-417

TLcdRasterTileSetLayer now supports a configurable memory threshold which can be used to avoid OutOfMemoryErrors when loading certain tilesets.

LMOB-422

Corrected handling of WMTS tile sets with variable tile matrix extents. Added support for WMTS tile matrix set limits.

LMOB-425

Extended TLcdPickInfo with distance to edge and distance to center values.

LMOB-425

Improved selection accuracy of objects that are rendered using a Drawable or Bitmap.

Enhancements
-

The default touch and key event handling of TLcdMapView can now be overridden using the onGestureEvent and onKeyEvent methods.

-

MGRS grid can now be rendered in all map projections and is no longer restricted to a single UTM or UPS zone.

-

Reduced poleward latitude limits of Mercator projection to avoid large empty polar areas on maps.

-

Improved visibility of freehand drawing continuation indicator. The color of the indicator can be modified using the colorFocusedHighlight style attribute.

-

Military symbology tactical graphics line width can now be controlled via TLcdMilitaryShapeProperties#setStrokeWidth.

-

TLcdMapView is no longer a final class. This allows certain methods of the map view to be overridden for customization purposes.

-

TLcdDTEDModelFactory was introduced for the decoding and visualization of DTED elevation data in LuciadMobile.

-

TLcdRasterTileSetLayer will now, by default, render an outline of raster tilesets when the reference of the tileset and the map are not compatible.

-

ALcdUriRasterTileSetModel now features a transparent disk-based HTTP cache. This improves tile loading time and reduces network activity when displaying tile sets loaded from HTTP servers.

-

WMTS layers with irregular tile matrices are now also supported.

LMOB-174

TLcdMapNavigator#fit can now be called before the initial UI layout. This allows fit to be called during, for instance, Activity#onCreate.

LMOB-277

Extended support set of military symbology tactical graphics. A complete list of supported tactical graphics per military symbology is available in the developer’s guide.

LMOB-345

Improved performance of rotated text rendering.

LMOB-403

Improved robustness of raster tile set renderer when dealing with inconsistencies in ILcdTileSet implementations.

LMOB-408

Military icon rendering now takes display density into account to guarantee consistent rendering across display densities. The width of lines in military icons can be further increased or decreased using TLcdMilitaryIconProperties#setStrokeScaleFactor.

LMOB-409

Samples now support loading the LuciadMobile license as an asset or as a raw resource.

LMOB-420

TLcdMapView#getMapToViewTransformation and TLcdMapView#getViewToMapTransformation are now thread-safe methods and return transformation instances that are thread-safe as well.

LMOB-423

Added a TLcdCreateController constructor that accepts a fixed target layer for object creation.

LMOB-424

Added javadoc describing the implementation of TLcdCreateController#onCreateNewObject.

LMOB-458

Added support to visualize TEA results on a TLcdMapView that has a different GeoReference than the elevation data that is used for the TEA calculations.

LMOB131-224

APP6B symbols (2.X.2.1.1.2.1.1.2, 2.X.2.1.1.2.1.1.3, 2.X.2.1.1.2.1.1.4) that were incorrectly rendered as a filled polygon are now rendered as a dashed line, as specified in the specification.

Upgrade Considerations
-

ALcdWorkingSet#queryById has been corrected to no state that the database will be queried if the object is not present in the working set. This reflects the actual behavior of this method. Applications that used this method for the incorrectly documented behavior may need to be updated to correctly handle all cases.

-

The LuciadLightspeed components for use with LuciadMobile were moved from LuciadMobile to LuciadLightspeed and now reside in the OGC GeoPackage and SQLite Spatialite Additional Component. With this move, the com.luciad.format.lvdb.style package was removed and replaced by the more convenient TLcdLVDBStyleAnnotation API. Please refer to Chapter 9 “Unified access to domain objects” of the LuciadMobile Developer’s Guide for instructions on how to work with annotations or contact support.luciad.gsp@hexagon.com for further assistance.

-

ILcdTileSet now allows tile sets that have an irregular scaling factor subsequent levels. Earlier versions of LuciadMobile were limited to tile sets where the number of tile rows and columns grows by a factor 2 between each subsequent level. This restriction has now been lifted. In order to support this correctly ILcdTileSet#getBounds(int) has been added to the ILcdTileSet interface. Existing implementations should implement this method by delegating to ILcdTileSet#getBounds().

LMOB-421

Display of military symbology text modifiers is now enabled by default and needs to be disabled explicitly to restore the behavior of previous versions. See TLcdMilitaryIconProperties#setModifiersEnabled and TLcdMilitaryShapeProperties#setModifiersEnabled.

2013.0
Enhancements
-

Improved accuracy and reduced latency of ALcdOrientationManager. These improvements require Android API level 9 or up.

-

TLcdMapView now sets its layer type to LAYER_TYPE_SOFTWARE by default. Hardware accelerated rendering can be enabled if desired, but there are known quality and correctness issues with it.

-

Added OGC Web Map Tile Service (WMTS) client.

-

Added support for OGC CRS and AUTO reference identifiers. Support has been added for CRS:83, CRS:84 and AUTO2:42001 to AUTO2:42005. Identifiers may be formatted in OGC WMS 1.3 parameter format (e.g. AUTO2:42001,1,99,8888) or in OGC URN format (e.g. urn:ogc:def:crs:OGC:AUTO42001:99:8888).

LMOB-189

Added implementations of ALcdMilitaryIconSymbol#setAlpha and ALcdMilitaryIconSymbol#setColorFilter.

LMOB-376

Added Z-order support to ALcdGeoCanvas. Z-order support provides fine grained control over the rendering order of features on the map.

LMOB-377

TLcdMapNavigator#fit now supports additional parameters that allow padding to be added to the fit region. This allows applications to perform a fit where the edges of the fitted region do not coincide exactly with the edges of the map view.

LMOB-379

Introduced ALcdBalloonProvider which allows full customization of balloons on the map. This new API replaces the previous ILcdViewProvider based balloon API which is now deprecated. ILcdViewProvider based balloons will still work as before but they should no longer be used for new development.

LMOB-388

Added performance guidelines on optimal military symbology icon rendering in the developer’s guide an ALcdMilitaryIconSymbol javadoc.

Upgrade Considerations
-

The minimum Android version is now 2.3 (Gingerbread).

2012.1.02
Fixes
LMOB-206

Improved balloon update behavior when a balloon is being displayed for a frequently updating feature.

LMOB-370

LVDB geometry encoding errors now produce an IOException rather than a NullPointerException.

LMOB-371

Resolved issue where balloon content could sometimes be requested in response to deleting a feature from its containing model.

LMOB-372

Added generic ‘warfighting symbol’ icon to the APP6A symbology database.

LMOB-373

Improved geometry roundtrip consistency in ALcdFeatureModel implementations.

LMOB-374

Improved error reporting when attempting to insert an incompatible ILcdDataObject into an ALcdFeatureModel.

2012.1.01
Fixes
LMOB-354

Improved robustness of WKT reference parser.

LMOB-356

Resolved class verification warnings reported by the Dalvik VM on recent Android revisions.

LMOB-359

TLcdRasterStyle#setStyle no longer produces a NullPointerException when called before the layer is added to a view.

LMOB-360

Resolved issue where TLcdLonLatPointFormat#formatLon and TLcdLonLatPointFormat#formatLat could produce incorrect output.

LMOB-361

Improved correctness of formatted output in TLcdLonLatPointFormat when rounding is applied.

LMOB-362

Resolved issue where ALcdFeatureLayer#pick could generate a NullPointerException in certain situations.

LMOB-364

Improved WKT formatting.

LMOB-365

Resolved ClassCastException in TLcdAllInMemoryWorkingSet#getObjectFromWorkingSet.

LMOB-366

Resolved potential NullPointerException in ALcdFeatureLayer#clearSelection.

Enhancements
-

Improved rounding behavior of TLcdLonLatPointFormat.

LMOB-278

Improved documentation of TLcdMapView#LayoutParams.

LMOB-318

Improved documentation of ILcdTileSet coordinate system.

2012.1
Fixes
LMOB-231

The LVDB model encoder incorrectly encoded certain complex polygons as OGC polygons rather than as multi polygons. This could cause incorrect minimum bounding rectangles to be encoded in the LVDB file which in turn could lead to inconsistent rendering in the map view.

LMOB-303

Implemented TLcdWKTShapeFormat#parseObject method.

LMOB-310

Improved COP sync status messages.

LMOB-315

The COP sync adapter code has been restructured for improved readability.

LMOB-316

When creating a COP sync account, the value entered in the ‘manual entry’ field always takes precedence over the discovered service combo box.

LMOB-320

Improved handling of models whose spatial reference does not contain TLcdModelReferenceMetadata in the LVDB exporter.

LMOB-330

Data synchronization in the COP sample application now also works on non-wifi network interfaces such as ethernet.

LMOB-349

Improved robustness of LRDB encoder when exporting models containing TLcdEarthTileRepository objects.

Enhancements
-

LuciadMobile now supports decluttered labeling. This allows you to easily visualize textual information on a map while maintaining readability. See the “Labeling Sample” for a demonstration.

LMOB-308

The WKT reference parser can now parse ‘fitted CS’ and ‘compound CS’ strings.

LMOB-325

Added OGC WKT and PROJ.4 format classes. These classes allow creation of custom references defined as WKT and PROJ.4 parameter strings respectively.

Upgrade Considerations
-

The packaging of LuciadMobile has changed: all zip files now first contain a directory containing the version number The LuciadLightspeed components should now be unzipped so that the LuciadMobile_version directory becomes a subdirectory of the LuciadLightspeed distribution.

-

The signature of ALcdFeaturePainter#paint has changed. Specifically, the Object parameter has been made more specific and is now ILcdFeature. This Object parameter was always guaranteed to be an instance of ILcdFeature and the API now reflects this. ALcdFeaturePainter#paint will now receive ILcdShapeList instances directly. In previous versions shape lists were never passed to the painter directly but were instead unwrapped internally. If your application uses shape lists with mixed geometry types (for instance, a combination of points and polygons in a single shape list), then you may need to loop over the shapes of these shape lists manually in your ALcdFeaturePainter extensions.

LMOB-305

TLcdMapNavigator#zoomToFixing expected a scale value whose unit was the inverse of the unit returned by TLcdMapView#getScale. Since this is rather counter intuitive the unit of the TLcdMapNavigator methods has been aligned with that of TLcdMapView. User code that uses these methods may need to invert the value of the scale parameter in order to maintain existing behavior.

2012.0.11
Fixes
LMOB-314

Some implementations of ALcdFeatureModel would throw an IOException when calling deleteAll on an empty model.

LMOB-317

Corrected parsing of WKT strings containing a projection named ‘Mercator(1SP)(Spherical)’. This was interpreted as a regular Mercator projection rather than as the spherical pseudo Mercator projection.

Enhancements
LMOB-319

Updated EPSG spatial reference database to 7.11

2012.0.08
Fixes
LMOB-188

Rhumbline distance computations on spherical geodesy instances could produce incorrect results.

LMOB-195

Improved memory consumption of disabled raster layers.

LMOB-298

Taking a picture in the COP sample could cause the sample to close unexpectedly on some devices.

LMOB-307

Additional obfuscation requirements are now documented in the technical notes section of the documentation. An example ProGuard configuration file is provided.

LMOB-309

When changing the reference of a TLcdMapView, vector layers did not always redraw correctly.

Enhancements
LMOB-295

Bing maps sample now creates the model using an ASyncTask to avoid network I/O on the main thread.

2012.0.07
Fixes
LMOB-288

Fixed a bug that caused LuciadMobile to crash on Android 4.1 (Jelly Bean) devices.

LMOB-290

Echelon modifiers for military symbology icons using a hostile affiliation are now correctly aligned with the icon.

2012.0.05
Fixes
LMOB-173

On certain devices, visible seams appeared between raster tiles. This has been resolved.

LMOB-178

Improved layout of military symbology symbol chooser in landscape orientation.

LMOB-209

Added support for RGBA colors to TLcdElevationColorMap.

LMOB-217, LMOB-284

Resolved issue were toggling modifier visibility did not trigger a redraw of the map in the military symbology sample.

LMOB-293

The modifiers of a small number of military symbology icons were not rendered correctly.

Enhancements
-

The LRDB encoder now produces a smaller, tighter fitting subset of the tiles when a target bounds has been set.

LMOB-122

The military symbology symbol chooser now supports both APP6 and MS2525.

LMOB-254

Improved readability of shape balloons in first sample.

2012.0.03
Fixes
LMOB-287

When opening an LVDB file, the spatial metadata arenow checked for for presence and correctness. The tables will only be initialised if they are missing.

LMOB-289

TLcdMGRSPointFormat has a new method to enable/disable the default offset behavior when parsing MGRS coordinates.

2012.0.02
Enhancements
-

TLcdMGRSPointFormat#format no longer requires the input shape to have a geodetic reference. An overloaded version of TLcdMGRSPointFormat#parse has also been added for setting the geographic reference of the returned point.

-

TLcdLonLatPointFormat#format no longer requires the input shape to have a geodetic reference.

2012.0.01
Fixes
-

The TLcdLRDBModelEncoder class now correctly encodes GeospatialPDF files.

LMOB-235

Features contained in a layer that is outside of its visible scale range are no longer selectable.

Enhancements
-

Invisible layers will no longer show a balloon when tapping on an element. Balloons wil also hide themselves now if their parent layer becomes invisible.

-

Improved the performance of rendering tactical shapes.

2012.0
Fixes
LMOB-100

The freehand drawing algorithm has been improved.

LMOB-169

Optimized UTM from/to geodetic transformation.

LMOB-170

Order of operations in ALcdWorkingSet implementations is now guaranteed.

LMOB-171

The AndroidManifest.xml now contains version information.

LMOB-176

Improved CPU usage of TLcdOrientationManager.

LMOB-179

Fixed bug in update and delete methods in ALcdContentStore.

LMOB-183

Resolved issue where map could get incorrectly stretched due to inaccurate xdpi and ydpi values reported by certain devices.

Enhancements
-

Added support for x86 architecture.

-

LuciadMobile now supports the following terrain analysis algorithms:

  • Terrain viewshed
  • Point-to-point line of sight
  • Point-to-line line of sight
-

Improved performance of certain coordinate system transformations.

-

Military symbol chooser now sorts symbols alphabetically.

-

TLcdMapNavigator now has a fit method to fit the view to a certain area.

-

The LuciadFusion sample has been removed and integrated into the Raster Tile Sets sample.

-

Tiles should no longer overlap.

-

The COP server no longer has a command line option for selecting the IP address.

-

Added support for visualizing and querying elevation tilesets.

-

The Jetty library for the COP server has been updated to version 7.5.4.

-

Extended COP sample for visualizing tracks using data from a remote server.

-

Added functionality to compute and visualize 360° line-of-sight coverage. See the Terrain Analysis sample for more information.

-

Added support for decoding KML and KMZ files.

-

The Spatialite library has been updated to version 3.0.1.

-

Builder methods now return themselves to allow method chaining.

-

Improved LRDB encoder speed.

-

Database files containing non-letter characters for the table names are now handled correctly.

-

Modifications to the map scale will now respect the min and max scale settings of the map view.

-

Diagnostic messages when calling methods on disposed models have been enhanced.

-

Added support for TAM-105 icons.

-

The symbology API has been extended with initial support for tactical graphics

-

Vector data encoded as KML can now be decoded on device

-

The LuciadMobile Raster Database can be used to store elevation data

-

TLcdLVDBModelEncoder now handles “has-a shape” style data objects correctly.

-

Line-of-sight now supports point-to-point computations.

-

LuciadMobile can connect with Microsoft’s Bing Maps imagery service.

Upgrade Considerations
-

In order to support area and line style symbols in the symbology API some changes have been made to the existing icon API. If you are impacted by this change the list below can assist you in updating your code:

  • ALcdSymbol has been renamed to ALcdIconSymbol
  • ALcdMilitarySymbol has been renamed to ALcdMilitaryIconSymbol
  • TLcdMilitarySymbolStyle has been moved from com.luciad.view.style to com.luciad.symbology
  • TLcdMilitarySymbolStyle has been renamed to TLcdMilitaryIconProperties
  • ALcdSymbology#getSymbol is now deprecated in favor of ALcdSymbology#getIconSymbol
11.0.03
Fixes
LMOB-126

Corrected certain hydrography icons in MS2525 symbol databases.

LMOB-167

Resolved NullPointerException when drawing screen space shapes.

LMOB-168

Resolved incorrect ‘tap’ event handling when creating points.

11.0.02
Fixes
-

Improved working set refresh behaviour.

-

COP sample now correctly stores and restores map state between sessions.

LMOB-115

Included library licenses in LuciadMobile samples package.

LMOB-156

Removed warning message that was printed when creating new LVDB or volatile models.

LMOB-158

Resolved NullPointerException when attempting to insert null in the working set.

Enhancements
-

Improved performance of certain coordinate system transformations.

-

Improved license error diagnostic messages.

LMOB-165

Improved validation of COP sync account server field.

11.0.01
Fixes
-

Location sample now displays a message when a GPS fix is not available.

-

A balloon for an object of a certain layer was not removed when that layer was removed from the map.

-

Switching from compass to fixed orientation in COP sample sometimes left the map rotated at an angle.

LMOB-153

Seams between tiles were sometimes visible when rendering LRDB files.

LMOB-163

ALcdLocationManager#getLastKnownLocation did not always return correct values.

Enhancements
-

COP sample server now allows IP-address and port to be specified on the command line.

-

Sample activities are now launched via a single samples launcher activity to avoid cluttering the