Release notes for 4.18

December 2020

ES modules (beta)

We’ve released a beta build for ES modules to make it easier to integrate the API with third party frameworks and build tools. They are available for installation as a new NPM package @arcgis/core. Once installed, you can use native imports like this:

Use dark colors for code blocksCopy
1
2
import WebMap from '@arcgis/core/WebMap';
import MapView from '@arcgis/core/views/MapView';

The benefits of this approach include:

  • Simplified code
  • Native support in the browser
  • Minimal configuration
  • Seamless integration with all modern frameworks and build tools.

Visit Introduction to tooling to learn how to use the new modules and learn whether you should migrate. We also provide sample apps that demonstrate the basic concepts.

Elevation profile widget (beta)

Create elevation profile charts using the ElevationProfile widget, available in both MapView and SceneView. Interactively draw or select existing lines in your map or scene to compare heights for terrain but also 3D objects such as buildings. The chart is computed using the Ground's elevation and provides additional statistics along the line.

Elevation Profile

Query clustered features

You can query features from clusters with the aggregateIds option on the Query object. This gives you the flexibility to do the following:

Display the visible extent of a cluster's features.

cluster query extent

Calculate and display the convex hull for clustered features.

cluster convex hull

Display the features belonging to a cluster.

cluster show features

Query statistics for clustered features.

cluster statistics

3D updates

Context-aware navigation

Interactive zooming, panning and rotating in underground scenes or viewpoints with large tilt has greatly improved. A new context-aware navigation takes visible objects into account to better predict an area of interest. You will notice a steadier navigation experience, especially when moving around or towards data visualizing subsurface pipelines and earthquakes for example, but also thin structures such as vegetation or power lines made up of point cloud data.

Context-aware navigation

Scene layer attributes editing

Update the attributes of a 3D object SceneLayer using existing Editor widget workflows or a new method applyEdits(). Edits are applied to the associated feature layer but taken into account and rendered by the API until the I3S cache is updated.

See how updates to a scene layer representing apartments are immediately reflected in a new attribute editing sample.

Scene layer attribute editing

Self snapping

The latest release introduces beta support for self snapping when creating or updating line- and polygon features in 3D. Interactively create geometries that have parallel lines and right angles which are essential for features representing building footprints or line networks. You can enable self snapping through a new property SketchViewModel.snappingOptions and toggle it during a draw operation.

Try out snapping in the Sketch in 3D and Edit features in 3D samples.

Self snapping

Order-Independent transparency

Multiple overlapping transparent features are rendered independently of the camera position. The new order-independent transparency (OIT) blends all transparent surfaces together, where the previous approach assured that the front-most is rendered. Visualizing large volumetric symbology covering other transparent features in your scene, but also semi-transparent 3D WebStyles or transparent icon symbology like Firefly style benefit from the visual improvements.

Order independent transparency

Mars and Moon support

Skip the seven month journey to Mars by visiting our red neighbor with the ArcGIS Maps SDK for JavaScript. The latest release adds experimental support for Moon and Mars coordinate systems to SceneView. Visualize imagery- and elevation layers but also feature layers containing mapped information about the astronomical bodies. Atmosphere and globe diameter are automatically adjusted when loading a layer with a supported Mars or Moon coordinate system.

Mars

Custom coordinate systems

Local scenes can now load and visualize more datasets by supporting additional custom coordinate systems defined by a Well-Known Text (WKT) string.

Layer updates

Layer effects

You can now apply Effects to all layers in 2D MapViews. This powerful capability allows you to apply css filter-like functions to layers to enhance the cartographic quality of your maps. This is done by applying the desired effect to the layer's effect property.

We added support for three new effects: bloom, drop-shadow, and blur.

Grizzly Bear habitat ranges

Since some effects like drop-shadow and blur are sensitive to scale, we enhanced the Effect API to make effects scale-dependent. You can set effects at different scales to fine tune the look and feel of the map. Check out the samples that take advantage of this powerful functionality.

In the following screenshot, we see the result of applying drop-shadow to features that intersect boundaries of London boroughs while applying blur and brightness effects to features do not meet from the filter criteria.

layerview-effect

Effects could be applied to filtered features via FeatureEffect since version 4.11. FeatureEffect applies effects to features included and excluded from a filter in a LayerView. Version 4.18 ensures the features included in the filter are drawn on top of all excluded features.

LayerView transitions

We continued our work from 4.17 to add default fade-in and out transitions to layer views for the following layers: MapImageLayer, WMSLayer, ImageryLayer, and BaseDynamicLayer. These transitions occur when a user toggles the layer's visibility is on/off, zooms in/out in the view, or changes the layer configuration. This is only supported in 2D MapViews.

VectorTileLayer

We added helper methods that will simplify the process of updating a style loaded with a VectorTileLayer. With these methods, you will be able to add, remove or re-order style layers. You can also modify any of the properties of a style layer with one call, without reloading the layer. Check out the VectorTileLayer - update style layers sample to see this in action.

vectortiles-setstylelayer

StreamLayer

StreamLayer can consume custom stream services that are pushed via websocket in 3D SceneView. To do this, set the webSocketUrl property of the StreamLayer to point to your custom service. See the Reference a custom stream service for more information.

We added the updateInterval property to StreamLayer to control the rate features are updated in the layer. This can help improve app performance.

ImageryLayer

We added methods to ImageryLayer for computing statistics and histograms for a given extent. ImageryLayer now has support for identifying content.

Widget updates

Sketch

The graphic selection symbols were enhanced in the Sketch widget for better visualization. The update event's toolEventInfo parameter now provides more information when the user selects or deselects graphics using Shift+Left-click. The defaultCreateOptions.mode property is now click instead of hybrid to better handle snapping.

sketch-updates-release-notes

The Sketch widget also automatically includes two new selection tools within visibleElements: rectangle-selection and lasso-selection. These elements can be removed as needed.

sketch-selection-default

FeatureForm

The FeatureForm widget's UI has been updated when showing grouped fields. If its groupDisplay property is not set to sequential, the grouped fields now display with the option to collapse. The following shows the difference in UI between 4.17 and 4.18.

4.174.18
featureform-417 featureform-418

A new property, returnGeometry was added to the PopupTemplate and indicates whether to include the feature's geometry for use by the template. This property should be set to true if you need to access the selected feature's geometry. The geometry should be accessed via the returned graphic from the popup's selectedFeatureWidget. This is needed since the geometry is not automatically queried and returned in the popup's selected feature.

Print

The Print widget was enhanced to support reading custom print templates defined in a portal. To accomplish this we added a new class, CustomTemplate, which defines the custom layout template options used by the Print widget to generate the print page. We also added two new properties to the Print widget: includeDefaultTemplates and portal. If the portal property is defined, the end-user will see a new Select template button in the Print widget UI.

print-select-template2

We enhanced the Search widget to work with standalone tables associated with a webmap. This allows users to search for specific records, based on a field value, within configured tables. We also added a findTableById() method that returns a table based on the given table ID.

CIM Symbol Builder

We introduced a new app this release - the CIM Symbol Builder! This app provides an environment where you can design CIM symbols with a simple user interface, copy the JSON of the symbol, and use it in a web application built with the ArcGIS Maps SDK for JavaScript.

cim-symbol-builder

Smart mapping size themes

We introduced size themes to Smart Mapping size renderer creator functions. You can now create size visualizations with above, below, and above-and-below themes. These themes are well suited for data variables that show a change over time, such as change in population between two years. The above-and-below theme can help communicate how far above or below a data value is relative to a meaningful inflection point.

sm-size-themes

Iterate through a collection

You can iterate through the items of a Collection using for...of. Prior to 4.18, this was not possible. The following patterns are now supported.

Use dark colors for code blocksCopy
1
2
3
4
5
6
7
8
9
10
// iterate through each item
for (const item of collection) {
  //...
}

// create an array from a collection
const array = Array.from(collection);

// create a set from a collection
const set = new Set(...collection);

Prior to 4.18, you had to do the following (these patterns are still supported).

Use dark colors for code blocksCopy
1
2
3
4
5
6
7
8
9
// iteration
collection.forEach((item) => { ... })

// creating an array from a collection
collection.toArray();

// create a set from a collection
const set = new Set();
collection.forEach((item) => set.add(item));

Internationalization

Additional methods were added to the intl class to aid in creating, registering, and fetching message bundles used for widget strings. This can be helpful for developers needing control over how their custom widgets work with translation strings.

IdentityManager

The IdentityManager modal dialog now captures and traps focus when shown. Prior to this version, no elements would display focused upon opening.

End of IE11/Edge Legacy support

Support for Internet Explorer 11 and Edge Legacy for use with the ArcGIS Maps SDK for JavaScript was deprecated as of version 4.16. Version 4.17 was the last release with support for these browsers. This means that apps built with 4.18 (and beyond) will not function in IE11/Edge Legacy. See our updated System Requirements page and the Why is Esri ending support for Internet Explorer 11? blog to learn more.

Added classes, properties, methods, events

Deprecated classes, properties, methods, events

Breaking changes

  • No support for IE11/Edge Legacy. Support for Internet Explorer 11 and Edge Legacy was deprecated at version 4.16, and ends at version 4.18. See our updated System Requirements page and the Why is Esri ending support for Internet Explorer 11? blog to learn more.
  • The default format for the takeScreenshot() method on MapView and SceneView has changed to png instead of jpg.
  • The mediaType property was removed from OGCFeatureLayer. All requests for metadata and data content will be made with the "f=json" url parameter.
  • FeatureForm.getValues() will now always return an Object with updated attributes. Prior to this, it would return null if there was no feature provided.
  • FeatureForm.getValues() will return undefined if there is no existing attribute on the edit feature. This is meant to distinguish from valid null values.
  • The FeatureTable widget no longer uses the layer's maxRecordCount to determine pagination size. It automatically defaults to 50 records unless the layer contains less than this. If so, it will take this count and set the pagination to it.
  • Updated the callback for intl.onLocalChange() to return a LocaleChangeCallback instead of a Function.
  • The default mode for the defaultCreateOptions on the Sketch widget has changed to click instead of hybrid.
  • The RouteParameters.barriers property has been removed. It was deprecated as of version 4.11. Use pointBarriers, polygonBarriers, and/or polylineBarriers instead.

Please refer to the Breaking changes guide topic for a complete list of breaking changes across all releases of the 4x API.

Bug fixes and enhancements

  • BUG-000126854: Fixed an issue where the MapView is panned when trying to move a selected graphic with the Sketch widget.
  • BUG-000127699: Fixed an issue where a Graphic with a long TextSymbol or a Multipoint geometry would get cut off when moved across tile boundaries.
  • BUG-000129795: Fixed an issue where the impedanceAttribute set in ServiceAreaParameters was not properly passed into the solveServiceArea request.
  • BUG-000130487: Fixed an issue when using a Deck.gl layer, and adding padding to the MapView, the trip line and street background of the Deck.gl layer are not properly aligned.
  • BUG-000132412: Fixed an issue where a WMTSLayer was rendered with incorrect levels of detail (LOD) after zooming in and out multiple times.
  • BUG-000132880: Fixed an issue where visibility layout property of style layers in a VectorTileLayer was not honored when zooming in and out.
  • BUG-000133609: Fixed an issue where a WMTSLayer failed to load if the serviceMode was "KVP", but was not defined in the constructor.
  • BUG-000133696: Fixed an issue where the CSVLayer is converting last column int values to dates when The CSV data file has Windows (CR LF).
  • BUG-000133980: Fixed an issue where the Sketch widget update event failed to trigger after deselection of a Graphic.
  • BUG-000134238: Fixed an issue where a WMSLayer would get slightly offset if the screen resolution was higher the maxWidth or maxHeight of the layer.
  • BUG-000134595: Fixed an issue where HeatmapStatistics fail when using a spatial reference other than Web Mercator (102100).
  • BUG-000134662: Fixed an issue where a ImageryTileLayer was displayed in all black or green on some Android mobile browsers.
  • BUG-000134722: Fixed an issue where memory usage increasing when constantly adding and deleting features from a FeatureLayer by calling applyEdits.
  • BUG-000134757: Fixed an issue with opacity on a polygon MapImageLayer published with marker symbols, after its popup has been opened, panning or zooming will remove the markers.
  • BUG-000134784: Fixed an issue where clustering with FeatureReductionCluster differed, depending on the map interaction.
  • BUG-000134786: Fixed an issue where SVG symbols were not printed correctly when rendered with UniqueValueRenderer.
  • BUG-000134849: Removed unnecessary bower.json files from local API build output.
  • BUG-000135212: Fixed a bug where graphics are displayed in wrong z-order at initial load.
  • GEONET-261976: Fixed an issue where near simultaneous calls to FeatureLayer.applyEdits were not working as expected.
  • GEONET-622683: Fixed an issue FeatureLayerView.queryExtent is returning 0,0 for xmin and ymin values.
  • GEONET-958751: Fixed an issue where the Search widget would throw an error message in the browser console when Search.locationEnabled is set to false.
  • GEONET-959033: Fixed the Invalid time value error message that gets thrown when there is a date FieldInfo specified at the PopupTemplate and rendered within the popup.
  • Fixed an issue with the Search widget input boxes with Safari on iOS devices.
  • Fixed an issue with the alignment of CoordinateConversion widget components when using right-to-left (RTL).
  • Fixed as issue with the labeling deconfliction strategy when using multiple LabelClasses.
  • ENH-000124689: The request class is now used for legend graphic requests on WMSLayers to allow for request interception.
  • ENH-000134640: The StreamLayer now has updateInterval property that can be used to configure the minimum rate at which the StreamLayer is updated.
  • GEONET-418997: Enhanced the KMLLayer.MapImage to display when the spatial reference is not WGS84 (wkid: 4326).
  • Added additional options to the symbolConfig property of symbolUtils.renderPreviewHTML()
  • Enhanced Popup so that the focus shifts to the first focusable element of the popup.
  • Enhanced UniqueValueInfo.value to accept number values as unique values in addition to strings. Previously, numbers were autocast to strings.
  • Enhanced accessibility on the LayerList widget when actions are defined.
  • Enhanced the Directions widget by cleaning-up the UI graphics for a more consistent experience.
  • Features of a SceneLayer - such as buildings and 3D objects - now fade-in while they are being loaded from the service.
  • SceneLayer and BuildingSceneLayer popups now show attribute values coming from related feature tables.
  • BuildingComponentSublayerView can now apply client-side spatial and attribute filters to individual features of a BIM model.

Additional packages

Version 4.18 of the ArcGIS Maps SDK for JavaScript uses ArcGIS Arcade 1.12 (since 4.18).

How to access the SDK

  • The API library is available on both CDN and npm, Read more at Install and set up.
  • For supported versions, you can also download both the documentation and the API library. These downloads are typically available 3-4 weeks after release.

Previous releases

Your browser is no longer supported. Please upgrade your browser for the best experience. See our browser deprecation post for more details.