Change Log
All notable changes to this project will be documented in this file.
This project adheres to Semantic Versioning.
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
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
featureLayer
s 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
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
Fixed
- Ensure all visual relics of
L.esri.dynamicMapLayer
are removed outside minZoom
and maxZoom
defined for the layer #744
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
Fixed
- Make sure appropriate behavior is encountered when removing feature layers from the map while web requests are pending. #691
Fixed
Fixed
Fixed
- Improved NationalGeographic and Gray attribution #612
- Fixed removing of
FeatureLayer
from maps (again)
Fixed
- Removed stray
console.log
statements
- Added missing files to NPM
- Fixed removing of
FeatureLayer
from maps
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
Fixed
- Files not included in git tag.
Fixed
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://...',
pointToLayer: function(latlng, feature){
return L.circleMarker(latlng);
},
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.
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) {
error.authenticate('good token');
return;
}
if(error) {
return;
}
console.log(metadata);
});
Changes
Breaking Changes
Changes
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
Breaking Changes
None
Changes
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
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
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.
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.
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
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
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.
Changes
- Patches a bug with identifying features on DynamicMapLayer
- Various updates and fixes to examples
New Demos
Changes
- 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