Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

esri-leaflet

Esri183.2kApache-2.03.0.16TypeScript support: definitely-typed

Leaflet plugins for consuming ArcGIS Online and ArcGIS Server services.

arcgis, esri, esri leaflet, gis, leaflet plugin, mapping

readme

Esri Leaflet

npm version apache licensed jsDelivr Hits

Leaflet plugins for working with a handful of the most popular ArcGIS Service types. This includes Esri basemaps and feature services, as well as tiled map, dynamic map and image services.

This project is maintained with :heart: by folks on multiple teams at Esri, but we provide no guarantee of individual features, nor a traditional product lifecycle to support planning.

The goal of this project is not to replace the ArcGIS API for JavaScript but rather to provide small components for only some aspects of the ArcGIS platform for developers who prefer to build mapping applications with Leaflet.

We are proud to facilitate a project which requires participation from our diverse user community in order to thrive and we welcome contributions from those just getting their feet wet in open-source.

Support for Geocoding services and Geoprocessing services, as well as service defined rendering are available as well (via additional plugins).

If you'd like to display Esri services in any Leaflet application, we ask that you adhere to our Terms of Use and attribution requirements.

Table of Contents

Quick Start

The easiest way to get started is to load Esri Leaflet via CDN. Here is an example you can copy/paste into your own .html file: Esri Leaflet Quick Start

App

Samples, Tutorials, and API Reference

Samples, tutorials, and the API reference can be found at developers.arcgis.com/esri-leaflet.

If you notice any issues or would like to propose a change to the documentation, please let us know by creating an issue in this repository.

Additional Plugins

Many folks have written plugins to customize and extend Leaflet.

http://leafletjs.com/plugins.html

You can also pick and choose additional Esri Leaflet plugins.

https://developers.arcgis.com/esri-leaflet/plugins/

Frequently Asked Questions

Issues

If something isn't working the way you expected, please take a look at previously logged issues that resolve common problems first. Have you found a new bug? Want to request a new feature? We'd love to hear from you. Please let us know by submitting an issue.

If you're looking for help you can also find answers on Stack Overflow and GeoNet.

Going Deeper

Development Instructions

If you'd like to inspect and modify the source of Esri Leaflet, follow the instructions below to set up a local development environment.

  1. Fork and clone Esri Leaflet
  2. cd into the esri-leaflet folder
  3. Install the package.json dependencies by running npm install
  4. Run npm start from the command line. This will compile minified source in a brand new dist directory, launch a tiny webserver and begin watching the raw source for changes.
  5. Run npm test to make sure you haven't introduced a new 'feature' accidentally.
  6. Make your changes and create a pull request

Dependencies

  • Esri Leaflet 1.x (available on CDN) can be used in apps alongside:

  • Esri Leaflet 2.x (available on CDN) can be used in apps alongside:

The master branch of this repository is only compatible with Leaflet 1.x.

Versioning

For transparency into the release cycle and in striving to maintain backward compatibility, Esri Leaflet is maintained under Semantic Versioning guidelines and will adhere to these rules whenever possible.

For more information on SemVer, please visit http://semver.org/.

Contributing

Esri welcomes contributions from anyone and everyone. Please see our guidelines for contributing.

Terms

If you're using Esri content and services, you'll need to license your usage with an API key or an ArcGIS identity. Full details can be found here: Deployment guidelines.

If you display an ArcGIS Online service in any Leaflet application, we require that you include Esri attribution and recognize data providers. Using this plugin, it couldn't be easier to follow the terms. Just select your basemap and the appropriate credits will be displayed dynamically in Leaflet's own Attribution control as users pan/zoom.

L.esri.basemapLayer("Topographic").addTo(map);

attribution

Credit

License

Copyright © 2014-2019 Esri

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

A copy of the license is available in the repository's LICENSE file.

changelog

Change Log

All notable changes to this project will be documented in this file. This project adheres to Semantic Versioning.

Unreleased

3.0.16 - 2025-05-01

Changed

  • Changed code formatting from Semistandard to Prettier and ESLint (#1408)

3.0.15 - 2025-04-07

Fixed

  • apikey property on TiledMapLayer (#1407)

3.0.14 - 2024-12-17

Added

  • Export the Esri attribution string for other layer types to use (#1397)

3.0.13 - 2024-10-25

Fixed

  • Removed usage of toLatLngBounds to improve usage of Esri Leaflet with ESM CDNs. (#1394)

Changed

  • Updated dependencies (#1382)

3.0.12 - 2023-11-27

Fixed

  • Added removeEsriAttribution to be exported (#1379)
  • Fixed issue in TiledMapLayer when LOD is 0 (#1381)
  • Fixed apostrophe URL encoding (#1377)

3.0.11 - 2023-08-07

Fixed

  • Fixed issue with attribution prefix consistency (#1366)

3.0.10 - 2023-01-17

Fixed

  • Fixed issue with popups when using Leaflet v1.9.3 (#1350)

Changed

  • Updated dependencies (#1351)

3.0.9 - 2022-12-09

Fixed

  • Fixed performance issue with refreshing features (#1346)

3.0.8 - 2022-04-08

Fixed

  • Fixed warning in Leaflet v1.8.0 (#1325)

Changed

  • Updated development tooling:

3.0.7 - 2022-02-24

Fixed

  • Include siteData.json in NPM release (#1317).

3.0.6 - 2022-02-23

Fixed

  • Include siteData.json in NPM release (414e060d44bf2be30baaa4fe2e94021c7a1c99a1).

3.0.5 - 2022-02-23

Added

  • siteInfo.json generation as part of the release (#1313)

Fixed

  • FeatureLayer.refresh() fixed for layers where simplifyFactor is not set (#1304)

Changed

  • Updated dependencies (#1314)

3.0.4 - 2021-12-06

Fixed

  • Feature Layer fixes: addFeature event fixed and eachActiveFeature should now respect minZoom/maxZoom (#1301)

3.0.3 - 2021-09-24

Changed

  • Added a deprecation warning when using L.esri.BasemapLayer (info). This warning can be disabled by setting the ignoreDeprecationWarning option to true. (#1293).
  • Updated dependencies (#1276)

3.0.2 - 2021-05-24

Fixed

  • Do not use named exports from JSON (info) (🙏destus90🙏 #1273)

3.0.1 - 2021-02-23

Fixed

  • Ensure that TiledMapLayer will complete its onRemove prototype logic after removing its attribution. (#1256)

3.0.0 - 2021-01-25

Added

  • apikey method on L.esri.Task
  • apikey property on L.esri.FeatureLayer

2.5.3 - 2021-01-06

Fixed

  • Fix error (introduced in v2.5.2) that happens when the map attribution control is not present (🙏avinmathew🙏 #1252)

Changed

  • REST calls will now use inSR instead of inSr (#1251)

2.5.2 - 2020-12-29

Fixed

  • When esri-leaflet layers are removed from the map, the attribution will be removed (#1248)

2.5.1 - 2020-10-04

Added

  • Support 'withCredentials' option (🙏luiscamachopt🙏 #1233)
  • Support 'fetchAllFeatures' option (🙏francharbo🙏 #1229)

2.5.0 - 2020-08-06

Fixed

  • Fix Error on cellEnter (🙏francharbo🙏 #1204)
  • Fix bugs with feature layer setWhere (#1211)
  • MinZoom issue - do not clear _currentSnapshot when hiding the layer (#1212)
  • ImageMapLayer - proxy support now works when f:image (#1221)
  • DynamicMapLayer - proxy support now works when f:image (#1220)
  • FeatureLayer issues when refresh() was called (#1224)
  • Issues when addFeatures() (or updateFeatures()) then setWhere() was called (#1226)

Changed

  • DynamicMapLayer now defaults to using format: 'png32' instead of 'png24'. (🙏pmacMaps🙏 #1202, #1187)
  • Reverted the functionality that allowed over-zooming with the Imagery basemap in certain areas of the world due to bugs that were caused by that change (#1223)

2.4.1 - 2020-05-19

Fixed

  • Fixed ES5 issue (#1201)

2.4.0 - 2020-04-22

Fixed

  • Updated request to be imported in BasemapLayer.js rather than relying on global L.esri. (🙏danieloliveira117🙏 #1191)

Changed

  • Updated FeatureLayer allowing queries to be consistently cached both on the server and on ArcGIS Online CDN. This should result in a decent performance boost for most use cases and in some cases (public, non-editable data) a significant performance boost. #1189.
  • use @terraformer/arcgis (instead of @esri/arcgis-to-geojson-utils) to generate GeoJSON from older ArcGIS services #1194.

2.3.3 - 2020-01-29

Fixed

  • Ensure DynamicMapLayer can use both a token and f: 'image'. (#1180)

2.3.2 - 2019-11-13

Fixed

  • Time filtering fix which adds a case for when a feature's time range contains the time range given in the to and from options for the layer. (🙏pjbiogit🙏 #1174)

2.3.1 - 2019-10-10

Fixed

  • ?undefined issue when using DynamicMapLayer and Proxy (#1164)

Changed

  • REST calls will now use outSR instead of outSr (#1168)

2.3.0 - 2019-07-17

Fixed

  • Time filtering fix (🙏pjbiogit🙏 #1156)

Changed

  • dynamically resample Esri World Imagery (🙏jgravois🙏 #1011)
  • 'loading' event fired immediately before /export is called (🙏ogix🙏 #1146)
  • warning if setTimeRange() is called without a timeField (#1148)

2.2.4 - 2019-03-20

Fixed

  • ensure a CORS request is made to fetch dynamic attribution for Esri basemaps instead of a JSONP request. (🙏jubasse🙏 #1142)
  • make sure webpack clients can access the ES source. (#1134)
  • ensure basemapLayer honors a proxy if one is set. (🙏dangowans🙏 #1122)
  • resolve devDependency security vulnerabilities (🙏gavinr🙏 #1126)

2.2.3 - 2018-08-16

Fixed

  • ensure ImageMapLayer leverages a proxy. (🙏dangowans🙏 #1121)

2.2.2 - 2018-08-02

Fixed

  • trapped an error when Map.attribution control is not loaded.

Added

  • dynamicMapLayer() and imageMapLayer() now both expose a new zIndex constructor option and modify zIndex values appropriately internally when bringToFront() and bringToBack() are called. (🙏appleshowc🙏 #1084)

2.2.1 - 2018-07-11

Fixed

  • resolved issue that caused some raw ES6 files to not be bundled on npm.

2.2.0 - 2018-07-08

Added

  • it is now possible to add/update features in feature services in bulk (🙏Biboba🙏 #1083)
  • two new basemaps! ImageryFirefly and Physical (🙏pmacMaps🙏 #1100)

Changed

  • use external sourcemap files consistently, even for debug build #1088

Fixed

Removed

  • cruft from npm tarball #1067

2.1.4 - 2018-03-09

Changed

  • upgraded to Rollup v0.56.5
  • upgraded to @esri/arcgis-to-geojson-utils v1.1.1

Fixed

  • ensure tiledMapLayers utilize a configured proxy (🙏spoilsportmotors🙏 #1053)

  • fix logic error and simplify check for supported non-web mercator CRSs #1051

2.1.3 - 2018-02-14

Added

  • new ImageryClarity basemapLayer (🙏Biboba🙏 #1047)
  • dynamic attribution for WorldImagery basemap layer to attribute local Community Maps content providers

Fixed

  • smarter check for custom coordinate systems #1045)
  • removed rogue Proj4 console errors in webpack/browserify apps
  • caught the last few non ES6 imports from Leaflet (🙏finneganh🙏 #1050)

2.1.2 - 2018-01-04

Fixed

  • improved support for custom wkid:3857 tiled basemaps with custom properties #1039)
  • image is now the default format for ImageMapLayer (🙏nickpeihl🙏 #998)
  • improved response parsing when no objectIdFieldName or esriFieldTypeOID are returned (🙏Saulzi🙏 #1009)
  • improved cleanup when map instances are destroyed (🙏jfolds🙏 #1029)

Added

  • It is now possible for layers to pass through arbitrary custom request parameters (🙏Biboba🙏 #1036)
  • QueryTask.returnM(bool) (🙏jmfolds🙏 #1002)
  • QueryTask.distinct() (🙏joelondon🙏 #1027)
  • DynamicMapLayer has a new popup constructor option so that custom IdentifyFeatures parameters can be passed through (🙏Biboba🙏 #1031)
  • more tests for existing features! (🙏Biboba🙏 #1037, #1035)

Removed

  • unused shallowClone utility method

2.1.1 - 2017-08-11

Fixed

  • made Leaflet a peerDependency so that folks using WebPack can install v1.1.x without problems or duplication in their bundles
  • added UTF 8 to L.esri.request headers

Changed

  • now using npm-run-all for concurrent, cross platform script running

2.1.0 - 2017-07-27

Added

  • error handling has been added to classes that extend L.ImageOverlay #941 thank you@Saulzi!
  • dynamicMapLayer now supports an option to bust server side caches #942
  • identifyFeatures and find now support requesting unformatted responses from ArcGIS Server 10.5+ map services #961
  • identifyFeatures now supports passing through input geometries other than points #962 thank you@bbehling!
  • dynamicMapLayer and imageMapLayer now support polar projections #975 thank you@scaddenp!
  • query now supports datum transformations #976

Fixed

  • in imageMapLayer, noData values of 0 are now handled correctly #946
  • ensure that eachActiveFeature correctly handles all geometry types #948
  • layer definitions are now passed through when binding a popup to dynamicMapLayer #957
  • ensure definition queries are applied to invisible layers #964 thank you@jordanparfitt!

2.0.8 - 2017-02-28

Changed

  • dynamicMapLayer popups now retrieve generalized geometries from map services to improve performance. #921
  • queries for features are no longer fired outside the layer's artificially constrained zoom level #928 (thank you@keithpower!)
  • ES6 syntax is now used to import selected Leaflet dependencies. #920

Fixed

  • errors are no longer encountered when panning the map outside the artificially constrained zoom level of a previously drawn dynamicMapLayer #917 (thank you@jordanparfitt!)
  • the value range returned by IdentifyFeatures.simplify() has been reversed for consistency with Query.simplify() #921
  • features are no longer accidentally drawn when the map is panned to a new location outside the artificially constrained zoom level of the layer. #924 (thank you@keithpower!)

Added

  • In situations where a feature layer supports the geojson format, but it is deemed preferable to ask for Esri Geoservices JSON instead, developers can now set isModern: false as a constructor option. #935 (thank you@spoilsportmotors!)
  • an eachActiveFeature() method has been added to Layers.FeatureLayer in order to isolate features in the cache that are currently being displayed. #936
  • Tasks.Query now has two new spatial operators. bboxIntersects and indexIntersects. #937

2.0.7 - 2017-01-10

Fixed

  • its now possible to call setOpacity() immediately after instantiating a RasterLayer #909 (thank you@Saulzi!)
  • L.TileLayer maxNativeZoom is now honored by tiledMapLayer #904
  • an error is no longer thrown when a RasterLayer is added to the map at a zoom level outside its own custom restraint #903
  • addfeature is no longer emitted twice when FeatureLayer.setWhere() is called #893

Changed

  • RasterLayer now exposes a public redraw() method #905
  • an inline base64 encoded transparent image is now substituted for missing tiles #902
  • the addfeature event is no longer triggered when features are fetched and drawn for the very first time #893

2.0.6 - 2016-11-16

Fixed

  • withCredentials is no longer set for CORS requests #890

2.0.5 - deprecated

Fixed

  • DynamicMapLayer image overlays now utilize a proxy when appropriate #862
  • DynamicMapLayer.layerDefs provided as a string are now serialized correctly #866 (thank you@whyvez!)
  • We no longer ask for raw geojson from ArcGIS Online proxied services that can't provide it. #876
  • Copyright text for TiledMapLayer is now displayed automatically when the map has a custom projection. #877
  • When a null extent is encountered by L.esri.Query, no matter its form, an Invalid Bounds error is passed in the callback. #879
  • L.esri.request now sets the generic withCredentials header when appropriate #881

2.0.4 - 2016-10-18

Changed

  • The default maximum width of Leaflet's attribution control is now 55px less than the map itself #842

Added

  • A custom width crop can be configured via L.esri.options.attributionWidthOffset #849
  • L.esri.query now supports GeoJSON MultiPolygons #866 (thank you@whyvez!)

Fixed

  • Last references to global namespaces have been removed from L.esri.Util #852 (thank you@hamhands!)
  • started linting our test suite
  • responseToFeatureCollection now uses a case insensitive regex to look for common indexing field names
  • GeoJSON / geoJSON casing is now used consistently

2.0.3 - 2016-09-16

Added

  • attribution from service metadata is now automatically displayed in Leaflet's attribution control for all layer types #832, #842 (thank you@tyleralves!)
  • Powered by Esri is now displayed in Leaflet's attribution control when any layer type is added to the map, not just L.esri.basemapLayer.
  • the attribution control is restricted to a single line, but expands to show all data contributors on mouse hover.
  • support for DynamicMapLayer services that require a token to be passed in a request for raw images #830 (thank you@jaredbrookswhite!)

2.0.2 - 2016-08-03

Added

  • support for ImageMapLayer services that require a token to be passed in a request for raw images #812
  • more graceful handling of stubborn TiledMapLayer services #810

Fixed

  • bug which resulted in global map scope creep #814
  • bug which caused distortion in featureLayer display #814

Changed

  • Attribution text which is displayed for hosted Esri basemaps is now 'Powered by Esri'

2.0.1 - 2016-07-16

Added

  • users can now pass tokens to basemapLayer #800

Fixed

  • to avoid broken tile thumbnails, a generic blank tile is referenced automatically by tiledMapLayer. #784
  • ensure addfeature and removefeature events are emitted when featureLayers are added to and removed from the map. #788
  • base64 dynamicMapLayer responses are now parsed appropriately #796

Changed

  • the esri logo is no longer displayed when hosted basemaps are used. It has been replaced by '© Esri' in the map attribution. #783
  • Internal methods used to display dynamic attribution for tiled services with supporting static services were moved into L.esri.Util. #799

1.0.4 - 2016-07-03

Fixed

  • ensure we remove all Esri logos from the map #795
  • ensure addfeature and removefeature events are emitted when L.esri.featureLayers are added to and removed from the map. #788

2.0.0 - 2016-05-04

Added

  • new 'USATopo' L.esri.basemapLayer option.
  • boilerplate issue template

Fixed

2.0.0-beta.8

Changed

  • Build system refactored to use latest Rollup and Rollup plugins.
  • Reworked bundling directives for various modules systems to resolve and simplify various issues
    • WebPack users no longer have to use the Babel loader.
    • Babelify with Babel 6 now works

Added

1.0.3

Fixed

  • Ensure all visual relics of L.esri.dynamicMapLayer are removed outside minZoom and maxZoom defined for the layer #744

2.0.0-beta.7

Breaking

  • L.esri.Util.arcgisToGeoJson is now L.esri.Util.arcgisToGeoJSON

Added

  • updated website to show off our 2.x API (compatible with Leaflet 1.0.0-beta.2) and include API reference for supported plugins.
  • new npm script to watch/recompile source

Changed

Fixed

  • resolved bug that caused data to display outside a specified min/maxZoom
  • edge case affecting time aware layers
  • bug which caused null to sometimes be written to the attribution control (thanks brianbancroft!)
  • made sure relevant node script commands are OS agnostic

1.0.2

Fixed

  • Make sure appropriate behavior is encountered when removing feature layers from the map while web requests are pending. #691

Fixed

1.0.1

Fixed

2.0.0-beta.6

Fixed

  • Improved NationalGeographic and Gray attribution #612
  • Fixed removing of FeatureLayer from maps (again)

2.0.0-beta.5

Fixed

  • Removed stray console.log statements
  • Added missing files to NPM
  • Fixed removing of FeatureLayer from maps

2.0.0-beta.4

Breaking

  • Nested namespaces for L.esri.Layers, L.esri.Services and L.esri.Tasks have been removed for better compatibility with ES 2015 modules. This means you should now write L.esri.query() for example as opposed to L.esri.Tasks.query().

Changed

  • Tests are now run against the minified production code for more safety.

Fixed

  • Features no longer flicker when zooming in/out on FeatureLayer

Added

  • Various release process optimizations.
  • Support for JSPM in package.json. Now you can import featureLayer from 'esri-leaflet/src/Layers/FeatureLayer'; for more compact builds but be aware of caveats
  • Support for browserify in the package.json. Now you can var featureLayer = require('esri-leaflet/src/Layers/FeatureLayer'); for more compact builds but be aware of caveats

2.0.0-beta.3

Fixed

  • Files not included in git tag.

2.0.0-beta.2

Fixed

  • Release process bugs.

2.0.0-beta.1

This release is the first release that supports Leaflet 1.0.0-beta.1.

Added

  • New featureLayer.resetFeatureStyle(id, style) for reseting the styles on a specific feature to their original style.

Changed

  • By default basemap layers GrayLabels, DarkGrayLabels, OceansLabels, ImageryLabels, ImageryTransportation, ShadedReliefLabels, TerrainLabels will now be rendered on top of polygons and polylines if the browser supports CSS Pointer Events. You can disable this behavior by passing {pane: "tilePane"} in the L.esri.basemapLayer options.
  • Now relies on the Leaflet 1.0.0-beta.1 release
  • Rewritten build and test systems to rely on ES 2015 Modules specification
  • More build and release automation
  • featureLayer.resetStyle no longer takes and id and will reset the style of all features. Use the new featureLayer.resetFeatureStyle(id, style) method.
  • Styling point feature layers using vector markers like L.circleMarker should now also use the style option to set the styles of the vector markers as opposed to setting it in the L.circleMarker options. This enables the setStyle, resetStyle, setFeatureStyle and resetFeatureStyle options to work properly.
L.esri.featureLayer({
  url: "http://...",

  // define how to convert your point into a layer
  pointToLayer: function (latlng, feature) {
    return L.circleMarker(latlng);
  },

  // style that vector layer
  style: {
    radius: 10,
    color: "red",
  },
});

Removed

  • All alternate/compact builds have been removed. They will be replaced with a new system for generating custom builds soon.
  • L.esri.Request has been removed. Please use L.esri.get, L.esri.get.CORS, L.esri.get.JSONP, L.esri.post or L.esri.request directly.

1.0.0

This represents the stable release of Esri Leaflet compatible with Leaflet 0.7.3. All future 1.0.X releases will be compatible with Leaflet 0.7.3 and contain only bug fixes. New features will only be added in Esri Leaflet 2.0.0 which will require Leaflet 1.0.0.

As this is a major release there are a number of breaking changes.

Also see the Esri Leaflet 1.0 announcement.

Breaking Changes

  • L.esri.Services.FeatureLayer has been renamed to L.esri.Services.FeatureLayerService. It should be initialized with L.esri.Services.featureLayerService(options).
  • All layers now match services and tasks and now only accept url in their options. E.x. L.esri.featureLayer(url) should now L.esri.featureLayer({url: url}}). This does not affect L.esri.baseMapLayer which still accepts the key as it's first parameter.
  • Request callbacks across Esri Leaflet now can handle authentication errors by calling error.authenticate(newToken) as opposed to listening to authenticationrequired event and calling e.target.authenticate(newToken). This means that your callbacks may be called multiple times, once with an authentication failure and once with an authentication success. To avoid any side affects of this you should return as early as possible after handling errors. It is recommended you adapt techniques from http://blog.timoxley.com/post/47041269194/avoid-else-return-early to handle these cases.
L.esri.Services.service({
  url: "http://logistics.arcgis.com/arcgis/rest/services/World/ServiceAreas/GPServer/GenerateServiceAreas",
  token: "badtoken",
}).metadata(function (error, response) {
  if (error && error.authenticate) {
    // handle an authentication error, returning to stop execution of the rest of the function
    error.authenticate("good token");
    return;
  }

  if (error) {
    // handle any other errors, returning to stop execution of the rest of the function
    return;
  }

  // if you get here you are successful!
  console.log(metadata);
});

Changes

Release Candidate 8

Breaking Changes

Changes

Release Candidate 7

Breaking Changes

  • DynamicMapLayer will now request json by default to better expose the authentication process. If you are using ArcGIS Server 10.0 or have disabled CORS on your server you will need to add useCors: false to your options.

Changes

Release Candidate 6

Breaking Changes

None

Changes

Release Candidate 5

Breaking Changes

  • All Task and Service constructors now accept url as a value within options, rather than as a separate parameter. #420
  • 'Layer' objects continue to expect a url string to be supplied as the first parameter, but afterwards, the property is now accessible via Layer.options.url instead of Layer.url

Changes

  • Fixed duplicate Esri logo bug #427
  • GeoJSON is now requested directly from ArcGIS Online Hosted Feature Services #418
  • other FeatureLayer performance improvements #416
  • minZoom, maxZoom, #413 and cacheLayers were added as new FeatureLayer constructor options
  • default fill is now specified for multipolygons #406
  • dark gray basemap now utilizes our new production service #399

Release Candidate 4

Changes

  • Fixed a bug where resetStyle would not work with MultiPolygon and MultiPolyline features #390
  • Fixed a display bug when rapidly toggling L.esri.DynamicMapLayer on/off before the image completely loads #386
  • Bower installation fixed #378

Release Candidate 3

Changes

  • Removed hardcoded http call in L.esri.Controls.Logo #383
  • L.esri.TiledMapLayer now accepts a token option for secured tiles. #384
  • Fixed a bug with DynamicMapLayer still rendering after being removed from the map. #386
  • Fixed 404s on example site.
  • Fixed setting sr param on L.esri.Tasks.Find #379
  • bower install esri-leaflet now works properly.

Release Candidate 2

Changes

  • Fixed IE 8 and 9 support that was broken in RC 1.
  • Fixed sourcemaps by embedding source files inside the maps.
  • Fix a bug when aborting JSONP requests
  • Other small fixes for plugin support
  • Added contains, overlaps and intersects to L.esri.Tasks.Query.
  • Spatial methods on L.esri.Tasks.Query can now accept the following Leaflet types, L.Marker, L.Polygon, L.Polyline, L.LatLng, L.LatLngBounds and L.GeoJSON. It can also accept valid GeoJSON Point, Polyline, Polygon and GeoJSON Feature objects containing Point, Polyline, Polygon.
  • Most methods that accept L.LatLng and L.LatLngBounds now accept the simple [lat,lng] or [[lat,lng], [lat,lng]] forms.

Release Candidate 1

Changes

Breaking Changes

  • Task methods that accept callbacks (like run or bounds) now return an instance of XMLHttpRequest as opposed to the task or service.
  • bindPopup on L.esri.DynamicMapLayer now identifies only visible features by default rather then all features.
  • All API requests inside of layers, tasks and services will now switch between GET and POST automatically when the request size exceeds 2000 characters. This improves IE compatibility but means that for long requests (like complex where clauses or long lists of IDs) you may need to setup an instance of https://github.com/Esri/resource-proxy and use the proxy option.

Changes

Beta 6

Breaking Changes

  • L.esri.Tasks.Identify has been renamed to L.esri.Tasks.IdentifyFeatures. This is to reduce confusion with L.esri.Tasks.IdentifyImage and to clearly delineate what these 2 classes do.

Changes

Misc

Beta 5

Breaking Changes

  • Oceans no longer contains map labels, labels have been added as another key OceansLabels.
  • L.esri.FeatureLayer no longer inherits from L.GeoJSON and as a result no longer has getBounds, bringToBack or bringToFront or addData methods.
  • L.esri.Util.geojsonBounds has been removed. If you need to get the bounding box of a GeoJSON object please use Terraformer or L.GeoJSON.
  • Many other utility methods have been removed. If you were using methods in the L.esri.Util namespace please check that they exist.
  • Layers no longer fire a metadata event. They now have a metadata method that can be used to get layer metadata. If you need to convert extents into L.LatLngBounds you can use L.esri.Util.extentToBounds.
  • L.esri.DynamicMapLayer no longer inherits from L.ImageOverlay as a result the setUrl method no longer exists.
  • You can no longer pass a cluster object to L.esri.ClusteredFeatureLayer, instead pass any options you want to pass to L.MarkerClusterGroup directly to L.esri.ClusteredFeatureLayer.
  • You can no long pass a string for the layerDefs option on L.esri.DynamicMapLayer. Layer definitions should now be passed as an object like {'0':'STATE_NAME='Kansas' and POP2007>25000'}
  • You can no longer pass a string for the layers option on L.esri.DynamicMapLayer you can now only pass an array of layer ids that will be shown like [0,1,2].
  • The createMarker method on L.esri.ClusteredFeatureLayer has been renamed to pointToLayer.

Changes

  • Added OceansLabels to L.esri.BasemapLayer.
  • Oceans has switched to the new Ocean basemap with out labels.
  • L.esri.FeatureLayer has been refactored into several classes. L.esri.FeatureGrid and L.esri.FeatureManager now handle loading and querying features from the service.
  • L.esri.ClusteredFeatureLayer and L.esri.HeatMapFeatureLayer now inherit from L.esri.FeatureManager so they share many new methods and options.
  • L.esri.FeatureLayer, L.esri.ClusteredFeatureLayer and L.esri.HeatMapFeatureLayer now support time enabled service via from, to, timeFields and timeFilterMode options and setTimeRange(from, to) and getTimeRange() methods.
  • L.esri.FeatureLayer, L.esri.ClusteredFeatureLayer and L.esri.HeatMapFeatureLayer now support where options and have new methods for setWhere() and getWhere() to perform filtering.
  • L.esri.FeatureLayer now supports generalizing polygon and polyline features on the service side for performance using the new simplifyFactor option.
  • Don't throw errors when L.esri.BasemapLayer is added to maps without an attribution control. If you do not add attribution you must handle adding attribution your self to the map.
  • Remove rbush. Switch to tracking feature ids with the cell key system.
  • Remove L.esri.Util.geojsonBounds as it was only being used to create bounds and envelopes for rbush.
  • add bindPopup method to L.esri.DynamicMapLayer.
  • add getTimeRange and setTimeRange methods L.esri.DynamicMapLayer.
  • New L.esri.Services namespace to handle generic abstraction of interacting with ArcGIS Online and ArcGIS server services.
  • new L.esri.Services.Service base class that can be used for interacting with any service. All L.esri.Layers classes now uses L.esri.Services.Service internally for their API requests. This class also abstracts authentication and proxying.
  • new L.esri.Services.FeatureLayer class for interacting with the Feature Layer API.
  • new L.esri.Services.MapService class for interacting with the Map Server API.
  • new L.esri.Tasks namespace for tasks that map to individual API methods.
  • new L.esri.Tasks.Query class for interacting with the Feature Layer query API.
  • new L.esri.Tasks.Identify class for interacting with Map Servers that support identify.

Beta 4 Patch 1

Changes

  • Patches a bug with identifying features on DynamicMapLayer
  • Various updates and fixes to examples

Beta 4

New Demos

Changes

Beta 3

  • Improve DynamicMapLayer panning and zooming performance. #137
  • FeatureLayer and ClusteredFeatureLayer can now load features from map services. Thanks to @odoe and @jgravois.
  • FeatureLayer, DynamicMapLayer and ClusteredFeatureLayer all accept a token option for accessing services that require authentication and fire a authenticationrequired event when they encounter a need for a token. Thanks to @aaronpk for the Oauth demos. #139
  • Add DarkGray and DarkGrayLabels to BasemapLayer. #190
  • An attributionControl on maps is now required when using BasemapLayer. #159