This page provides details about enhancements in the 200.4 release of ArcGIS Maps SDK for Kotlin. It also lists deprecations, resolved issues, known issues, and more.
Enhancements
The following enhancements have been added with this release.
Editing
Snapping
The GeometryEditor
now supports feature snapping when interactively creating and editing geometries. Snapping allows you to create geometries that connect and are coincident, so that interactive edits are more accurate, with fewer errors. When snapping is enabled in the SnapSettings
, visual cues indicate to the user when edits have snapped to features. See SnapSource
for information about configuring layers to be valid SnapSourceSettings
.
Using the magnifier with a vertex move allows users of touch devices to clearly see the visual cues for snapping.
The snapping functionality provides one of a series of geometry editing enhancements that will roll out in future releases.
Attribute editing with feature forms
New to Native Maps SDKs in 200.4 is support for attribute editing using feature forms. Feature forms streamline the attribute editing experience across the ArcGIS ecosystem and are now supported in the .NET Maps SDK, Kotlin Maps SDK, and Swift Maps SDK. For more information about using the feature forms API, see the Edit attribute values topic in this guide.
A new toolkit component provides an out-of-the-box feature forms editing experience that you can integrate into your apps. For more information about the toolkit capabilities, see the FeatureForm
component in the Kotlin Toolkit API Reference.
The toolkit component provides a convenient way to add attribute editing capabilities to an app without writing a lot of code. It supports a variety of control types for accepting input attribute values, including single-line and multi-line text boxes, multiple choice controls (such as combo boxes and radio buttons), on/off switches, and a date-time picker control. These editing controls can be arranged and organized into groups and support custom Arcade expressions to control whether form controls are visible, editable, or require a value. Arcade expressions can also be used to compute the value for an attribute (perhaps based on the value of other attributes).
If you need a more tailored attribute editing UI and user experience, use the API to read the form definition from a feature layer in a web map and build a completely custom UI that fits your requirements. See the FeatureForm
class for more information.
The following feature form functionality isn't currently supported: Editing the subtype field, attachments, relationships, and barcode input type.
Layers and display
Support for OGC 3D Tiles Layer
This release of ArcGIS Maps SDKs for Native Apps adds support for a new layer type Ogc3DTilesLayer
. The layer is based on the OGC specification for 3D Tiles. With Ogc3DTilesLayer
, you can add 3D Tiles data from a public service, portal item, or a local file that includes .3tz files. The layer behaves similar to ArcGISSceneLayer
and can also participate in 3D analyses.
Clustering support for GraphicsOverlay
This release adds support for clustering point graphics on a GraphicsOverlay
in dynamic rendering mode. In addition, there are new APIs to highlight an aggregate geoelement in a clustered FeatureLayer
or GraphicsOverlay
and get access to the underlying geoelements.
Dynamic entity track line rendering
With this release, track line attributes have been enhanced to include the entity ID attribute that uniquely identifies the track. This means you can now apply a renderer to trackLineRenderer
in the TrackDisplayProperties
that highlights or distinguishes between tracks using one of the attribute-based renderers.
Data and query
New field types
ArcGIS Maps SDKs for Native Apps now supports fields to store the following types of date and time values:
- Date only—Store values that indicate a day, month, and year. No time values are stored for date only fields.
- Time only—Store values that describe a moment in time (hours, minutes, and seconds).
- Timestamp offset—Store date and time values that include the time offset from the Coordinated Universal Time (UTC).
Big integer and 64-bit ObjectID fields are also now supported.
Date only - esri
Use a date only field to store data that was captured in the granularity of days or that represent an entire day, such as a date of birth, a hire date, a software release date, or a holiday. Date only fields store values in the format: YYYY-MM-DD (For example: 2024-04-10
).
Query exact matches against the esri
type using the DATE
keyword along with a date value. These queries are in the format: field_name = DATE 'YYYY-MM-DD'.
For example: My
.
Time only - esri
Use a time only field to store data that repeats daily or for information where only the time component matters, such as a daily meeting time, a store opening time, or a sunset time. Time only fields store values in the format: HH:MM:SS (For example: 18
).
Query against the esri
type using the TIME
keyword along with a time value. These queries are in the format: field = TIME 'HH:MM:SS'.
For example: My
Timestamp offset - esri
Use a timestamp offset field for data where the local time value is important and the values can cross multiple time zones, such as events recorded in local time, airline departures and arrivals, or tracking product shipments. Timestamp offset fields store values in the format: YYYY-MM-DD hh:mm:ss ± OffsetFromUTC (For example: 2024-03-30
).
Query against the esri
type using the TIMESTAMP
keyword along with a full ISO string. These queries are in the format: field = TIMESTAMP 'YYYY-MM-DD HH:MM:SS.mss ±HH:MM'`.
For example: My
Relative date and time queries
Relative date and time queries are now supported with all date fields (except time only) by providing the intervals in the query. Relative date queries can be performed relative to the current date or to a specified (anchored) date.
Query relative to an anchored date using this format: DateField >= AnchoredDate -+ INTERVAL 'IntervalValue' TimeStampFormat.
For example:
Date: Inspection
Timestamp offset: Inspection
Date only: Inspection
There are two main formats for queries relative to the current date or time:
<Date
<Date
For example:
Date: Inspection
TimeStampOffset: Inspection
Date Only: Inspection
You aren't limited to DAY
for TimeStampFormat when using INTERVAL
. Other values include HOUR
, MINUTE
, SECOND
, DA
, HOU
, and so on.
Utility networks
Support for shortest path traces while offline
ArcGIS Maps SDKs for Native Apps now supports the shortest path trace type for offline utility networks. This type of trace requires two starting points and a network attribute (such as shape length) and returns the shortest path based on the provided attribute. This means that utility networks with full topology from a stand-alone or sync enabled mobile geodatabase now support all of the trace types that utility networks from a feature service support.
Licensing changes
A Utility Network extension license is no longer required to analyze (trace) utility networks, and has been removed from these methods: UtilityNetwork.trace()
, UtilityNetwork.queryNamedTraceConfigurations()
, and ArcGISMap.getNamedTraceConfigurationsFromUtilityNetwork()
.
A new Advanced Editing extension license is now required to edit utility network features as well as create a version and edit features and tables in a branch version enabled feature service. This extension requires a minimum ArcGIS Runtime license level of Basic. Detailed information about the licensing changes made for ArcGIS Maps SDKs for Native Apps 200.4 and the specific methods that will require this license extension can be found in the License levels and capabilities topic in this guide.
Indoor positioning
Indoor positioning definition property on maps
An IndoorPositioningDefinition
property is now exposed from the ArcGISMap
class. For an IPS-aware map, it provides all information needed to create an IndoorsLocationDataSource
and conforms to the Loadable
pattern.
New constructor for an indoors location data source
This release adds a new constructor to the IndoorsLocationDataSource
that takes an IndoorPositioningDefinition
. This provides a consistent and straightforward approach for creating an IndoorsLocationDataSource
using IPS information stored with an IPS-aware map.
Indoors location data source configuration
An IndoorsLocationDataSource
can now be configured using an instance of the new IndoorsLocationDataSourceConfiguration
class.
Arcade
Support for Arcade 1.26
This SDK now supports Arcade 1.26
The following linear referencing functions have been added:
-
DefaultValue and HasKey have been updated to support checking nested dictionaries, arrays, and geometries.
Notes: Knowledge
functionality which is available in Arcade version 1.26 with support in Pro and Online will be available in a future ArcGIS Maps SDKs for Native Apps release. The profile variables, $user
and $graph
, added to the PopUp and Popup Element profiles are currently set to null
. A non-null $user
implementation is planned for an upcoming release.
Projection Engine updates
Coordinate systems and transformations
Available coordinate systems and transformations have been updated to EPSG v11.003. These include the Equi7 projected coordinate systems, which divide the world into seven continental areas and are designed for imagery use. New vertical transformations based on geoids, quasi-geoids, or other conversion grids can transform to or between gravity-related vertical coordinate systems for the British Isles, Corsica (France), Finland, New Zealand, St. Helena Island, and the United States. The National Geodetic Survey's historic geoid models (GEOID99, GEOID03, GEOID06, and GEOID09) and VERTCON 3.0 conversion grids for the United States are now supported. Vertical transformations using VERTCON 2.1 grids are deprecated but remain available. Transformations using VERTCON 2.1 grids appear at the bottom of the list of transformation paths.
SDK enhancements
Introducing new composable MapView and SceneView
Two new composable components, Map
and Scene
, are introduced in this release. These components are available via the Geo
toolkit module and can directly be used in your compose-based applications declaratively. See the toolkit documentation for more details.
setContent {
SampleAppTheme {
// create a map with a basemap style
val map = ArcGISMap(BasemapStyle.ArcGISImagery)
MapView(
modifier = Modifier.fillMaxSize(),
arcGISMap = map
)
}
}
Network interception
In this release, the Request
class has been enhanced to support modification of headers and parameters of existing requests using the Request.newBuilder()
function. The following functions are now available: Request.Builder.removeParameter()
, Request.Builder.addHeaders()
, Request.Builder.setHeader()
, and Request.Builder.removeHeader()
. These can be used when modifying a request with the Interceptor
API.
Here's a sample usage:
val interceptor = object : Interceptor {
override fun intercept(chain: Chain): Response {
val requestToProceed = chain.request().let { request ->
if (request.url.contains(trackingServiceURL, ignoreCase = true)) {
request.newBuilder()
.setHeader("Authorization", "Token Bearer")
.removeParameter("user")
.build()
} else {
request
}
}
return chain.proceed(requestToProceed)
}
}
These enhancements provide more flexibility and control over the HTTP requests.
Portal user properties
The following new properties are added to the PortalUser
class: user
, available
, and assigned
.
Breaking API changes
Indoors
is declared as nullable. New maps that are IPS aware don't contain a positioning table, thus this property may returnLocation Data Source.positioning Table null
after initialization of theIndoorsLocationDataSource
.
Behavior changes
-
ArcGIS Pro 3.3 introduces the ability to define output fields (Reverse Output Fields) for reverse geocode operations. With locators created using ArcGIS Pro 3.3 and later, only fields enabled in Reverse Output Fields are returned from a reverse geocode operation in 200.4 and later. Supported output fields for geocode operations (including reverse geocode) are listed in the REST API under Geocode Service output fields. For locators created before ArcGIS Pro 3.3, reverse geocode results contain all output fields. In a future release of ArcGIS Maps SDK for Kotlin, all locators will only be able to return supported output fields in reverse geocode results.
-
Following the deprecation of VERTCON 2.1 and introduction of VERTCON 3.0 by National Geodetic Survey, vertical transformations using VERTCON 3.0 grids will now be returned from appropriate
TransformationCatalog
calls. Vertical transformations using VERTCON 2.1 grids remain usable and will still be returned fromTransformationCatalog.getTransformationsBySuitability
calls but will now appear at the bottom of the returned lists which are sorted by suitability. To make use of transformations using VERTCON 3.0 grids, the required grid files must be deployed with your app. These can be found in the Projection Engine Data download for this release. See the Projection Engine updates section for additional coordinate system and transformation enhancements introduced with this release.
- In this release, we made some improvements to the attribution bar (the small strip of attribution text and Esri logo that appears at the bottom of the MapView and SceneView). These improvements introduced some changes in behavior:
- When there is more attribution text than can fit on a single line, a user can tap on the attribution bar to expand it. The maximum expandable height of the attribution bar is now limited to half the height of the MapView/SceneView. If the text still doesn't fit in the fully expanded attribution bar, the user can now scroll the text up/down by dragging a pointer across the text.
- Due to the introduction of the scrolling behavior and limiting the max height, the absolute values of the top and bottom bounds reported by
GeoView.onAttributionBarLayoutChanged
are different from previous releases. However, the relative differences between subsequent events remain the same.
Deprecations
API deprecations
- The method
fetch
is deprecated onHome Page Featured Content Portal
class. - The properties
home
,Page Featured Content Count home
andPage Featured Content Group Query show
are deprecated onHome Page Description PortalInfo
class.
- Old implementation of ComposableMap in toolkit is deprecated. Use the latest composable
Mapview
provided in the GeoView-Compose module.
OS and framework deprecations
There are no OS or framework deprecations with this release.
Issues resolved
Issues addressed in this release are listed below.
Geodatabase
methods for managing transactions (beginTransaction()
,commitTransaction()
, androllbackTransaction()
) have been made thread-independent. Any thread can end a transaction started by any other thread, integrating with modern language and platforms' concurrency models.
SceneView
does not honor someinteraction
like pan and fling.Options - Expanded attribution text can flicker and may be truncated.
Known issues
Known issues or limitations for this release are listed below.
-
BUG-000166643: A sceneview containing a scene with vector tiled layer can result in a crash if it's created and destroyed repeatedly. A possible workaround is to avoid using a vector tiled layer as a basemap, for example as an imagery basemap.
-
BUG-000171844: Using scheduled updates with ArcGIS Maps SDK for Native Apps incorrectly downloads an entire new replica instead of incremental changes.
-
BUG-000171919: Creating an offline replica, with a full utility network, incorrectly requires that all layers from the feature service are included.
-
BUG-000171920: The
OfflineMapTask
can fail to create an offline replica when including a utility network.
Changes in samples
Enhancements
- The Gradle files of the samples project have been updated, transitioning from Groovy DSL to Kotlin DSL.
- All new Kotlin SDK samples will be built utilizing Jetpack Compose, leveraging the GeoView-Compose Toolkit module.
- The following twelve Android view-based samples have been migrated to utilize the GeoView-Compose toolkit component.
- Add dynamic entity layer
- Add scene layer with elevation
- Analyze hotspots
- Display clusters
- Display Composable MapView
- Display scene from mobile scene package
- Identify layer features
- Manage operational layers
- Query feature table
- Show coordinates in multiple formats
- Show magnifier
- Show viewshed from point in scene
- In forthcoming releases, there will be a systematic migration of some android view-based samples to Jetpack Compose.
- Renamed
Display points using clustering feature reduction
toDisplay clusters
to be more concise.
Related topics
- System requirements for 200.4
- Install and set up
- Display a map (tutorial)
- Product Life Cycle (Esri Support Site)