Release notes for 100.1

Version 100.1 of ArcGIS Runtime SDK for Qt, also known as Update 1, is the first update to version 100.0.

This topic describes what's new and changed in this release and provides a list of known issues.

API changes

Due to a revamped architecture and improved API, changes are required to use projects that were built with version 10.2.6.

What's new

3D support on mobile devices commercially available

In the previous release, developers could deploy 3D apps to mobile phones and tablets only as BETA; 3D was commercially supported only on desktop platforms. Now at 100.1.0, 3D capabilities are fully supported on mobile phones and tablets.

Raster support on mobile devices commercially available

In the previous release, apps that used local raster data on mobile phones and tablets could only be deployed as BETA; Raster was commercially supported only on desktop platforms. At 100.1, local raster capabilities are fully supported on mobile phones and tablets.

Take a map offline

Web maps or specific areas of a web map from a portal can be downloaded and used in disconnected scenarios. The new OfflineMapTask provides a high-level API to download the map definition and its related data. When the map is taken offline, it is stored as a mobile map. If the map contains sync-enabled feature layers, those can be edited offline and the changes synced when network connectivity is later available.

Client-side labeling control

A new LabelDefinition class is introduced that defines how labeling is applied to feature data for a given scale range. You can specify the following:

  • Which features are covered by the definition (by applying the label definition's where-clause)
  • What text should be displayed, based on the individual feature's attributes and the label definition label-expression formula. Arcade expressions are fully supported.
  • How the text should appear, using the definition's text symbol
  • Where the text should appear with respect to its feature, using the definition's label placement
  • How to move or avoid other labels or features that would overlap each label

At this release, you can only construct a LabelDefinition instance from JSON, but in the future there will be an explicit API for specifying the labeling settings.

Support for additional layer types

This release adds support for the following data layer types.

  • OGC WMTS
  • Image Service
  • Dynamic sublayers of an ArcGIS Map Service
  • OpenStreetMap
  • Bing

Related tables

This release provides APIs for supporting related tables. With this, apps can handle workflows that involve reading, editing, and querying related data in both spatial and non-spatial tables. These related table workflows are supported in both online and offline maps.

Display Heatmaps

A new HeatmapRenderer class uses the points in a layer to calculate and display the relative density of points on a map. The density is displayed as a heat map by smoothly varying sets of colors ranging from cool (low density of points) to hot (high density of points). At this release, this class is constructed only from JSON when it is defined in a web map, but in the future an explicit API will be provided for working with it.

Editing of public feature services available at the Lite license level

The ability to perform edits in a connected environment on a public feature services from ArcGIS Online or Enterprise at the Lite license level has been introduced this release. At version 100.0, all editing capabilities began at the Basic level. The editing of private feature services or editing in an offline environment remains at the Basic, Standard, and Advanced licensing levels.

Service area and closest facility analysis

Closest facility and service area tasks are now available for performing more network analysis in your ArcGIS Runtime applications.

A service area is a region that encompasses all streets that can be accessed within a given distance or travel time from one or more facilities. For example, a three-minute, drive-time polygon around a grocery store can determine which residents are able to reach the store within three minutes and are thus more likely to shop there.

The closest facility task generates routes between facilities and incidents. Routes may include a route shape and driving directions. The task may generate routes from facilities to incidents or from incidents to facilities and can find a user specified number of routes, for example finding the three closest fire stations for an address.

Coordinate formatting

The CoordinateFormatter class can be used to convert between points and formatted coordinates notation strings such as decimal degrees; degrees, minutes, and seconds; U.S. National Grid (USNG); and Military Grid Reference System (MGRS).

Follow a graphic in 3D

Camera controllers allow you to change the default camera behavior in a scene view. Two "orbit" camera controllers were added to lock the focus of a camera to a fixed point target or a possibly moving graphic.

Support for StreetMap Premium packages

StreetMap Premium for ArcGIS Runtime is a new data product, licensed as an extension to ArcGIS Runtime, that provides enriched street data, which powers a high-quality cartographic map and high-quality search, geocoding, and route analysis. Streetmap Premium for ArcGIS Runtime maps are consistent across all regions of the world and can be taken offline for disconnected use; they can simultaneously fulfill the need for an address locator, street network dataset, and basemap in your app.

StreetMap Premium for ArcGIS Runtime delivers HERE data as a mobile map package (an .mmpk file) for your app to access locally. This MMPK format allows the data to be accessed offline and therefore doesn't consume data from your user's data plan. This is the same high-quality data used by ArcGIS Online services, including the World Geocoding Service, Routing Service, and Street Map Service.

GeoView Attribution

MapView and SceneView have been enhanced to automatically display attribution for map and scene layers respectively. The attribution is dynamic and updates as layers are added/removed, toggled on/off, or change visibility as they go in and out of scale range.

SDK changes

The following changes and enhancements have been added to the SDK to further enhance the developer experience and create a more Qt-like development environment.

New SDK IDE integration process

Previous versions of ArcGIS Runtime SDK for Qt made use of .prf files for setting up the various qmake variables, build options, and link options. These files were directly copied into the mkspecs/features folder of your Qt installation. In addition, QML plugins were directly copied into the Qt installation's qml folders. The copying was performed by the post installer app that automatically launches after the SDK setup process is complete. These copy steps were required so that Qt could have a reliable way of discovering the ArcGIS Runtime SDK for Qt on the development machine. This worked reliably, but had some drawbacks, such as making support for side by side installation and plugin revisions difficult. Starting with version 100.1, .prf files and QML plugins are no longer copied into the kits. Rather, the .prf files have been converted to pri files, so you can use the include() qmake function to include the ArcGIS Runtime SDK for Qt in your Qt apps. In addition, you should use the addImportPath() function to add the various QML plugins to the application engine's import path. If you create a new 100.1 template app, you can see this new workflow. In addition, this process is explained in detail in this topic.

Migrating from 100.0 to 100.1

Due to the changes in the SDK IDE integration process described in the previous section, there are a few steps that must be done to upgrade from 100.0. The first step is to run the post installer app, which is in the tools folder of the SDK installation. When it runs, the post installer will notify you if 100.0 files are present in your Qt kit, and will offer to remove them for you. It is recommended that you accept this, as it will remove old 100.0 references from your Qt installation. Failing to do this step could result in unexpected issues when trying to use the newer version of the SDK. After this option is accepted, proceed with the rest of the post installer. Once complete, a few changes to your project's .pro and main.cpp file will need to be made. Those changes are described in this topic and are demonstrated in this GitHub diff, which shows the code changes needed to upgrade a Qt Widgets, Qt Quick C++, and a Qt Quick QML app from 100.0 to 100.1

Note:

100.1 supports revisions, meaning that you can install 100.1, and either import 100.1 or 100.0. You do not need to maintain separate installations of 100.0 and 100.1 on your development machine, as you can seamlessly switch between the new version and older versions with only the 100.1 installation. For this reason, it is recommended that when you want to begin migrating your apps from 100.0 to 100.1, to simply uninstall 100.0, install 100.1, and follow the above migration steps. If you must keep concurrent installations of 100.0 and 100.1 on your development machine, the post installer must be re-run each time you want to build your app for each version of the SDK to ensure that the proper version is picked up by Qt.

New Sample Viewer

The sample viewer is redesigned with a new UI that works well on all platforms and devices. It showcases some of the new capabilities of Qt Quick Controls 2 and also features many architectural improvements, which should improve quality and performance.

Known issues

Android file paths containing spaces

There are some issues to watch for when working with the Android app template in Qt Creator on Windows. Due to a Qt Company bug relating to when there are spaces in the file path referenced in the Android .prf file, we added logic to the Android deployment process to copy the .so file into the users output build folder. This is the temporary solution for Android until this is fixed by the Qt Company. However, the process can still fail if the output folder has a space in it.

Map view attribution text may show raw HTML text in place of hyperlinks

Instead of seeing hyperlinked text that points to the data providers' websites, the attribution text shows raw HTML defining the hyperlink. This behavior can be seen in the Web Tiled Layer sample.

Maps, layers, and general

  • MapViewlocationToScreen gives incorrect coordinates in wrap around mode.
  • Map view grid lines that lie close to the 180th meridian or poles may not always display correctly.
  • AutoPanMode and InitialZoomScale are ignored if set before starting location display.
  • Querying FeatureTable does not complete if the table failed to load.
  • Cloning an unloaded map prevents it from rendering in a map view. Load the map before cloning it.
  • Text in vector tiled layers may not display at certain scales.
  • Vector tiled layers created from a URL don't have attribution.
  • Once a vector tile layer is cloned, there is no way to handle requests for it.
  • Related tables: When an origin feature is deleted, the key field of the related feature is not set to null for hosted services that have a non-unique primary key.
  • Web maps saved from an ArcGIS Runtime app containing Bing Maps layers may not be compatible with older versions of the Web Viewer.
  • ArcGIS Online currently does not support requesting features from feature services in a different spatial reference using the latest WKID value stored in a map.
  • SpatialReference.equals() may return false when comparing Web Mercator spatial references.
  • When exporting a tile package from a service that is hosted in ArcGIS Online (tiles.arcgis.com) with a geometry that is not in the same spatial reference as the service, the tile package will be corrupted and will not display correctly.
  • ArcGISSceneLayer does not support legends.
  • GeoView.getLayerViewState fails for a layer that has not finished rendering.
  • Using SketchEditor, you cannot digitize a polyline across the dateline.
  • Memory is not freed when graphics symbolized with picture marker symbols are cleared from a graphics overlay.
  • A Bing Maps layer created with a Portal needs to load the Portal first.
  • Definition expressions using time fields on spatial service feature tables will result in no features being displayed.
  • Cannot change definition expression after setting invalid definition expression on feature layer in a SceneView.
  • Feature layers with indexes on GlobalID fields may cause an app to crash.
  • Loading feature layers that have fill symbols with an outline with of less than 0 will return an exception.
  • Diagonal fill symbols render in opposite directions between JavaScript and Runtime.
  • Moving map view to a screen with a different DPI zooms the map in and out (5-10%).
  • Moving map view to a screen with a different DPI changes the size of the map content.
  • Symbol sizes for graphics in static mode differ in size between 2D and 3D views.
  • Vector tile symbols don't always scale consistently with DPI.
  • Map view doesn't zoom to geometry if the supplied geometry's envelope has zero height or width.
  • Setting minimum scale on a graphics overlay in a scene view is not accurate.
  • Calling the clone method on a loaded feature layer throws bad_weak_ptr exception.
  • Gradient fills used in mobile map package are not displayed correctly in apps.
  • Invalid base layer, reference layer, or operational layer will not raise LayerViewStateChangedEvent under certain scenarios.
  • In some cases, a feature layer can have a load status of Loaded but getRenderer still returns null.
  • Service feature table contents do not re-populate after clearing cache.
  • Service feature table can fail to load from a service with "Invalid JSON" error when the real problem is the JSON from the service contains an unsupported image format.
  • There's an inconsistency in handling null values in JsonSerializable UnknownJson.
  • Popup title does not use name when the title is defined with a coded value domain field.
  • Popup.GeoElement.Attributes uses label/alias values instead of field names as keys for the attribute dictionary when used with ArcGIS map services.
  • Field name in popup definition for Arcade expression does not include the title for the expression field.
  • Popup getSymbol returns null for features from a map service.
  • A geodatabase is taken out of scope even if its feature tables are in scope. This is because the geodatabase holds on to strong references to its tables, but the tables do not have a strong reference back to the geodatabase (as this would lead to a circular reference). This is by design.
  • Editing overrides for a feature layer in a web map are not honored.
  • Synchronizing large geodatabases with many features and no local edits may take longer than expected.
  • Offline features disappear intermittently during map interaction when syncing large geodatabase.
  • When registering a mobile geodatabase with a new user (different from user who created the mobile geodatabase), local edits still apply the user who created the geodatabase when editor tracking is enabled.
  • When using local street address locators, suggestion results without a house number can't be used to retrieve results.
  • Locator performance may be poor for larger local locator datasets.
  • Saving map with ForceSave false and feature collection layers by reference throws exception. Workaround: ForceSave the map and while loading the saved map set the visibility of FeatureLayer referenced by FeatureCollectionTable to true.
  • Functions are not supported in where clauses for labeling.
  • GeoprocessingJob.ToJson throws exception when it contains input parameter type of GeoprocessingFeatures with null features.
  • GeoprocessingJob.FromJson does not populate GeoprocessingFeatures.URL.

  • Enabling High DPI (Qt::AA_EnableHighDpiScaling) on Android is causing the MapView to scale up/down on high resolution devices.
  • Uninstall of one version of the API only (e.g. C++ or QML) is not currently supported. If you uninstall only one API you may still see QtCreator templates and documentation for this product.
  • The uninstaller on macOS may report that some files could not be removed when, in fact, they were removed.
  • Installing only the C++ API and not the QML API does not install the Toolkit.

Raster

  • Adding rasters to MosaicDatasetRaster with some invalid parameters can fail without notifying the user.
  • Some 3D renderers on some platforms may not work correctly on MosaicRasterDataset.
  • In some cases, the default rendering applied to raster data may appear different from how it appears in ArcGIS Online.
  • The LoadStatusChanged event doesn't fire when using a MosaicDatasetRaster instance to create a mosaic dataset and binding it to a RasterLayer for rendering.
  • When adding rasters to a mosaic dataset that is already being used for a raster layer, the new content will not show up in that existing layer.
  • Raster layers report LayerViewState.Error ("Layer does not have SpatialReference") while loading. The layer will then transition to LayerViewState.Active after self-correcting and loading the layer.
  • RasterLayer doesn't free a used raster before the application is shut down.
  • When interacting with the MapView, attempting to pan the view all the way north will cause the MapView to spring back to the bottom of the screen.

Image services

  • When an ImageServiceRaster is created with a URL, getPath should return null but instead it returns the URL.
  • Setting a color map raster function as rendering rule on an image service has no effect.
  • Flickering will occasionally be seen on Linux when rapidly zooming in/out on an image service raster multiple times.
  • Visual artifacts can appear on a map when the default rendering rule of an image service has dynamic range adjustment (DRA) enabled.
  • Setting a rendering rule on ImageServiceRaster after loading has no effect.
  • App may crash when exporting tile cache from image service that does not support it.

Symbols, renderers and graphics

  • TextSymbol doesn't honor the screen alignment property for feature layers.
  • Kerning does not work with simple Latin scripts, causing a performance problem with military symbol text.
  • PictureFillSymbol width, height, and image properties are not working correctly on scene view.
  • When kerning is enabled on a statically-rendered TextSymbol, it will appear misaligned and may render beyond the extent of its background.
  • In a scene view, changing TextSymbol font weight or style does not affect the symbol as expected. The glyph spacing changes, but the glyphs themselves remain the same.
  • In a scene view, changing TextSymbol halo color or size has no effect when symbolizing elements displayed in dynamic mode.
  • In a graphics overlay displayed using dynamic mode in a scene view, applying a font decoration to TextSymbol has no effect.
  • Crash when drawingInfo uses field alias name instead of field name when using advanced symbology.
  • Feature layers from federated 10.3 and 10.3.1 ArcGIS Servers cannot use the default advanced symbology setting.
  • When a specific offset value is applied to both dynamic and static picture marker symbols, the displacement is different on both the graphics.
  • In static rendering mode, setting Y offset on TextSymbol causes the symbol to render twice, once at the old and once at the new location.
  • When invoking toJson on LabelDefinition, certain text symbols may get serialized as "{}", losing their properties.
  • Symbols should be loaded before being used in a renderer sent to a service.
  • Random tile flickering may occur when adding polygons to a graphic overlay with horizontal fill symbol and transparent color, in static rendering mode.
  • TextSymbol for a polygon graphic spanning the dateline and rendered in Static mode is displayed in the wrong location when zooming out.
  • TextSymbol HaloColor and HaloSize properties have no effect when used with graphics in dynamic mode in a SceneView.
  • Military polyline and polygon symbols that render correctly in 2D do not render correctly in a graphics overlay in dynamic mode in 3D.
  • Military symbols requiring geometry conversions where the data is not multipoint are drawn incorrectly when zooming out.
  • Some military line symbols do not display in the correct location.
  • Symbol rotation type (arithmetic/geographic) is ignored by graphics.
  • Creating a swatch returns a null image for scene symbols.
  • Extruded graphics in a scene view may disappear while navigating the map.
  • Selection halo thickness for various types of graphics are not consistently sized.
  • Selection color does not display for a selected polygon with a transparent outline in a dynamic graphics overlay in a SceneView.
  • Graphics overlays drawn in static mode do not render correctly. Use graphics overlays in dynamic mode.
  • A service feature table will not render when unique value renderer contains classification values with commas.

Portal

  • New TypeKeywords and Tags objects are created when a PortalItem is loaded, rather than repopulating the existing objects.

Feature collections

  • A feature collection in a web map that doesn't have a spatial reference for its extent will not draw.
  • FeatureCollection.toJSON loses popup info properties.
  • Creating FeatureCollectionTable from FeatureQueryResult can throw an exception.
  • When creating a feature collection from an array of graphics, the graphics' symbols are not honored. Instead, the default symbol is used.
  • Very large feature collections may cause an app to run out of memory and crash.

Web maps

  • Web maps with dynamic layers produced by ArcGIS Runtime do not draw correctly in ArcGIS Pro. Any overridden properties (renderer, labeling, opacity, sublayer visibility, and so on) will revert to service-specified defaults.
  • Labeling behavior and display in a web map may not match between JavaScript and Runtime.

3D

  • Files added to an existing raster elevation source at runtime are not applied to the scene view.
  • Elevation of vertices of a 3D polyline drawn high above the surface, viewed in relative mode, can dip when the tile beneath it is out of view and therefore unloaded.
  • SceneView.screenToLocationAsync can return inaccurate Z values.
  • The rotation property of a viewpoint is not applied when it is used to set a viewpoint for another view.
  • The color of a ModelMarkerSymbol can't be changed.
  • Models in a SceneView may render black on Android simulators.
  • Z-aware feature layers do not render correctly in scene view.
  • When using a scene layer package with a terrain, it can be seen through terrain.
  • Scene layer may not display due to limited device memory.
  • Alpha property incorrectly applied during image export of a SceneView.
  • Labels for feature layers do not display on scene view.
  • An application might fail when using military symbology layers in a graphics overlay with a scene. This does not happen with military feature layers.
  • Setting minimum scale on a graphics overlay in a scene view may not always be accurate.
  • Set viewpoint with NAN scale value causes globe in SceneView to render black.
  • Edges of polyline may appear behind globe in SceneView.
  • A selection highlight doesn't work when two graphics overlap.
  • screenToLocationAsync sometimes gives unexpected elevations when zoomed out.
  • In a scene view, changing the identify tolerance for graphics overlay behaves as though a zero tolerance is set.
  • Graphics overlay selection halo does not appear around selected symbols that are fully transparent.
  • The thickness of the selection halo varies between different symbol types.
  • For both compact and exploded caches in Web Mercator, an error occurs reading the cache configuration.
  • Rendering graphics in static mode near the poles or at varying distances from a camera may display unexpected results.
  • Camera from CurrentViewpoint on SceneView always returns null.
  • Multiple touch points for scene interactions, except for zoom, have not been implemented yet.
  • Layer refresh interval does not work in 3D scenes.
  • When rotating down on a scene view, the rotation stops when the clicked point is at 0,0.
  • For a Scene (3D), WGS 1984 is the only supported spatial reference.
  • App can crash when no symbol is set on a extrusion renderer.
  • Portions of building models may become transparent when panning the 3D scene.
  • Models in a SceneView may render black on iPhone 5 devices.
  • Identify operation can return empty results for ArcGISSceneLayer.
  • Graphics that not visible can be identified in a SceneView.
  • Unable to identify a partially-transparent symbol for a graphic in a dynamic graphics overlay in a SceneView.
  • Visibility of a graphic in a SceneView is determined by geometry, not display location.
  • Transparent simple marker graphics on a 3D scene view do not correctly display all symbols that are directly behind them.
  • A 3D scene may exhibit significant flickering while adding a new feature.
  • Selected features may flicker in a scene view.
  • Scene layer packages are sometimes visible through the terrain.
  • 3D vertical extrusion is applied to a graphic's symbol when it should only be applied to the renderer's symbol.
  • Rendering of dynamic graphics in a SceneView is fragmented in iOS simulator.

  • 3D military symbol text is sometimes clipped on Windows or macOS. They are not clipped in 2D.

API changes since 100.0.0

There have been many additions to the API to support new capabilities. There was also a bit of rearranging. Here are some of those.

  • Version 100.1 introduces new internal changes for versioning to help make migrating from one version of ArcGIS Runtime to another easier for the future. While side-by-side installations are supported, you may run into some scenarios where the ArcGIS Runtime QML plugin import statement may not allow for you to import 100.1 when you also have 100.0 installed. This is because the qmlimportscanner can detect the version 100.0 plugin before the 100.1 plugin, causing 100.1 import statements to fail. If you want to migrate to version 100.1, you will need to go into your Qt kit, and navigate to the qml folder. Remove the Esri folder, and this should now be able to import either 100.0 or 100.1 without any further issues. This will only be an issue when version 100.0 is installed side-by-side with another version of ArcGIS Runtime. All future versions of ArcGIS Runtime versions will have a more seamless way of upgrading between releases.
  • The signatures of certain signals in the C++ API have been updated to include additional arguments. If you are already connecting to these signals using the newer Qt 5 syntax your code will still compile but you may wish to update the connection to include the additional parameters. If you are connecting using the older SIGNAL/SLOT syntax your code will still compile but the connection will be invalid - you should receive a warning message at run time. In this case, you must update your connection syntax. The affected signals are:
    • PortalGroup::fetchGroupUsersCompleted
    • PortalItem::addCommentCompleted
    • PortalItem::fetchCommentsCompleted
    • PortalItem::fetchGroupsCompleted
    • PortalItem::addRatingCompleted
    • PortalItem::shareWithGroupsCompleted
    • PortalItem::unshareGroupsCompleted
    • PortalUser::fetchContentCompleted
    • PortalUser::createFolderCompleted
  • C++ Model role enums have been moved. Now role enums no longer exist at the global Esri::ArcGISRuntime namespace level, but they are nested inside of their corresponding model class. So, any code referencing these roles may need to be updated to prefix the model class before the enum values.
  • The Toolkit's QML plugin path in the SDK setup does not match the GitHub repo. Therefore, when including the Toolkit PRI file (which only needs to be done for iOS with Qt 5.9), the path will need to be changed to reflect the differing folder names.

Related topics