Skip To ContentArcGIS for DevelopersSign In Dashboard

FeatureLayer editing in 3D

Editing of point, line and polygon features is now supported in 3D. Update and persist FeatureLayers in your scene using out-of-the-box workflows from the Editor widget. This allows you to build end-to-end editing experiences for creating and updating features in your 3D web application.

While the Sketch tool already supports features on the ground, the new z-aware editing tools also allow you to modify geometries above- and underground. Laser lines projected onto the terrain and objects in the scene help you align geometries in the 3D space.

3D Editing Z-Values

When you scale or rotate 3D symbols with the interactive handles of the 3D point transform tool, the feature attributes are automatically updated through VisualVariable configurations. Existing widgets such as the FeatureForm and FeatureTemplates integrate with 3D symbology.

See the new Edit features in 3D with the Editor widget sample for example workflows.

FeatureTable widget (Beta release)

The FeatureTable widget provides an interactive tabular view of each feature's attributes. The table efficiently loads larger datasets quickly. This can be noticed as the user scrolls through the table. In addition, users can select rows (features) within the table, sort them based on an attribute, and choose to show/hide an attribute column. This widget is still in its beta version and will evolve with upcoming releases. For a complete list of its current limitations, please visit its API reference documentation.

The FeatureTable widget can work on its own as a standalone widget.

standalone featuretable

It can also work in conjunction with an associated map. featuretable with map

Attachments: viewing and editing

Viewing attachments

4.15 introduces a new Attachments widget which allows users to view attachments associated with a feature. Along with a thumbnail of the attachment, the file format and size are displayed. The pop-up now uses this widget under the hood to display attachments (note that it was possible to view attachments from within the pop-up prior to 4.15). Since the attachment experience is packaged as a standalone widget, you can also integrate attachment viewing into your own custom workflows.

Editing attachments

The Editor widget was updated to support attachment editing. You can add, update, or delete attachments associated with a feature. It does so by making use of the Attachments widget. Nothing specific needs to be explicitly configured within the Editor to make this work. If the feature service to be edited is enabled with attachments, the option to add, update, and delete them will be made available within the widget.

Editor with attachments

BuildingSceneLayer filter modes

New filter modes in the BuildingSceneLayer allow you to highlight features in a BIM model while still showing other parts of the building. Possible filter modes are x-ray for transparency and wire-frame to only show the edges of features.

BSL Filter Modes

Try out different filter modes in the new Filter BuildingSceneLayer sample.

Display features on top of IntegratedMesh layers

As far as elevation is concerned, the API now treats an IntegratedMeshLayer in your scene as if it was the ground. This means you can annotate specific areas of the integrated mesh by draping polygons directly onto it using elevation mode on-the-ground. Point or line symbology for example that have relative-to-ground as their elevation mode are aligned along the integrated mesh.

Integrated Mesh Draping

See the IntegratedMeshLayer sample for an example.

Mesh materials

Custom 3D models created with the Mesh geometry class can now benefit from a new MeshMaterialMetallicRoughness material, rendering them with a specular surface. You can tweak the metallic and roughness factors directly on the material or through texture maps.

Mesh Metallic Materials

You can see the difference in the above 3D terrain showing Mammoth Mountain. Try out different material properties in the Low poly terrain using mesh geometry sample.

Point Clustering updates

We added support for clustering point layers with renderers containing Arcade expressions.

API Modernization

We made two significant updates to the API to modernize and strengthen it.

esriConfig as a global variable

The esriConfig object can now be used as a global variable to set esri/config properties.

<script>
  var esriConfig = {
    portalUrl: "https://myHostName.esri.com/arcgis"
  };
</script>

Return native promises

The API returns native Promise by default as of 4.15. This will require code changes in your app. We plan to completely remove Dojo promise at 4.16. For app developers, this means that any promise you receive from the API is now a standard JavaScript promise (aka “native promise”). They are nearly identical to Dojo deferred/promise, with the following differences:

  • No otherwise() method. Use catch() instead.
  • No cancel() method. Use AbortController.abort() instead.
  • No always() method. Use the following code instead:
.catch(function(error){
  /* do something with the error */
}).then(function() {
  /* this function is always executed */
});
  • No isFulfilled()/isResolved()/isRejected() methods (and no suitable replacement).
  • With Dojo promises, the then/catch functions used to be called synchronously when the promise is resolved/rejected. With standard promises, they are called asynchronously (in a future microtask). This can lead to bugs in code that relies (usually inadvertently) on synchronous execution.

A has flag was made available to enable native JavaScript promises in 4.12. Now it can also be used to disable native Promise, but this flag will be removed in the next release. More details about this functionality will be available in an upcoming blog post.

To opt out in 4.15, use:

<script>
  var dojoConfig = {
    has: {
      "esri-native-promise": false
    }
  };
</script>

Dojo declare

We continued our work of removing the dependency on Dojo’s declare module. At the next release, this module will be removed completely. This means that apps with classes that leverage the API class framework and multiple inheritance will continue to work with version 4.15, but will stop working at version 4.16. There is a warning message (with a link to the Accessor guide page) in the browser console when multiple inheritance is used:

Deprecated Accessor

Once the work is completed, you can test your apps using the early API access repo on GitHub (/next) to see how the changes will affect you before the official release of 4.16.

Widget updates

HTML sanitizer updated

In version 4.14, the HTML sanitizer was added to all widgets to sanitize and escape strings according to the ArcGIS Online supported HTML specification. For 4.15 we relaxed some of the sanitizing rules when displaying HTML to be less restrictive than the ArcGIS Online supported HTML specification. We also fixed a bug related to sanitized HTML content not displaying in PopupTemplate.content (see below).

DatePicker and TimePicker widgets

Two new widgets were added to help support choosing dates and time. The DatePicker and TimePicker widgets were added to provide an easy UI experience when entering date and/or time information.

The Print widget UI now displays different icons based on whether the printed map can be automatically downloaded or opened in a new window. See the fileName and title properties for more information. Developers can also define which formats and layouts to make available to the user in the UI. These properties can also be set via the PrintViewModel.

Editor updates

Support for editing attachments

The Editor now has built-in functionality for editing attachments. If the associated feature layer supportsAttachment's, an option to add, update, or delete an attachment is provided. Nothing additional needs to be configured to allow attachment(s) editing, the Editor widget honors whatever permissions that are set on the underlying service.

Workflow updates

There are two new Workflow classes: CreateWorkflow and UpdateWorkflow. These two classes are specific to either adding a new feature or editing an existing feature respectively. The functionality remains the same, it's just now separated into its respective class. In addition to these two classes, there is also new classes to handle the workflow data: CreateWorkflowData and UpdateWorkflowData. In addition, Workflow edits are now referenced in the Edits class.

Attachments in the Popup

The Popup widget is now configured to handle attachments using the Attachments widget. Similar to previous versions, there is an AttachmentsContent element that can be configured to display any given attachments associated with a feature. Now, the main difference is that the Attachments widget stores the AttachmentInfo which used to be accessible via AttachmentsContent.

Turning visible elements on/off

It is possible to turn visible elements of the Popup's UI on/off. This is handled via its visibleElements property which contains both closeButton and featureNavigation properties. The featureNavigation property should be used instead of the deprecated featureNavigationEnabled property.

Set amount of actions in menu

It is possible to set the maximum amount of actions to display within a popup via its maxInlineActions property.

Popup without maxInlineActions setPopup with maxInlineActions set to 1
using-maxInlineActionsno-maxInlineActions

Updated chart axis values and text positioning

The y-axis now starts at zero if there are no negative values when using a chart media element within a Popup. In addition, the title and caption of chart media elements now display above the chart.

y-axis and title/caption in 4.14y-axis and title/caption in 4.15
yaxis414yaxis415

Better Stronger MapImageLayer

The MapImageLayer and it's Sublayer classes were refactored and modernized. Visualization saw improvements with smart mapping for dynamic layers support, and fixing some layer visibility bugs. Several issues with the popup behavior were fixed, such as being able to display descriptions when using coded domain values.

Lastly, we added the ability to load the sublayer metadata by adding Sublayer.load(), as well as MapImageLayer.loadAll() to load all the sublayers. After loading a sublayer you get access to new properties and methods:

As well as the renderer and labelingInfo as configured on the service. More details about these updates will be available in an upcoming blog post.

Imagery layer updates

Developers can now take advantage of client-side processing and rendering of tiled image services in 2D maps using the TileImageryLayer.

StreamLayer updates

Developers can now take advantage of client-side querying and filtering for StreamLayer in 3D SceneView. The client-side effects is also supported on StreamLayerView in 2D.

PictureMarkerSymbol updates

PictureMakerSymbol now supports animated gif and png images in 2D MapView.

Statistics query updates

The percentile-continuous and percentile-discrete types have been added to statisticType. The percentile statistic indicates the value above or below which a given percentage of values in a group of data falls.

Updated Sign-in UI

The sign-in and OAuth popup confirmation dialog used to access secure services is no longer implemented as a Dijit in a Dojo dialog. This dialog is specific to secure services that do not utilize OAuth on the ArcGIS platform. The UI has been redesigned to account for this change.

Accessing a secure service in 4.14Accessing a secure service in 4.15
secureservice414secureservice415
OAuth popup confirmation in 4.14OAuth popup confirmation in 4.15
oauthpopup414oauthpopup415

Breaking changes

Bug fixes and enhancements

  • BUG-000113923: Fixed an issue where popups with coded value domains were not being properly displayed for MapImageLayer.
  • BUG-000115337: Popups now properly display coded values for MapImageLayer.sublayers.
  • BUG-000118097 & BUG-000120347: A grouped layer's title now displays properly in the Legend widget.
  • BUG-000120921: Fixed an issue with label placement for FeatureLayers in 2D MapViews.
  • BUG-000121406: Layer visibility for multilayer feature collections stored in webmaps now displays as expected.
  • BUG-000123521: Fixed an issue where TextSymbol did not properly respect Font.decoration property values.
  • BUG-000123604: Fixed an issue where the UniqueValueRenderer is unable to display a feature layer with more than 1000 values.
  • BUG-000124184: Fixed an issue where popups authored in a webmap weren't being read properly for nested sublayers of a MapImageLayer.
  • BUG-000124241: Fixed an issue where the Editor widget would not display updated geometry after feature edits were applied.
  • BUG-000126322: Fixed an issue where features are cut off at the poles in SceneView.
  • BUG-000126552: Fixed an issue where the MapView zoom and scale properties were not getting updated properly when set manually.
  • BUG-000126782: Charts within a Popup now dispose properly.
  • BUG-000127024: Fixed an issue where a WebMap would not load if it contained a MapImageLayer with a group layer and Supports Dynamic Layers: false.
  • BUG-000127418: Fixed an issue where layer order within the Legend widget was not updated if the order of the layers on the map changed.
  • BUG-000127435: Popups now display related field values saved within webmaps.
  • BUG-000127657: Fixed an issue where the TimeSlider widget displays November twice in its labels.
  • BUG-000127777 - Removed documentation for an unsupported calculation isRightSide in the NearestPointResult result object, which is returned in the GeometryEngine.nearestCoordinate(), GeometryEngine.nearestVertex(), and GeometryEngine.nearestVertices() methods.
  • BUG-000127800: Fixed an issue where the ScaleBar would not update properly when the view's zoom level was manually changed.
  • BUG-000127870: Fixed an issue with how SVG image symbols displayed.
  • BUG-000128059: The Scalebar widget now displays the x-padding on the MapView correctly.
  • BUG-000128088: Fixed an issue in the Bookmarks widget where the bookmarks couldn't be reordered after switching between a 2D MapView and 3D SceneView.
  • BUG-000128344: Fixed an issue where Multipoint.setPoint threw errors if z/m values were not set.
  • BUG-000128010: Fixed an issue where the filter function would remove all graphics from a GraphicsLayer.
  • BUG-000128340: Fixed an issue where the Legend widget would display Group Layers when removing nested Group Layers after programatically removing them in the API.
  • BUG-000129207: Fixed an issue where GraphicsLayer's graphics are not displayed when dojo csp-restrictions flag is enabled.
  • GEONET-217197: Fixed an issue where MapImageLayer.sublayers visibility defined in a portal were not being honored in an application.
  • GEONET-245706: Fixed an issue where the LayerList widget did not work properly on Android devices.
  • GEONET-245841: Fixed an issue where <wbr> would appear in the directions list of the Directions widget.
  • GEONET-245932: Fixed an issue where GraphicsLayer was not displaying all added graphics.
  • GEONET-245991 and GEONET-246072: Fixed an issue related to sanitized HTML content not displaying in PopupTemplate.content and other widgets.
  • GEONET-247887: Fixed an issue where Ctrl+Z would undo the last two vertices in the Sketch widget when only one vertex should have been removed.
  • js-next-31: Fixed an issue where Graphics with a modified opacity value appear to multiply when panning the map.
  • Fixed an issue when using the Draw class (and widgets that use this class such as Measurement) to interact with a map on devices with a stylus.
  • Fixed an issue where GeometryEngine.geodesicDensify() did not return a result when the input geometry's spatial reference was WGS-84.
  • Fixed an issue where MapImageLayer with dynamic layers enabled and using smartMapping renderer did not behave properly.
  • Fixed an issue where click, double-click, immediate-click and hold events on SceneView would not intersect 3D objects and only return a mapPoint representing the intersection with the ground.
  • Fixed an issue where a Popup would break after panning left (when popup goes off the screen and comes back) in IE11.
  • Fixed an issue where an incorrect title was returned for sublayers of TileLayer when loaded as an item from a portal.
  • Fixed an issue where error messages did not display well with dark themes.
  • Fixed an issue where labeling did not work properly with DotDensityRenderer.
  • Fixed an issue where labels sometimes did not display properly when using a polar projection.
  • Fixed an issue where setting opacity on a FeatureLayer would apply the transparency value to each feature and not the whole layer.
  • Fixed an issue where the basemap thumbnail in the BasemapToggle widget would not load until the corresponding Basemap was loaded.
  • Fixed an issue where the LayerList widget affected MapImageLayer.sublayers visibility.
  • Fixed an issue where the outline of some polygon geometry features did not display if the line-width was too small.
  • Fixed an issue with accessibility with the sources menu of the Search widget.
  • Fixed an issue with how numbers display in Popup charts to maintain consistency across chart types.
  • Fixed an issue with the fileName and title properties for saving printed maps with the Print widget.
  • Fixed an issue with the WMTS Capabilities XML parser, so WMTSLayers that are missing optional "Capabilities" in their metadata still display.
  • Fixed an issue where numbers were being overly-translated when locale was set to Arabic (ar).
  • Enhanced the LayerList widget by updating the UX/UI of showing and hiding layers so that there are fewer 👁s. Now the 👁 will disappear when a layer is visible, and the hidden icon will show when the layer is not visible.
  • Enhanced the relative-to-scene elevation mode to account for z-values.
  • Sketch in 3D: instead of the highlight there are other visual helpers like laserline, disc manipulator and the point for exact position for PointSymbol3D

Added Classes, Properties, Methods, Events

Complete list of added Classes, Properties, Methods, Events.

Deprecated Classes, Properties, Methods, Events

Complete list of deprecated Classes, Properties, Methods, Events.

The following are deprecated and will be removed in a future release:

Additional packages

Version 4.15 of the ArcGIS API for JavaScript uses ArcGIS Arcade 1.9 (since 4.15), Dojo 1.14.2 (since 4.11), dgrid version 1.2.1 (since 4.5), and dstore version 1.1.2 (since 4.5). From Dojo 5 we use @dojo/framework version 5.0.4 (since 4.12).

Previous releases

Content