From c4de272716bedbb3ea13e29f10c0f8ac28e56c12 Mon Sep 17 00:00:00 2001 From: jgravois Date: Mon, 22 Feb 2016 09:56:58 -0800 Subject: [PATCH] :package: 1.0.3 --- CHANGELOG.md | 6 ++++++ bower.json | 2 +- dist/builds/basemaps/esri-leaflet-basemaps-src.js | 6 +++--- dist/builds/basemaps/esri-leaflet-basemaps-src.js.map | 2 +- dist/builds/basemaps/esri-leaflet-basemaps.js | 6 +++--- dist/builds/basemaps/esri-leaflet-basemaps.js.map | 2 +- dist/builds/core/esri-leaflet-core-src.js | 6 +++--- dist/builds/core/esri-leaflet-core-src.js.map | 2 +- dist/builds/core/esri-leaflet-core.js | 6 +++--- dist/builds/core/esri-leaflet-core.js.map | 2 +- .../feature-layer/esri-leaflet-feature-layer-src.js | 6 +++--- .../feature-layer/esri-leaflet-feature-layer-src.js.map | 2 +- dist/builds/feature-layer/esri-leaflet-feature-layer.js | 6 +++--- .../feature-layer/esri-leaflet-feature-layer.js.map | 2 +- .../image-service/esri-leaflet-image-service-src.js | 9 ++++++--- .../image-service/esri-leaflet-image-service-src.js.map | 2 +- dist/builds/image-service/esri-leaflet-image-service.js | 6 +++--- .../image-service/esri-leaflet-image-service.js.map | 2 +- dist/builds/map-service/esri-leaflet-map-service-src.js | 9 ++++++--- .../map-service/esri-leaflet-map-service-src.js.map | 2 +- dist/builds/map-service/esri-leaflet-map-service.js | 6 +++--- dist/builds/map-service/esri-leaflet-map-service.js.map | 2 +- dist/esri-leaflet-src.js | 9 ++++++--- dist/esri-leaflet-src.js.map | 2 +- dist/esri-leaflet.js | 8 ++++---- dist/esri-leaflet.js.map | 2 +- package.json | 2 +- src/EsriLeaflet.js | 2 +- src/Layers/RasterLayer.js | 3 +++ 29 files changed, 70 insertions(+), 52 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ec66a602f..1363dde55 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## 1.0.3 + +### Fixed + +* Ensure all visual relics of `L.esri.dynamicMapLayer` are removed outside `minZoom` and `maxZoom` defined for the layer #744 + ## 1.0.2 ### Fixed diff --git a/bower.json b/bower.json index 248870fac..872df2009 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "esri-leaflet", - "version": "v1.0.2", + "version": "v1.0.3", "main": "dist/esri-leaflet.js", "ignore": [ "**/.*", diff --git a/dist/builds/basemaps/esri-leaflet-basemaps-src.js b/dist/builds/basemaps/esri-leaflet-basemaps-src.js index e8c9e5761..6e4a1bb31 100644 --- a/dist/builds/basemaps/esri-leaflet-basemaps-src.js +++ b/dist/builds/basemaps/esri-leaflet-basemaps-src.js @@ -1,5 +1,5 @@ -/*! esri-leaflet - v1.0.2 - 2015-12-31 -* Copyright (c) 2015 Environmental Systems Research Institute, Inc. +/*! esri-leaflet - v1.0.3 - 2016-02-22 +* Copyright (c) 2016 Environmental Systems Research Institute, Inc. * Apache License*/ (function (factory) { //define an AMD module that relies on 'leaflet' @@ -17,7 +17,7 @@ } }(function (L) { var EsriLeaflet = { //jshint ignore:line - VERSION: '1.0.2', + VERSION: '1.0.3', Layers: {}, Services: {}, Controls: {}, diff --git a/dist/builds/basemaps/esri-leaflet-basemaps-src.js.map b/dist/builds/basemaps/esri-leaflet-basemaps-src.js.map index dfd7aa93c..62bf0d1a5 100644 --- a/dist/builds/basemaps/esri-leaflet-basemaps-src.js.map +++ b/dist/builds/basemaps/esri-leaflet-basemaps-src.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../../src/EsriLeaflet.js","../../../src/Request.js","../../../src/Layers/BasemapLayer.js","../../../src/Controls/Logo.js"],"names":[],"mappings":"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","file":"esri-leaflet-basemaps-src.js","sourcesContent":["var EsriLeaflet = { //jshint ignore:line\n VERSION: '1.0.2',\n Layers: {},\n Services: {},\n Controls: {},\n Tasks: {},\n Util: {},\n Support: {\n CORS: !!(window.XMLHttpRequest && 'withCredentials' in new XMLHttpRequest()),\n pointerEvents: document.documentElement.style.pointerEvents === ''\n }\n};\n\nif(typeof window !== 'undefined' && window.L){\n window.L.esri = EsriLeaflet;\n}\n","(function(EsriLeaflet){\n\n var callbacks = 0;\n\n window._EsriLeafletCallbacks = {};\n\n function serialize(params){\n var data = '';\n\n params.f = params.f || 'json';\n\n for (var key in params){\n if(params.hasOwnProperty(key)){\n var param = params[key];\n var type = Object.prototype.toString.call(param);\n var value;\n\n if(data.length){\n data += '&';\n }\n\n if (type === '[object Array]'){\n value = (Object.prototype.toString.call(param[0]) === '[object Object]') ? JSON.stringify(param) : param.join(',');\n } else if (type === '[object Object]') {\n value = JSON.stringify(param);\n } else if (type === '[object Date]'){\n value = param.valueOf();\n } else {\n value = param;\n }\n\n data += encodeURIComponent(key) + '=' + encodeURIComponent(value);\n }\n }\n\n return data;\n }\n\n function createRequest(callback, context){\n var httpRequest = new XMLHttpRequest();\n\n httpRequest.onerror = function(e) {\n httpRequest.onreadystatechange = L.Util.falseFn;\n\n callback.call(context, {\n error: {\n code: 500,\n message: 'XMLHttpRequest error'\n }\n }, null);\n };\n\n httpRequest.onreadystatechange = function(){\n var response;\n var error;\n\n if (httpRequest.readyState === 4) {\n try {\n response = JSON.parse(httpRequest.responseText);\n } catch(e) {\n response = null;\n error = {\n code: 500,\n message: 'Could not parse response as JSON. This could also be caused by a CORS or XMLHttpRequest error.'\n };\n }\n\n if (!error && response.error) {\n error = response.error;\n response = null;\n }\n\n httpRequest.onerror = L.Util.falseFn;\n\n callback.call(context, error, response);\n }\n };\n\n return httpRequest;\n }\n\n // AJAX handlers for CORS (modern browsers) or JSONP (older browsers)\n EsriLeaflet.Request = {\n request: function(url, params, callback, context){\n var paramString = serialize(params);\n var httpRequest = createRequest(callback, context);\n var requestLength = (url + '?' + paramString).length;\n\n // request is less then 2000 characters and the browser supports CORS, make GET request with XMLHttpRequest\n if(requestLength <= 2000 && L.esri.Support.CORS){\n httpRequest.open('GET', url + '?' + paramString);\n httpRequest.send(null);\n\n // request is less more then 2000 characters and the browser supports CORS, make POST request with XMLHttpRequest\n } else if (requestLength > 2000 && L.esri.Support.CORS){\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(paramString);\n\n // request is less more then 2000 characters and the browser does not support CORS, make a JSONP request\n } else if(requestLength <= 2000 && !L.esri.Support.CORS){\n return L.esri.Request.get.JSONP(url, params, callback, context);\n\n // request is longer then 2000 characters and the browser does not support CORS, log a warning\n } else {\n EsriLeaflet.Util.warn('a request to ' + url + ' was longer then 2000 characters and this browser cannot make a cross-domain post request. Please use a proxy http://esri.github.io/esri-leaflet/api-reference/request.html');\n return;\n }\n\n return httpRequest;\n },\n\n post: {\n XMLHTTP: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(serialize(params));\n\n return httpRequest;\n }\n },\n\n get: {\n CORS: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n\n httpRequest.open('GET', url + '?' + serialize(params), true);\n httpRequest.send(null);\n\n return httpRequest;\n },\n JSONP: function(url, params, callback, context){\n var callbackId = 'c' + callbacks;\n\n params.callback = 'window._EsriLeafletCallbacks.' + callbackId;\n\n var script = L.DomUtil.create('script', null, document.body);\n script.type = 'text/javascript';\n script.src = url + '?' + serialize(params);\n script.id = callbackId;\n\n window._EsriLeafletCallbacks[callbackId] = function(response){\n if(window._EsriLeafletCallbacks[callbackId] !== true){\n var error;\n var responseType = Object.prototype.toString.call(response);\n\n if(!(responseType === '[object Object]' || responseType === '[object Array]')){\n error = {\n error: {\n code: 500,\n message: 'Expected array or object as JSONP response'\n }\n };\n response = null;\n }\n\n if (!error && response.error) {\n error = response;\n response = null;\n }\n\n callback.call(context, error, response);\n window._EsriLeafletCallbacks[callbackId] = true;\n }\n };\n\n callbacks++;\n\n return {\n id: callbackId,\n url: script.src,\n abort: function(){\n window._EsriLeafletCallbacks._callback[callbackId]({\n code: 0,\n message: 'Request aborted.'\n });\n }\n };\n }\n }\n };\n\n // choose the correct AJAX handler depending on CORS support\n EsriLeaflet.get = (EsriLeaflet.Support.CORS) ? EsriLeaflet.Request.get.CORS : EsriLeaflet.Request.get.JSONP;\n\n // always use XMLHttpRequest for posts\n EsriLeaflet.post = EsriLeaflet.Request.post.XMLHTTP;\n\n // expose a common request method the uses GET\\POST based on request length\n EsriLeaflet.request = EsriLeaflet.Request.request;\n\n})(EsriLeaflet);","(function(EsriLeaflet){\n\n var tileProtocol = (window.location.protocol !== 'https:') ? 'http:' : 'https:';\n\n EsriLeaflet.Layers.BasemapLayer = L.TileLayer.extend({\n statics: {\n TILES: {\n Streets: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/{z}/{y}/{x}',\n attributionUrl: 'https://static.arcgis.com/attribution/World_Street_Map',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services'],\n attribution: 'Esri'\n }\n },\n Topographic: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/{z}/{y}/{x}',\n attributionUrl: 'https://static.arcgis.com/attribution/World_Topo_Map',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services'],\n attribution: 'Esri'\n }\n },\n Oceans: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/arcgis/rest/services/Ocean/World_Ocean_Base/MapServer/tile/{z}/{y}/{x}',\n attributionUrl: 'https://static.arcgis.com/attribution/Ocean_Basemap',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services'],\n attribution: 'Esri'\n }\n },\n OceansLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/arcgis/rest/services/Ocean/World_Ocean_Reference/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services']\n }\n },\n NationalGeographic: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services'],\n attribution: 'Esri'\n }\n },\n DarkGray: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Dark_Gray_Base/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services'],\n attribution: 'Esri, DeLorme, HERE'\n }\n },\n DarkGrayLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Dark_Gray_Reference/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services']\n }\n },\n Gray: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services'],\n attribution: 'Esri, NAVTEQ, DeLorme'\n }\n },\n GrayLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Reference/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services']\n }\n },\n Imagery: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services'],\n attribution: 'Esri, DigitalGlobe, GeoEye, i-cubed, USDA, USGS, AEX, Getmapping, Aerogrid, IGN, IGP, swisstopo, and the GIS User Community'\n }\n },\n ImageryLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Boundaries_and_Places/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services']\n }\n },\n ImageryTransportation: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Transportation/MapServer/tile/{z}/{y}/{x}',\n //pane: 'esri-label',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services']\n }\n },\n ShadedRelief: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Shaded_Relief/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 13,\n subdomains: ['server', 'services'],\n attribution: 'Esri, NAVTEQ, DeLorme'\n }\n },\n ShadedReliefLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Boundaries_and_Places_Alternate/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 12,\n subdomains: ['server', 'services']\n }\n },\n Terrain: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Terrain_Base/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 13,\n subdomains: ['server', 'services'],\n attribution: 'Esri, USGS, NOAA'\n }\n },\n TerrainLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Reference_Overlay/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 13,\n subdomains: ['server', 'services']\n }\n }\n }\n },\n initialize: function(key, options){\n var config;\n\n // set the config variable with the appropriate config object\n if (typeof key === 'object' && key.urlTemplate && key.options){\n config = key;\n } else if(typeof key === 'string' && EsriLeaflet.BasemapLayer.TILES[key]){\n config = EsriLeaflet.BasemapLayer.TILES[key];\n } else {\n throw new Error('L.esri.BasemapLayer: Invalid parameter. Use one of \"Streets\", \"Topographic\", \"Oceans\", \"OceansLabels\", \"NationalGeographic\", \"Gray\", \"GrayLabels\", \"DarkGray\", \"DarkGrayLabels\", \"Imagery\", \"ImageryLabels\", \"ImageryTransportation\", \"ShadedRelief\", \"ShadedReliefLabels\", \"Terrain\" or \"TerrainLabels\"');\n }\n\n // merge passed options into the config options\n var tileOptions = L.Util.extend(config.options, options);\n\n // call the initialize method on L.TileLayer to set everything up\n L.TileLayer.prototype.initialize.call(this, config.urlTemplate, L.Util.setOptions(this, tileOptions));\n\n // if this basemap requires dynamic attribution set it up\n if(config.attributionUrl){\n this._getAttributionData(config.attributionUrl);\n }\n this._logo = new EsriLeaflet.Controls.Logo({\n position: this.options.logoPosition\n });\n },\n onAdd: function(map){\n if(!this.options.hideLogo && !map._hasEsriLogo){\n this._logo.addTo(map);\n map._hasEsriLogo = true;\n }\n\n // if(this.options.pane && EsriLeaflet.Support.pointerEvents){\n // this._initPane();\n // }\n\n L.TileLayer.prototype.onAdd.call(this, map);\n\n map.on('moveend', this._updateMapAttribution, this);\n },\n onRemove: function(map){\n // check to make sure the logo hasn't already been removed\n if(!map._hasEsriLogo && this._logo && this._logo._container){\n map.removeControl(this._logo);\n map._hasEsriLogo = false;\n }\n\n L.TileLayer.prototype.onRemove.call(this, map);\n\n map.off('moveend', this._updateMapAttribution, this);\n },\n getAttribution:function(){\n var attribution = '' + this.options.attribution + ''/* + logo*/;\n return attribution;\n },\n // _initPane: function(){\n // if(!this._map.getPane(this.options.pane)){\n // var pane = this._map.createPane(this.options.pane);\n // pane.style.pointerEvents = 'none';\n // pane.style.zIndex = 5;\n // }\n // },\n _getAttributionData: function(url){\n L.esri.Request.get.JSONP(url, {}, L.Util.bind(function(error, attributions){\n this._attributions = [];\n\n for (var c = 0; c < attributions.contributors.length; c++) {\n var contributor = attributions.contributors[c];\n for (var i = 0; i < contributor.coverageAreas.length; i++) {\n var coverageArea = contributor.coverageAreas[i];\n var southWest = new L.LatLng(coverageArea.bbox[0], coverageArea.bbox[1]);\n var northEast = new L.LatLng(coverageArea.bbox[2], coverageArea.bbox[3]);\n this._attributions.push({\n attribution: contributor.attribution,\n score: coverageArea.score,\n bounds: new L.LatLngBounds(southWest, northEast),\n minZoom: coverageArea.zoomMin,\n maxZoom: coverageArea.zoomMax\n });\n }\n }\n\n this._attributions.sort(function(a, b){\n return b.score - a.score;\n });\n\n this._updateMapAttribution();\n }, this));\n },\n _updateMapAttribution: function(){\n if(this._map && this._map.attributionControl && this._attributions){\n var newAttributions = '';\n var bounds = this._map.getBounds();\n var zoom = this._map.getZoom();\n\n for (var i = 0; i < this._attributions.length; i++) {\n var attribution = this._attributions[i];\n var text = attribution.attribution;\n if(!newAttributions.match(text) && bounds.intersects(attribution.bounds) && zoom >= attribution.minZoom && zoom <= attribution.maxZoom) {\n newAttributions += (', ' + text);\n }\n }\n newAttributions = newAttributions.substr(2);\n var attributionElement = this._map.attributionControl._container.querySelector('.esri-attributions');\n attributionElement.innerHTML = newAttributions;\n attributionElement.style.maxWidth = (this._map.getSize().x * 0.65) + 'px';\n this.fire('attributionupdated', {\n attribution: newAttributions\n });\n }\n }\n });\n\n EsriLeaflet.BasemapLayer = EsriLeaflet.Layers.BasemapLayer;\n\n EsriLeaflet.Layers.basemapLayer = function(key, options){\n return new EsriLeaflet.Layers.BasemapLayer(key, options);\n };\n\n EsriLeaflet.basemapLayer = function(key, options){\n return new EsriLeaflet.Layers.BasemapLayer(key, options);\n };\n\n})(EsriLeaflet);","EsriLeaflet.Controls.Logo = L.Control.extend({\n options: {\n position: 'bottomright',\n marginTop: 0,\n marginLeft: 0,\n marginBottom: 0,\n marginRight: 0\n },\n\n onAdd: function () {\n var div = L.DomUtil.create('div', 'esri-leaflet-logo');\n div.style.marginTop = this.options.marginTop;\n div.style.marginLeft = this.options.marginLeft;\n div.style.marginBottom = this.options.marginBottom;\n div.style.marginRight = this.options.marginRight;\n div.innerHTML = this._adjustLogo(this._map._size);\n\n this._map.on('resize', function(e){\n div.innerHTML = this._adjustLogo(e.newSize);\n }, this);\n\n return div;\n },\n\n _adjustLogo: function (mapSize) {\n if (mapSize.x <= 600 || mapSize.y <= 600){\n return '\"Powered';\n }\n else {\n return '\"Powered';\n }\n }\n\n});\n\nEsriLeaflet.Controls.logo = function(options){\n return new L.esri.Controls.Logo(options);\n};\n"]} \ No newline at end of file +{"version":3,"sources":["../../../src/EsriLeaflet.js","../../../src/Request.js","../../../src/Layers/BasemapLayer.js","../../../src/Controls/Logo.js"],"names":[],"mappings":"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","file":"esri-leaflet-basemaps-src.js","sourcesContent":["var EsriLeaflet = { //jshint ignore:line\n VERSION: '1.0.3',\n Layers: {},\n Services: {},\n Controls: {},\n Tasks: {},\n Util: {},\n Support: {\n CORS: !!(window.XMLHttpRequest && 'withCredentials' in new XMLHttpRequest()),\n pointerEvents: document.documentElement.style.pointerEvents === ''\n }\n};\n\nif(typeof window !== 'undefined' && window.L){\n window.L.esri = EsriLeaflet;\n}\n","(function(EsriLeaflet){\n\n var callbacks = 0;\n\n window._EsriLeafletCallbacks = {};\n\n function serialize(params){\n var data = '';\n\n params.f = params.f || 'json';\n\n for (var key in params){\n if(params.hasOwnProperty(key)){\n var param = params[key];\n var type = Object.prototype.toString.call(param);\n var value;\n\n if(data.length){\n data += '&';\n }\n\n if (type === '[object Array]'){\n value = (Object.prototype.toString.call(param[0]) === '[object Object]') ? JSON.stringify(param) : param.join(',');\n } else if (type === '[object Object]') {\n value = JSON.stringify(param);\n } else if (type === '[object Date]'){\n value = param.valueOf();\n } else {\n value = param;\n }\n\n data += encodeURIComponent(key) + '=' + encodeURIComponent(value);\n }\n }\n\n return data;\n }\n\n function createRequest(callback, context){\n var httpRequest = new XMLHttpRequest();\n\n httpRequest.onerror = function(e) {\n httpRequest.onreadystatechange = L.Util.falseFn;\n\n callback.call(context, {\n error: {\n code: 500,\n message: 'XMLHttpRequest error'\n }\n }, null);\n };\n\n httpRequest.onreadystatechange = function(){\n var response;\n var error;\n\n if (httpRequest.readyState === 4) {\n try {\n response = JSON.parse(httpRequest.responseText);\n } catch(e) {\n response = null;\n error = {\n code: 500,\n message: 'Could not parse response as JSON. This could also be caused by a CORS or XMLHttpRequest error.'\n };\n }\n\n if (!error && response.error) {\n error = response.error;\n response = null;\n }\n\n httpRequest.onerror = L.Util.falseFn;\n\n callback.call(context, error, response);\n }\n };\n\n return httpRequest;\n }\n\n // AJAX handlers for CORS (modern browsers) or JSONP (older browsers)\n EsriLeaflet.Request = {\n request: function(url, params, callback, context){\n var paramString = serialize(params);\n var httpRequest = createRequest(callback, context);\n var requestLength = (url + '?' + paramString).length;\n\n // request is less then 2000 characters and the browser supports CORS, make GET request with XMLHttpRequest\n if(requestLength <= 2000 && L.esri.Support.CORS){\n httpRequest.open('GET', url + '?' + paramString);\n httpRequest.send(null);\n\n // request is less more then 2000 characters and the browser supports CORS, make POST request with XMLHttpRequest\n } else if (requestLength > 2000 && L.esri.Support.CORS){\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(paramString);\n\n // request is less more then 2000 characters and the browser does not support CORS, make a JSONP request\n } else if(requestLength <= 2000 && !L.esri.Support.CORS){\n return L.esri.Request.get.JSONP(url, params, callback, context);\n\n // request is longer then 2000 characters and the browser does not support CORS, log a warning\n } else {\n EsriLeaflet.Util.warn('a request to ' + url + ' was longer then 2000 characters and this browser cannot make a cross-domain post request. Please use a proxy http://esri.github.io/esri-leaflet/api-reference/request.html');\n return;\n }\n\n return httpRequest;\n },\n\n post: {\n XMLHTTP: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(serialize(params));\n\n return httpRequest;\n }\n },\n\n get: {\n CORS: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n\n httpRequest.open('GET', url + '?' + serialize(params), true);\n httpRequest.send(null);\n\n return httpRequest;\n },\n JSONP: function(url, params, callback, context){\n var callbackId = 'c' + callbacks;\n\n params.callback = 'window._EsriLeafletCallbacks.' + callbackId;\n\n var script = L.DomUtil.create('script', null, document.body);\n script.type = 'text/javascript';\n script.src = url + '?' + serialize(params);\n script.id = callbackId;\n\n window._EsriLeafletCallbacks[callbackId] = function(response){\n if(window._EsriLeafletCallbacks[callbackId] !== true){\n var error;\n var responseType = Object.prototype.toString.call(response);\n\n if(!(responseType === '[object Object]' || responseType === '[object Array]')){\n error = {\n error: {\n code: 500,\n message: 'Expected array or object as JSONP response'\n }\n };\n response = null;\n }\n\n if (!error && response.error) {\n error = response;\n response = null;\n }\n\n callback.call(context, error, response);\n window._EsriLeafletCallbacks[callbackId] = true;\n }\n };\n\n callbacks++;\n\n return {\n id: callbackId,\n url: script.src,\n abort: function(){\n window._EsriLeafletCallbacks._callback[callbackId]({\n code: 0,\n message: 'Request aborted.'\n });\n }\n };\n }\n }\n };\n\n // choose the correct AJAX handler depending on CORS support\n EsriLeaflet.get = (EsriLeaflet.Support.CORS) ? EsriLeaflet.Request.get.CORS : EsriLeaflet.Request.get.JSONP;\n\n // always use XMLHttpRequest for posts\n EsriLeaflet.post = EsriLeaflet.Request.post.XMLHTTP;\n\n // expose a common request method the uses GET\\POST based on request length\n EsriLeaflet.request = EsriLeaflet.Request.request;\n\n})(EsriLeaflet);","(function(EsriLeaflet){\n\n var tileProtocol = (window.location.protocol !== 'https:') ? 'http:' : 'https:';\n\n EsriLeaflet.Layers.BasemapLayer = L.TileLayer.extend({\n statics: {\n TILES: {\n Streets: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/{z}/{y}/{x}',\n attributionUrl: 'https://static.arcgis.com/attribution/World_Street_Map',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services'],\n attribution: 'Esri'\n }\n },\n Topographic: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/{z}/{y}/{x}',\n attributionUrl: 'https://static.arcgis.com/attribution/World_Topo_Map',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services'],\n attribution: 'Esri'\n }\n },\n Oceans: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/arcgis/rest/services/Ocean/World_Ocean_Base/MapServer/tile/{z}/{y}/{x}',\n attributionUrl: 'https://static.arcgis.com/attribution/Ocean_Basemap',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services'],\n attribution: 'Esri'\n }\n },\n OceansLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/arcgis/rest/services/Ocean/World_Ocean_Reference/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services']\n }\n },\n NationalGeographic: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services'],\n attribution: 'Esri'\n }\n },\n DarkGray: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Dark_Gray_Base/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services'],\n attribution: 'Esri, DeLorme, HERE'\n }\n },\n DarkGrayLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Dark_Gray_Reference/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services']\n }\n },\n Gray: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services'],\n attribution: 'Esri, NAVTEQ, DeLorme'\n }\n },\n GrayLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Reference/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services']\n }\n },\n Imagery: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services'],\n attribution: 'Esri, DigitalGlobe, GeoEye, i-cubed, USDA, USGS, AEX, Getmapping, Aerogrid, IGN, IGP, swisstopo, and the GIS User Community'\n }\n },\n ImageryLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Boundaries_and_Places/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services']\n }\n },\n ImageryTransportation: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Transportation/MapServer/tile/{z}/{y}/{x}',\n //pane: 'esri-label',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services']\n }\n },\n ShadedRelief: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Shaded_Relief/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 13,\n subdomains: ['server', 'services'],\n attribution: 'Esri, NAVTEQ, DeLorme'\n }\n },\n ShadedReliefLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Boundaries_and_Places_Alternate/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 12,\n subdomains: ['server', 'services']\n }\n },\n Terrain: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Terrain_Base/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 13,\n subdomains: ['server', 'services'],\n attribution: 'Esri, USGS, NOAA'\n }\n },\n TerrainLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Reference_Overlay/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 13,\n subdomains: ['server', 'services']\n }\n }\n }\n },\n initialize: function(key, options){\n var config;\n\n // set the config variable with the appropriate config object\n if (typeof key === 'object' && key.urlTemplate && key.options){\n config = key;\n } else if(typeof key === 'string' && EsriLeaflet.BasemapLayer.TILES[key]){\n config = EsriLeaflet.BasemapLayer.TILES[key];\n } else {\n throw new Error('L.esri.BasemapLayer: Invalid parameter. Use one of \"Streets\", \"Topographic\", \"Oceans\", \"OceansLabels\", \"NationalGeographic\", \"Gray\", \"GrayLabels\", \"DarkGray\", \"DarkGrayLabels\", \"Imagery\", \"ImageryLabels\", \"ImageryTransportation\", \"ShadedRelief\", \"ShadedReliefLabels\", \"Terrain\" or \"TerrainLabels\"');\n }\n\n // merge passed options into the config options\n var tileOptions = L.Util.extend(config.options, options);\n\n // call the initialize method on L.TileLayer to set everything up\n L.TileLayer.prototype.initialize.call(this, config.urlTemplate, L.Util.setOptions(this, tileOptions));\n\n // if this basemap requires dynamic attribution set it up\n if(config.attributionUrl){\n this._getAttributionData(config.attributionUrl);\n }\n this._logo = new EsriLeaflet.Controls.Logo({\n position: this.options.logoPosition\n });\n },\n onAdd: function(map){\n if(!this.options.hideLogo && !map._hasEsriLogo){\n this._logo.addTo(map);\n map._hasEsriLogo = true;\n }\n\n // if(this.options.pane && EsriLeaflet.Support.pointerEvents){\n // this._initPane();\n // }\n\n L.TileLayer.prototype.onAdd.call(this, map);\n\n map.on('moveend', this._updateMapAttribution, this);\n },\n onRemove: function(map){\n // check to make sure the logo hasn't already been removed\n if(!map._hasEsriLogo && this._logo && this._logo._container){\n map.removeControl(this._logo);\n map._hasEsriLogo = false;\n }\n\n L.TileLayer.prototype.onRemove.call(this, map);\n\n map.off('moveend', this._updateMapAttribution, this);\n },\n getAttribution:function(){\n var attribution = '' + this.options.attribution + ''/* + logo*/;\n return attribution;\n },\n // _initPane: function(){\n // if(!this._map.getPane(this.options.pane)){\n // var pane = this._map.createPane(this.options.pane);\n // pane.style.pointerEvents = 'none';\n // pane.style.zIndex = 5;\n // }\n // },\n _getAttributionData: function(url){\n L.esri.Request.get.JSONP(url, {}, L.Util.bind(function(error, attributions){\n this._attributions = [];\n\n for (var c = 0; c < attributions.contributors.length; c++) {\n var contributor = attributions.contributors[c];\n for (var i = 0; i < contributor.coverageAreas.length; i++) {\n var coverageArea = contributor.coverageAreas[i];\n var southWest = new L.LatLng(coverageArea.bbox[0], coverageArea.bbox[1]);\n var northEast = new L.LatLng(coverageArea.bbox[2], coverageArea.bbox[3]);\n this._attributions.push({\n attribution: contributor.attribution,\n score: coverageArea.score,\n bounds: new L.LatLngBounds(southWest, northEast),\n minZoom: coverageArea.zoomMin,\n maxZoom: coverageArea.zoomMax\n });\n }\n }\n\n this._attributions.sort(function(a, b){\n return b.score - a.score;\n });\n\n this._updateMapAttribution();\n }, this));\n },\n _updateMapAttribution: function(){\n if(this._map && this._map.attributionControl && this._attributions){\n var newAttributions = '';\n var bounds = this._map.getBounds();\n var zoom = this._map.getZoom();\n\n for (var i = 0; i < this._attributions.length; i++) {\n var attribution = this._attributions[i];\n var text = attribution.attribution;\n if(!newAttributions.match(text) && bounds.intersects(attribution.bounds) && zoom >= attribution.minZoom && zoom <= attribution.maxZoom) {\n newAttributions += (', ' + text);\n }\n }\n newAttributions = newAttributions.substr(2);\n var attributionElement = this._map.attributionControl._container.querySelector('.esri-attributions');\n attributionElement.innerHTML = newAttributions;\n attributionElement.style.maxWidth = (this._map.getSize().x * 0.65) + 'px';\n this.fire('attributionupdated', {\n attribution: newAttributions\n });\n }\n }\n });\n\n EsriLeaflet.BasemapLayer = EsriLeaflet.Layers.BasemapLayer;\n\n EsriLeaflet.Layers.basemapLayer = function(key, options){\n return new EsriLeaflet.Layers.BasemapLayer(key, options);\n };\n\n EsriLeaflet.basemapLayer = function(key, options){\n return new EsriLeaflet.Layers.BasemapLayer(key, options);\n };\n\n})(EsriLeaflet);","EsriLeaflet.Controls.Logo = L.Control.extend({\n options: {\n position: 'bottomright',\n marginTop: 0,\n marginLeft: 0,\n marginBottom: 0,\n marginRight: 0\n },\n\n onAdd: function () {\n var div = L.DomUtil.create('div', 'esri-leaflet-logo');\n div.style.marginTop = this.options.marginTop;\n div.style.marginLeft = this.options.marginLeft;\n div.style.marginBottom = this.options.marginBottom;\n div.style.marginRight = this.options.marginRight;\n div.innerHTML = this._adjustLogo(this._map._size);\n\n this._map.on('resize', function(e){\n div.innerHTML = this._adjustLogo(e.newSize);\n }, this);\n\n return div;\n },\n\n _adjustLogo: function (mapSize) {\n if (mapSize.x <= 600 || mapSize.y <= 600){\n return '\"Powered';\n }\n else {\n return '\"Powered';\n }\n }\n\n});\n\nEsriLeaflet.Controls.logo = function(options){\n return new L.esri.Controls.Logo(options);\n};\n"]} \ No newline at end of file diff --git a/dist/builds/basemaps/esri-leaflet-basemaps.js b/dist/builds/basemaps/esri-leaflet-basemaps.js index c97f8728a..2de4b6b8e 100644 --- a/dist/builds/basemaps/esri-leaflet-basemaps.js +++ b/dist/builds/basemaps/esri-leaflet-basemaps.js @@ -1,5 +1,5 @@ -/*! esri-leaflet - v1.0.2 - 2015-12-31 -* Copyright (c) 2015 Environmental Systems Research Institute, Inc. +/*! esri-leaflet - v1.0.3 - 2016-02-22 +* Copyright (c) 2016 Environmental Systems Research Institute, Inc. * Apache License*/ (function (factory) { //define an AMD module that relies on 'leaflet' @@ -17,7 +17,7 @@ } }(function (L) { -var EsriLeaflet={VERSION:"1.0.2",Layers:{},Services:{},Controls:{},Tasks:{},Util:{},Support:{CORS:!!(window.XMLHttpRequest&&"withCredentials"in new XMLHttpRequest),pointerEvents:""===document.documentElement.style.pointerEvents}};"undefined"!=typeof window&&window.L&&(window.L.esri=EsriLeaflet),function(a){function b(a){var b="";a.f=a.f||"json";for(var c in a)if(a.hasOwnProperty(c)){var d,e=a[c],f=Object.prototype.toString.call(e);b.length&&(b+="&"),d="[object Array]"===f?"[object Object]"===Object.prototype.toString.call(e[0])?JSON.stringify(e):e.join(","):"[object Object]"===f?JSON.stringify(e):"[object Date]"===f?e.valueOf():e,b+=encodeURIComponent(c)+"="+encodeURIComponent(d)}return b}function c(a,b){var c=new XMLHttpRequest;return c.onerror=function(d){c.onreadystatechange=L.Util.falseFn,a.call(b,{error:{code:500,message:"XMLHttpRequest error"}},null)},c.onreadystatechange=function(){var d,e;if(4===c.readyState){try{d=JSON.parse(c.responseText)}catch(f){d=null,e={code:500,message:"Could not parse response as JSON. This could also be caused by a CORS or XMLHttpRequest error."}}!e&&d.error&&(e=d.error,d=null),c.onerror=L.Util.falseFn,a.call(b,e,d)}},c}var d=0;window._EsriLeafletCallbacks={},a.Request={request:function(d,e,f,g){var h=b(e),i=c(f,g),j=(d+"?"+h).length;if(2e3>=j&&L.esri.Support.CORS)i.open("GET",d+"?"+h),i.send(null);else{if(!(j>2e3&&L.esri.Support.CORS))return 2e3>=j&&!L.esri.Support.CORS?L.esri.Request.get.JSONP(d,e,f,g):void a.Util.warn("a request to "+d+" was longer then 2000 characters and this browser cannot make a cross-domain post request. Please use a proxy http://esri.github.io/esri-leaflet/api-reference/request.html");i.open("POST",d),i.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),i.send(h)}return i},post:{XMLHTTP:function(a,d,e,f){var g=c(e,f);return g.open("POST",a),g.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),g.send(b(d)),g}},get:{CORS:function(a,d,e,f){var g=c(e,f);return g.open("GET",a+"?"+b(d),!0),g.send(null),g},JSONP:function(a,c,e,f){var g="c"+d;c.callback="window._EsriLeafletCallbacks."+g;var h=L.DomUtil.create("script",null,document.body);return h.type="text/javascript",h.src=a+"?"+b(c),h.id=g,window._EsriLeafletCallbacks[g]=function(a){if(window._EsriLeafletCallbacks[g]!==!0){var b,c=Object.prototype.toString.call(a);"[object Object]"!==c&&"[object Array]"!==c&&(b={error:{code:500,message:"Expected array or object as JSONP response"}},a=null),!b&&a.error&&(b=a,a=null),e.call(f,b,a),window._EsriLeafletCallbacks[g]=!0}},d++,{id:g,url:h.src,abort:function(){window._EsriLeafletCallbacks._callback[g]({code:0,message:"Request aborted."})}}}}},a.get=a.Support.CORS?a.Request.get.CORS:a.Request.get.JSONP,a.post=a.Request.post.XMLHTTP,a.request=a.Request.request}(EsriLeaflet),function(a){var b="https:"!==window.location.protocol?"http:":"https:";a.Layers.BasemapLayer=L.TileLayer.extend({statics:{TILES:{Streets:{urlTemplate:b+"//{s}.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/{z}/{y}/{x}",attributionUrl:"https://static.arcgis.com/attribution/World_Street_Map",options:{hideLogo:!1,logoPosition:"bottomright",minZoom:1,maxZoom:19,subdomains:["server","services"],attribution:"Esri"}},Topographic:{urlTemplate:b+"//{s}.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/{z}/{y}/{x}",attributionUrl:"https://static.arcgis.com/attribution/World_Topo_Map",options:{hideLogo:!1,logoPosition:"bottomright",minZoom:1,maxZoom:19,subdomains:["server","services"],attribution:"Esri"}},Oceans:{urlTemplate:b+"//{s}.arcgisonline.com/arcgis/rest/services/Ocean/World_Ocean_Base/MapServer/tile/{z}/{y}/{x}",attributionUrl:"https://static.arcgis.com/attribution/Ocean_Basemap",options:{hideLogo:!1,logoPosition:"bottomright",minZoom:1,maxZoom:16,subdomains:["server","services"],attribution:"Esri"}},OceansLabels:{urlTemplate:b+"//{s}.arcgisonline.com/arcgis/rest/services/Ocean/World_Ocean_Reference/MapServer/tile/{z}/{y}/{x}",options:{hideLogo:!0,logoPosition:"bottomright",minZoom:1,maxZoom:16,subdomains:["server","services"]}},NationalGeographic:{urlTemplate:b+"//{s}.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer/tile/{z}/{y}/{x}",options:{hideLogo:!1,logoPosition:"bottomright",minZoom:1,maxZoom:16,subdomains:["server","services"],attribution:"Esri"}},DarkGray:{urlTemplate:b+"//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Dark_Gray_Base/MapServer/tile/{z}/{y}/{x}",options:{hideLogo:!1,logoPosition:"bottomright",minZoom:1,maxZoom:16,subdomains:["server","services"],attribution:"Esri, DeLorme, HERE"}},DarkGrayLabels:{urlTemplate:b+"//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Dark_Gray_Reference/MapServer/tile/{z}/{y}/{x}",options:{hideLogo:!0,logoPosition:"bottomright",minZoom:1,maxZoom:16,subdomains:["server","services"]}},Gray:{urlTemplate:b+"//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer/tile/{z}/{y}/{x}",options:{hideLogo:!1,logoPosition:"bottomright",minZoom:1,maxZoom:16,subdomains:["server","services"],attribution:"Esri, NAVTEQ, DeLorme"}},GrayLabels:{urlTemplate:b+"//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Reference/MapServer/tile/{z}/{y}/{x}",options:{hideLogo:!0,logoPosition:"bottomright",minZoom:1,maxZoom:16,subdomains:["server","services"]}},Imagery:{urlTemplate:b+"//{s}.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}",options:{hideLogo:!1,logoPosition:"bottomright",minZoom:1,maxZoom:19,subdomains:["server","services"],attribution:"Esri, DigitalGlobe, GeoEye, i-cubed, USDA, USGS, AEX, Getmapping, Aerogrid, IGN, IGP, swisstopo, and the GIS User Community"}},ImageryLabels:{urlTemplate:b+"//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Boundaries_and_Places/MapServer/tile/{z}/{y}/{x}",options:{hideLogo:!0,logoPosition:"bottomright",minZoom:1,maxZoom:19,subdomains:["server","services"]}},ImageryTransportation:{urlTemplate:b+"//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Transportation/MapServer/tile/{z}/{y}/{x}",options:{hideLogo:!0,logoPosition:"bottomright",minZoom:1,maxZoom:19,subdomains:["server","services"]}},ShadedRelief:{urlTemplate:b+"//{s}.arcgisonline.com/ArcGIS/rest/services/World_Shaded_Relief/MapServer/tile/{z}/{y}/{x}",options:{hideLogo:!1,logoPosition:"bottomright",minZoom:1,maxZoom:13,subdomains:["server","services"],attribution:"Esri, NAVTEQ, DeLorme"}},ShadedReliefLabels:{urlTemplate:b+"//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Boundaries_and_Places_Alternate/MapServer/tile/{z}/{y}/{x}",options:{hideLogo:!0,logoPosition:"bottomright",minZoom:1,maxZoom:12,subdomains:["server","services"]}},Terrain:{urlTemplate:b+"//{s}.arcgisonline.com/ArcGIS/rest/services/World_Terrain_Base/MapServer/tile/{z}/{y}/{x}",options:{hideLogo:!1,logoPosition:"bottomright",minZoom:1,maxZoom:13,subdomains:["server","services"],attribution:"Esri, USGS, NOAA"}},TerrainLabels:{urlTemplate:b+"//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Reference_Overlay/MapServer/tile/{z}/{y}/{x}",options:{hideLogo:!0,logoPosition:"bottomright",minZoom:1,maxZoom:13,subdomains:["server","services"]}}}},initialize:function(b,c){var d;if("object"==typeof b&&b.urlTemplate&&b.options)d=b;else{if("string"!=typeof b||!a.BasemapLayer.TILES[b])throw new Error('L.esri.BasemapLayer: Invalid parameter. Use one of "Streets", "Topographic", "Oceans", "OceansLabels", "NationalGeographic", "Gray", "GrayLabels", "DarkGray", "DarkGrayLabels", "Imagery", "ImageryLabels", "ImageryTransportation", "ShadedRelief", "ShadedReliefLabels", "Terrain" or "TerrainLabels"');d=a.BasemapLayer.TILES[b]}var e=L.Util.extend(d.options,c);L.TileLayer.prototype.initialize.call(this,d.urlTemplate,L.Util.setOptions(this,e)),d.attributionUrl&&this._getAttributionData(d.attributionUrl),this._logo=new a.Controls.Logo({position:this.options.logoPosition})},onAdd:function(a){this.options.hideLogo||a._hasEsriLogo||(this._logo.addTo(a),a._hasEsriLogo=!0),L.TileLayer.prototype.onAdd.call(this,a),a.on("moveend",this._updateMapAttribution,this)},onRemove:function(a){!a._hasEsriLogo&&this._logo&&this._logo._container&&(a.removeControl(this._logo),a._hasEsriLogo=!1),L.TileLayer.prototype.onRemove.call(this,a),a.off("moveend",this._updateMapAttribution,this)},getAttribution:function(){var a=''+this.options.attribution+"";return a},_getAttributionData:function(a){L.esri.Request.get.JSONP(a,{},L.Util.bind(function(a,b){this._attributions=[];for(var c=0;c=e.minZoom&&c<=e.maxZoom&&(a+=", "+f)}a=a.substr(2);var g=this._map.attributionControl._container.querySelector(".esri-attributions");g.innerHTML=a,g.style.maxWidth=.65*this._map.getSize().x+"px",this.fire("attributionupdated",{attribution:a})}}}),a.BasemapLayer=a.Layers.BasemapLayer,a.Layers.basemapLayer=function(b,c){return new a.Layers.BasemapLayer(b,c)},a.basemapLayer=function(b,c){return new a.Layers.BasemapLayer(b,c)}}(EsriLeaflet),EsriLeaflet.Controls.Logo=L.Control.extend({options:{position:"bottomright",marginTop:0,marginLeft:0,marginBottom:0,marginRight:0},onAdd:function(){var a=L.DomUtil.create("div","esri-leaflet-logo");return a.style.marginTop=this.options.marginTop,a.style.marginLeft=this.options.marginLeft,a.style.marginBottom=this.options.marginBottom,a.style.marginRight=this.options.marginRight,a.innerHTML=this._adjustLogo(this._map._size),this._map.on("resize",function(b){a.innerHTML=this._adjustLogo(b.newSize)},this),a},_adjustLogo:function(a){return a.x<=600||a.y<=600?'Powered by Esri':'Powered by Esri'}}),EsriLeaflet.Controls.logo=function(a){return new L.esri.Controls.Logo(a)}; +var EsriLeaflet={VERSION:"1.0.3",Layers:{},Services:{},Controls:{},Tasks:{},Util:{},Support:{CORS:!!(window.XMLHttpRequest&&"withCredentials"in new XMLHttpRequest),pointerEvents:""===document.documentElement.style.pointerEvents}};"undefined"!=typeof window&&window.L&&(window.L.esri=EsriLeaflet),function(a){function b(a){var b="";a.f=a.f||"json";for(var c in a)if(a.hasOwnProperty(c)){var d,e=a[c],f=Object.prototype.toString.call(e);b.length&&(b+="&"),d="[object Array]"===f?"[object Object]"===Object.prototype.toString.call(e[0])?JSON.stringify(e):e.join(","):"[object Object]"===f?JSON.stringify(e):"[object Date]"===f?e.valueOf():e,b+=encodeURIComponent(c)+"="+encodeURIComponent(d)}return b}function c(a,b){var c=new XMLHttpRequest;return c.onerror=function(d){c.onreadystatechange=L.Util.falseFn,a.call(b,{error:{code:500,message:"XMLHttpRequest error"}},null)},c.onreadystatechange=function(){var d,e;if(4===c.readyState){try{d=JSON.parse(c.responseText)}catch(f){d=null,e={code:500,message:"Could not parse response as JSON. This could also be caused by a CORS or XMLHttpRequest error."}}!e&&d.error&&(e=d.error,d=null),c.onerror=L.Util.falseFn,a.call(b,e,d)}},c}var d=0;window._EsriLeafletCallbacks={},a.Request={request:function(d,e,f,g){var h=b(e),i=c(f,g),j=(d+"?"+h).length;if(2e3>=j&&L.esri.Support.CORS)i.open("GET",d+"?"+h),i.send(null);else{if(!(j>2e3&&L.esri.Support.CORS))return 2e3>=j&&!L.esri.Support.CORS?L.esri.Request.get.JSONP(d,e,f,g):void a.Util.warn("a request to "+d+" was longer then 2000 characters and this browser cannot make a cross-domain post request. Please use a proxy http://esri.github.io/esri-leaflet/api-reference/request.html");i.open("POST",d),i.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),i.send(h)}return i},post:{XMLHTTP:function(a,d,e,f){var g=c(e,f);return g.open("POST",a),g.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),g.send(b(d)),g}},get:{CORS:function(a,d,e,f){var g=c(e,f);return g.open("GET",a+"?"+b(d),!0),g.send(null),g},JSONP:function(a,c,e,f){var g="c"+d;c.callback="window._EsriLeafletCallbacks."+g;var h=L.DomUtil.create("script",null,document.body);return h.type="text/javascript",h.src=a+"?"+b(c),h.id=g,window._EsriLeafletCallbacks[g]=function(a){if(window._EsriLeafletCallbacks[g]!==!0){var b,c=Object.prototype.toString.call(a);"[object Object]"!==c&&"[object Array]"!==c&&(b={error:{code:500,message:"Expected array or object as JSONP response"}},a=null),!b&&a.error&&(b=a,a=null),e.call(f,b,a),window._EsriLeafletCallbacks[g]=!0}},d++,{id:g,url:h.src,abort:function(){window._EsriLeafletCallbacks._callback[g]({code:0,message:"Request aborted."})}}}}},a.get=a.Support.CORS?a.Request.get.CORS:a.Request.get.JSONP,a.post=a.Request.post.XMLHTTP,a.request=a.Request.request}(EsriLeaflet),function(a){var b="https:"!==window.location.protocol?"http:":"https:";a.Layers.BasemapLayer=L.TileLayer.extend({statics:{TILES:{Streets:{urlTemplate:b+"//{s}.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/{z}/{y}/{x}",attributionUrl:"https://static.arcgis.com/attribution/World_Street_Map",options:{hideLogo:!1,logoPosition:"bottomright",minZoom:1,maxZoom:19,subdomains:["server","services"],attribution:"Esri"}},Topographic:{urlTemplate:b+"//{s}.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/{z}/{y}/{x}",attributionUrl:"https://static.arcgis.com/attribution/World_Topo_Map",options:{hideLogo:!1,logoPosition:"bottomright",minZoom:1,maxZoom:19,subdomains:["server","services"],attribution:"Esri"}},Oceans:{urlTemplate:b+"//{s}.arcgisonline.com/arcgis/rest/services/Ocean/World_Ocean_Base/MapServer/tile/{z}/{y}/{x}",attributionUrl:"https://static.arcgis.com/attribution/Ocean_Basemap",options:{hideLogo:!1,logoPosition:"bottomright",minZoom:1,maxZoom:16,subdomains:["server","services"],attribution:"Esri"}},OceansLabels:{urlTemplate:b+"//{s}.arcgisonline.com/arcgis/rest/services/Ocean/World_Ocean_Reference/MapServer/tile/{z}/{y}/{x}",options:{hideLogo:!0,logoPosition:"bottomright",minZoom:1,maxZoom:16,subdomains:["server","services"]}},NationalGeographic:{urlTemplate:b+"//{s}.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer/tile/{z}/{y}/{x}",options:{hideLogo:!1,logoPosition:"bottomright",minZoom:1,maxZoom:16,subdomains:["server","services"],attribution:"Esri"}},DarkGray:{urlTemplate:b+"//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Dark_Gray_Base/MapServer/tile/{z}/{y}/{x}",options:{hideLogo:!1,logoPosition:"bottomright",minZoom:1,maxZoom:16,subdomains:["server","services"],attribution:"Esri, DeLorme, HERE"}},DarkGrayLabels:{urlTemplate:b+"//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Dark_Gray_Reference/MapServer/tile/{z}/{y}/{x}",options:{hideLogo:!0,logoPosition:"bottomright",minZoom:1,maxZoom:16,subdomains:["server","services"]}},Gray:{urlTemplate:b+"//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer/tile/{z}/{y}/{x}",options:{hideLogo:!1,logoPosition:"bottomright",minZoom:1,maxZoom:16,subdomains:["server","services"],attribution:"Esri, NAVTEQ, DeLorme"}},GrayLabels:{urlTemplate:b+"//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Reference/MapServer/tile/{z}/{y}/{x}",options:{hideLogo:!0,logoPosition:"bottomright",minZoom:1,maxZoom:16,subdomains:["server","services"]}},Imagery:{urlTemplate:b+"//{s}.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}",options:{hideLogo:!1,logoPosition:"bottomright",minZoom:1,maxZoom:19,subdomains:["server","services"],attribution:"Esri, DigitalGlobe, GeoEye, i-cubed, USDA, USGS, AEX, Getmapping, Aerogrid, IGN, IGP, swisstopo, and the GIS User Community"}},ImageryLabels:{urlTemplate:b+"//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Boundaries_and_Places/MapServer/tile/{z}/{y}/{x}",options:{hideLogo:!0,logoPosition:"bottomright",minZoom:1,maxZoom:19,subdomains:["server","services"]}},ImageryTransportation:{urlTemplate:b+"//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Transportation/MapServer/tile/{z}/{y}/{x}",options:{hideLogo:!0,logoPosition:"bottomright",minZoom:1,maxZoom:19,subdomains:["server","services"]}},ShadedRelief:{urlTemplate:b+"//{s}.arcgisonline.com/ArcGIS/rest/services/World_Shaded_Relief/MapServer/tile/{z}/{y}/{x}",options:{hideLogo:!1,logoPosition:"bottomright",minZoom:1,maxZoom:13,subdomains:["server","services"],attribution:"Esri, NAVTEQ, DeLorme"}},ShadedReliefLabels:{urlTemplate:b+"//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Boundaries_and_Places_Alternate/MapServer/tile/{z}/{y}/{x}",options:{hideLogo:!0,logoPosition:"bottomright",minZoom:1,maxZoom:12,subdomains:["server","services"]}},Terrain:{urlTemplate:b+"//{s}.arcgisonline.com/ArcGIS/rest/services/World_Terrain_Base/MapServer/tile/{z}/{y}/{x}",options:{hideLogo:!1,logoPosition:"bottomright",minZoom:1,maxZoom:13,subdomains:["server","services"],attribution:"Esri, USGS, NOAA"}},TerrainLabels:{urlTemplate:b+"//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Reference_Overlay/MapServer/tile/{z}/{y}/{x}",options:{hideLogo:!0,logoPosition:"bottomright",minZoom:1,maxZoom:13,subdomains:["server","services"]}}}},initialize:function(b,c){var d;if("object"==typeof b&&b.urlTemplate&&b.options)d=b;else{if("string"!=typeof b||!a.BasemapLayer.TILES[b])throw new Error('L.esri.BasemapLayer: Invalid parameter. Use one of "Streets", "Topographic", "Oceans", "OceansLabels", "NationalGeographic", "Gray", "GrayLabels", "DarkGray", "DarkGrayLabels", "Imagery", "ImageryLabels", "ImageryTransportation", "ShadedRelief", "ShadedReliefLabels", "Terrain" or "TerrainLabels"');d=a.BasemapLayer.TILES[b]}var e=L.Util.extend(d.options,c);L.TileLayer.prototype.initialize.call(this,d.urlTemplate,L.Util.setOptions(this,e)),d.attributionUrl&&this._getAttributionData(d.attributionUrl),this._logo=new a.Controls.Logo({position:this.options.logoPosition})},onAdd:function(a){this.options.hideLogo||a._hasEsriLogo||(this._logo.addTo(a),a._hasEsriLogo=!0),L.TileLayer.prototype.onAdd.call(this,a),a.on("moveend",this._updateMapAttribution,this)},onRemove:function(a){!a._hasEsriLogo&&this._logo&&this._logo._container&&(a.removeControl(this._logo),a._hasEsriLogo=!1),L.TileLayer.prototype.onRemove.call(this,a),a.off("moveend",this._updateMapAttribution,this)},getAttribution:function(){var a=''+this.options.attribution+"";return a},_getAttributionData:function(a){L.esri.Request.get.JSONP(a,{},L.Util.bind(function(a,b){this._attributions=[];for(var c=0;c=e.minZoom&&c<=e.maxZoom&&(a+=", "+f)}a=a.substr(2);var g=this._map.attributionControl._container.querySelector(".esri-attributions");g.innerHTML=a,g.style.maxWidth=.65*this._map.getSize().x+"px",this.fire("attributionupdated",{attribution:a})}}}),a.BasemapLayer=a.Layers.BasemapLayer,a.Layers.basemapLayer=function(b,c){return new a.Layers.BasemapLayer(b,c)},a.basemapLayer=function(b,c){return new a.Layers.BasemapLayer(b,c)}}(EsriLeaflet),EsriLeaflet.Controls.Logo=L.Control.extend({options:{position:"bottomright",marginTop:0,marginLeft:0,marginBottom:0,marginRight:0},onAdd:function(){var a=L.DomUtil.create("div","esri-leaflet-logo");return a.style.marginTop=this.options.marginTop,a.style.marginLeft=this.options.marginLeft,a.style.marginBottom=this.options.marginBottom,a.style.marginRight=this.options.marginRight,a.innerHTML=this._adjustLogo(this._map._size),this._map.on("resize",function(b){a.innerHTML=this._adjustLogo(b.newSize)},this),a},_adjustLogo:function(a){return a.x<=600||a.y<=600?'Powered by Esri':'Powered by Esri'}}),EsriLeaflet.Controls.logo=function(a){return new L.esri.Controls.Logo(a)}; //# sourceMappingURL=esri-leaflet-basemaps.js.map return EsriLeaflet; diff --git a/dist/builds/basemaps/esri-leaflet-basemaps.js.map b/dist/builds/basemaps/esri-leaflet-basemaps.js.map index 1239f9b82..42e0b4055 100644 --- a/dist/builds/basemaps/esri-leaflet-basemaps.js.map +++ b/dist/builds/basemaps/esri-leaflet-basemaps.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../../src/EsriLeaflet.js","../../../src/Request.js","../../../src/Layers/BasemapLayer.js","../../../src/Controls/Logo.js"],"names":["EsriLeaflet","VERSION","Layers","Services","Controls","Tasks","Util","Support","CORS","window","XMLHttpRequest","pointerEvents","document","documentElement","style","L","esri","serialize","params","data","f","key","hasOwnProperty","value","param","type","Object","prototype","toString","call","length","JSON","stringify","join","valueOf","encodeURIComponent","createRequest","callback","context","httpRequest","onerror","e","onreadystatechange","falseFn","error","code","message","response","readyState","parse","responseText","callbacks","_EsriLeafletCallbacks","Request","request","url","paramString","requestLength","open","send","get","JSONP","warn","setRequestHeader","post","XMLHTTP","callbackId","script","DomUtil","create","body","src","id","responseType","abort","_callback","tileProtocol","location","protocol","BasemapLayer","TileLayer","extend","statics","TILES","Streets","urlTemplate","attributionUrl","options","hideLogo","logoPosition","minZoom","maxZoom","subdomains","attribution","Topographic","Oceans","OceansLabels","NationalGeographic","DarkGray","DarkGrayLabels","Gray","GrayLabels","Imagery","ImageryLabels","ImageryTransportation","ShadedRelief","ShadedReliefLabels","Terrain","TerrainLabels","initialize","config","Error","tileOptions","this","setOptions","_getAttributionData","_logo","Logo","position","onAdd","map","_hasEsriLogo","addTo","on","_updateMapAttribution","onRemove","_container","removeControl","off","getAttribution","bind","attributions","_attributions","c","contributors","contributor","i","coverageAreas","coverageArea","southWest","LatLng","bbox","northEast","push","score","bounds","LatLngBounds","zoomMin","zoomMax","sort","a","b","_map","attributionControl","newAttributions","getBounds","zoom","getZoom","text","match","intersects","substr","attributionElement","querySelector","innerHTML","maxWidth","getSize","x","fire","basemapLayer","Control","marginTop","marginLeft","marginBottom","marginRight","div","_adjustLogo","_size","newSize","mapSize","y","logo"],"mappings":"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","file":"esri-leaflet-basemaps.js","sourcesContent":["var EsriLeaflet = { //jshint ignore:line\n VERSION: '1.0.2',\n Layers: {},\n Services: {},\n Controls: {},\n Tasks: {},\n Util: {},\n Support: {\n CORS: !!(window.XMLHttpRequest && 'withCredentials' in new XMLHttpRequest()),\n pointerEvents: document.documentElement.style.pointerEvents === ''\n }\n};\n\nif(typeof window !== 'undefined' && window.L){\n window.L.esri = EsriLeaflet;\n}\n","(function(EsriLeaflet){\n\n var callbacks = 0;\n\n window._EsriLeafletCallbacks = {};\n\n function serialize(params){\n var data = '';\n\n params.f = params.f || 'json';\n\n for (var key in params){\n if(params.hasOwnProperty(key)){\n var param = params[key];\n var type = Object.prototype.toString.call(param);\n var value;\n\n if(data.length){\n data += '&';\n }\n\n if (type === '[object Array]'){\n value = (Object.prototype.toString.call(param[0]) === '[object Object]') ? JSON.stringify(param) : param.join(',');\n } else if (type === '[object Object]') {\n value = JSON.stringify(param);\n } else if (type === '[object Date]'){\n value = param.valueOf();\n } else {\n value = param;\n }\n\n data += encodeURIComponent(key) + '=' + encodeURIComponent(value);\n }\n }\n\n return data;\n }\n\n function createRequest(callback, context){\n var httpRequest = new XMLHttpRequest();\n\n httpRequest.onerror = function(e) {\n httpRequest.onreadystatechange = L.Util.falseFn;\n\n callback.call(context, {\n error: {\n code: 500,\n message: 'XMLHttpRequest error'\n }\n }, null);\n };\n\n httpRequest.onreadystatechange = function(){\n var response;\n var error;\n\n if (httpRequest.readyState === 4) {\n try {\n response = JSON.parse(httpRequest.responseText);\n } catch(e) {\n response = null;\n error = {\n code: 500,\n message: 'Could not parse response as JSON. This could also be caused by a CORS or XMLHttpRequest error.'\n };\n }\n\n if (!error && response.error) {\n error = response.error;\n response = null;\n }\n\n httpRequest.onerror = L.Util.falseFn;\n\n callback.call(context, error, response);\n }\n };\n\n return httpRequest;\n }\n\n // AJAX handlers for CORS (modern browsers) or JSONP (older browsers)\n EsriLeaflet.Request = {\n request: function(url, params, callback, context){\n var paramString = serialize(params);\n var httpRequest = createRequest(callback, context);\n var requestLength = (url + '?' + paramString).length;\n\n // request is less then 2000 characters and the browser supports CORS, make GET request with XMLHttpRequest\n if(requestLength <= 2000 && L.esri.Support.CORS){\n httpRequest.open('GET', url + '?' + paramString);\n httpRequest.send(null);\n\n // request is less more then 2000 characters and the browser supports CORS, make POST request with XMLHttpRequest\n } else if (requestLength > 2000 && L.esri.Support.CORS){\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(paramString);\n\n // request is less more then 2000 characters and the browser does not support CORS, make a JSONP request\n } else if(requestLength <= 2000 && !L.esri.Support.CORS){\n return L.esri.Request.get.JSONP(url, params, callback, context);\n\n // request is longer then 2000 characters and the browser does not support CORS, log a warning\n } else {\n EsriLeaflet.Util.warn('a request to ' + url + ' was longer then 2000 characters and this browser cannot make a cross-domain post request. Please use a proxy http://esri.github.io/esri-leaflet/api-reference/request.html');\n return;\n }\n\n return httpRequest;\n },\n\n post: {\n XMLHTTP: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(serialize(params));\n\n return httpRequest;\n }\n },\n\n get: {\n CORS: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n\n httpRequest.open('GET', url + '?' + serialize(params), true);\n httpRequest.send(null);\n\n return httpRequest;\n },\n JSONP: function(url, params, callback, context){\n var callbackId = 'c' + callbacks;\n\n params.callback = 'window._EsriLeafletCallbacks.' + callbackId;\n\n var script = L.DomUtil.create('script', null, document.body);\n script.type = 'text/javascript';\n script.src = url + '?' + serialize(params);\n script.id = callbackId;\n\n window._EsriLeafletCallbacks[callbackId] = function(response){\n if(window._EsriLeafletCallbacks[callbackId] !== true){\n var error;\n var responseType = Object.prototype.toString.call(response);\n\n if(!(responseType === '[object Object]' || responseType === '[object Array]')){\n error = {\n error: {\n code: 500,\n message: 'Expected array or object as JSONP response'\n }\n };\n response = null;\n }\n\n if (!error && response.error) {\n error = response;\n response = null;\n }\n\n callback.call(context, error, response);\n window._EsriLeafletCallbacks[callbackId] = true;\n }\n };\n\n callbacks++;\n\n return {\n id: callbackId,\n url: script.src,\n abort: function(){\n window._EsriLeafletCallbacks._callback[callbackId]({\n code: 0,\n message: 'Request aborted.'\n });\n }\n };\n }\n }\n };\n\n // choose the correct AJAX handler depending on CORS support\n EsriLeaflet.get = (EsriLeaflet.Support.CORS) ? EsriLeaflet.Request.get.CORS : EsriLeaflet.Request.get.JSONP;\n\n // always use XMLHttpRequest for posts\n EsriLeaflet.post = EsriLeaflet.Request.post.XMLHTTP;\n\n // expose a common request method the uses GET\\POST based on request length\n EsriLeaflet.request = EsriLeaflet.Request.request;\n\n})(EsriLeaflet);","(function(EsriLeaflet){\n\n var tileProtocol = (window.location.protocol !== 'https:') ? 'http:' : 'https:';\n\n EsriLeaflet.Layers.BasemapLayer = L.TileLayer.extend({\n statics: {\n TILES: {\n Streets: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/{z}/{y}/{x}',\n attributionUrl: 'https://static.arcgis.com/attribution/World_Street_Map',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services'],\n attribution: 'Esri'\n }\n },\n Topographic: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/{z}/{y}/{x}',\n attributionUrl: 'https://static.arcgis.com/attribution/World_Topo_Map',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services'],\n attribution: 'Esri'\n }\n },\n Oceans: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/arcgis/rest/services/Ocean/World_Ocean_Base/MapServer/tile/{z}/{y}/{x}',\n attributionUrl: 'https://static.arcgis.com/attribution/Ocean_Basemap',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services'],\n attribution: 'Esri'\n }\n },\n OceansLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/arcgis/rest/services/Ocean/World_Ocean_Reference/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services']\n }\n },\n NationalGeographic: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services'],\n attribution: 'Esri'\n }\n },\n DarkGray: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Dark_Gray_Base/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services'],\n attribution: 'Esri, DeLorme, HERE'\n }\n },\n DarkGrayLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Dark_Gray_Reference/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services']\n }\n },\n Gray: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services'],\n attribution: 'Esri, NAVTEQ, DeLorme'\n }\n },\n GrayLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Reference/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services']\n }\n },\n Imagery: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services'],\n attribution: 'Esri, DigitalGlobe, GeoEye, i-cubed, USDA, USGS, AEX, Getmapping, Aerogrid, IGN, IGP, swisstopo, and the GIS User Community'\n }\n },\n ImageryLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Boundaries_and_Places/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services']\n }\n },\n ImageryTransportation: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Transportation/MapServer/tile/{z}/{y}/{x}',\n //pane: 'esri-label',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services']\n }\n },\n ShadedRelief: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Shaded_Relief/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 13,\n subdomains: ['server', 'services'],\n attribution: 'Esri, NAVTEQ, DeLorme'\n }\n },\n ShadedReliefLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Boundaries_and_Places_Alternate/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 12,\n subdomains: ['server', 'services']\n }\n },\n Terrain: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Terrain_Base/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 13,\n subdomains: ['server', 'services'],\n attribution: 'Esri, USGS, NOAA'\n }\n },\n TerrainLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Reference_Overlay/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 13,\n subdomains: ['server', 'services']\n }\n }\n }\n },\n initialize: function(key, options){\n var config;\n\n // set the config variable with the appropriate config object\n if (typeof key === 'object' && key.urlTemplate && key.options){\n config = key;\n } else if(typeof key === 'string' && EsriLeaflet.BasemapLayer.TILES[key]){\n config = EsriLeaflet.BasemapLayer.TILES[key];\n } else {\n throw new Error('L.esri.BasemapLayer: Invalid parameter. Use one of \"Streets\", \"Topographic\", \"Oceans\", \"OceansLabels\", \"NationalGeographic\", \"Gray\", \"GrayLabels\", \"DarkGray\", \"DarkGrayLabels\", \"Imagery\", \"ImageryLabels\", \"ImageryTransportation\", \"ShadedRelief\", \"ShadedReliefLabels\", \"Terrain\" or \"TerrainLabels\"');\n }\n\n // merge passed options into the config options\n var tileOptions = L.Util.extend(config.options, options);\n\n // call the initialize method on L.TileLayer to set everything up\n L.TileLayer.prototype.initialize.call(this, config.urlTemplate, L.Util.setOptions(this, tileOptions));\n\n // if this basemap requires dynamic attribution set it up\n if(config.attributionUrl){\n this._getAttributionData(config.attributionUrl);\n }\n this._logo = new EsriLeaflet.Controls.Logo({\n position: this.options.logoPosition\n });\n },\n onAdd: function(map){\n if(!this.options.hideLogo && !map._hasEsriLogo){\n this._logo.addTo(map);\n map._hasEsriLogo = true;\n }\n\n // if(this.options.pane && EsriLeaflet.Support.pointerEvents){\n // this._initPane();\n // }\n\n L.TileLayer.prototype.onAdd.call(this, map);\n\n map.on('moveend', this._updateMapAttribution, this);\n },\n onRemove: function(map){\n // check to make sure the logo hasn't already been removed\n if(!map._hasEsriLogo && this._logo && this._logo._container){\n map.removeControl(this._logo);\n map._hasEsriLogo = false;\n }\n\n L.TileLayer.prototype.onRemove.call(this, map);\n\n map.off('moveend', this._updateMapAttribution, this);\n },\n getAttribution:function(){\n var attribution = '' + this.options.attribution + ''/* + logo*/;\n return attribution;\n },\n // _initPane: function(){\n // if(!this._map.getPane(this.options.pane)){\n // var pane = this._map.createPane(this.options.pane);\n // pane.style.pointerEvents = 'none';\n // pane.style.zIndex = 5;\n // }\n // },\n _getAttributionData: function(url){\n L.esri.Request.get.JSONP(url, {}, L.Util.bind(function(error, attributions){\n this._attributions = [];\n\n for (var c = 0; c < attributions.contributors.length; c++) {\n var contributor = attributions.contributors[c];\n for (var i = 0; i < contributor.coverageAreas.length; i++) {\n var coverageArea = contributor.coverageAreas[i];\n var southWest = new L.LatLng(coverageArea.bbox[0], coverageArea.bbox[1]);\n var northEast = new L.LatLng(coverageArea.bbox[2], coverageArea.bbox[3]);\n this._attributions.push({\n attribution: contributor.attribution,\n score: coverageArea.score,\n bounds: new L.LatLngBounds(southWest, northEast),\n minZoom: coverageArea.zoomMin,\n maxZoom: coverageArea.zoomMax\n });\n }\n }\n\n this._attributions.sort(function(a, b){\n return b.score - a.score;\n });\n\n this._updateMapAttribution();\n }, this));\n },\n _updateMapAttribution: function(){\n if(this._map && this._map.attributionControl && this._attributions){\n var newAttributions = '';\n var bounds = this._map.getBounds();\n var zoom = this._map.getZoom();\n\n for (var i = 0; i < this._attributions.length; i++) {\n var attribution = this._attributions[i];\n var text = attribution.attribution;\n if(!newAttributions.match(text) && bounds.intersects(attribution.bounds) && zoom >= attribution.minZoom && zoom <= attribution.maxZoom) {\n newAttributions += (', ' + text);\n }\n }\n newAttributions = newAttributions.substr(2);\n var attributionElement = this._map.attributionControl._container.querySelector('.esri-attributions');\n attributionElement.innerHTML = newAttributions;\n attributionElement.style.maxWidth = (this._map.getSize().x * 0.65) + 'px';\n this.fire('attributionupdated', {\n attribution: newAttributions\n });\n }\n }\n });\n\n EsriLeaflet.BasemapLayer = EsriLeaflet.Layers.BasemapLayer;\n\n EsriLeaflet.Layers.basemapLayer = function(key, options){\n return new EsriLeaflet.Layers.BasemapLayer(key, options);\n };\n\n EsriLeaflet.basemapLayer = function(key, options){\n return new EsriLeaflet.Layers.BasemapLayer(key, options);\n };\n\n})(EsriLeaflet);","EsriLeaflet.Controls.Logo = L.Control.extend({\n options: {\n position: 'bottomright',\n marginTop: 0,\n marginLeft: 0,\n marginBottom: 0,\n marginRight: 0\n },\n\n onAdd: function () {\n var div = L.DomUtil.create('div', 'esri-leaflet-logo');\n div.style.marginTop = this.options.marginTop;\n div.style.marginLeft = this.options.marginLeft;\n div.style.marginBottom = this.options.marginBottom;\n div.style.marginRight = this.options.marginRight;\n div.innerHTML = this._adjustLogo(this._map._size);\n\n this._map.on('resize', function(e){\n div.innerHTML = this._adjustLogo(e.newSize);\n }, this);\n\n return div;\n },\n\n _adjustLogo: function (mapSize) {\n if (mapSize.x <= 600 || mapSize.y <= 600){\n return '\"Powered';\n }\n else {\n return '\"Powered';\n }\n }\n\n});\n\nEsriLeaflet.Controls.logo = function(options){\n return new L.esri.Controls.Logo(options);\n};\n"]} \ No newline at end of file +{"version":3,"sources":["../../../src/EsriLeaflet.js","../../../src/Request.js","../../../src/Layers/BasemapLayer.js","../../../src/Controls/Logo.js"],"names":["EsriLeaflet","VERSION","Layers","Services","Controls","Tasks","Util","Support","CORS","window","XMLHttpRequest","pointerEvents","document","documentElement","style","L","esri","serialize","params","data","f","key","hasOwnProperty","value","param","type","Object","prototype","toString","call","length","JSON","stringify","join","valueOf","encodeURIComponent","createRequest","callback","context","httpRequest","onerror","e","onreadystatechange","falseFn","error","code","message","response","readyState","parse","responseText","callbacks","_EsriLeafletCallbacks","Request","request","url","paramString","requestLength","open","send","get","JSONP","warn","setRequestHeader","post","XMLHTTP","callbackId","script","DomUtil","create","body","src","id","responseType","abort","_callback","tileProtocol","location","protocol","BasemapLayer","TileLayer","extend","statics","TILES","Streets","urlTemplate","attributionUrl","options","hideLogo","logoPosition","minZoom","maxZoom","subdomains","attribution","Topographic","Oceans","OceansLabels","NationalGeographic","DarkGray","DarkGrayLabels","Gray","GrayLabels","Imagery","ImageryLabels","ImageryTransportation","ShadedRelief","ShadedReliefLabels","Terrain","TerrainLabels","initialize","config","Error","tileOptions","this","setOptions","_getAttributionData","_logo","Logo","position","onAdd","map","_hasEsriLogo","addTo","on","_updateMapAttribution","onRemove","_container","removeControl","off","getAttribution","bind","attributions","_attributions","c","contributors","contributor","i","coverageAreas","coverageArea","southWest","LatLng","bbox","northEast","push","score","bounds","LatLngBounds","zoomMin","zoomMax","sort","a","b","_map","attributionControl","newAttributions","getBounds","zoom","getZoom","text","match","intersects","substr","attributionElement","querySelector","innerHTML","maxWidth","getSize","x","fire","basemapLayer","Control","marginTop","marginLeft","marginBottom","marginRight","div","_adjustLogo","_size","newSize","mapSize","y","logo"],"mappings":"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","file":"esri-leaflet-basemaps.js","sourcesContent":["var EsriLeaflet = { //jshint ignore:line\n VERSION: '1.0.3',\n Layers: {},\n Services: {},\n Controls: {},\n Tasks: {},\n Util: {},\n Support: {\n CORS: !!(window.XMLHttpRequest && 'withCredentials' in new XMLHttpRequest()),\n pointerEvents: document.documentElement.style.pointerEvents === ''\n }\n};\n\nif(typeof window !== 'undefined' && window.L){\n window.L.esri = EsriLeaflet;\n}\n","(function(EsriLeaflet){\n\n var callbacks = 0;\n\n window._EsriLeafletCallbacks = {};\n\n function serialize(params){\n var data = '';\n\n params.f = params.f || 'json';\n\n for (var key in params){\n if(params.hasOwnProperty(key)){\n var param = params[key];\n var type = Object.prototype.toString.call(param);\n var value;\n\n if(data.length){\n data += '&';\n }\n\n if (type === '[object Array]'){\n value = (Object.prototype.toString.call(param[0]) === '[object Object]') ? JSON.stringify(param) : param.join(',');\n } else if (type === '[object Object]') {\n value = JSON.stringify(param);\n } else if (type === '[object Date]'){\n value = param.valueOf();\n } else {\n value = param;\n }\n\n data += encodeURIComponent(key) + '=' + encodeURIComponent(value);\n }\n }\n\n return data;\n }\n\n function createRequest(callback, context){\n var httpRequest = new XMLHttpRequest();\n\n httpRequest.onerror = function(e) {\n httpRequest.onreadystatechange = L.Util.falseFn;\n\n callback.call(context, {\n error: {\n code: 500,\n message: 'XMLHttpRequest error'\n }\n }, null);\n };\n\n httpRequest.onreadystatechange = function(){\n var response;\n var error;\n\n if (httpRequest.readyState === 4) {\n try {\n response = JSON.parse(httpRequest.responseText);\n } catch(e) {\n response = null;\n error = {\n code: 500,\n message: 'Could not parse response as JSON. This could also be caused by a CORS or XMLHttpRequest error.'\n };\n }\n\n if (!error && response.error) {\n error = response.error;\n response = null;\n }\n\n httpRequest.onerror = L.Util.falseFn;\n\n callback.call(context, error, response);\n }\n };\n\n return httpRequest;\n }\n\n // AJAX handlers for CORS (modern browsers) or JSONP (older browsers)\n EsriLeaflet.Request = {\n request: function(url, params, callback, context){\n var paramString = serialize(params);\n var httpRequest = createRequest(callback, context);\n var requestLength = (url + '?' + paramString).length;\n\n // request is less then 2000 characters and the browser supports CORS, make GET request with XMLHttpRequest\n if(requestLength <= 2000 && L.esri.Support.CORS){\n httpRequest.open('GET', url + '?' + paramString);\n httpRequest.send(null);\n\n // request is less more then 2000 characters and the browser supports CORS, make POST request with XMLHttpRequest\n } else if (requestLength > 2000 && L.esri.Support.CORS){\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(paramString);\n\n // request is less more then 2000 characters and the browser does not support CORS, make a JSONP request\n } else if(requestLength <= 2000 && !L.esri.Support.CORS){\n return L.esri.Request.get.JSONP(url, params, callback, context);\n\n // request is longer then 2000 characters and the browser does not support CORS, log a warning\n } else {\n EsriLeaflet.Util.warn('a request to ' + url + ' was longer then 2000 characters and this browser cannot make a cross-domain post request. Please use a proxy http://esri.github.io/esri-leaflet/api-reference/request.html');\n return;\n }\n\n return httpRequest;\n },\n\n post: {\n XMLHTTP: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(serialize(params));\n\n return httpRequest;\n }\n },\n\n get: {\n CORS: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n\n httpRequest.open('GET', url + '?' + serialize(params), true);\n httpRequest.send(null);\n\n return httpRequest;\n },\n JSONP: function(url, params, callback, context){\n var callbackId = 'c' + callbacks;\n\n params.callback = 'window._EsriLeafletCallbacks.' + callbackId;\n\n var script = L.DomUtil.create('script', null, document.body);\n script.type = 'text/javascript';\n script.src = url + '?' + serialize(params);\n script.id = callbackId;\n\n window._EsriLeafletCallbacks[callbackId] = function(response){\n if(window._EsriLeafletCallbacks[callbackId] !== true){\n var error;\n var responseType = Object.prototype.toString.call(response);\n\n if(!(responseType === '[object Object]' || responseType === '[object Array]')){\n error = {\n error: {\n code: 500,\n message: 'Expected array or object as JSONP response'\n }\n };\n response = null;\n }\n\n if (!error && response.error) {\n error = response;\n response = null;\n }\n\n callback.call(context, error, response);\n window._EsriLeafletCallbacks[callbackId] = true;\n }\n };\n\n callbacks++;\n\n return {\n id: callbackId,\n url: script.src,\n abort: function(){\n window._EsriLeafletCallbacks._callback[callbackId]({\n code: 0,\n message: 'Request aborted.'\n });\n }\n };\n }\n }\n };\n\n // choose the correct AJAX handler depending on CORS support\n EsriLeaflet.get = (EsriLeaflet.Support.CORS) ? EsriLeaflet.Request.get.CORS : EsriLeaflet.Request.get.JSONP;\n\n // always use XMLHttpRequest for posts\n EsriLeaflet.post = EsriLeaflet.Request.post.XMLHTTP;\n\n // expose a common request method the uses GET\\POST based on request length\n EsriLeaflet.request = EsriLeaflet.Request.request;\n\n})(EsriLeaflet);","(function(EsriLeaflet){\n\n var tileProtocol = (window.location.protocol !== 'https:') ? 'http:' : 'https:';\n\n EsriLeaflet.Layers.BasemapLayer = L.TileLayer.extend({\n statics: {\n TILES: {\n Streets: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/{z}/{y}/{x}',\n attributionUrl: 'https://static.arcgis.com/attribution/World_Street_Map',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services'],\n attribution: 'Esri'\n }\n },\n Topographic: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/{z}/{y}/{x}',\n attributionUrl: 'https://static.arcgis.com/attribution/World_Topo_Map',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services'],\n attribution: 'Esri'\n }\n },\n Oceans: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/arcgis/rest/services/Ocean/World_Ocean_Base/MapServer/tile/{z}/{y}/{x}',\n attributionUrl: 'https://static.arcgis.com/attribution/Ocean_Basemap',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services'],\n attribution: 'Esri'\n }\n },\n OceansLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/arcgis/rest/services/Ocean/World_Ocean_Reference/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services']\n }\n },\n NationalGeographic: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services'],\n attribution: 'Esri'\n }\n },\n DarkGray: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Dark_Gray_Base/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services'],\n attribution: 'Esri, DeLorme, HERE'\n }\n },\n DarkGrayLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Dark_Gray_Reference/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services']\n }\n },\n Gray: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services'],\n attribution: 'Esri, NAVTEQ, DeLorme'\n }\n },\n GrayLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Reference/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services']\n }\n },\n Imagery: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services'],\n attribution: 'Esri, DigitalGlobe, GeoEye, i-cubed, USDA, USGS, AEX, Getmapping, Aerogrid, IGN, IGP, swisstopo, and the GIS User Community'\n }\n },\n ImageryLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Boundaries_and_Places/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services']\n }\n },\n ImageryTransportation: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Transportation/MapServer/tile/{z}/{y}/{x}',\n //pane: 'esri-label',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services']\n }\n },\n ShadedRelief: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Shaded_Relief/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 13,\n subdomains: ['server', 'services'],\n attribution: 'Esri, NAVTEQ, DeLorme'\n }\n },\n ShadedReliefLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Boundaries_and_Places_Alternate/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 12,\n subdomains: ['server', 'services']\n }\n },\n Terrain: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Terrain_Base/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 13,\n subdomains: ['server', 'services'],\n attribution: 'Esri, USGS, NOAA'\n }\n },\n TerrainLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Reference_Overlay/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 13,\n subdomains: ['server', 'services']\n }\n }\n }\n },\n initialize: function(key, options){\n var config;\n\n // set the config variable with the appropriate config object\n if (typeof key === 'object' && key.urlTemplate && key.options){\n config = key;\n } else if(typeof key === 'string' && EsriLeaflet.BasemapLayer.TILES[key]){\n config = EsriLeaflet.BasemapLayer.TILES[key];\n } else {\n throw new Error('L.esri.BasemapLayer: Invalid parameter. Use one of \"Streets\", \"Topographic\", \"Oceans\", \"OceansLabels\", \"NationalGeographic\", \"Gray\", \"GrayLabels\", \"DarkGray\", \"DarkGrayLabels\", \"Imagery\", \"ImageryLabels\", \"ImageryTransportation\", \"ShadedRelief\", \"ShadedReliefLabels\", \"Terrain\" or \"TerrainLabels\"');\n }\n\n // merge passed options into the config options\n var tileOptions = L.Util.extend(config.options, options);\n\n // call the initialize method on L.TileLayer to set everything up\n L.TileLayer.prototype.initialize.call(this, config.urlTemplate, L.Util.setOptions(this, tileOptions));\n\n // if this basemap requires dynamic attribution set it up\n if(config.attributionUrl){\n this._getAttributionData(config.attributionUrl);\n }\n this._logo = new EsriLeaflet.Controls.Logo({\n position: this.options.logoPosition\n });\n },\n onAdd: function(map){\n if(!this.options.hideLogo && !map._hasEsriLogo){\n this._logo.addTo(map);\n map._hasEsriLogo = true;\n }\n\n // if(this.options.pane && EsriLeaflet.Support.pointerEvents){\n // this._initPane();\n // }\n\n L.TileLayer.prototype.onAdd.call(this, map);\n\n map.on('moveend', this._updateMapAttribution, this);\n },\n onRemove: function(map){\n // check to make sure the logo hasn't already been removed\n if(!map._hasEsriLogo && this._logo && this._logo._container){\n map.removeControl(this._logo);\n map._hasEsriLogo = false;\n }\n\n L.TileLayer.prototype.onRemove.call(this, map);\n\n map.off('moveend', this._updateMapAttribution, this);\n },\n getAttribution:function(){\n var attribution = '' + this.options.attribution + ''/* + logo*/;\n return attribution;\n },\n // _initPane: function(){\n // if(!this._map.getPane(this.options.pane)){\n // var pane = this._map.createPane(this.options.pane);\n // pane.style.pointerEvents = 'none';\n // pane.style.zIndex = 5;\n // }\n // },\n _getAttributionData: function(url){\n L.esri.Request.get.JSONP(url, {}, L.Util.bind(function(error, attributions){\n this._attributions = [];\n\n for (var c = 0; c < attributions.contributors.length; c++) {\n var contributor = attributions.contributors[c];\n for (var i = 0; i < contributor.coverageAreas.length; i++) {\n var coverageArea = contributor.coverageAreas[i];\n var southWest = new L.LatLng(coverageArea.bbox[0], coverageArea.bbox[1]);\n var northEast = new L.LatLng(coverageArea.bbox[2], coverageArea.bbox[3]);\n this._attributions.push({\n attribution: contributor.attribution,\n score: coverageArea.score,\n bounds: new L.LatLngBounds(southWest, northEast),\n minZoom: coverageArea.zoomMin,\n maxZoom: coverageArea.zoomMax\n });\n }\n }\n\n this._attributions.sort(function(a, b){\n return b.score - a.score;\n });\n\n this._updateMapAttribution();\n }, this));\n },\n _updateMapAttribution: function(){\n if(this._map && this._map.attributionControl && this._attributions){\n var newAttributions = '';\n var bounds = this._map.getBounds();\n var zoom = this._map.getZoom();\n\n for (var i = 0; i < this._attributions.length; i++) {\n var attribution = this._attributions[i];\n var text = attribution.attribution;\n if(!newAttributions.match(text) && bounds.intersects(attribution.bounds) && zoom >= attribution.minZoom && zoom <= attribution.maxZoom) {\n newAttributions += (', ' + text);\n }\n }\n newAttributions = newAttributions.substr(2);\n var attributionElement = this._map.attributionControl._container.querySelector('.esri-attributions');\n attributionElement.innerHTML = newAttributions;\n attributionElement.style.maxWidth = (this._map.getSize().x * 0.65) + 'px';\n this.fire('attributionupdated', {\n attribution: newAttributions\n });\n }\n }\n });\n\n EsriLeaflet.BasemapLayer = EsriLeaflet.Layers.BasemapLayer;\n\n EsriLeaflet.Layers.basemapLayer = function(key, options){\n return new EsriLeaflet.Layers.BasemapLayer(key, options);\n };\n\n EsriLeaflet.basemapLayer = function(key, options){\n return new EsriLeaflet.Layers.BasemapLayer(key, options);\n };\n\n})(EsriLeaflet);","EsriLeaflet.Controls.Logo = L.Control.extend({\n options: {\n position: 'bottomright',\n marginTop: 0,\n marginLeft: 0,\n marginBottom: 0,\n marginRight: 0\n },\n\n onAdd: function () {\n var div = L.DomUtil.create('div', 'esri-leaflet-logo');\n div.style.marginTop = this.options.marginTop;\n div.style.marginLeft = this.options.marginLeft;\n div.style.marginBottom = this.options.marginBottom;\n div.style.marginRight = this.options.marginRight;\n div.innerHTML = this._adjustLogo(this._map._size);\n\n this._map.on('resize', function(e){\n div.innerHTML = this._adjustLogo(e.newSize);\n }, this);\n\n return div;\n },\n\n _adjustLogo: function (mapSize) {\n if (mapSize.x <= 600 || mapSize.y <= 600){\n return '\"Powered';\n }\n else {\n return '\"Powered';\n }\n }\n\n});\n\nEsriLeaflet.Controls.logo = function(options){\n return new L.esri.Controls.Logo(options);\n};\n"]} \ No newline at end of file diff --git a/dist/builds/core/esri-leaflet-core-src.js b/dist/builds/core/esri-leaflet-core-src.js index a03517788..b174194cd 100644 --- a/dist/builds/core/esri-leaflet-core-src.js +++ b/dist/builds/core/esri-leaflet-core-src.js @@ -1,5 +1,5 @@ -/*! esri-leaflet - v1.0.2 - 2015-12-31 -* Copyright (c) 2015 Environmental Systems Research Institute, Inc. +/*! esri-leaflet - v1.0.3 - 2016-02-22 +* Copyright (c) 2016 Environmental Systems Research Institute, Inc. * Apache License*/ (function (factory) { //define an AMD module that relies on 'leaflet' @@ -17,7 +17,7 @@ } }(function (L) { var EsriLeaflet = { //jshint ignore:line - VERSION: '1.0.2', + VERSION: '1.0.3', Layers: {}, Services: {}, Controls: {}, diff --git a/dist/builds/core/esri-leaflet-core-src.js.map b/dist/builds/core/esri-leaflet-core-src.js.map index c10cf8d51..d5471fd90 100644 --- a/dist/builds/core/esri-leaflet-core-src.js.map +++ b/dist/builds/core/esri-leaflet-core-src.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../../src/EsriLeaflet.js","../../../src/Util.js","../../../src/Request.js","../../../src/Tasks/Task.js","../../../src/Services/Service.js"],"names":[],"mappings":"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","file":"esri-leaflet-core-src.js","sourcesContent":["var EsriLeaflet = { //jshint ignore:line\n VERSION: '1.0.2',\n Layers: {},\n Services: {},\n Controls: {},\n Tasks: {},\n Util: {},\n Support: {\n CORS: !!(window.XMLHttpRequest && 'withCredentials' in new XMLHttpRequest()),\n pointerEvents: document.documentElement.style.pointerEvents === ''\n }\n};\n\nif(typeof window !== 'undefined' && window.L){\n window.L.esri = EsriLeaflet;\n}\n","(function(EsriLeaflet){\n\n // normalize request animation frame\n var raf = window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.msRequestAnimationFrame ||\n function(cb) { return window.setTimeout(cb, 1000 / 60); };\n\n // shallow object clone for feature properties and attributes\n // from http://jsperf.com/cloning-an-object/2\n function clone(obj) {\n var target = {};\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n target[i] = obj[i];\n }\n }\n return target;\n }\n\n // checks if 2 x,y points are equal\n function pointsEqual(a, b) {\n for (var i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n\n // checks if the first and last points of a ring are equal and closes the ring\n function closeRing(coordinates) {\n if (!pointsEqual(coordinates[0], coordinates[coordinates.length - 1])) {\n coordinates.push(coordinates[0]);\n }\n return coordinates;\n }\n\n // determine if polygon ring coordinates are clockwise. clockwise signifies outer ring, counter-clockwise an inner ring\n // or hole. this logic was found at http://stackoverflow.com/questions/1165647/how-to-determine-if-a-list-of-polygon-\n // points-are-in-clockwise-order\n function ringIsClockwise(ringToTest) {\n var total = 0,i = 0;\n var rLength = ringToTest.length;\n var pt1 = ringToTest[i];\n var pt2;\n for (i; i < rLength - 1; i++) {\n pt2 = ringToTest[i + 1];\n total += (pt2[0] - pt1[0]) * (pt2[1] + pt1[1]);\n pt1 = pt2;\n }\n return (total >= 0);\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L504-L519\n function vertexIntersectsVertex(a1, a2, b1, b2) {\n var uaT = (b2[0] - b1[0]) * (a1[1] - b1[1]) - (b2[1] - b1[1]) * (a1[0] - b1[0]);\n var ubT = (a2[0] - a1[0]) * (a1[1] - b1[1]) - (a2[1] - a1[1]) * (a1[0] - b1[0]);\n var uB = (b2[1] - b1[1]) * (a2[0] - a1[0]) - (b2[0] - b1[0]) * (a2[1] - a1[1]);\n\n if ( uB !== 0 ) {\n var ua = uaT / uB;\n var ub = ubT / uB;\n\n if ( 0 <= ua && ua <= 1 && 0 <= ub && ub <= 1 ) {\n return true;\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L521-L531\n function arrayIntersectsArray(a, b) {\n for (var i = 0; i < a.length - 1; i++) {\n for (var j = 0; j < b.length - 1; j++) {\n if (vertexIntersectsVertex(a[i], a[i + 1], b[j], b[j + 1])) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L470-L480\n function coordinatesContainPoint(coordinates, point) {\n var contains = false;\n for(var i = -1, l = coordinates.length, j = l - 1; ++i < l; j = i) {\n if (((coordinates[i][1] <= point[1] && point[1] < coordinates[j][1]) ||\n (coordinates[j][1] <= point[1] && point[1] < coordinates[i][1])) &&\n (point[0] < (coordinates[j][0] - coordinates[i][0]) * (point[1] - coordinates[i][1]) / (coordinates[j][1] - coordinates[i][1]) + coordinates[i][0])) {\n contains = !contains;\n }\n }\n return contains;\n }\n\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L106-L113\n function coordinatesContainCoordinates(outer, inner){\n var intersects = arrayIntersectsArray(outer, inner);\n var contains = coordinatesContainPoint(outer, inner[0]);\n if(!intersects && contains){\n return true;\n }\n return false;\n }\n\n // do any polygons in this array contain any other polygons in this array?\n // used for checking for holes in arcgis rings\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L117-L172\n function convertRingsToGeoJSON(rings){\n var outerRings = [];\n var holes = [];\n var x; // iterator\n var outerRing; // current outer ring being evaluated\n var hole; // current hole being evaluated\n\n // for each ring\n for (var r = 0; r < rings.length; r++) {\n var ring = closeRing(rings[r].slice(0));\n if(ring.length < 4){\n continue;\n }\n // is this ring an outer ring? is it clockwise?\n if(ringIsClockwise(ring)){\n var polygon = [ ring ];\n outerRings.push(polygon); // push to outer rings\n } else {\n holes.push(ring); // counterclockwise push to holes\n }\n }\n\n var uncontainedHoles = [];\n\n // while there are holes left...\n while(holes.length){\n // pop a hole off out stack\n hole = holes.pop();\n\n // loop over all outer rings and see if they contain our hole.\n var contained = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(coordinatesContainCoordinates(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n contained = true;\n break;\n }\n }\n\n // ring is not contained in any outer ring\n // sometimes this happens https://github.com/Esri/esri-leaflet/issues/320\n if(!contained){\n uncontainedHoles.push(hole);\n }\n }\n\n // if we couldn't match any holes using contains we can try intersects...\n while(uncontainedHoles.length){\n // pop a hole off out stack\n hole = uncontainedHoles.pop();\n\n // loop over all outer rings and see if any intersect our hole.\n var intersects = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(arrayIntersectsArray(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n intersects = true;\n break;\n }\n }\n\n if(!intersects) {\n outerRings.push([hole.reverse()]);\n }\n }\n\n if(outerRings.length === 1){\n return {\n type: 'Polygon',\n coordinates: outerRings[0]\n };\n } else {\n return {\n type: 'MultiPolygon',\n coordinates: outerRings\n };\n }\n }\n\n // This function ensures that rings are oriented in the right directions\n // outer rings are clockwise, holes are counterclockwise\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function orientRings(poly){\n var output = [];\n var polygon = poly.slice(0);\n var outerRing = closeRing(polygon.shift().slice(0));\n if(outerRing.length >= 4){\n if(!ringIsClockwise(outerRing)){\n outerRing.reverse();\n }\n\n output.push(outerRing);\n\n for (var i = 0; i < polygon.length; i++) {\n var hole = closeRing(polygon[i].slice(0));\n if(hole.length >= 4){\n if(ringIsClockwise(hole)){\n hole.reverse();\n }\n output.push(hole);\n }\n }\n }\n\n return output;\n }\n\n // This function flattens holes in multipolygons to one array of polygons\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function flattenMultiPolygonRings(rings){\n var output = [];\n for (var i = 0; i < rings.length; i++) {\n var polygon = orientRings(rings[i]);\n for (var x = polygon.length - 1; x >= 0; x--) {\n var ring = polygon[x].slice(0);\n output.push(ring);\n }\n }\n return output;\n }\n\n // convert an extent (ArcGIS) to LatLngBounds (Leaflet)\n EsriLeaflet.Util.extentToBounds = function(extent){\n var sw = new L.LatLng(extent.ymin, extent.xmin);\n var ne = new L.LatLng(extent.ymax, extent.xmax);\n return new L.LatLngBounds(sw, ne);\n };\n\n // convert an LatLngBounds (Leaflet) to extent (ArcGIS)\n EsriLeaflet.Util.boundsToExtent = function(bounds) {\n bounds = L.latLngBounds(bounds);\n return {\n 'xmin': bounds.getSouthWest().lng,\n 'ymin': bounds.getSouthWest().lat,\n 'xmax': bounds.getNorthEast().lng,\n 'ymax': bounds.getNorthEast().lat,\n 'spatialReference': {\n 'wkid' : 4326\n }\n };\n };\n\n EsriLeaflet.Util.arcgisToGeojson = function (arcgis, idAttribute){\n var geojson = {};\n\n if(typeof arcgis.x === 'number' && typeof arcgis.y === 'number'){\n geojson.type = 'Point';\n geojson.coordinates = [arcgis.x, arcgis.y];\n }\n\n if(arcgis.points){\n geojson.type = 'MultiPoint';\n geojson.coordinates = arcgis.points.slice(0);\n }\n\n if(arcgis.paths) {\n if(arcgis.paths.length === 1){\n geojson.type = 'LineString';\n geojson.coordinates = arcgis.paths[0].slice(0);\n } else {\n geojson.type = 'MultiLineString';\n geojson.coordinates = arcgis.paths.slice(0);\n }\n }\n\n if(arcgis.rings) {\n geojson = convertRingsToGeoJSON(arcgis.rings.slice(0));\n }\n\n if(arcgis.geometry || arcgis.attributes) {\n geojson.type = 'Feature';\n geojson.geometry = (arcgis.geometry) ? EsriLeaflet.Util.arcgisToGeojson(arcgis.geometry) : null;\n geojson.properties = (arcgis.attributes) ? clone(arcgis.attributes) : null;\n if(arcgis.attributes) {\n geojson.id = arcgis.attributes[idAttribute] || arcgis.attributes.OBJECTID || arcgis.attributes.FID;\n }\n }\n\n return geojson;\n };\n\n // GeoJSON -> ArcGIS\n EsriLeaflet.Util.geojsonToArcGIS = function(geojson, idAttribute){\n idAttribute = idAttribute || 'OBJECTID';\n var spatialReference = { wkid: 4326 };\n var result = {};\n var i;\n\n switch(geojson.type){\n case 'Point':\n result.x = geojson.coordinates[0];\n result.y = geojson.coordinates[1];\n result.spatialReference = spatialReference;\n break;\n case 'MultiPoint':\n result.points = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'LineString':\n result.paths = [geojson.coordinates.slice(0)];\n result.spatialReference = spatialReference;\n break;\n case 'MultiLineString':\n result.paths = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'Polygon':\n result.rings = orientRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'MultiPolygon':\n result.rings = flattenMultiPolygonRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'Feature':\n if(geojson.geometry) {\n result.geometry = EsriLeaflet.Util.geojsonToArcGIS(geojson.geometry, idAttribute);\n }\n result.attributes = (geojson.properties) ? clone(geojson.properties) : {};\n if(geojson.id){\n result.attributes[idAttribute] = geojson.id;\n }\n break;\n case 'FeatureCollection':\n result = [];\n for (i = 0; i < geojson.features.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.features[i], idAttribute));\n }\n break;\n case 'GeometryCollection':\n result = [];\n for (i = 0; i < geojson.geometries.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.geometries[i], idAttribute));\n }\n break;\n }\n\n return result;\n };\n\n EsriLeaflet.Util.responseToFeatureCollection = function(response, idAttribute){\n var objectIdField;\n\n if(idAttribute){\n objectIdField = idAttribute;\n } else if(response.objectIdFieldName){\n objectIdField = response.objectIdFieldName;\n } else if(response.fields) {\n for (var j = 0; j <= response.fields.length - 1; j++) {\n if(response.fields[j].type === 'esriFieldTypeOID') {\n objectIdField = response.fields[j].name;\n break;\n }\n }\n } else {\n objectIdField = 'OBJECTID';\n }\n\n var featureCollection = {\n type: 'FeatureCollection',\n features: []\n };\n var features = response.features || response.results;\n if(features.length){\n for (var i = features.length - 1; i >= 0; i--) {\n featureCollection.features.push(EsriLeaflet.Util.arcgisToGeojson(features[i], objectIdField));\n }\n }\n\n return featureCollection;\n };\n\n // trim url whitespace and add a trailing slash if needed\n EsriLeaflet.Util.cleanUrl = function(url){\n //trim leading and trailing spaces, but not spaces inside the url\n url = url.replace(/^\\s+|\\s+$|\\A\\s+|\\s+\\z/g, '');\n\n //add a trailing slash to the url if the user omitted it\n if(url[url.length-1] !== '/'){\n url += '/';\n }\n\n return url;\n };\n\n EsriLeaflet.Util.isArcgisOnline = function(url){\n /* hosted feature services can emit geojson natively.\n our check for 'geojson' support will need to be revisted\n once the functionality makes its way to ArcGIS Server*/\n return (/\\.arcgis\\.com.*?FeatureServer/g).test(url);\n };\n\n EsriLeaflet.Util.geojsonTypeToArcGIS = function (geoJsonType) {\n var arcgisGeometryType;\n switch (geoJsonType) {\n case 'Point':\n arcgisGeometryType = 'esriGeometryPoint';\n break;\n case 'MultiPoint':\n arcgisGeometryType = 'esriGeometryMultipoint';\n break;\n case 'LineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'MultiLineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'Polygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n case 'MultiPolygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n }\n return arcgisGeometryType;\n };\n\n EsriLeaflet.Util.requestAnimationFrame = L.Util.bind(raf, window);\n\n EsriLeaflet.Util.warn = function (message) {\n if(console && console.warn) {\n console.warn(message);\n }\n };\n\n})(EsriLeaflet);","(function(EsriLeaflet){\n\n var callbacks = 0;\n\n window._EsriLeafletCallbacks = {};\n\n function serialize(params){\n var data = '';\n\n params.f = params.f || 'json';\n\n for (var key in params){\n if(params.hasOwnProperty(key)){\n var param = params[key];\n var type = Object.prototype.toString.call(param);\n var value;\n\n if(data.length){\n data += '&';\n }\n\n if (type === '[object Array]'){\n value = (Object.prototype.toString.call(param[0]) === '[object Object]') ? JSON.stringify(param) : param.join(',');\n } else if (type === '[object Object]') {\n value = JSON.stringify(param);\n } else if (type === '[object Date]'){\n value = param.valueOf();\n } else {\n value = param;\n }\n\n data += encodeURIComponent(key) + '=' + encodeURIComponent(value);\n }\n }\n\n return data;\n }\n\n function createRequest(callback, context){\n var httpRequest = new XMLHttpRequest();\n\n httpRequest.onerror = function(e) {\n httpRequest.onreadystatechange = L.Util.falseFn;\n\n callback.call(context, {\n error: {\n code: 500,\n message: 'XMLHttpRequest error'\n }\n }, null);\n };\n\n httpRequest.onreadystatechange = function(){\n var response;\n var error;\n\n if (httpRequest.readyState === 4) {\n try {\n response = JSON.parse(httpRequest.responseText);\n } catch(e) {\n response = null;\n error = {\n code: 500,\n message: 'Could not parse response as JSON. This could also be caused by a CORS or XMLHttpRequest error.'\n };\n }\n\n if (!error && response.error) {\n error = response.error;\n response = null;\n }\n\n httpRequest.onerror = L.Util.falseFn;\n\n callback.call(context, error, response);\n }\n };\n\n return httpRequest;\n }\n\n // AJAX handlers for CORS (modern browsers) or JSONP (older browsers)\n EsriLeaflet.Request = {\n request: function(url, params, callback, context){\n var paramString = serialize(params);\n var httpRequest = createRequest(callback, context);\n var requestLength = (url + '?' + paramString).length;\n\n // request is less then 2000 characters and the browser supports CORS, make GET request with XMLHttpRequest\n if(requestLength <= 2000 && L.esri.Support.CORS){\n httpRequest.open('GET', url + '?' + paramString);\n httpRequest.send(null);\n\n // request is less more then 2000 characters and the browser supports CORS, make POST request with XMLHttpRequest\n } else if (requestLength > 2000 && L.esri.Support.CORS){\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(paramString);\n\n // request is less more then 2000 characters and the browser does not support CORS, make a JSONP request\n } else if(requestLength <= 2000 && !L.esri.Support.CORS){\n return L.esri.Request.get.JSONP(url, params, callback, context);\n\n // request is longer then 2000 characters and the browser does not support CORS, log a warning\n } else {\n EsriLeaflet.Util.warn('a request to ' + url + ' was longer then 2000 characters and this browser cannot make a cross-domain post request. Please use a proxy http://esri.github.io/esri-leaflet/api-reference/request.html');\n return;\n }\n\n return httpRequest;\n },\n\n post: {\n XMLHTTP: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(serialize(params));\n\n return httpRequest;\n }\n },\n\n get: {\n CORS: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n\n httpRequest.open('GET', url + '?' + serialize(params), true);\n httpRequest.send(null);\n\n return httpRequest;\n },\n JSONP: function(url, params, callback, context){\n var callbackId = 'c' + callbacks;\n\n params.callback = 'window._EsriLeafletCallbacks.' + callbackId;\n\n var script = L.DomUtil.create('script', null, document.body);\n script.type = 'text/javascript';\n script.src = url + '?' + serialize(params);\n script.id = callbackId;\n\n window._EsriLeafletCallbacks[callbackId] = function(response){\n if(window._EsriLeafletCallbacks[callbackId] !== true){\n var error;\n var responseType = Object.prototype.toString.call(response);\n\n if(!(responseType === '[object Object]' || responseType === '[object Array]')){\n error = {\n error: {\n code: 500,\n message: 'Expected array or object as JSONP response'\n }\n };\n response = null;\n }\n\n if (!error && response.error) {\n error = response;\n response = null;\n }\n\n callback.call(context, error, response);\n window._EsriLeafletCallbacks[callbackId] = true;\n }\n };\n\n callbacks++;\n\n return {\n id: callbackId,\n url: script.src,\n abort: function(){\n window._EsriLeafletCallbacks._callback[callbackId]({\n code: 0,\n message: 'Request aborted.'\n });\n }\n };\n }\n }\n };\n\n // choose the correct AJAX handler depending on CORS support\n EsriLeaflet.get = (EsriLeaflet.Support.CORS) ? EsriLeaflet.Request.get.CORS : EsriLeaflet.Request.get.JSONP;\n\n // always use XMLHttpRequest for posts\n EsriLeaflet.post = EsriLeaflet.Request.post.XMLHTTP;\n\n // expose a common request method the uses GET\\POST based on request length\n EsriLeaflet.request = EsriLeaflet.Request.request;\n\n})(EsriLeaflet);","EsriLeaflet.Tasks.Task = L.Class.extend({\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n //Generate a method for each methodName:paramName in the setters for this task.\n generateSetter: function(param, context){\n return L.Util.bind(function(value){\n this.params[param] = value;\n return this;\n }, context);\n },\n\n initialize: function(endpoint){\n // endpoint can be either a url (and options) for an ArcGIS Rest Service or an instance of EsriLeaflet.Service\n if(endpoint.request && endpoint.options){\n this._service = endpoint;\n L.Util.setOptions(this, endpoint.options);\n } else {\n L.Util.setOptions(this, endpoint);\n this.options.url = L.esri.Util.cleanUrl(endpoint.url);\n }\n\n // clone default params into this object\n this.params = L.Util.extend({}, this.params || {});\n\n // generate setter methods based on the setters object implimented a child class\n if(this.setters){\n for (var setter in this.setters){\n var param = this.setters[setter];\n this[setter] = this.generateSetter(param, this);\n }\n }\n },\n\n token: function(token){\n if(this._service){\n this._service.authenticate(token);\n } else {\n this.params.token = token;\n }\n return this;\n },\n\n request: function(callback, context){\n if(this._service){\n return this._service.request(this.path, this.params, callback, context);\n } else {\n return this._request('request', this.path, this.params, callback, context);\n }\n },\n\n _request: function(method, path, params, callback, context){\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, callback, context);\n } else{\n return EsriLeaflet[method](url, params, callback, context);\n }\n }\n});","EsriLeaflet.Services.Service = L.Class.extend({\n\n includes: L.Mixin.Events,\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n initialize: function (options) {\n options = options || {};\n this._requestQueue = [];\n this._authenticating = false;\n L.Util.setOptions(this, options);\n this.options.url = EsriLeaflet.Util.cleanUrl(this.options.url);\n },\n\n get: function (path, params, callback, context) {\n return this._request('get', path, params, callback, context);\n },\n\n post: function (path, params, callback, context) {\n return this._request('post', path, params, callback, context);\n },\n\n request: function (path, params, callback, context) {\n return this._request('request', path, params, callback, context);\n },\n\n metadata: function (callback, context) {\n return this._request('get', '', {}, callback, context);\n },\n\n authenticate: function(token){\n this._authenticating = false;\n this.options.token = token;\n this._runQueue();\n return this;\n },\n\n _request: function(method, path, params, callback, context){\n this.fire('requeststart', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n\n var wrappedCallback = this._createServiceCallback(method, path, params, callback, context);\n\n if (this.options.token) {\n params.token = this.options.token;\n }\n\n if (this._authenticating) {\n this._requestQueue.push([method, path, params, callback, context]);\n return;\n } else {\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, wrappedCallback);\n } else {\n return EsriLeaflet[method](url, params, wrappedCallback);\n }\n }\n },\n\n _createServiceCallback: function(method, path, params, callback, context){\n return L.Util.bind(function(error, response){\n\n if (error && (error.code === 499 || error.code === 498)) {\n this._authenticating = true;\n\n this._requestQueue.push([method, path, params, callback, context]);\n\n // fire an event for users to handle and re-authenticate\n this.fire('authenticationrequired', {\n authenticate: L.Util.bind(this.authenticate, this)\n });\n\n // if the user has access to a callback they can handle the auth error\n error.authenticate = L.Util.bind(this.authenticate, this);\n }\n\n callback.call(context, error, response);\n\n if(error) {\n this.fire('requesterror', {\n url: this.options.url + path,\n params: params,\n message: error.message,\n code: error.code,\n method: method\n });\n } else {\n this.fire('requestsuccess', {\n url: this.options.url + path,\n params: params,\n response: response,\n method: method\n });\n }\n\n this.fire('requestend', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n }, this);\n },\n\n _runQueue: function(){\n for (var i = this._requestQueue.length - 1; i >= 0; i--) {\n var request = this._requestQueue[i];\n var method = request.shift();\n this[method].apply(this, request);\n }\n this._requestQueue = [];\n }\n\n});\n\nEsriLeaflet.Services.service = function(params){\n return new EsriLeaflet.Services.Service(params);\n};\n"]} \ No newline at end of file +{"version":3,"sources":["../../../src/EsriLeaflet.js","../../../src/Util.js","../../../src/Request.js","../../../src/Tasks/Task.js","../../../src/Services/Service.js"],"names":[],"mappings":"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","file":"esri-leaflet-core-src.js","sourcesContent":["var EsriLeaflet = { //jshint ignore:line\n VERSION: '1.0.3',\n Layers: {},\n Services: {},\n Controls: {},\n Tasks: {},\n Util: {},\n Support: {\n CORS: !!(window.XMLHttpRequest && 'withCredentials' in new XMLHttpRequest()),\n pointerEvents: document.documentElement.style.pointerEvents === ''\n }\n};\n\nif(typeof window !== 'undefined' && window.L){\n window.L.esri = EsriLeaflet;\n}\n","(function(EsriLeaflet){\n\n // normalize request animation frame\n var raf = window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.msRequestAnimationFrame ||\n function(cb) { return window.setTimeout(cb, 1000 / 60); };\n\n // shallow object clone for feature properties and attributes\n // from http://jsperf.com/cloning-an-object/2\n function clone(obj) {\n var target = {};\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n target[i] = obj[i];\n }\n }\n return target;\n }\n\n // checks if 2 x,y points are equal\n function pointsEqual(a, b) {\n for (var i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n\n // checks if the first and last points of a ring are equal and closes the ring\n function closeRing(coordinates) {\n if (!pointsEqual(coordinates[0], coordinates[coordinates.length - 1])) {\n coordinates.push(coordinates[0]);\n }\n return coordinates;\n }\n\n // determine if polygon ring coordinates are clockwise. clockwise signifies outer ring, counter-clockwise an inner ring\n // or hole. this logic was found at http://stackoverflow.com/questions/1165647/how-to-determine-if-a-list-of-polygon-\n // points-are-in-clockwise-order\n function ringIsClockwise(ringToTest) {\n var total = 0,i = 0;\n var rLength = ringToTest.length;\n var pt1 = ringToTest[i];\n var pt2;\n for (i; i < rLength - 1; i++) {\n pt2 = ringToTest[i + 1];\n total += (pt2[0] - pt1[0]) * (pt2[1] + pt1[1]);\n pt1 = pt2;\n }\n return (total >= 0);\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L504-L519\n function vertexIntersectsVertex(a1, a2, b1, b2) {\n var uaT = (b2[0] - b1[0]) * (a1[1] - b1[1]) - (b2[1] - b1[1]) * (a1[0] - b1[0]);\n var ubT = (a2[0] - a1[0]) * (a1[1] - b1[1]) - (a2[1] - a1[1]) * (a1[0] - b1[0]);\n var uB = (b2[1] - b1[1]) * (a2[0] - a1[0]) - (b2[0] - b1[0]) * (a2[1] - a1[1]);\n\n if ( uB !== 0 ) {\n var ua = uaT / uB;\n var ub = ubT / uB;\n\n if ( 0 <= ua && ua <= 1 && 0 <= ub && ub <= 1 ) {\n return true;\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L521-L531\n function arrayIntersectsArray(a, b) {\n for (var i = 0; i < a.length - 1; i++) {\n for (var j = 0; j < b.length - 1; j++) {\n if (vertexIntersectsVertex(a[i], a[i + 1], b[j], b[j + 1])) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L470-L480\n function coordinatesContainPoint(coordinates, point) {\n var contains = false;\n for(var i = -1, l = coordinates.length, j = l - 1; ++i < l; j = i) {\n if (((coordinates[i][1] <= point[1] && point[1] < coordinates[j][1]) ||\n (coordinates[j][1] <= point[1] && point[1] < coordinates[i][1])) &&\n (point[0] < (coordinates[j][0] - coordinates[i][0]) * (point[1] - coordinates[i][1]) / (coordinates[j][1] - coordinates[i][1]) + coordinates[i][0])) {\n contains = !contains;\n }\n }\n return contains;\n }\n\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L106-L113\n function coordinatesContainCoordinates(outer, inner){\n var intersects = arrayIntersectsArray(outer, inner);\n var contains = coordinatesContainPoint(outer, inner[0]);\n if(!intersects && contains){\n return true;\n }\n return false;\n }\n\n // do any polygons in this array contain any other polygons in this array?\n // used for checking for holes in arcgis rings\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L117-L172\n function convertRingsToGeoJSON(rings){\n var outerRings = [];\n var holes = [];\n var x; // iterator\n var outerRing; // current outer ring being evaluated\n var hole; // current hole being evaluated\n\n // for each ring\n for (var r = 0; r < rings.length; r++) {\n var ring = closeRing(rings[r].slice(0));\n if(ring.length < 4){\n continue;\n }\n // is this ring an outer ring? is it clockwise?\n if(ringIsClockwise(ring)){\n var polygon = [ ring ];\n outerRings.push(polygon); // push to outer rings\n } else {\n holes.push(ring); // counterclockwise push to holes\n }\n }\n\n var uncontainedHoles = [];\n\n // while there are holes left...\n while(holes.length){\n // pop a hole off out stack\n hole = holes.pop();\n\n // loop over all outer rings and see if they contain our hole.\n var contained = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(coordinatesContainCoordinates(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n contained = true;\n break;\n }\n }\n\n // ring is not contained in any outer ring\n // sometimes this happens https://github.com/Esri/esri-leaflet/issues/320\n if(!contained){\n uncontainedHoles.push(hole);\n }\n }\n\n // if we couldn't match any holes using contains we can try intersects...\n while(uncontainedHoles.length){\n // pop a hole off out stack\n hole = uncontainedHoles.pop();\n\n // loop over all outer rings and see if any intersect our hole.\n var intersects = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(arrayIntersectsArray(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n intersects = true;\n break;\n }\n }\n\n if(!intersects) {\n outerRings.push([hole.reverse()]);\n }\n }\n\n if(outerRings.length === 1){\n return {\n type: 'Polygon',\n coordinates: outerRings[0]\n };\n } else {\n return {\n type: 'MultiPolygon',\n coordinates: outerRings\n };\n }\n }\n\n // This function ensures that rings are oriented in the right directions\n // outer rings are clockwise, holes are counterclockwise\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function orientRings(poly){\n var output = [];\n var polygon = poly.slice(0);\n var outerRing = closeRing(polygon.shift().slice(0));\n if(outerRing.length >= 4){\n if(!ringIsClockwise(outerRing)){\n outerRing.reverse();\n }\n\n output.push(outerRing);\n\n for (var i = 0; i < polygon.length; i++) {\n var hole = closeRing(polygon[i].slice(0));\n if(hole.length >= 4){\n if(ringIsClockwise(hole)){\n hole.reverse();\n }\n output.push(hole);\n }\n }\n }\n\n return output;\n }\n\n // This function flattens holes in multipolygons to one array of polygons\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function flattenMultiPolygonRings(rings){\n var output = [];\n for (var i = 0; i < rings.length; i++) {\n var polygon = orientRings(rings[i]);\n for (var x = polygon.length - 1; x >= 0; x--) {\n var ring = polygon[x].slice(0);\n output.push(ring);\n }\n }\n return output;\n }\n\n // convert an extent (ArcGIS) to LatLngBounds (Leaflet)\n EsriLeaflet.Util.extentToBounds = function(extent){\n var sw = new L.LatLng(extent.ymin, extent.xmin);\n var ne = new L.LatLng(extent.ymax, extent.xmax);\n return new L.LatLngBounds(sw, ne);\n };\n\n // convert an LatLngBounds (Leaflet) to extent (ArcGIS)\n EsriLeaflet.Util.boundsToExtent = function(bounds) {\n bounds = L.latLngBounds(bounds);\n return {\n 'xmin': bounds.getSouthWest().lng,\n 'ymin': bounds.getSouthWest().lat,\n 'xmax': bounds.getNorthEast().lng,\n 'ymax': bounds.getNorthEast().lat,\n 'spatialReference': {\n 'wkid' : 4326\n }\n };\n };\n\n EsriLeaflet.Util.arcgisToGeojson = function (arcgis, idAttribute){\n var geojson = {};\n\n if(typeof arcgis.x === 'number' && typeof arcgis.y === 'number'){\n geojson.type = 'Point';\n geojson.coordinates = [arcgis.x, arcgis.y];\n }\n\n if(arcgis.points){\n geojson.type = 'MultiPoint';\n geojson.coordinates = arcgis.points.slice(0);\n }\n\n if(arcgis.paths) {\n if(arcgis.paths.length === 1){\n geojson.type = 'LineString';\n geojson.coordinates = arcgis.paths[0].slice(0);\n } else {\n geojson.type = 'MultiLineString';\n geojson.coordinates = arcgis.paths.slice(0);\n }\n }\n\n if(arcgis.rings) {\n geojson = convertRingsToGeoJSON(arcgis.rings.slice(0));\n }\n\n if(arcgis.geometry || arcgis.attributes) {\n geojson.type = 'Feature';\n geojson.geometry = (arcgis.geometry) ? EsriLeaflet.Util.arcgisToGeojson(arcgis.geometry) : null;\n geojson.properties = (arcgis.attributes) ? clone(arcgis.attributes) : null;\n if(arcgis.attributes) {\n geojson.id = arcgis.attributes[idAttribute] || arcgis.attributes.OBJECTID || arcgis.attributes.FID;\n }\n }\n\n return geojson;\n };\n\n // GeoJSON -> ArcGIS\n EsriLeaflet.Util.geojsonToArcGIS = function(geojson, idAttribute){\n idAttribute = idAttribute || 'OBJECTID';\n var spatialReference = { wkid: 4326 };\n var result = {};\n var i;\n\n switch(geojson.type){\n case 'Point':\n result.x = geojson.coordinates[0];\n result.y = geojson.coordinates[1];\n result.spatialReference = spatialReference;\n break;\n case 'MultiPoint':\n result.points = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'LineString':\n result.paths = [geojson.coordinates.slice(0)];\n result.spatialReference = spatialReference;\n break;\n case 'MultiLineString':\n result.paths = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'Polygon':\n result.rings = orientRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'MultiPolygon':\n result.rings = flattenMultiPolygonRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'Feature':\n if(geojson.geometry) {\n result.geometry = EsriLeaflet.Util.geojsonToArcGIS(geojson.geometry, idAttribute);\n }\n result.attributes = (geojson.properties) ? clone(geojson.properties) : {};\n if(geojson.id){\n result.attributes[idAttribute] = geojson.id;\n }\n break;\n case 'FeatureCollection':\n result = [];\n for (i = 0; i < geojson.features.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.features[i], idAttribute));\n }\n break;\n case 'GeometryCollection':\n result = [];\n for (i = 0; i < geojson.geometries.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.geometries[i], idAttribute));\n }\n break;\n }\n\n return result;\n };\n\n EsriLeaflet.Util.responseToFeatureCollection = function(response, idAttribute){\n var objectIdField;\n\n if(idAttribute){\n objectIdField = idAttribute;\n } else if(response.objectIdFieldName){\n objectIdField = response.objectIdFieldName;\n } else if(response.fields) {\n for (var j = 0; j <= response.fields.length - 1; j++) {\n if(response.fields[j].type === 'esriFieldTypeOID') {\n objectIdField = response.fields[j].name;\n break;\n }\n }\n } else {\n objectIdField = 'OBJECTID';\n }\n\n var featureCollection = {\n type: 'FeatureCollection',\n features: []\n };\n var features = response.features || response.results;\n if(features.length){\n for (var i = features.length - 1; i >= 0; i--) {\n featureCollection.features.push(EsriLeaflet.Util.arcgisToGeojson(features[i], objectIdField));\n }\n }\n\n return featureCollection;\n };\n\n // trim url whitespace and add a trailing slash if needed\n EsriLeaflet.Util.cleanUrl = function(url){\n //trim leading and trailing spaces, but not spaces inside the url\n url = url.replace(/^\\s+|\\s+$|\\A\\s+|\\s+\\z/g, '');\n\n //add a trailing slash to the url if the user omitted it\n if(url[url.length-1] !== '/'){\n url += '/';\n }\n\n return url;\n };\n\n EsriLeaflet.Util.isArcgisOnline = function(url){\n /* hosted feature services can emit geojson natively.\n our check for 'geojson' support will need to be revisted\n once the functionality makes its way to ArcGIS Server*/\n return (/\\.arcgis\\.com.*?FeatureServer/g).test(url);\n };\n\n EsriLeaflet.Util.geojsonTypeToArcGIS = function (geoJsonType) {\n var arcgisGeometryType;\n switch (geoJsonType) {\n case 'Point':\n arcgisGeometryType = 'esriGeometryPoint';\n break;\n case 'MultiPoint':\n arcgisGeometryType = 'esriGeometryMultipoint';\n break;\n case 'LineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'MultiLineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'Polygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n case 'MultiPolygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n }\n return arcgisGeometryType;\n };\n\n EsriLeaflet.Util.requestAnimationFrame = L.Util.bind(raf, window);\n\n EsriLeaflet.Util.warn = function (message) {\n if(console && console.warn) {\n console.warn(message);\n }\n };\n\n})(EsriLeaflet);","(function(EsriLeaflet){\n\n var callbacks = 0;\n\n window._EsriLeafletCallbacks = {};\n\n function serialize(params){\n var data = '';\n\n params.f = params.f || 'json';\n\n for (var key in params){\n if(params.hasOwnProperty(key)){\n var param = params[key];\n var type = Object.prototype.toString.call(param);\n var value;\n\n if(data.length){\n data += '&';\n }\n\n if (type === '[object Array]'){\n value = (Object.prototype.toString.call(param[0]) === '[object Object]') ? JSON.stringify(param) : param.join(',');\n } else if (type === '[object Object]') {\n value = JSON.stringify(param);\n } else if (type === '[object Date]'){\n value = param.valueOf();\n } else {\n value = param;\n }\n\n data += encodeURIComponent(key) + '=' + encodeURIComponent(value);\n }\n }\n\n return data;\n }\n\n function createRequest(callback, context){\n var httpRequest = new XMLHttpRequest();\n\n httpRequest.onerror = function(e) {\n httpRequest.onreadystatechange = L.Util.falseFn;\n\n callback.call(context, {\n error: {\n code: 500,\n message: 'XMLHttpRequest error'\n }\n }, null);\n };\n\n httpRequest.onreadystatechange = function(){\n var response;\n var error;\n\n if (httpRequest.readyState === 4) {\n try {\n response = JSON.parse(httpRequest.responseText);\n } catch(e) {\n response = null;\n error = {\n code: 500,\n message: 'Could not parse response as JSON. This could also be caused by a CORS or XMLHttpRequest error.'\n };\n }\n\n if (!error && response.error) {\n error = response.error;\n response = null;\n }\n\n httpRequest.onerror = L.Util.falseFn;\n\n callback.call(context, error, response);\n }\n };\n\n return httpRequest;\n }\n\n // AJAX handlers for CORS (modern browsers) or JSONP (older browsers)\n EsriLeaflet.Request = {\n request: function(url, params, callback, context){\n var paramString = serialize(params);\n var httpRequest = createRequest(callback, context);\n var requestLength = (url + '?' + paramString).length;\n\n // request is less then 2000 characters and the browser supports CORS, make GET request with XMLHttpRequest\n if(requestLength <= 2000 && L.esri.Support.CORS){\n httpRequest.open('GET', url + '?' + paramString);\n httpRequest.send(null);\n\n // request is less more then 2000 characters and the browser supports CORS, make POST request with XMLHttpRequest\n } else if (requestLength > 2000 && L.esri.Support.CORS){\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(paramString);\n\n // request is less more then 2000 characters and the browser does not support CORS, make a JSONP request\n } else if(requestLength <= 2000 && !L.esri.Support.CORS){\n return L.esri.Request.get.JSONP(url, params, callback, context);\n\n // request is longer then 2000 characters and the browser does not support CORS, log a warning\n } else {\n EsriLeaflet.Util.warn('a request to ' + url + ' was longer then 2000 characters and this browser cannot make a cross-domain post request. Please use a proxy http://esri.github.io/esri-leaflet/api-reference/request.html');\n return;\n }\n\n return httpRequest;\n },\n\n post: {\n XMLHTTP: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(serialize(params));\n\n return httpRequest;\n }\n },\n\n get: {\n CORS: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n\n httpRequest.open('GET', url + '?' + serialize(params), true);\n httpRequest.send(null);\n\n return httpRequest;\n },\n JSONP: function(url, params, callback, context){\n var callbackId = 'c' + callbacks;\n\n params.callback = 'window._EsriLeafletCallbacks.' + callbackId;\n\n var script = L.DomUtil.create('script', null, document.body);\n script.type = 'text/javascript';\n script.src = url + '?' + serialize(params);\n script.id = callbackId;\n\n window._EsriLeafletCallbacks[callbackId] = function(response){\n if(window._EsriLeafletCallbacks[callbackId] !== true){\n var error;\n var responseType = Object.prototype.toString.call(response);\n\n if(!(responseType === '[object Object]' || responseType === '[object Array]')){\n error = {\n error: {\n code: 500,\n message: 'Expected array or object as JSONP response'\n }\n };\n response = null;\n }\n\n if (!error && response.error) {\n error = response;\n response = null;\n }\n\n callback.call(context, error, response);\n window._EsriLeafletCallbacks[callbackId] = true;\n }\n };\n\n callbacks++;\n\n return {\n id: callbackId,\n url: script.src,\n abort: function(){\n window._EsriLeafletCallbacks._callback[callbackId]({\n code: 0,\n message: 'Request aborted.'\n });\n }\n };\n }\n }\n };\n\n // choose the correct AJAX handler depending on CORS support\n EsriLeaflet.get = (EsriLeaflet.Support.CORS) ? EsriLeaflet.Request.get.CORS : EsriLeaflet.Request.get.JSONP;\n\n // always use XMLHttpRequest for posts\n EsriLeaflet.post = EsriLeaflet.Request.post.XMLHTTP;\n\n // expose a common request method the uses GET\\POST based on request length\n EsriLeaflet.request = EsriLeaflet.Request.request;\n\n})(EsriLeaflet);","EsriLeaflet.Tasks.Task = L.Class.extend({\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n //Generate a method for each methodName:paramName in the setters for this task.\n generateSetter: function(param, context){\n return L.Util.bind(function(value){\n this.params[param] = value;\n return this;\n }, context);\n },\n\n initialize: function(endpoint){\n // endpoint can be either a url (and options) for an ArcGIS Rest Service or an instance of EsriLeaflet.Service\n if(endpoint.request && endpoint.options){\n this._service = endpoint;\n L.Util.setOptions(this, endpoint.options);\n } else {\n L.Util.setOptions(this, endpoint);\n this.options.url = L.esri.Util.cleanUrl(endpoint.url);\n }\n\n // clone default params into this object\n this.params = L.Util.extend({}, this.params || {});\n\n // generate setter methods based on the setters object implimented a child class\n if(this.setters){\n for (var setter in this.setters){\n var param = this.setters[setter];\n this[setter] = this.generateSetter(param, this);\n }\n }\n },\n\n token: function(token){\n if(this._service){\n this._service.authenticate(token);\n } else {\n this.params.token = token;\n }\n return this;\n },\n\n request: function(callback, context){\n if(this._service){\n return this._service.request(this.path, this.params, callback, context);\n } else {\n return this._request('request', this.path, this.params, callback, context);\n }\n },\n\n _request: function(method, path, params, callback, context){\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, callback, context);\n } else{\n return EsriLeaflet[method](url, params, callback, context);\n }\n }\n});","EsriLeaflet.Services.Service = L.Class.extend({\n\n includes: L.Mixin.Events,\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n initialize: function (options) {\n options = options || {};\n this._requestQueue = [];\n this._authenticating = false;\n L.Util.setOptions(this, options);\n this.options.url = EsriLeaflet.Util.cleanUrl(this.options.url);\n },\n\n get: function (path, params, callback, context) {\n return this._request('get', path, params, callback, context);\n },\n\n post: function (path, params, callback, context) {\n return this._request('post', path, params, callback, context);\n },\n\n request: function (path, params, callback, context) {\n return this._request('request', path, params, callback, context);\n },\n\n metadata: function (callback, context) {\n return this._request('get', '', {}, callback, context);\n },\n\n authenticate: function(token){\n this._authenticating = false;\n this.options.token = token;\n this._runQueue();\n return this;\n },\n\n _request: function(method, path, params, callback, context){\n this.fire('requeststart', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n\n var wrappedCallback = this._createServiceCallback(method, path, params, callback, context);\n\n if (this.options.token) {\n params.token = this.options.token;\n }\n\n if (this._authenticating) {\n this._requestQueue.push([method, path, params, callback, context]);\n return;\n } else {\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, wrappedCallback);\n } else {\n return EsriLeaflet[method](url, params, wrappedCallback);\n }\n }\n },\n\n _createServiceCallback: function(method, path, params, callback, context){\n return L.Util.bind(function(error, response){\n\n if (error && (error.code === 499 || error.code === 498)) {\n this._authenticating = true;\n\n this._requestQueue.push([method, path, params, callback, context]);\n\n // fire an event for users to handle and re-authenticate\n this.fire('authenticationrequired', {\n authenticate: L.Util.bind(this.authenticate, this)\n });\n\n // if the user has access to a callback they can handle the auth error\n error.authenticate = L.Util.bind(this.authenticate, this);\n }\n\n callback.call(context, error, response);\n\n if(error) {\n this.fire('requesterror', {\n url: this.options.url + path,\n params: params,\n message: error.message,\n code: error.code,\n method: method\n });\n } else {\n this.fire('requestsuccess', {\n url: this.options.url + path,\n params: params,\n response: response,\n method: method\n });\n }\n\n this.fire('requestend', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n }, this);\n },\n\n _runQueue: function(){\n for (var i = this._requestQueue.length - 1; i >= 0; i--) {\n var request = this._requestQueue[i];\n var method = request.shift();\n this[method].apply(this, request);\n }\n this._requestQueue = [];\n }\n\n});\n\nEsriLeaflet.Services.service = function(params){\n return new EsriLeaflet.Services.Service(params);\n};\n"]} \ No newline at end of file diff --git a/dist/builds/core/esri-leaflet-core.js b/dist/builds/core/esri-leaflet-core.js index 21664d8f0..8f42197fd 100644 --- a/dist/builds/core/esri-leaflet-core.js +++ b/dist/builds/core/esri-leaflet-core.js @@ -1,5 +1,5 @@ -/*! esri-leaflet - v1.0.2 - 2015-12-31 -* Copyright (c) 2015 Environmental Systems Research Institute, Inc. +/*! esri-leaflet - v1.0.3 - 2016-02-22 +* Copyright (c) 2016 Environmental Systems Research Institute, Inc. * Apache License*/ (function (factory) { //define an AMD module that relies on 'leaflet' @@ -17,7 +17,7 @@ } }(function (L) { -var EsriLeaflet={VERSION:"1.0.2",Layers:{},Services:{},Controls:{},Tasks:{},Util:{},Support:{CORS:!!(window.XMLHttpRequest&&"withCredentials"in new XMLHttpRequest),pointerEvents:""===document.documentElement.style.pointerEvents}};"undefined"!=typeof window&&window.L&&(window.L.esri=EsriLeaflet),function(a){function b(a){var b={};for(var c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);return b}function c(a,b){for(var c=0;cd;d++)b=a[d+1],c+=(b[0]-f[0])*(b[1]+f[1]),f=b;return c>=0}function f(a,b,c,d){var e=(d[0]-c[0])*(a[1]-c[1])-(d[1]-c[1])*(a[0]-c[0]),f=(b[0]-a[0])*(a[1]-c[1])-(b[1]-a[1])*(a[0]-c[0]),g=(d[1]-c[1])*(b[0]-a[0])-(d[0]-c[0])*(b[1]-a[1]);if(0!==g){var h=e/g,i=f/g;if(h>=0&&1>=h&&i>=0&&1>=i)return!0}return!1}function g(a,b){for(var c=0;c=0;b--)if(c=h[b][0],i(c,f)){h[b].push(f),o=!0;break}o||n.push(f)}for(;n.length;){f=n.pop();var p=!1;for(b=h.length-1;b>=0;b--)if(c=h[b][0],g(c,f)){h[b].push(f),p=!0;break}p||h.push([f.reverse()])}return 1===h.length?{type:"Polygon",coordinates:h[0]}:{type:"MultiPolygon",coordinates:h}}function k(a){var b=[],c=a.slice(0),f=d(c.shift().slice(0));if(f.length>=4){e(f)||f.reverse(),b.push(f);for(var g=0;g=4&&(e(h)&&h.reverse(),b.push(h))}}return b}function l(a){for(var b=[],c=0;c=0;e--){var f=d[e].slice(0);b.push(f)}return b}var m=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.msRequestAnimationFrame||function(a){return window.setTimeout(a,1e3/60)};a.Util.extentToBounds=function(a){var b=new L.LatLng(a.ymin,a.xmin),c=new L.LatLng(a.ymax,a.xmax);return new L.LatLngBounds(b,c)},a.Util.boundsToExtent=function(a){return a=L.latLngBounds(a),{xmin:a.getSouthWest().lng,ymin:a.getSouthWest().lat,xmax:a.getNorthEast().lng,ymax:a.getNorthEast().lat,spatialReference:{wkid:4326}}},a.Util.arcgisToGeojson=function(c,d){var e={};return"number"==typeof c.x&&"number"==typeof c.y&&(e.type="Point",e.coordinates=[c.x,c.y]),c.points&&(e.type="MultiPoint",e.coordinates=c.points.slice(0)),c.paths&&(1===c.paths.length?(e.type="LineString",e.coordinates=c.paths[0].slice(0)):(e.type="MultiLineString",e.coordinates=c.paths.slice(0))),c.rings&&(e=j(c.rings.slice(0))),(c.geometry||c.attributes)&&(e.type="Feature",e.geometry=c.geometry?a.Util.arcgisToGeojson(c.geometry):null,e.properties=c.attributes?b(c.attributes):null,c.attributes&&(e.id=c.attributes[d]||c.attributes.OBJECTID||c.attributes.FID)),e},a.Util.geojsonToArcGIS=function(c,d){d=d||"OBJECTID";var e,f={wkid:4326},g={};switch(c.type){case"Point":g.x=c.coordinates[0],g.y=c.coordinates[1],g.spatialReference=f;break;case"MultiPoint":g.points=c.coordinates.slice(0),g.spatialReference=f;break;case"LineString":g.paths=[c.coordinates.slice(0)],g.spatialReference=f;break;case"MultiLineString":g.paths=c.coordinates.slice(0),g.spatialReference=f;break;case"Polygon":g.rings=k(c.coordinates.slice(0)),g.spatialReference=f;break;case"MultiPolygon":g.rings=l(c.coordinates.slice(0)),g.spatialReference=f;break;case"Feature":c.geometry&&(g.geometry=a.Util.geojsonToArcGIS(c.geometry,d)),g.attributes=c.properties?b(c.properties):{},c.id&&(g.attributes[d]=c.id);break;case"FeatureCollection":for(g=[],e=0;e=0;h--)f.features.push(a.Util.arcgisToGeojson(g[h],d));return f},a.Util.cleanUrl=function(a){return a=a.replace(/^\s+|\s+$|\A\s+|\s+\z/g,""),"/"!==a[a.length-1]&&(a+="/"),a},a.Util.isArcgisOnline=function(a){return/\.arcgis\.com.*?FeatureServer/g.test(a)},a.Util.geojsonTypeToArcGIS=function(a){var b;switch(a){case"Point":b="esriGeometryPoint";break;case"MultiPoint":b="esriGeometryMultipoint";break;case"LineString":b="esriGeometryPolyline";break;case"MultiLineString":b="esriGeometryPolyline";break;case"Polygon":b="esriGeometryPolygon";break;case"MultiPolygon":b="esriGeometryPolygon"}return b},a.Util.requestAnimationFrame=L.Util.bind(m,window),a.Util.warn=function(a){console&&console.warn&&console.warn(a)}}(EsriLeaflet),function(a){function b(a){var b="";a.f=a.f||"json";for(var c in a)if(a.hasOwnProperty(c)){var d,e=a[c],f=Object.prototype.toString.call(e);b.length&&(b+="&"),d="[object Array]"===f?"[object Object]"===Object.prototype.toString.call(e[0])?JSON.stringify(e):e.join(","):"[object Object]"===f?JSON.stringify(e):"[object Date]"===f?e.valueOf():e,b+=encodeURIComponent(c)+"="+encodeURIComponent(d)}return b}function c(a,b){var c=new XMLHttpRequest;return c.onerror=function(d){c.onreadystatechange=L.Util.falseFn,a.call(b,{error:{code:500,message:"XMLHttpRequest error"}},null)},c.onreadystatechange=function(){var d,e;if(4===c.readyState){try{d=JSON.parse(c.responseText)}catch(f){d=null,e={code:500,message:"Could not parse response as JSON. This could also be caused by a CORS or XMLHttpRequest error."}}!e&&d.error&&(e=d.error,d=null),c.onerror=L.Util.falseFn,a.call(b,e,d)}},c}var d=0;window._EsriLeafletCallbacks={},a.Request={request:function(d,e,f,g){var h=b(e),i=c(f,g),j=(d+"?"+h).length;if(2e3>=j&&L.esri.Support.CORS)i.open("GET",d+"?"+h),i.send(null);else{if(!(j>2e3&&L.esri.Support.CORS))return 2e3>=j&&!L.esri.Support.CORS?L.esri.Request.get.JSONP(d,e,f,g):void a.Util.warn("a request to "+d+" was longer then 2000 characters and this browser cannot make a cross-domain post request. Please use a proxy http://esri.github.io/esri-leaflet/api-reference/request.html");i.open("POST",d),i.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),i.send(h)}return i},post:{XMLHTTP:function(a,d,e,f){var g=c(e,f);return g.open("POST",a),g.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),g.send(b(d)),g}},get:{CORS:function(a,d,e,f){var g=c(e,f);return g.open("GET",a+"?"+b(d),!0),g.send(null),g},JSONP:function(a,c,e,f){var g="c"+d;c.callback="window._EsriLeafletCallbacks."+g;var h=L.DomUtil.create("script",null,document.body);return h.type="text/javascript",h.src=a+"?"+b(c),h.id=g,window._EsriLeafletCallbacks[g]=function(a){if(window._EsriLeafletCallbacks[g]!==!0){var b,c=Object.prototype.toString.call(a);"[object Object]"!==c&&"[object Array]"!==c&&(b={error:{code:500,message:"Expected array or object as JSONP response"}},a=null),!b&&a.error&&(b=a,a=null),e.call(f,b,a),window._EsriLeafletCallbacks[g]=!0}},d++,{id:g,url:h.src,abort:function(){window._EsriLeafletCallbacks._callback[g]({code:0,message:"Request aborted."})}}}}},a.get=a.Support.CORS?a.Request.get.CORS:a.Request.get.JSONP,a.post=a.Request.post.XMLHTTP,a.request=a.Request.request}(EsriLeaflet),EsriLeaflet.Tasks.Task=L.Class.extend({options:{proxy:!1,useCors:EsriLeaflet.Support.CORS},generateSetter:function(a,b){return L.Util.bind(function(b){return this.params[a]=b,this},b)},initialize:function(a){if(a.request&&a.options?(this._service=a,L.Util.setOptions(this,a.options)):(L.Util.setOptions(this,a),this.options.url=L.esri.Util.cleanUrl(a.url)),this.params=L.Util.extend({},this.params||{}),this.setters)for(var b in this.setters){var c=this.setters[b];this[b]=this.generateSetter(c,this)}},token:function(a){return this._service?this._service.authenticate(a):this.params.token=a,this},request:function(a,b){return this._service?this._service.request(this.path,this.params,a,b):this._request("request",this.path,this.params,a,b)},_request:function(a,b,c,d,e){var f=this.options.proxy?this.options.proxy+"?"+this.options.url+b:this.options.url+b;return"get"!==a&&"request"!==a||this.options.useCors?EsriLeaflet[a](f,c,d,e):EsriLeaflet.Request.get.JSONP(f,c,d,e)}}),EsriLeaflet.Services.Service=L.Class.extend({includes:L.Mixin.Events,options:{proxy:!1,useCors:EsriLeaflet.Support.CORS},initialize:function(a){a=a||{},this._requestQueue=[],this._authenticating=!1,L.Util.setOptions(this,a),this.options.url=EsriLeaflet.Util.cleanUrl(this.options.url)},get:function(a,b,c,d){return this._request("get",a,b,c,d)},post:function(a,b,c,d){return this._request("post",a,b,c,d)},request:function(a,b,c,d){return this._request("request",a,b,c,d)},metadata:function(a,b){return this._request("get","",{},a,b)},authenticate:function(a){return this._authenticating=!1,this.options.token=a,this._runQueue(),this},_request:function(a,b,c,d,e){this.fire("requeststart",{url:this.options.url+b,params:c,method:a});var f=this._createServiceCallback(a,b,c,d,e);if(this.options.token&&(c.token=this.options.token),this._authenticating)return void this._requestQueue.push([a,b,c,d,e]);var g=this.options.proxy?this.options.proxy+"?"+this.options.url+b:this.options.url+b;return"get"!==a&&"request"!==a||this.options.useCors?EsriLeaflet[a](g,c,f):EsriLeaflet.Request.get.JSONP(g,c,f)},_createServiceCallback:function(a,b,c,d,e){return L.Util.bind(function(f,g){!f||499!==f.code&&498!==f.code||(this._authenticating=!0,this._requestQueue.push([a,b,c,d,e]),this.fire("authenticationrequired",{authenticate:L.Util.bind(this.authenticate,this)}),f.authenticate=L.Util.bind(this.authenticate,this)),d.call(e,f,g),f?this.fire("requesterror",{url:this.options.url+b,params:c,message:f.message,code:f.code,method:a}):this.fire("requestsuccess",{url:this.options.url+b,params:c,response:g,method:a}),this.fire("requestend",{url:this.options.url+b,params:c,method:a})},this)},_runQueue:function(){for(var a=this._requestQueue.length-1;a>=0;a--){var b=this._requestQueue[a],c=b.shift();this[c].apply(this,b)}this._requestQueue=[]}}),EsriLeaflet.Services.service=function(a){return new EsriLeaflet.Services.Service(a)}; +var EsriLeaflet={VERSION:"1.0.3",Layers:{},Services:{},Controls:{},Tasks:{},Util:{},Support:{CORS:!!(window.XMLHttpRequest&&"withCredentials"in new XMLHttpRequest),pointerEvents:""===document.documentElement.style.pointerEvents}};"undefined"!=typeof window&&window.L&&(window.L.esri=EsriLeaflet),function(a){function b(a){var b={};for(var c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);return b}function c(a,b){for(var c=0;cd;d++)b=a[d+1],c+=(b[0]-f[0])*(b[1]+f[1]),f=b;return c>=0}function f(a,b,c,d){var e=(d[0]-c[0])*(a[1]-c[1])-(d[1]-c[1])*(a[0]-c[0]),f=(b[0]-a[0])*(a[1]-c[1])-(b[1]-a[1])*(a[0]-c[0]),g=(d[1]-c[1])*(b[0]-a[0])-(d[0]-c[0])*(b[1]-a[1]);if(0!==g){var h=e/g,i=f/g;if(h>=0&&1>=h&&i>=0&&1>=i)return!0}return!1}function g(a,b){for(var c=0;c=0;b--)if(c=h[b][0],i(c,f)){h[b].push(f),o=!0;break}o||n.push(f)}for(;n.length;){f=n.pop();var p=!1;for(b=h.length-1;b>=0;b--)if(c=h[b][0],g(c,f)){h[b].push(f),p=!0;break}p||h.push([f.reverse()])}return 1===h.length?{type:"Polygon",coordinates:h[0]}:{type:"MultiPolygon",coordinates:h}}function k(a){var b=[],c=a.slice(0),f=d(c.shift().slice(0));if(f.length>=4){e(f)||f.reverse(),b.push(f);for(var g=0;g=4&&(e(h)&&h.reverse(),b.push(h))}}return b}function l(a){for(var b=[],c=0;c=0;e--){var f=d[e].slice(0);b.push(f)}return b}var m=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.msRequestAnimationFrame||function(a){return window.setTimeout(a,1e3/60)};a.Util.extentToBounds=function(a){var b=new L.LatLng(a.ymin,a.xmin),c=new L.LatLng(a.ymax,a.xmax);return new L.LatLngBounds(b,c)},a.Util.boundsToExtent=function(a){return a=L.latLngBounds(a),{xmin:a.getSouthWest().lng,ymin:a.getSouthWest().lat,xmax:a.getNorthEast().lng,ymax:a.getNorthEast().lat,spatialReference:{wkid:4326}}},a.Util.arcgisToGeojson=function(c,d){var e={};return"number"==typeof c.x&&"number"==typeof c.y&&(e.type="Point",e.coordinates=[c.x,c.y]),c.points&&(e.type="MultiPoint",e.coordinates=c.points.slice(0)),c.paths&&(1===c.paths.length?(e.type="LineString",e.coordinates=c.paths[0].slice(0)):(e.type="MultiLineString",e.coordinates=c.paths.slice(0))),c.rings&&(e=j(c.rings.slice(0))),(c.geometry||c.attributes)&&(e.type="Feature",e.geometry=c.geometry?a.Util.arcgisToGeojson(c.geometry):null,e.properties=c.attributes?b(c.attributes):null,c.attributes&&(e.id=c.attributes[d]||c.attributes.OBJECTID||c.attributes.FID)),e},a.Util.geojsonToArcGIS=function(c,d){d=d||"OBJECTID";var e,f={wkid:4326},g={};switch(c.type){case"Point":g.x=c.coordinates[0],g.y=c.coordinates[1],g.spatialReference=f;break;case"MultiPoint":g.points=c.coordinates.slice(0),g.spatialReference=f;break;case"LineString":g.paths=[c.coordinates.slice(0)],g.spatialReference=f;break;case"MultiLineString":g.paths=c.coordinates.slice(0),g.spatialReference=f;break;case"Polygon":g.rings=k(c.coordinates.slice(0)),g.spatialReference=f;break;case"MultiPolygon":g.rings=l(c.coordinates.slice(0)),g.spatialReference=f;break;case"Feature":c.geometry&&(g.geometry=a.Util.geojsonToArcGIS(c.geometry,d)),g.attributes=c.properties?b(c.properties):{},c.id&&(g.attributes[d]=c.id);break;case"FeatureCollection":for(g=[],e=0;e=0;h--)f.features.push(a.Util.arcgisToGeojson(g[h],d));return f},a.Util.cleanUrl=function(a){return a=a.replace(/^\s+|\s+$|\A\s+|\s+\z/g,""),"/"!==a[a.length-1]&&(a+="/"),a},a.Util.isArcgisOnline=function(a){return/\.arcgis\.com.*?FeatureServer/g.test(a)},a.Util.geojsonTypeToArcGIS=function(a){var b;switch(a){case"Point":b="esriGeometryPoint";break;case"MultiPoint":b="esriGeometryMultipoint";break;case"LineString":b="esriGeometryPolyline";break;case"MultiLineString":b="esriGeometryPolyline";break;case"Polygon":b="esriGeometryPolygon";break;case"MultiPolygon":b="esriGeometryPolygon"}return b},a.Util.requestAnimationFrame=L.Util.bind(m,window),a.Util.warn=function(a){console&&console.warn&&console.warn(a)}}(EsriLeaflet),function(a){function b(a){var b="";a.f=a.f||"json";for(var c in a)if(a.hasOwnProperty(c)){var d,e=a[c],f=Object.prototype.toString.call(e);b.length&&(b+="&"),d="[object Array]"===f?"[object Object]"===Object.prototype.toString.call(e[0])?JSON.stringify(e):e.join(","):"[object Object]"===f?JSON.stringify(e):"[object Date]"===f?e.valueOf():e,b+=encodeURIComponent(c)+"="+encodeURIComponent(d)}return b}function c(a,b){var c=new XMLHttpRequest;return c.onerror=function(d){c.onreadystatechange=L.Util.falseFn,a.call(b,{error:{code:500,message:"XMLHttpRequest error"}},null)},c.onreadystatechange=function(){var d,e;if(4===c.readyState){try{d=JSON.parse(c.responseText)}catch(f){d=null,e={code:500,message:"Could not parse response as JSON. This could also be caused by a CORS or XMLHttpRequest error."}}!e&&d.error&&(e=d.error,d=null),c.onerror=L.Util.falseFn,a.call(b,e,d)}},c}var d=0;window._EsriLeafletCallbacks={},a.Request={request:function(d,e,f,g){var h=b(e),i=c(f,g),j=(d+"?"+h).length;if(2e3>=j&&L.esri.Support.CORS)i.open("GET",d+"?"+h),i.send(null);else{if(!(j>2e3&&L.esri.Support.CORS))return 2e3>=j&&!L.esri.Support.CORS?L.esri.Request.get.JSONP(d,e,f,g):void a.Util.warn("a request to "+d+" was longer then 2000 characters and this browser cannot make a cross-domain post request. Please use a proxy http://esri.github.io/esri-leaflet/api-reference/request.html");i.open("POST",d),i.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),i.send(h)}return i},post:{XMLHTTP:function(a,d,e,f){var g=c(e,f);return g.open("POST",a),g.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),g.send(b(d)),g}},get:{CORS:function(a,d,e,f){var g=c(e,f);return g.open("GET",a+"?"+b(d),!0),g.send(null),g},JSONP:function(a,c,e,f){var g="c"+d;c.callback="window._EsriLeafletCallbacks."+g;var h=L.DomUtil.create("script",null,document.body);return h.type="text/javascript",h.src=a+"?"+b(c),h.id=g,window._EsriLeafletCallbacks[g]=function(a){if(window._EsriLeafletCallbacks[g]!==!0){var b,c=Object.prototype.toString.call(a);"[object Object]"!==c&&"[object Array]"!==c&&(b={error:{code:500,message:"Expected array or object as JSONP response"}},a=null),!b&&a.error&&(b=a,a=null),e.call(f,b,a),window._EsriLeafletCallbacks[g]=!0}},d++,{id:g,url:h.src,abort:function(){window._EsriLeafletCallbacks._callback[g]({code:0,message:"Request aborted."})}}}}},a.get=a.Support.CORS?a.Request.get.CORS:a.Request.get.JSONP,a.post=a.Request.post.XMLHTTP,a.request=a.Request.request}(EsriLeaflet),EsriLeaflet.Tasks.Task=L.Class.extend({options:{proxy:!1,useCors:EsriLeaflet.Support.CORS},generateSetter:function(a,b){return L.Util.bind(function(b){return this.params[a]=b,this},b)},initialize:function(a){if(a.request&&a.options?(this._service=a,L.Util.setOptions(this,a.options)):(L.Util.setOptions(this,a),this.options.url=L.esri.Util.cleanUrl(a.url)),this.params=L.Util.extend({},this.params||{}),this.setters)for(var b in this.setters){var c=this.setters[b];this[b]=this.generateSetter(c,this)}},token:function(a){return this._service?this._service.authenticate(a):this.params.token=a,this},request:function(a,b){return this._service?this._service.request(this.path,this.params,a,b):this._request("request",this.path,this.params,a,b)},_request:function(a,b,c,d,e){var f=this.options.proxy?this.options.proxy+"?"+this.options.url+b:this.options.url+b;return"get"!==a&&"request"!==a||this.options.useCors?EsriLeaflet[a](f,c,d,e):EsriLeaflet.Request.get.JSONP(f,c,d,e)}}),EsriLeaflet.Services.Service=L.Class.extend({includes:L.Mixin.Events,options:{proxy:!1,useCors:EsriLeaflet.Support.CORS},initialize:function(a){a=a||{},this._requestQueue=[],this._authenticating=!1,L.Util.setOptions(this,a),this.options.url=EsriLeaflet.Util.cleanUrl(this.options.url)},get:function(a,b,c,d){return this._request("get",a,b,c,d)},post:function(a,b,c,d){return this._request("post",a,b,c,d)},request:function(a,b,c,d){return this._request("request",a,b,c,d)},metadata:function(a,b){return this._request("get","",{},a,b)},authenticate:function(a){return this._authenticating=!1,this.options.token=a,this._runQueue(),this},_request:function(a,b,c,d,e){this.fire("requeststart",{url:this.options.url+b,params:c,method:a});var f=this._createServiceCallback(a,b,c,d,e);if(this.options.token&&(c.token=this.options.token),this._authenticating)return void this._requestQueue.push([a,b,c,d,e]);var g=this.options.proxy?this.options.proxy+"?"+this.options.url+b:this.options.url+b;return"get"!==a&&"request"!==a||this.options.useCors?EsriLeaflet[a](g,c,f):EsriLeaflet.Request.get.JSONP(g,c,f)},_createServiceCallback:function(a,b,c,d,e){return L.Util.bind(function(f,g){!f||499!==f.code&&498!==f.code||(this._authenticating=!0,this._requestQueue.push([a,b,c,d,e]),this.fire("authenticationrequired",{authenticate:L.Util.bind(this.authenticate,this)}),f.authenticate=L.Util.bind(this.authenticate,this)),d.call(e,f,g),f?this.fire("requesterror",{url:this.options.url+b,params:c,message:f.message,code:f.code,method:a}):this.fire("requestsuccess",{url:this.options.url+b,params:c,response:g,method:a}),this.fire("requestend",{url:this.options.url+b,params:c,method:a})},this)},_runQueue:function(){for(var a=this._requestQueue.length-1;a>=0;a--){var b=this._requestQueue[a],c=b.shift();this[c].apply(this,b)}this._requestQueue=[]}}),EsriLeaflet.Services.service=function(a){return new EsriLeaflet.Services.Service(a)}; //# sourceMappingURL=esri-leaflet-core.js.map return EsriLeaflet; diff --git a/dist/builds/core/esri-leaflet-core.js.map b/dist/builds/core/esri-leaflet-core.js.map index 4a68305f5..8f11e2702 100644 --- a/dist/builds/core/esri-leaflet-core.js.map +++ b/dist/builds/core/esri-leaflet-core.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../../src/EsriLeaflet.js","../../../src/Util.js","../../../src/Request.js","../../../src/Tasks/Task.js","../../../src/Services/Service.js"],"names":["EsriLeaflet","VERSION","Layers","Services","Controls","Tasks","Util","Support","CORS","window","XMLHttpRequest","pointerEvents","document","documentElement","style","L","esri","clone","obj","target","i","hasOwnProperty","pointsEqual","a","b","length","closeRing","coordinates","push","ringIsClockwise","ringToTest","pt2","total","rLength","pt1","vertexIntersectsVertex","a1","a2","b1","b2","uaT","ubT","uB","ua","ub","arrayIntersectsArray","j","coordinatesContainPoint","point","contains","l","coordinatesContainCoordinates","outer","inner","intersects","convertRingsToGeoJSON","rings","x","outerRing","hole","outerRings","holes","r","ring","slice","polygon","uncontainedHoles","pop","contained","reverse","type","orientRings","poly","output","shift","flattenMultiPolygonRings","raf","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","msRequestAnimationFrame","cb","setTimeout","extentToBounds","extent","sw","LatLng","ymin","xmin","ne","ymax","xmax","LatLngBounds","boundsToExtent","bounds","latLngBounds","getSouthWest","lng","lat","getNorthEast","spatialReference","wkid","arcgisToGeojson","arcgis","idAttribute","geojson","y","points","paths","geometry","attributes","properties","id","OBJECTID","FID","geojsonToArcGIS","result","features","geometries","responseToFeatureCollection","response","objectIdField","objectIdFieldName","fields","name","featureCollection","results","cleanUrl","url","replace","isArcgisOnline","test","geojsonTypeToArcGIS","geoJsonType","arcgisGeometryType","bind","warn","message","console","serialize","params","data","f","key","value","param","Object","prototype","toString","call","JSON","stringify","join","valueOf","encodeURIComponent","createRequest","callback","context","httpRequest","onerror","e","onreadystatechange","falseFn","error","code","readyState","parse","responseText","callbacks","_EsriLeafletCallbacks","Request","request","paramString","requestLength","open","send","get","JSONP","setRequestHeader","post","XMLHTTP","callbackId","script","DomUtil","create","body","src","responseType","abort","_callback","Task","Class","extend","options","proxy","useCors","generateSetter","this","initialize","endpoint","_service","setOptions","setters","setter","token","authenticate","path","_request","method","Service","includes","Mixin","Events","_requestQueue","_authenticating","metadata","_runQueue","fire","wrappedCallback","_createServiceCallback","apply","service"],"mappings":"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","file":"esri-leaflet-core.js","sourcesContent":["var EsriLeaflet = { //jshint ignore:line\n VERSION: '1.0.2',\n Layers: {},\n Services: {},\n Controls: {},\n Tasks: {},\n Util: {},\n Support: {\n CORS: !!(window.XMLHttpRequest && 'withCredentials' in new XMLHttpRequest()),\n pointerEvents: document.documentElement.style.pointerEvents === ''\n }\n};\n\nif(typeof window !== 'undefined' && window.L){\n window.L.esri = EsriLeaflet;\n}\n","(function(EsriLeaflet){\n\n // normalize request animation frame\n var raf = window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.msRequestAnimationFrame ||\n function(cb) { return window.setTimeout(cb, 1000 / 60); };\n\n // shallow object clone for feature properties and attributes\n // from http://jsperf.com/cloning-an-object/2\n function clone(obj) {\n var target = {};\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n target[i] = obj[i];\n }\n }\n return target;\n }\n\n // checks if 2 x,y points are equal\n function pointsEqual(a, b) {\n for (var i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n\n // checks if the first and last points of a ring are equal and closes the ring\n function closeRing(coordinates) {\n if (!pointsEqual(coordinates[0], coordinates[coordinates.length - 1])) {\n coordinates.push(coordinates[0]);\n }\n return coordinates;\n }\n\n // determine if polygon ring coordinates are clockwise. clockwise signifies outer ring, counter-clockwise an inner ring\n // or hole. this logic was found at http://stackoverflow.com/questions/1165647/how-to-determine-if-a-list-of-polygon-\n // points-are-in-clockwise-order\n function ringIsClockwise(ringToTest) {\n var total = 0,i = 0;\n var rLength = ringToTest.length;\n var pt1 = ringToTest[i];\n var pt2;\n for (i; i < rLength - 1; i++) {\n pt2 = ringToTest[i + 1];\n total += (pt2[0] - pt1[0]) * (pt2[1] + pt1[1]);\n pt1 = pt2;\n }\n return (total >= 0);\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L504-L519\n function vertexIntersectsVertex(a1, a2, b1, b2) {\n var uaT = (b2[0] - b1[0]) * (a1[1] - b1[1]) - (b2[1] - b1[1]) * (a1[0] - b1[0]);\n var ubT = (a2[0] - a1[0]) * (a1[1] - b1[1]) - (a2[1] - a1[1]) * (a1[0] - b1[0]);\n var uB = (b2[1] - b1[1]) * (a2[0] - a1[0]) - (b2[0] - b1[0]) * (a2[1] - a1[1]);\n\n if ( uB !== 0 ) {\n var ua = uaT / uB;\n var ub = ubT / uB;\n\n if ( 0 <= ua && ua <= 1 && 0 <= ub && ub <= 1 ) {\n return true;\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L521-L531\n function arrayIntersectsArray(a, b) {\n for (var i = 0; i < a.length - 1; i++) {\n for (var j = 0; j < b.length - 1; j++) {\n if (vertexIntersectsVertex(a[i], a[i + 1], b[j], b[j + 1])) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L470-L480\n function coordinatesContainPoint(coordinates, point) {\n var contains = false;\n for(var i = -1, l = coordinates.length, j = l - 1; ++i < l; j = i) {\n if (((coordinates[i][1] <= point[1] && point[1] < coordinates[j][1]) ||\n (coordinates[j][1] <= point[1] && point[1] < coordinates[i][1])) &&\n (point[0] < (coordinates[j][0] - coordinates[i][0]) * (point[1] - coordinates[i][1]) / (coordinates[j][1] - coordinates[i][1]) + coordinates[i][0])) {\n contains = !contains;\n }\n }\n return contains;\n }\n\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L106-L113\n function coordinatesContainCoordinates(outer, inner){\n var intersects = arrayIntersectsArray(outer, inner);\n var contains = coordinatesContainPoint(outer, inner[0]);\n if(!intersects && contains){\n return true;\n }\n return false;\n }\n\n // do any polygons in this array contain any other polygons in this array?\n // used for checking for holes in arcgis rings\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L117-L172\n function convertRingsToGeoJSON(rings){\n var outerRings = [];\n var holes = [];\n var x; // iterator\n var outerRing; // current outer ring being evaluated\n var hole; // current hole being evaluated\n\n // for each ring\n for (var r = 0; r < rings.length; r++) {\n var ring = closeRing(rings[r].slice(0));\n if(ring.length < 4){\n continue;\n }\n // is this ring an outer ring? is it clockwise?\n if(ringIsClockwise(ring)){\n var polygon = [ ring ];\n outerRings.push(polygon); // push to outer rings\n } else {\n holes.push(ring); // counterclockwise push to holes\n }\n }\n\n var uncontainedHoles = [];\n\n // while there are holes left...\n while(holes.length){\n // pop a hole off out stack\n hole = holes.pop();\n\n // loop over all outer rings and see if they contain our hole.\n var contained = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(coordinatesContainCoordinates(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n contained = true;\n break;\n }\n }\n\n // ring is not contained in any outer ring\n // sometimes this happens https://github.com/Esri/esri-leaflet/issues/320\n if(!contained){\n uncontainedHoles.push(hole);\n }\n }\n\n // if we couldn't match any holes using contains we can try intersects...\n while(uncontainedHoles.length){\n // pop a hole off out stack\n hole = uncontainedHoles.pop();\n\n // loop over all outer rings and see if any intersect our hole.\n var intersects = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(arrayIntersectsArray(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n intersects = true;\n break;\n }\n }\n\n if(!intersects) {\n outerRings.push([hole.reverse()]);\n }\n }\n\n if(outerRings.length === 1){\n return {\n type: 'Polygon',\n coordinates: outerRings[0]\n };\n } else {\n return {\n type: 'MultiPolygon',\n coordinates: outerRings\n };\n }\n }\n\n // This function ensures that rings are oriented in the right directions\n // outer rings are clockwise, holes are counterclockwise\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function orientRings(poly){\n var output = [];\n var polygon = poly.slice(0);\n var outerRing = closeRing(polygon.shift().slice(0));\n if(outerRing.length >= 4){\n if(!ringIsClockwise(outerRing)){\n outerRing.reverse();\n }\n\n output.push(outerRing);\n\n for (var i = 0; i < polygon.length; i++) {\n var hole = closeRing(polygon[i].slice(0));\n if(hole.length >= 4){\n if(ringIsClockwise(hole)){\n hole.reverse();\n }\n output.push(hole);\n }\n }\n }\n\n return output;\n }\n\n // This function flattens holes in multipolygons to one array of polygons\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function flattenMultiPolygonRings(rings){\n var output = [];\n for (var i = 0; i < rings.length; i++) {\n var polygon = orientRings(rings[i]);\n for (var x = polygon.length - 1; x >= 0; x--) {\n var ring = polygon[x].slice(0);\n output.push(ring);\n }\n }\n return output;\n }\n\n // convert an extent (ArcGIS) to LatLngBounds (Leaflet)\n EsriLeaflet.Util.extentToBounds = function(extent){\n var sw = new L.LatLng(extent.ymin, extent.xmin);\n var ne = new L.LatLng(extent.ymax, extent.xmax);\n return new L.LatLngBounds(sw, ne);\n };\n\n // convert an LatLngBounds (Leaflet) to extent (ArcGIS)\n EsriLeaflet.Util.boundsToExtent = function(bounds) {\n bounds = L.latLngBounds(bounds);\n return {\n 'xmin': bounds.getSouthWest().lng,\n 'ymin': bounds.getSouthWest().lat,\n 'xmax': bounds.getNorthEast().lng,\n 'ymax': bounds.getNorthEast().lat,\n 'spatialReference': {\n 'wkid' : 4326\n }\n };\n };\n\n EsriLeaflet.Util.arcgisToGeojson = function (arcgis, idAttribute){\n var geojson = {};\n\n if(typeof arcgis.x === 'number' && typeof arcgis.y === 'number'){\n geojson.type = 'Point';\n geojson.coordinates = [arcgis.x, arcgis.y];\n }\n\n if(arcgis.points){\n geojson.type = 'MultiPoint';\n geojson.coordinates = arcgis.points.slice(0);\n }\n\n if(arcgis.paths) {\n if(arcgis.paths.length === 1){\n geojson.type = 'LineString';\n geojson.coordinates = arcgis.paths[0].slice(0);\n } else {\n geojson.type = 'MultiLineString';\n geojson.coordinates = arcgis.paths.slice(0);\n }\n }\n\n if(arcgis.rings) {\n geojson = convertRingsToGeoJSON(arcgis.rings.slice(0));\n }\n\n if(arcgis.geometry || arcgis.attributes) {\n geojson.type = 'Feature';\n geojson.geometry = (arcgis.geometry) ? EsriLeaflet.Util.arcgisToGeojson(arcgis.geometry) : null;\n geojson.properties = (arcgis.attributes) ? clone(arcgis.attributes) : null;\n if(arcgis.attributes) {\n geojson.id = arcgis.attributes[idAttribute] || arcgis.attributes.OBJECTID || arcgis.attributes.FID;\n }\n }\n\n return geojson;\n };\n\n // GeoJSON -> ArcGIS\n EsriLeaflet.Util.geojsonToArcGIS = function(geojson, idAttribute){\n idAttribute = idAttribute || 'OBJECTID';\n var spatialReference = { wkid: 4326 };\n var result = {};\n var i;\n\n switch(geojson.type){\n case 'Point':\n result.x = geojson.coordinates[0];\n result.y = geojson.coordinates[1];\n result.spatialReference = spatialReference;\n break;\n case 'MultiPoint':\n result.points = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'LineString':\n result.paths = [geojson.coordinates.slice(0)];\n result.spatialReference = spatialReference;\n break;\n case 'MultiLineString':\n result.paths = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'Polygon':\n result.rings = orientRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'MultiPolygon':\n result.rings = flattenMultiPolygonRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'Feature':\n if(geojson.geometry) {\n result.geometry = EsriLeaflet.Util.geojsonToArcGIS(geojson.geometry, idAttribute);\n }\n result.attributes = (geojson.properties) ? clone(geojson.properties) : {};\n if(geojson.id){\n result.attributes[idAttribute] = geojson.id;\n }\n break;\n case 'FeatureCollection':\n result = [];\n for (i = 0; i < geojson.features.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.features[i], idAttribute));\n }\n break;\n case 'GeometryCollection':\n result = [];\n for (i = 0; i < geojson.geometries.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.geometries[i], idAttribute));\n }\n break;\n }\n\n return result;\n };\n\n EsriLeaflet.Util.responseToFeatureCollection = function(response, idAttribute){\n var objectIdField;\n\n if(idAttribute){\n objectIdField = idAttribute;\n } else if(response.objectIdFieldName){\n objectIdField = response.objectIdFieldName;\n } else if(response.fields) {\n for (var j = 0; j <= response.fields.length - 1; j++) {\n if(response.fields[j].type === 'esriFieldTypeOID') {\n objectIdField = response.fields[j].name;\n break;\n }\n }\n } else {\n objectIdField = 'OBJECTID';\n }\n\n var featureCollection = {\n type: 'FeatureCollection',\n features: []\n };\n var features = response.features || response.results;\n if(features.length){\n for (var i = features.length - 1; i >= 0; i--) {\n featureCollection.features.push(EsriLeaflet.Util.arcgisToGeojson(features[i], objectIdField));\n }\n }\n\n return featureCollection;\n };\n\n // trim url whitespace and add a trailing slash if needed\n EsriLeaflet.Util.cleanUrl = function(url){\n //trim leading and trailing spaces, but not spaces inside the url\n url = url.replace(/^\\s+|\\s+$|\\A\\s+|\\s+\\z/g, '');\n\n //add a trailing slash to the url if the user omitted it\n if(url[url.length-1] !== '/'){\n url += '/';\n }\n\n return url;\n };\n\n EsriLeaflet.Util.isArcgisOnline = function(url){\n /* hosted feature services can emit geojson natively.\n our check for 'geojson' support will need to be revisted\n once the functionality makes its way to ArcGIS Server*/\n return (/\\.arcgis\\.com.*?FeatureServer/g).test(url);\n };\n\n EsriLeaflet.Util.geojsonTypeToArcGIS = function (geoJsonType) {\n var arcgisGeometryType;\n switch (geoJsonType) {\n case 'Point':\n arcgisGeometryType = 'esriGeometryPoint';\n break;\n case 'MultiPoint':\n arcgisGeometryType = 'esriGeometryMultipoint';\n break;\n case 'LineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'MultiLineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'Polygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n case 'MultiPolygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n }\n return arcgisGeometryType;\n };\n\n EsriLeaflet.Util.requestAnimationFrame = L.Util.bind(raf, window);\n\n EsriLeaflet.Util.warn = function (message) {\n if(console && console.warn) {\n console.warn(message);\n }\n };\n\n})(EsriLeaflet);","(function(EsriLeaflet){\n\n var callbacks = 0;\n\n window._EsriLeafletCallbacks = {};\n\n function serialize(params){\n var data = '';\n\n params.f = params.f || 'json';\n\n for (var key in params){\n if(params.hasOwnProperty(key)){\n var param = params[key];\n var type = Object.prototype.toString.call(param);\n var value;\n\n if(data.length){\n data += '&';\n }\n\n if (type === '[object Array]'){\n value = (Object.prototype.toString.call(param[0]) === '[object Object]') ? JSON.stringify(param) : param.join(',');\n } else if (type === '[object Object]') {\n value = JSON.stringify(param);\n } else if (type === '[object Date]'){\n value = param.valueOf();\n } else {\n value = param;\n }\n\n data += encodeURIComponent(key) + '=' + encodeURIComponent(value);\n }\n }\n\n return data;\n }\n\n function createRequest(callback, context){\n var httpRequest = new XMLHttpRequest();\n\n httpRequest.onerror = function(e) {\n httpRequest.onreadystatechange = L.Util.falseFn;\n\n callback.call(context, {\n error: {\n code: 500,\n message: 'XMLHttpRequest error'\n }\n }, null);\n };\n\n httpRequest.onreadystatechange = function(){\n var response;\n var error;\n\n if (httpRequest.readyState === 4) {\n try {\n response = JSON.parse(httpRequest.responseText);\n } catch(e) {\n response = null;\n error = {\n code: 500,\n message: 'Could not parse response as JSON. This could also be caused by a CORS or XMLHttpRequest error.'\n };\n }\n\n if (!error && response.error) {\n error = response.error;\n response = null;\n }\n\n httpRequest.onerror = L.Util.falseFn;\n\n callback.call(context, error, response);\n }\n };\n\n return httpRequest;\n }\n\n // AJAX handlers for CORS (modern browsers) or JSONP (older browsers)\n EsriLeaflet.Request = {\n request: function(url, params, callback, context){\n var paramString = serialize(params);\n var httpRequest = createRequest(callback, context);\n var requestLength = (url + '?' + paramString).length;\n\n // request is less then 2000 characters and the browser supports CORS, make GET request with XMLHttpRequest\n if(requestLength <= 2000 && L.esri.Support.CORS){\n httpRequest.open('GET', url + '?' + paramString);\n httpRequest.send(null);\n\n // request is less more then 2000 characters and the browser supports CORS, make POST request with XMLHttpRequest\n } else if (requestLength > 2000 && L.esri.Support.CORS){\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(paramString);\n\n // request is less more then 2000 characters and the browser does not support CORS, make a JSONP request\n } else if(requestLength <= 2000 && !L.esri.Support.CORS){\n return L.esri.Request.get.JSONP(url, params, callback, context);\n\n // request is longer then 2000 characters and the browser does not support CORS, log a warning\n } else {\n EsriLeaflet.Util.warn('a request to ' + url + ' was longer then 2000 characters and this browser cannot make a cross-domain post request. Please use a proxy http://esri.github.io/esri-leaflet/api-reference/request.html');\n return;\n }\n\n return httpRequest;\n },\n\n post: {\n XMLHTTP: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(serialize(params));\n\n return httpRequest;\n }\n },\n\n get: {\n CORS: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n\n httpRequest.open('GET', url + '?' + serialize(params), true);\n httpRequest.send(null);\n\n return httpRequest;\n },\n JSONP: function(url, params, callback, context){\n var callbackId = 'c' + callbacks;\n\n params.callback = 'window._EsriLeafletCallbacks.' + callbackId;\n\n var script = L.DomUtil.create('script', null, document.body);\n script.type = 'text/javascript';\n script.src = url + '?' + serialize(params);\n script.id = callbackId;\n\n window._EsriLeafletCallbacks[callbackId] = function(response){\n if(window._EsriLeafletCallbacks[callbackId] !== true){\n var error;\n var responseType = Object.prototype.toString.call(response);\n\n if(!(responseType === '[object Object]' || responseType === '[object Array]')){\n error = {\n error: {\n code: 500,\n message: 'Expected array or object as JSONP response'\n }\n };\n response = null;\n }\n\n if (!error && response.error) {\n error = response;\n response = null;\n }\n\n callback.call(context, error, response);\n window._EsriLeafletCallbacks[callbackId] = true;\n }\n };\n\n callbacks++;\n\n return {\n id: callbackId,\n url: script.src,\n abort: function(){\n window._EsriLeafletCallbacks._callback[callbackId]({\n code: 0,\n message: 'Request aborted.'\n });\n }\n };\n }\n }\n };\n\n // choose the correct AJAX handler depending on CORS support\n EsriLeaflet.get = (EsriLeaflet.Support.CORS) ? EsriLeaflet.Request.get.CORS : EsriLeaflet.Request.get.JSONP;\n\n // always use XMLHttpRequest for posts\n EsriLeaflet.post = EsriLeaflet.Request.post.XMLHTTP;\n\n // expose a common request method the uses GET\\POST based on request length\n EsriLeaflet.request = EsriLeaflet.Request.request;\n\n})(EsriLeaflet);","EsriLeaflet.Tasks.Task = L.Class.extend({\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n //Generate a method for each methodName:paramName in the setters for this task.\n generateSetter: function(param, context){\n return L.Util.bind(function(value){\n this.params[param] = value;\n return this;\n }, context);\n },\n\n initialize: function(endpoint){\n // endpoint can be either a url (and options) for an ArcGIS Rest Service or an instance of EsriLeaflet.Service\n if(endpoint.request && endpoint.options){\n this._service = endpoint;\n L.Util.setOptions(this, endpoint.options);\n } else {\n L.Util.setOptions(this, endpoint);\n this.options.url = L.esri.Util.cleanUrl(endpoint.url);\n }\n\n // clone default params into this object\n this.params = L.Util.extend({}, this.params || {});\n\n // generate setter methods based on the setters object implimented a child class\n if(this.setters){\n for (var setter in this.setters){\n var param = this.setters[setter];\n this[setter] = this.generateSetter(param, this);\n }\n }\n },\n\n token: function(token){\n if(this._service){\n this._service.authenticate(token);\n } else {\n this.params.token = token;\n }\n return this;\n },\n\n request: function(callback, context){\n if(this._service){\n return this._service.request(this.path, this.params, callback, context);\n } else {\n return this._request('request', this.path, this.params, callback, context);\n }\n },\n\n _request: function(method, path, params, callback, context){\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, callback, context);\n } else{\n return EsriLeaflet[method](url, params, callback, context);\n }\n }\n});","EsriLeaflet.Services.Service = L.Class.extend({\n\n includes: L.Mixin.Events,\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n initialize: function (options) {\n options = options || {};\n this._requestQueue = [];\n this._authenticating = false;\n L.Util.setOptions(this, options);\n this.options.url = EsriLeaflet.Util.cleanUrl(this.options.url);\n },\n\n get: function (path, params, callback, context) {\n return this._request('get', path, params, callback, context);\n },\n\n post: function (path, params, callback, context) {\n return this._request('post', path, params, callback, context);\n },\n\n request: function (path, params, callback, context) {\n return this._request('request', path, params, callback, context);\n },\n\n metadata: function (callback, context) {\n return this._request('get', '', {}, callback, context);\n },\n\n authenticate: function(token){\n this._authenticating = false;\n this.options.token = token;\n this._runQueue();\n return this;\n },\n\n _request: function(method, path, params, callback, context){\n this.fire('requeststart', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n\n var wrappedCallback = this._createServiceCallback(method, path, params, callback, context);\n\n if (this.options.token) {\n params.token = this.options.token;\n }\n\n if (this._authenticating) {\n this._requestQueue.push([method, path, params, callback, context]);\n return;\n } else {\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, wrappedCallback);\n } else {\n return EsriLeaflet[method](url, params, wrappedCallback);\n }\n }\n },\n\n _createServiceCallback: function(method, path, params, callback, context){\n return L.Util.bind(function(error, response){\n\n if (error && (error.code === 499 || error.code === 498)) {\n this._authenticating = true;\n\n this._requestQueue.push([method, path, params, callback, context]);\n\n // fire an event for users to handle and re-authenticate\n this.fire('authenticationrequired', {\n authenticate: L.Util.bind(this.authenticate, this)\n });\n\n // if the user has access to a callback they can handle the auth error\n error.authenticate = L.Util.bind(this.authenticate, this);\n }\n\n callback.call(context, error, response);\n\n if(error) {\n this.fire('requesterror', {\n url: this.options.url + path,\n params: params,\n message: error.message,\n code: error.code,\n method: method\n });\n } else {\n this.fire('requestsuccess', {\n url: this.options.url + path,\n params: params,\n response: response,\n method: method\n });\n }\n\n this.fire('requestend', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n }, this);\n },\n\n _runQueue: function(){\n for (var i = this._requestQueue.length - 1; i >= 0; i--) {\n var request = this._requestQueue[i];\n var method = request.shift();\n this[method].apply(this, request);\n }\n this._requestQueue = [];\n }\n\n});\n\nEsriLeaflet.Services.service = function(params){\n return new EsriLeaflet.Services.Service(params);\n};\n"]} \ No newline at end of file +{"version":3,"sources":["../../../src/EsriLeaflet.js","../../../src/Util.js","../../../src/Request.js","../../../src/Tasks/Task.js","../../../src/Services/Service.js"],"names":["EsriLeaflet","VERSION","Layers","Services","Controls","Tasks","Util","Support","CORS","window","XMLHttpRequest","pointerEvents","document","documentElement","style","L","esri","clone","obj","target","i","hasOwnProperty","pointsEqual","a","b","length","closeRing","coordinates","push","ringIsClockwise","ringToTest","pt2","total","rLength","pt1","vertexIntersectsVertex","a1","a2","b1","b2","uaT","ubT","uB","ua","ub","arrayIntersectsArray","j","coordinatesContainPoint","point","contains","l","coordinatesContainCoordinates","outer","inner","intersects","convertRingsToGeoJSON","rings","x","outerRing","hole","outerRings","holes","r","ring","slice","polygon","uncontainedHoles","pop","contained","reverse","type","orientRings","poly","output","shift","flattenMultiPolygonRings","raf","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","msRequestAnimationFrame","cb","setTimeout","extentToBounds","extent","sw","LatLng","ymin","xmin","ne","ymax","xmax","LatLngBounds","boundsToExtent","bounds","latLngBounds","getSouthWest","lng","lat","getNorthEast","spatialReference","wkid","arcgisToGeojson","arcgis","idAttribute","geojson","y","points","paths","geometry","attributes","properties","id","OBJECTID","FID","geojsonToArcGIS","result","features","geometries","responseToFeatureCollection","response","objectIdField","objectIdFieldName","fields","name","featureCollection","results","cleanUrl","url","replace","isArcgisOnline","test","geojsonTypeToArcGIS","geoJsonType","arcgisGeometryType","bind","warn","message","console","serialize","params","data","f","key","value","param","Object","prototype","toString","call","JSON","stringify","join","valueOf","encodeURIComponent","createRequest","callback","context","httpRequest","onerror","e","onreadystatechange","falseFn","error","code","readyState","parse","responseText","callbacks","_EsriLeafletCallbacks","Request","request","paramString","requestLength","open","send","get","JSONP","setRequestHeader","post","XMLHTTP","callbackId","script","DomUtil","create","body","src","responseType","abort","_callback","Task","Class","extend","options","proxy","useCors","generateSetter","this","initialize","endpoint","_service","setOptions","setters","setter","token","authenticate","path","_request","method","Service","includes","Mixin","Events","_requestQueue","_authenticating","metadata","_runQueue","fire","wrappedCallback","_createServiceCallback","apply","service"],"mappings":"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","file":"esri-leaflet-core.js","sourcesContent":["var EsriLeaflet = { //jshint ignore:line\n VERSION: '1.0.3',\n Layers: {},\n Services: {},\n Controls: {},\n Tasks: {},\n Util: {},\n Support: {\n CORS: !!(window.XMLHttpRequest && 'withCredentials' in new XMLHttpRequest()),\n pointerEvents: document.documentElement.style.pointerEvents === ''\n }\n};\n\nif(typeof window !== 'undefined' && window.L){\n window.L.esri = EsriLeaflet;\n}\n","(function(EsriLeaflet){\n\n // normalize request animation frame\n var raf = window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.msRequestAnimationFrame ||\n function(cb) { return window.setTimeout(cb, 1000 / 60); };\n\n // shallow object clone for feature properties and attributes\n // from http://jsperf.com/cloning-an-object/2\n function clone(obj) {\n var target = {};\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n target[i] = obj[i];\n }\n }\n return target;\n }\n\n // checks if 2 x,y points are equal\n function pointsEqual(a, b) {\n for (var i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n\n // checks if the first and last points of a ring are equal and closes the ring\n function closeRing(coordinates) {\n if (!pointsEqual(coordinates[0], coordinates[coordinates.length - 1])) {\n coordinates.push(coordinates[0]);\n }\n return coordinates;\n }\n\n // determine if polygon ring coordinates are clockwise. clockwise signifies outer ring, counter-clockwise an inner ring\n // or hole. this logic was found at http://stackoverflow.com/questions/1165647/how-to-determine-if-a-list-of-polygon-\n // points-are-in-clockwise-order\n function ringIsClockwise(ringToTest) {\n var total = 0,i = 0;\n var rLength = ringToTest.length;\n var pt1 = ringToTest[i];\n var pt2;\n for (i; i < rLength - 1; i++) {\n pt2 = ringToTest[i + 1];\n total += (pt2[0] - pt1[0]) * (pt2[1] + pt1[1]);\n pt1 = pt2;\n }\n return (total >= 0);\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L504-L519\n function vertexIntersectsVertex(a1, a2, b1, b2) {\n var uaT = (b2[0] - b1[0]) * (a1[1] - b1[1]) - (b2[1] - b1[1]) * (a1[0] - b1[0]);\n var ubT = (a2[0] - a1[0]) * (a1[1] - b1[1]) - (a2[1] - a1[1]) * (a1[0] - b1[0]);\n var uB = (b2[1] - b1[1]) * (a2[0] - a1[0]) - (b2[0] - b1[0]) * (a2[1] - a1[1]);\n\n if ( uB !== 0 ) {\n var ua = uaT / uB;\n var ub = ubT / uB;\n\n if ( 0 <= ua && ua <= 1 && 0 <= ub && ub <= 1 ) {\n return true;\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L521-L531\n function arrayIntersectsArray(a, b) {\n for (var i = 0; i < a.length - 1; i++) {\n for (var j = 0; j < b.length - 1; j++) {\n if (vertexIntersectsVertex(a[i], a[i + 1], b[j], b[j + 1])) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L470-L480\n function coordinatesContainPoint(coordinates, point) {\n var contains = false;\n for(var i = -1, l = coordinates.length, j = l - 1; ++i < l; j = i) {\n if (((coordinates[i][1] <= point[1] && point[1] < coordinates[j][1]) ||\n (coordinates[j][1] <= point[1] && point[1] < coordinates[i][1])) &&\n (point[0] < (coordinates[j][0] - coordinates[i][0]) * (point[1] - coordinates[i][1]) / (coordinates[j][1] - coordinates[i][1]) + coordinates[i][0])) {\n contains = !contains;\n }\n }\n return contains;\n }\n\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L106-L113\n function coordinatesContainCoordinates(outer, inner){\n var intersects = arrayIntersectsArray(outer, inner);\n var contains = coordinatesContainPoint(outer, inner[0]);\n if(!intersects && contains){\n return true;\n }\n return false;\n }\n\n // do any polygons in this array contain any other polygons in this array?\n // used for checking for holes in arcgis rings\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L117-L172\n function convertRingsToGeoJSON(rings){\n var outerRings = [];\n var holes = [];\n var x; // iterator\n var outerRing; // current outer ring being evaluated\n var hole; // current hole being evaluated\n\n // for each ring\n for (var r = 0; r < rings.length; r++) {\n var ring = closeRing(rings[r].slice(0));\n if(ring.length < 4){\n continue;\n }\n // is this ring an outer ring? is it clockwise?\n if(ringIsClockwise(ring)){\n var polygon = [ ring ];\n outerRings.push(polygon); // push to outer rings\n } else {\n holes.push(ring); // counterclockwise push to holes\n }\n }\n\n var uncontainedHoles = [];\n\n // while there are holes left...\n while(holes.length){\n // pop a hole off out stack\n hole = holes.pop();\n\n // loop over all outer rings and see if they contain our hole.\n var contained = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(coordinatesContainCoordinates(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n contained = true;\n break;\n }\n }\n\n // ring is not contained in any outer ring\n // sometimes this happens https://github.com/Esri/esri-leaflet/issues/320\n if(!contained){\n uncontainedHoles.push(hole);\n }\n }\n\n // if we couldn't match any holes using contains we can try intersects...\n while(uncontainedHoles.length){\n // pop a hole off out stack\n hole = uncontainedHoles.pop();\n\n // loop over all outer rings and see if any intersect our hole.\n var intersects = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(arrayIntersectsArray(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n intersects = true;\n break;\n }\n }\n\n if(!intersects) {\n outerRings.push([hole.reverse()]);\n }\n }\n\n if(outerRings.length === 1){\n return {\n type: 'Polygon',\n coordinates: outerRings[0]\n };\n } else {\n return {\n type: 'MultiPolygon',\n coordinates: outerRings\n };\n }\n }\n\n // This function ensures that rings are oriented in the right directions\n // outer rings are clockwise, holes are counterclockwise\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function orientRings(poly){\n var output = [];\n var polygon = poly.slice(0);\n var outerRing = closeRing(polygon.shift().slice(0));\n if(outerRing.length >= 4){\n if(!ringIsClockwise(outerRing)){\n outerRing.reverse();\n }\n\n output.push(outerRing);\n\n for (var i = 0; i < polygon.length; i++) {\n var hole = closeRing(polygon[i].slice(0));\n if(hole.length >= 4){\n if(ringIsClockwise(hole)){\n hole.reverse();\n }\n output.push(hole);\n }\n }\n }\n\n return output;\n }\n\n // This function flattens holes in multipolygons to one array of polygons\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function flattenMultiPolygonRings(rings){\n var output = [];\n for (var i = 0; i < rings.length; i++) {\n var polygon = orientRings(rings[i]);\n for (var x = polygon.length - 1; x >= 0; x--) {\n var ring = polygon[x].slice(0);\n output.push(ring);\n }\n }\n return output;\n }\n\n // convert an extent (ArcGIS) to LatLngBounds (Leaflet)\n EsriLeaflet.Util.extentToBounds = function(extent){\n var sw = new L.LatLng(extent.ymin, extent.xmin);\n var ne = new L.LatLng(extent.ymax, extent.xmax);\n return new L.LatLngBounds(sw, ne);\n };\n\n // convert an LatLngBounds (Leaflet) to extent (ArcGIS)\n EsriLeaflet.Util.boundsToExtent = function(bounds) {\n bounds = L.latLngBounds(bounds);\n return {\n 'xmin': bounds.getSouthWest().lng,\n 'ymin': bounds.getSouthWest().lat,\n 'xmax': bounds.getNorthEast().lng,\n 'ymax': bounds.getNorthEast().lat,\n 'spatialReference': {\n 'wkid' : 4326\n }\n };\n };\n\n EsriLeaflet.Util.arcgisToGeojson = function (arcgis, idAttribute){\n var geojson = {};\n\n if(typeof arcgis.x === 'number' && typeof arcgis.y === 'number'){\n geojson.type = 'Point';\n geojson.coordinates = [arcgis.x, arcgis.y];\n }\n\n if(arcgis.points){\n geojson.type = 'MultiPoint';\n geojson.coordinates = arcgis.points.slice(0);\n }\n\n if(arcgis.paths) {\n if(arcgis.paths.length === 1){\n geojson.type = 'LineString';\n geojson.coordinates = arcgis.paths[0].slice(0);\n } else {\n geojson.type = 'MultiLineString';\n geojson.coordinates = arcgis.paths.slice(0);\n }\n }\n\n if(arcgis.rings) {\n geojson = convertRingsToGeoJSON(arcgis.rings.slice(0));\n }\n\n if(arcgis.geometry || arcgis.attributes) {\n geojson.type = 'Feature';\n geojson.geometry = (arcgis.geometry) ? EsriLeaflet.Util.arcgisToGeojson(arcgis.geometry) : null;\n geojson.properties = (arcgis.attributes) ? clone(arcgis.attributes) : null;\n if(arcgis.attributes) {\n geojson.id = arcgis.attributes[idAttribute] || arcgis.attributes.OBJECTID || arcgis.attributes.FID;\n }\n }\n\n return geojson;\n };\n\n // GeoJSON -> ArcGIS\n EsriLeaflet.Util.geojsonToArcGIS = function(geojson, idAttribute){\n idAttribute = idAttribute || 'OBJECTID';\n var spatialReference = { wkid: 4326 };\n var result = {};\n var i;\n\n switch(geojson.type){\n case 'Point':\n result.x = geojson.coordinates[0];\n result.y = geojson.coordinates[1];\n result.spatialReference = spatialReference;\n break;\n case 'MultiPoint':\n result.points = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'LineString':\n result.paths = [geojson.coordinates.slice(0)];\n result.spatialReference = spatialReference;\n break;\n case 'MultiLineString':\n result.paths = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'Polygon':\n result.rings = orientRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'MultiPolygon':\n result.rings = flattenMultiPolygonRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'Feature':\n if(geojson.geometry) {\n result.geometry = EsriLeaflet.Util.geojsonToArcGIS(geojson.geometry, idAttribute);\n }\n result.attributes = (geojson.properties) ? clone(geojson.properties) : {};\n if(geojson.id){\n result.attributes[idAttribute] = geojson.id;\n }\n break;\n case 'FeatureCollection':\n result = [];\n for (i = 0; i < geojson.features.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.features[i], idAttribute));\n }\n break;\n case 'GeometryCollection':\n result = [];\n for (i = 0; i < geojson.geometries.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.geometries[i], idAttribute));\n }\n break;\n }\n\n return result;\n };\n\n EsriLeaflet.Util.responseToFeatureCollection = function(response, idAttribute){\n var objectIdField;\n\n if(idAttribute){\n objectIdField = idAttribute;\n } else if(response.objectIdFieldName){\n objectIdField = response.objectIdFieldName;\n } else if(response.fields) {\n for (var j = 0; j <= response.fields.length - 1; j++) {\n if(response.fields[j].type === 'esriFieldTypeOID') {\n objectIdField = response.fields[j].name;\n break;\n }\n }\n } else {\n objectIdField = 'OBJECTID';\n }\n\n var featureCollection = {\n type: 'FeatureCollection',\n features: []\n };\n var features = response.features || response.results;\n if(features.length){\n for (var i = features.length - 1; i >= 0; i--) {\n featureCollection.features.push(EsriLeaflet.Util.arcgisToGeojson(features[i], objectIdField));\n }\n }\n\n return featureCollection;\n };\n\n // trim url whitespace and add a trailing slash if needed\n EsriLeaflet.Util.cleanUrl = function(url){\n //trim leading and trailing spaces, but not spaces inside the url\n url = url.replace(/^\\s+|\\s+$|\\A\\s+|\\s+\\z/g, '');\n\n //add a trailing slash to the url if the user omitted it\n if(url[url.length-1] !== '/'){\n url += '/';\n }\n\n return url;\n };\n\n EsriLeaflet.Util.isArcgisOnline = function(url){\n /* hosted feature services can emit geojson natively.\n our check for 'geojson' support will need to be revisted\n once the functionality makes its way to ArcGIS Server*/\n return (/\\.arcgis\\.com.*?FeatureServer/g).test(url);\n };\n\n EsriLeaflet.Util.geojsonTypeToArcGIS = function (geoJsonType) {\n var arcgisGeometryType;\n switch (geoJsonType) {\n case 'Point':\n arcgisGeometryType = 'esriGeometryPoint';\n break;\n case 'MultiPoint':\n arcgisGeometryType = 'esriGeometryMultipoint';\n break;\n case 'LineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'MultiLineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'Polygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n case 'MultiPolygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n }\n return arcgisGeometryType;\n };\n\n EsriLeaflet.Util.requestAnimationFrame = L.Util.bind(raf, window);\n\n EsriLeaflet.Util.warn = function (message) {\n if(console && console.warn) {\n console.warn(message);\n }\n };\n\n})(EsriLeaflet);","(function(EsriLeaflet){\n\n var callbacks = 0;\n\n window._EsriLeafletCallbacks = {};\n\n function serialize(params){\n var data = '';\n\n params.f = params.f || 'json';\n\n for (var key in params){\n if(params.hasOwnProperty(key)){\n var param = params[key];\n var type = Object.prototype.toString.call(param);\n var value;\n\n if(data.length){\n data += '&';\n }\n\n if (type === '[object Array]'){\n value = (Object.prototype.toString.call(param[0]) === '[object Object]') ? JSON.stringify(param) : param.join(',');\n } else if (type === '[object Object]') {\n value = JSON.stringify(param);\n } else if (type === '[object Date]'){\n value = param.valueOf();\n } else {\n value = param;\n }\n\n data += encodeURIComponent(key) + '=' + encodeURIComponent(value);\n }\n }\n\n return data;\n }\n\n function createRequest(callback, context){\n var httpRequest = new XMLHttpRequest();\n\n httpRequest.onerror = function(e) {\n httpRequest.onreadystatechange = L.Util.falseFn;\n\n callback.call(context, {\n error: {\n code: 500,\n message: 'XMLHttpRequest error'\n }\n }, null);\n };\n\n httpRequest.onreadystatechange = function(){\n var response;\n var error;\n\n if (httpRequest.readyState === 4) {\n try {\n response = JSON.parse(httpRequest.responseText);\n } catch(e) {\n response = null;\n error = {\n code: 500,\n message: 'Could not parse response as JSON. This could also be caused by a CORS or XMLHttpRequest error.'\n };\n }\n\n if (!error && response.error) {\n error = response.error;\n response = null;\n }\n\n httpRequest.onerror = L.Util.falseFn;\n\n callback.call(context, error, response);\n }\n };\n\n return httpRequest;\n }\n\n // AJAX handlers for CORS (modern browsers) or JSONP (older browsers)\n EsriLeaflet.Request = {\n request: function(url, params, callback, context){\n var paramString = serialize(params);\n var httpRequest = createRequest(callback, context);\n var requestLength = (url + '?' + paramString).length;\n\n // request is less then 2000 characters and the browser supports CORS, make GET request with XMLHttpRequest\n if(requestLength <= 2000 && L.esri.Support.CORS){\n httpRequest.open('GET', url + '?' + paramString);\n httpRequest.send(null);\n\n // request is less more then 2000 characters and the browser supports CORS, make POST request with XMLHttpRequest\n } else if (requestLength > 2000 && L.esri.Support.CORS){\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(paramString);\n\n // request is less more then 2000 characters and the browser does not support CORS, make a JSONP request\n } else if(requestLength <= 2000 && !L.esri.Support.CORS){\n return L.esri.Request.get.JSONP(url, params, callback, context);\n\n // request is longer then 2000 characters and the browser does not support CORS, log a warning\n } else {\n EsriLeaflet.Util.warn('a request to ' + url + ' was longer then 2000 characters and this browser cannot make a cross-domain post request. Please use a proxy http://esri.github.io/esri-leaflet/api-reference/request.html');\n return;\n }\n\n return httpRequest;\n },\n\n post: {\n XMLHTTP: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(serialize(params));\n\n return httpRequest;\n }\n },\n\n get: {\n CORS: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n\n httpRequest.open('GET', url + '?' + serialize(params), true);\n httpRequest.send(null);\n\n return httpRequest;\n },\n JSONP: function(url, params, callback, context){\n var callbackId = 'c' + callbacks;\n\n params.callback = 'window._EsriLeafletCallbacks.' + callbackId;\n\n var script = L.DomUtil.create('script', null, document.body);\n script.type = 'text/javascript';\n script.src = url + '?' + serialize(params);\n script.id = callbackId;\n\n window._EsriLeafletCallbacks[callbackId] = function(response){\n if(window._EsriLeafletCallbacks[callbackId] !== true){\n var error;\n var responseType = Object.prototype.toString.call(response);\n\n if(!(responseType === '[object Object]' || responseType === '[object Array]')){\n error = {\n error: {\n code: 500,\n message: 'Expected array or object as JSONP response'\n }\n };\n response = null;\n }\n\n if (!error && response.error) {\n error = response;\n response = null;\n }\n\n callback.call(context, error, response);\n window._EsriLeafletCallbacks[callbackId] = true;\n }\n };\n\n callbacks++;\n\n return {\n id: callbackId,\n url: script.src,\n abort: function(){\n window._EsriLeafletCallbacks._callback[callbackId]({\n code: 0,\n message: 'Request aborted.'\n });\n }\n };\n }\n }\n };\n\n // choose the correct AJAX handler depending on CORS support\n EsriLeaflet.get = (EsriLeaflet.Support.CORS) ? EsriLeaflet.Request.get.CORS : EsriLeaflet.Request.get.JSONP;\n\n // always use XMLHttpRequest for posts\n EsriLeaflet.post = EsriLeaflet.Request.post.XMLHTTP;\n\n // expose a common request method the uses GET\\POST based on request length\n EsriLeaflet.request = EsriLeaflet.Request.request;\n\n})(EsriLeaflet);","EsriLeaflet.Tasks.Task = L.Class.extend({\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n //Generate a method for each methodName:paramName in the setters for this task.\n generateSetter: function(param, context){\n return L.Util.bind(function(value){\n this.params[param] = value;\n return this;\n }, context);\n },\n\n initialize: function(endpoint){\n // endpoint can be either a url (and options) for an ArcGIS Rest Service or an instance of EsriLeaflet.Service\n if(endpoint.request && endpoint.options){\n this._service = endpoint;\n L.Util.setOptions(this, endpoint.options);\n } else {\n L.Util.setOptions(this, endpoint);\n this.options.url = L.esri.Util.cleanUrl(endpoint.url);\n }\n\n // clone default params into this object\n this.params = L.Util.extend({}, this.params || {});\n\n // generate setter methods based on the setters object implimented a child class\n if(this.setters){\n for (var setter in this.setters){\n var param = this.setters[setter];\n this[setter] = this.generateSetter(param, this);\n }\n }\n },\n\n token: function(token){\n if(this._service){\n this._service.authenticate(token);\n } else {\n this.params.token = token;\n }\n return this;\n },\n\n request: function(callback, context){\n if(this._service){\n return this._service.request(this.path, this.params, callback, context);\n } else {\n return this._request('request', this.path, this.params, callback, context);\n }\n },\n\n _request: function(method, path, params, callback, context){\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, callback, context);\n } else{\n return EsriLeaflet[method](url, params, callback, context);\n }\n }\n});","EsriLeaflet.Services.Service = L.Class.extend({\n\n includes: L.Mixin.Events,\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n initialize: function (options) {\n options = options || {};\n this._requestQueue = [];\n this._authenticating = false;\n L.Util.setOptions(this, options);\n this.options.url = EsriLeaflet.Util.cleanUrl(this.options.url);\n },\n\n get: function (path, params, callback, context) {\n return this._request('get', path, params, callback, context);\n },\n\n post: function (path, params, callback, context) {\n return this._request('post', path, params, callback, context);\n },\n\n request: function (path, params, callback, context) {\n return this._request('request', path, params, callback, context);\n },\n\n metadata: function (callback, context) {\n return this._request('get', '', {}, callback, context);\n },\n\n authenticate: function(token){\n this._authenticating = false;\n this.options.token = token;\n this._runQueue();\n return this;\n },\n\n _request: function(method, path, params, callback, context){\n this.fire('requeststart', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n\n var wrappedCallback = this._createServiceCallback(method, path, params, callback, context);\n\n if (this.options.token) {\n params.token = this.options.token;\n }\n\n if (this._authenticating) {\n this._requestQueue.push([method, path, params, callback, context]);\n return;\n } else {\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, wrappedCallback);\n } else {\n return EsriLeaflet[method](url, params, wrappedCallback);\n }\n }\n },\n\n _createServiceCallback: function(method, path, params, callback, context){\n return L.Util.bind(function(error, response){\n\n if (error && (error.code === 499 || error.code === 498)) {\n this._authenticating = true;\n\n this._requestQueue.push([method, path, params, callback, context]);\n\n // fire an event for users to handle and re-authenticate\n this.fire('authenticationrequired', {\n authenticate: L.Util.bind(this.authenticate, this)\n });\n\n // if the user has access to a callback they can handle the auth error\n error.authenticate = L.Util.bind(this.authenticate, this);\n }\n\n callback.call(context, error, response);\n\n if(error) {\n this.fire('requesterror', {\n url: this.options.url + path,\n params: params,\n message: error.message,\n code: error.code,\n method: method\n });\n } else {\n this.fire('requestsuccess', {\n url: this.options.url + path,\n params: params,\n response: response,\n method: method\n });\n }\n\n this.fire('requestend', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n }, this);\n },\n\n _runQueue: function(){\n for (var i = this._requestQueue.length - 1; i >= 0; i--) {\n var request = this._requestQueue[i];\n var method = request.shift();\n this[method].apply(this, request);\n }\n this._requestQueue = [];\n }\n\n});\n\nEsriLeaflet.Services.service = function(params){\n return new EsriLeaflet.Services.Service(params);\n};\n"]} \ No newline at end of file diff --git a/dist/builds/feature-layer/esri-leaflet-feature-layer-src.js b/dist/builds/feature-layer/esri-leaflet-feature-layer-src.js index f50a94279..3991cd382 100644 --- a/dist/builds/feature-layer/esri-leaflet-feature-layer-src.js +++ b/dist/builds/feature-layer/esri-leaflet-feature-layer-src.js @@ -1,5 +1,5 @@ -/*! esri-leaflet - v1.0.2 - 2015-12-31 -* Copyright (c) 2015 Environmental Systems Research Institute, Inc. +/*! esri-leaflet - v1.0.3 - 2016-02-22 +* Copyright (c) 2016 Environmental Systems Research Institute, Inc. * Apache License*/ (function (factory) { //define an AMD module that relies on 'leaflet' @@ -17,7 +17,7 @@ } }(function (L) { var EsriLeaflet = { //jshint ignore:line - VERSION: '1.0.2', + VERSION: '1.0.3', Layers: {}, Services: {}, Controls: {}, diff --git a/dist/builds/feature-layer/esri-leaflet-feature-layer-src.js.map b/dist/builds/feature-layer/esri-leaflet-feature-layer-src.js.map index a0cacfcec..49627a737 100644 --- a/dist/builds/feature-layer/esri-leaflet-feature-layer-src.js.map +++ b/dist/builds/feature-layer/esri-leaflet-feature-layer-src.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../../src/EsriLeaflet.js","../../../src/Util.js","../../../src/Request.js","../../../src/Services/Service.js","../../../src/Services/FeatureLayerService.js","../../../src/Tasks/Task.js","../../../src/Tasks/Query.js","../../../src/Layers/FeatureLayer/FeatureGrid.js","../../../src/Layers/FeatureLayer/FeatureManager.js","../../../src/Layers/FeatureLayer/FeatureLayer.js"],"names":[],"mappings":"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","file":"esri-leaflet-feature-layer-src.js","sourcesContent":["var EsriLeaflet = { //jshint ignore:line\n VERSION: '1.0.2',\n Layers: {},\n Services: {},\n Controls: {},\n Tasks: {},\n Util: {},\n Support: {\n CORS: !!(window.XMLHttpRequest && 'withCredentials' in new XMLHttpRequest()),\n pointerEvents: document.documentElement.style.pointerEvents === ''\n }\n};\n\nif(typeof window !== 'undefined' && window.L){\n window.L.esri = EsriLeaflet;\n}\n","(function(EsriLeaflet){\n\n // normalize request animation frame\n var raf = window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.msRequestAnimationFrame ||\n function(cb) { return window.setTimeout(cb, 1000 / 60); };\n\n // shallow object clone for feature properties and attributes\n // from http://jsperf.com/cloning-an-object/2\n function clone(obj) {\n var target = {};\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n target[i] = obj[i];\n }\n }\n return target;\n }\n\n // checks if 2 x,y points are equal\n function pointsEqual(a, b) {\n for (var i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n\n // checks if the first and last points of a ring are equal and closes the ring\n function closeRing(coordinates) {\n if (!pointsEqual(coordinates[0], coordinates[coordinates.length - 1])) {\n coordinates.push(coordinates[0]);\n }\n return coordinates;\n }\n\n // determine if polygon ring coordinates are clockwise. clockwise signifies outer ring, counter-clockwise an inner ring\n // or hole. this logic was found at http://stackoverflow.com/questions/1165647/how-to-determine-if-a-list-of-polygon-\n // points-are-in-clockwise-order\n function ringIsClockwise(ringToTest) {\n var total = 0,i = 0;\n var rLength = ringToTest.length;\n var pt1 = ringToTest[i];\n var pt2;\n for (i; i < rLength - 1; i++) {\n pt2 = ringToTest[i + 1];\n total += (pt2[0] - pt1[0]) * (pt2[1] + pt1[1]);\n pt1 = pt2;\n }\n return (total >= 0);\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L504-L519\n function vertexIntersectsVertex(a1, a2, b1, b2) {\n var uaT = (b2[0] - b1[0]) * (a1[1] - b1[1]) - (b2[1] - b1[1]) * (a1[0] - b1[0]);\n var ubT = (a2[0] - a1[0]) * (a1[1] - b1[1]) - (a2[1] - a1[1]) * (a1[0] - b1[0]);\n var uB = (b2[1] - b1[1]) * (a2[0] - a1[0]) - (b2[0] - b1[0]) * (a2[1] - a1[1]);\n\n if ( uB !== 0 ) {\n var ua = uaT / uB;\n var ub = ubT / uB;\n\n if ( 0 <= ua && ua <= 1 && 0 <= ub && ub <= 1 ) {\n return true;\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L521-L531\n function arrayIntersectsArray(a, b) {\n for (var i = 0; i < a.length - 1; i++) {\n for (var j = 0; j < b.length - 1; j++) {\n if (vertexIntersectsVertex(a[i], a[i + 1], b[j], b[j + 1])) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L470-L480\n function coordinatesContainPoint(coordinates, point) {\n var contains = false;\n for(var i = -1, l = coordinates.length, j = l - 1; ++i < l; j = i) {\n if (((coordinates[i][1] <= point[1] && point[1] < coordinates[j][1]) ||\n (coordinates[j][1] <= point[1] && point[1] < coordinates[i][1])) &&\n (point[0] < (coordinates[j][0] - coordinates[i][0]) * (point[1] - coordinates[i][1]) / (coordinates[j][1] - coordinates[i][1]) + coordinates[i][0])) {\n contains = !contains;\n }\n }\n return contains;\n }\n\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L106-L113\n function coordinatesContainCoordinates(outer, inner){\n var intersects = arrayIntersectsArray(outer, inner);\n var contains = coordinatesContainPoint(outer, inner[0]);\n if(!intersects && contains){\n return true;\n }\n return false;\n }\n\n // do any polygons in this array contain any other polygons in this array?\n // used for checking for holes in arcgis rings\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L117-L172\n function convertRingsToGeoJSON(rings){\n var outerRings = [];\n var holes = [];\n var x; // iterator\n var outerRing; // current outer ring being evaluated\n var hole; // current hole being evaluated\n\n // for each ring\n for (var r = 0; r < rings.length; r++) {\n var ring = closeRing(rings[r].slice(0));\n if(ring.length < 4){\n continue;\n }\n // is this ring an outer ring? is it clockwise?\n if(ringIsClockwise(ring)){\n var polygon = [ ring ];\n outerRings.push(polygon); // push to outer rings\n } else {\n holes.push(ring); // counterclockwise push to holes\n }\n }\n\n var uncontainedHoles = [];\n\n // while there are holes left...\n while(holes.length){\n // pop a hole off out stack\n hole = holes.pop();\n\n // loop over all outer rings and see if they contain our hole.\n var contained = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(coordinatesContainCoordinates(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n contained = true;\n break;\n }\n }\n\n // ring is not contained in any outer ring\n // sometimes this happens https://github.com/Esri/esri-leaflet/issues/320\n if(!contained){\n uncontainedHoles.push(hole);\n }\n }\n\n // if we couldn't match any holes using contains we can try intersects...\n while(uncontainedHoles.length){\n // pop a hole off out stack\n hole = uncontainedHoles.pop();\n\n // loop over all outer rings and see if any intersect our hole.\n var intersects = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(arrayIntersectsArray(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n intersects = true;\n break;\n }\n }\n\n if(!intersects) {\n outerRings.push([hole.reverse()]);\n }\n }\n\n if(outerRings.length === 1){\n return {\n type: 'Polygon',\n coordinates: outerRings[0]\n };\n } else {\n return {\n type: 'MultiPolygon',\n coordinates: outerRings\n };\n }\n }\n\n // This function ensures that rings are oriented in the right directions\n // outer rings are clockwise, holes are counterclockwise\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function orientRings(poly){\n var output = [];\n var polygon = poly.slice(0);\n var outerRing = closeRing(polygon.shift().slice(0));\n if(outerRing.length >= 4){\n if(!ringIsClockwise(outerRing)){\n outerRing.reverse();\n }\n\n output.push(outerRing);\n\n for (var i = 0; i < polygon.length; i++) {\n var hole = closeRing(polygon[i].slice(0));\n if(hole.length >= 4){\n if(ringIsClockwise(hole)){\n hole.reverse();\n }\n output.push(hole);\n }\n }\n }\n\n return output;\n }\n\n // This function flattens holes in multipolygons to one array of polygons\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function flattenMultiPolygonRings(rings){\n var output = [];\n for (var i = 0; i < rings.length; i++) {\n var polygon = orientRings(rings[i]);\n for (var x = polygon.length - 1; x >= 0; x--) {\n var ring = polygon[x].slice(0);\n output.push(ring);\n }\n }\n return output;\n }\n\n // convert an extent (ArcGIS) to LatLngBounds (Leaflet)\n EsriLeaflet.Util.extentToBounds = function(extent){\n var sw = new L.LatLng(extent.ymin, extent.xmin);\n var ne = new L.LatLng(extent.ymax, extent.xmax);\n return new L.LatLngBounds(sw, ne);\n };\n\n // convert an LatLngBounds (Leaflet) to extent (ArcGIS)\n EsriLeaflet.Util.boundsToExtent = function(bounds) {\n bounds = L.latLngBounds(bounds);\n return {\n 'xmin': bounds.getSouthWest().lng,\n 'ymin': bounds.getSouthWest().lat,\n 'xmax': bounds.getNorthEast().lng,\n 'ymax': bounds.getNorthEast().lat,\n 'spatialReference': {\n 'wkid' : 4326\n }\n };\n };\n\n EsriLeaflet.Util.arcgisToGeojson = function (arcgis, idAttribute){\n var geojson = {};\n\n if(typeof arcgis.x === 'number' && typeof arcgis.y === 'number'){\n geojson.type = 'Point';\n geojson.coordinates = [arcgis.x, arcgis.y];\n }\n\n if(arcgis.points){\n geojson.type = 'MultiPoint';\n geojson.coordinates = arcgis.points.slice(0);\n }\n\n if(arcgis.paths) {\n if(arcgis.paths.length === 1){\n geojson.type = 'LineString';\n geojson.coordinates = arcgis.paths[0].slice(0);\n } else {\n geojson.type = 'MultiLineString';\n geojson.coordinates = arcgis.paths.slice(0);\n }\n }\n\n if(arcgis.rings) {\n geojson = convertRingsToGeoJSON(arcgis.rings.slice(0));\n }\n\n if(arcgis.geometry || arcgis.attributes) {\n geojson.type = 'Feature';\n geojson.geometry = (arcgis.geometry) ? EsriLeaflet.Util.arcgisToGeojson(arcgis.geometry) : null;\n geojson.properties = (arcgis.attributes) ? clone(arcgis.attributes) : null;\n if(arcgis.attributes) {\n geojson.id = arcgis.attributes[idAttribute] || arcgis.attributes.OBJECTID || arcgis.attributes.FID;\n }\n }\n\n return geojson;\n };\n\n // GeoJSON -> ArcGIS\n EsriLeaflet.Util.geojsonToArcGIS = function(geojson, idAttribute){\n idAttribute = idAttribute || 'OBJECTID';\n var spatialReference = { wkid: 4326 };\n var result = {};\n var i;\n\n switch(geojson.type){\n case 'Point':\n result.x = geojson.coordinates[0];\n result.y = geojson.coordinates[1];\n result.spatialReference = spatialReference;\n break;\n case 'MultiPoint':\n result.points = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'LineString':\n result.paths = [geojson.coordinates.slice(0)];\n result.spatialReference = spatialReference;\n break;\n case 'MultiLineString':\n result.paths = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'Polygon':\n result.rings = orientRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'MultiPolygon':\n result.rings = flattenMultiPolygonRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'Feature':\n if(geojson.geometry) {\n result.geometry = EsriLeaflet.Util.geojsonToArcGIS(geojson.geometry, idAttribute);\n }\n result.attributes = (geojson.properties) ? clone(geojson.properties) : {};\n if(geojson.id){\n result.attributes[idAttribute] = geojson.id;\n }\n break;\n case 'FeatureCollection':\n result = [];\n for (i = 0; i < geojson.features.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.features[i], idAttribute));\n }\n break;\n case 'GeometryCollection':\n result = [];\n for (i = 0; i < geojson.geometries.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.geometries[i], idAttribute));\n }\n break;\n }\n\n return result;\n };\n\n EsriLeaflet.Util.responseToFeatureCollection = function(response, idAttribute){\n var objectIdField;\n\n if(idAttribute){\n objectIdField = idAttribute;\n } else if(response.objectIdFieldName){\n objectIdField = response.objectIdFieldName;\n } else if(response.fields) {\n for (var j = 0; j <= response.fields.length - 1; j++) {\n if(response.fields[j].type === 'esriFieldTypeOID') {\n objectIdField = response.fields[j].name;\n break;\n }\n }\n } else {\n objectIdField = 'OBJECTID';\n }\n\n var featureCollection = {\n type: 'FeatureCollection',\n features: []\n };\n var features = response.features || response.results;\n if(features.length){\n for (var i = features.length - 1; i >= 0; i--) {\n featureCollection.features.push(EsriLeaflet.Util.arcgisToGeojson(features[i], objectIdField));\n }\n }\n\n return featureCollection;\n };\n\n // trim url whitespace and add a trailing slash if needed\n EsriLeaflet.Util.cleanUrl = function(url){\n //trim leading and trailing spaces, but not spaces inside the url\n url = url.replace(/^\\s+|\\s+$|\\A\\s+|\\s+\\z/g, '');\n\n //add a trailing slash to the url if the user omitted it\n if(url[url.length-1] !== '/'){\n url += '/';\n }\n\n return url;\n };\n\n EsriLeaflet.Util.isArcgisOnline = function(url){\n /* hosted feature services can emit geojson natively.\n our check for 'geojson' support will need to be revisted\n once the functionality makes its way to ArcGIS Server*/\n return (/\\.arcgis\\.com.*?FeatureServer/g).test(url);\n };\n\n EsriLeaflet.Util.geojsonTypeToArcGIS = function (geoJsonType) {\n var arcgisGeometryType;\n switch (geoJsonType) {\n case 'Point':\n arcgisGeometryType = 'esriGeometryPoint';\n break;\n case 'MultiPoint':\n arcgisGeometryType = 'esriGeometryMultipoint';\n break;\n case 'LineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'MultiLineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'Polygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n case 'MultiPolygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n }\n return arcgisGeometryType;\n };\n\n EsriLeaflet.Util.requestAnimationFrame = L.Util.bind(raf, window);\n\n EsriLeaflet.Util.warn = function (message) {\n if(console && console.warn) {\n console.warn(message);\n }\n };\n\n})(EsriLeaflet);","(function(EsriLeaflet){\n\n var callbacks = 0;\n\n window._EsriLeafletCallbacks = {};\n\n function serialize(params){\n var data = '';\n\n params.f = params.f || 'json';\n\n for (var key in params){\n if(params.hasOwnProperty(key)){\n var param = params[key];\n var type = Object.prototype.toString.call(param);\n var value;\n\n if(data.length){\n data += '&';\n }\n\n if (type === '[object Array]'){\n value = (Object.prototype.toString.call(param[0]) === '[object Object]') ? JSON.stringify(param) : param.join(',');\n } else if (type === '[object Object]') {\n value = JSON.stringify(param);\n } else if (type === '[object Date]'){\n value = param.valueOf();\n } else {\n value = param;\n }\n\n data += encodeURIComponent(key) + '=' + encodeURIComponent(value);\n }\n }\n\n return data;\n }\n\n function createRequest(callback, context){\n var httpRequest = new XMLHttpRequest();\n\n httpRequest.onerror = function(e) {\n httpRequest.onreadystatechange = L.Util.falseFn;\n\n callback.call(context, {\n error: {\n code: 500,\n message: 'XMLHttpRequest error'\n }\n }, null);\n };\n\n httpRequest.onreadystatechange = function(){\n var response;\n var error;\n\n if (httpRequest.readyState === 4) {\n try {\n response = JSON.parse(httpRequest.responseText);\n } catch(e) {\n response = null;\n error = {\n code: 500,\n message: 'Could not parse response as JSON. This could also be caused by a CORS or XMLHttpRequest error.'\n };\n }\n\n if (!error && response.error) {\n error = response.error;\n response = null;\n }\n\n httpRequest.onerror = L.Util.falseFn;\n\n callback.call(context, error, response);\n }\n };\n\n return httpRequest;\n }\n\n // AJAX handlers for CORS (modern browsers) or JSONP (older browsers)\n EsriLeaflet.Request = {\n request: function(url, params, callback, context){\n var paramString = serialize(params);\n var httpRequest = createRequest(callback, context);\n var requestLength = (url + '?' + paramString).length;\n\n // request is less then 2000 characters and the browser supports CORS, make GET request with XMLHttpRequest\n if(requestLength <= 2000 && L.esri.Support.CORS){\n httpRequest.open('GET', url + '?' + paramString);\n httpRequest.send(null);\n\n // request is less more then 2000 characters and the browser supports CORS, make POST request with XMLHttpRequest\n } else if (requestLength > 2000 && L.esri.Support.CORS){\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(paramString);\n\n // request is less more then 2000 characters and the browser does not support CORS, make a JSONP request\n } else if(requestLength <= 2000 && !L.esri.Support.CORS){\n return L.esri.Request.get.JSONP(url, params, callback, context);\n\n // request is longer then 2000 characters and the browser does not support CORS, log a warning\n } else {\n EsriLeaflet.Util.warn('a request to ' + url + ' was longer then 2000 characters and this browser cannot make a cross-domain post request. Please use a proxy http://esri.github.io/esri-leaflet/api-reference/request.html');\n return;\n }\n\n return httpRequest;\n },\n\n post: {\n XMLHTTP: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(serialize(params));\n\n return httpRequest;\n }\n },\n\n get: {\n CORS: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n\n httpRequest.open('GET', url + '?' + serialize(params), true);\n httpRequest.send(null);\n\n return httpRequest;\n },\n JSONP: function(url, params, callback, context){\n var callbackId = 'c' + callbacks;\n\n params.callback = 'window._EsriLeafletCallbacks.' + callbackId;\n\n var script = L.DomUtil.create('script', null, document.body);\n script.type = 'text/javascript';\n script.src = url + '?' + serialize(params);\n script.id = callbackId;\n\n window._EsriLeafletCallbacks[callbackId] = function(response){\n if(window._EsriLeafletCallbacks[callbackId] !== true){\n var error;\n var responseType = Object.prototype.toString.call(response);\n\n if(!(responseType === '[object Object]' || responseType === '[object Array]')){\n error = {\n error: {\n code: 500,\n message: 'Expected array or object as JSONP response'\n }\n };\n response = null;\n }\n\n if (!error && response.error) {\n error = response;\n response = null;\n }\n\n callback.call(context, error, response);\n window._EsriLeafletCallbacks[callbackId] = true;\n }\n };\n\n callbacks++;\n\n return {\n id: callbackId,\n url: script.src,\n abort: function(){\n window._EsriLeafletCallbacks._callback[callbackId]({\n code: 0,\n message: 'Request aborted.'\n });\n }\n };\n }\n }\n };\n\n // choose the correct AJAX handler depending on CORS support\n EsriLeaflet.get = (EsriLeaflet.Support.CORS) ? EsriLeaflet.Request.get.CORS : EsriLeaflet.Request.get.JSONP;\n\n // always use XMLHttpRequest for posts\n EsriLeaflet.post = EsriLeaflet.Request.post.XMLHTTP;\n\n // expose a common request method the uses GET\\POST based on request length\n EsriLeaflet.request = EsriLeaflet.Request.request;\n\n})(EsriLeaflet);","EsriLeaflet.Services.Service = L.Class.extend({\n\n includes: L.Mixin.Events,\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n initialize: function (options) {\n options = options || {};\n this._requestQueue = [];\n this._authenticating = false;\n L.Util.setOptions(this, options);\n this.options.url = EsriLeaflet.Util.cleanUrl(this.options.url);\n },\n\n get: function (path, params, callback, context) {\n return this._request('get', path, params, callback, context);\n },\n\n post: function (path, params, callback, context) {\n return this._request('post', path, params, callback, context);\n },\n\n request: function (path, params, callback, context) {\n return this._request('request', path, params, callback, context);\n },\n\n metadata: function (callback, context) {\n return this._request('get', '', {}, callback, context);\n },\n\n authenticate: function(token){\n this._authenticating = false;\n this.options.token = token;\n this._runQueue();\n return this;\n },\n\n _request: function(method, path, params, callback, context){\n this.fire('requeststart', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n\n var wrappedCallback = this._createServiceCallback(method, path, params, callback, context);\n\n if (this.options.token) {\n params.token = this.options.token;\n }\n\n if (this._authenticating) {\n this._requestQueue.push([method, path, params, callback, context]);\n return;\n } else {\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, wrappedCallback);\n } else {\n return EsriLeaflet[method](url, params, wrappedCallback);\n }\n }\n },\n\n _createServiceCallback: function(method, path, params, callback, context){\n return L.Util.bind(function(error, response){\n\n if (error && (error.code === 499 || error.code === 498)) {\n this._authenticating = true;\n\n this._requestQueue.push([method, path, params, callback, context]);\n\n // fire an event for users to handle and re-authenticate\n this.fire('authenticationrequired', {\n authenticate: L.Util.bind(this.authenticate, this)\n });\n\n // if the user has access to a callback they can handle the auth error\n error.authenticate = L.Util.bind(this.authenticate, this);\n }\n\n callback.call(context, error, response);\n\n if(error) {\n this.fire('requesterror', {\n url: this.options.url + path,\n params: params,\n message: error.message,\n code: error.code,\n method: method\n });\n } else {\n this.fire('requestsuccess', {\n url: this.options.url + path,\n params: params,\n response: response,\n method: method\n });\n }\n\n this.fire('requestend', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n }, this);\n },\n\n _runQueue: function(){\n for (var i = this._requestQueue.length - 1; i >= 0; i--) {\n var request = this._requestQueue[i];\n var method = request.shift();\n this[method].apply(this, request);\n }\n this._requestQueue = [];\n }\n\n});\n\nEsriLeaflet.Services.service = function(params){\n return new EsriLeaflet.Services.Service(params);\n};\n","EsriLeaflet.Services.FeatureLayerService = EsriLeaflet.Services.Service.extend({\n\n options: {\n idAttribute: 'OBJECTID'\n },\n\n query: function(){\n return new EsriLeaflet.Tasks.Query(this);\n },\n\n addFeature: function(feature, callback, context) {\n delete feature.id;\n\n feature = EsriLeaflet.Util.geojsonToArcGIS(feature);\n\n return this.post('addFeatures', {\n features: [feature]\n }, function(error, response){\n var result = (response && response.addResults) ? response.addResults[0] : undefined;\n if(callback){\n callback.call(context, error || response.addResults[0].error, result);\n }\n }, context);\n },\n\n updateFeature: function(feature, callback, context) {\n feature = EsriLeaflet.Util.geojsonToArcGIS(feature, this.options.idAttribute);\n\n return this.post('updateFeatures', {\n features: [feature]\n }, function(error, response){\n var result = (response && response.updateResults) ? response.updateResults[0] : undefined;\n if(callback){\n callback.call(context, error || response.updateResults[0].error, result);\n }\n }, context);\n },\n\n deleteFeature: function(id, callback, context) {\n return this.post('deleteFeatures', {\n objectIds: id\n }, function(error, response){\n var result = (response && response.deleteResults) ? response.deleteResults[0] : undefined;\n if(callback){\n callback.call(context, error || response.deleteResults[0].error, result);\n }\n }, context);\n },\n\n deleteFeatures: function(ids, callback, context) {\n return this.post('deleteFeatures', {\n objectIds: ids\n }, function(error, response){\n // pass back the entire array\n var result = (response && response.deleteResults) ? response.deleteResults : undefined;\n if(callback){\n callback.call(context, error || response.deleteResults[0].error, result);\n }\n }, context);\n }\n});\n\nEsriLeaflet.Services.featureLayerService = function(options) {\n return new EsriLeaflet.Services.FeatureLayerService(options);\n};\n","EsriLeaflet.Tasks.Task = L.Class.extend({\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n //Generate a method for each methodName:paramName in the setters for this task.\n generateSetter: function(param, context){\n return L.Util.bind(function(value){\n this.params[param] = value;\n return this;\n }, context);\n },\n\n initialize: function(endpoint){\n // endpoint can be either a url (and options) for an ArcGIS Rest Service or an instance of EsriLeaflet.Service\n if(endpoint.request && endpoint.options){\n this._service = endpoint;\n L.Util.setOptions(this, endpoint.options);\n } else {\n L.Util.setOptions(this, endpoint);\n this.options.url = L.esri.Util.cleanUrl(endpoint.url);\n }\n\n // clone default params into this object\n this.params = L.Util.extend({}, this.params || {});\n\n // generate setter methods based on the setters object implimented a child class\n if(this.setters){\n for (var setter in this.setters){\n var param = this.setters[setter];\n this[setter] = this.generateSetter(param, this);\n }\n }\n },\n\n token: function(token){\n if(this._service){\n this._service.authenticate(token);\n } else {\n this.params.token = token;\n }\n return this;\n },\n\n request: function(callback, context){\n if(this._service){\n return this._service.request(this.path, this.params, callback, context);\n } else {\n return this._request('request', this.path, this.params, callback, context);\n }\n },\n\n _request: function(method, path, params, callback, context){\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, callback, context);\n } else{\n return EsriLeaflet[method](url, params, callback, context);\n }\n }\n});","EsriLeaflet.Tasks.Query = EsriLeaflet.Tasks.Task.extend({\n setters: {\n 'offset': 'offset',\n 'limit': 'limit',\n 'fields': 'outFields',\n 'precision': 'geometryPrecision',\n 'featureIds': 'objectIds',\n 'returnGeometry': 'returnGeometry',\n 'token': 'token'\n },\n\n path: 'query',\n\n params: {\n returnGeometry: true,\n where: '1=1',\n outSr: 4326,\n outFields: '*'\n },\n\n within: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelContains'; // will make code read layer within geometry, to the api this will reads geometry contains layer\n return this;\n },\n\n intersects: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelIntersects';\n return this;\n },\n\n contains: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelWithin'; // will make code read layer contains geometry, to the api this will reads geometry within layer\n return this;\n },\n\n // crosses: function(geometry){\n // this._setGeometry(geometry);\n // this.params.spatialRel = 'esriSpatialRelCrosses';\n // return this;\n // },\n\n // touches: function(geometry){\n // this._setGeometry(geometry);\n // this.params.spatialRel = 'esriSpatialRelTouches';\n // return this;\n // },\n\n overlaps: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelOverlaps';\n return this;\n },\n\n // only valid for Feature Services running on ArcGIS Server 10.3 or ArcGIS Online\n nearby: function(latlng, radius){\n latlng = L.latLng(latlng);\n this.params.geometry = [latlng.lng, latlng.lat];\n this.params.geometryType = 'esriGeometryPoint';\n this.params.spatialRel = 'esriSpatialRelIntersects';\n this.params.units = 'esriSRUnit_Meter';\n this.params.distance = radius;\n this.params.inSr = 4326;\n return this;\n },\n\n where: function(string){\n // instead of converting double-quotes to single quotes, pass as is, and provide a more informative message if a 400 is encountered\n this.params.where = string;\n return this;\n },\n\n between: function(start, end){\n this.params.time = [start.valueOf(), end.valueOf()];\n return this;\n },\n\n simplify: function(map, factor){\n var mapWidth = Math.abs(map.getBounds().getWest() - map.getBounds().getEast());\n this.params.maxAllowableOffset = (mapWidth / map.getSize().y) * factor;\n return this;\n },\n\n orderBy: function(fieldName, order){\n order = order || 'ASC';\n this.params.orderByFields = (this.params.orderByFields) ? this.params.orderByFields + ',' : '';\n this.params.orderByFields += ([fieldName, order]).join(' ');\n return this;\n },\n\n run: function(callback, context){\n this._cleanParams();\n\n // if the service is hosted on arcgis online request geojson directly\n if(EsriLeaflet.Util.isArcgisOnline(this.options.url)){\n this.params.f = 'geojson';\n\n return this.request(function(error, response){\n this._trapSQLerrors(error);\n callback.call(context, error, response, response);\n }, this);\n\n // otherwise convert it in the callback then pass it on\n } else {\n return this.request(function(error, response){\n this._trapSQLerrors(error);\n callback.call(context, error, (response && EsriLeaflet.Util.responseToFeatureCollection(response)), response);\n }, this);\n }\n },\n\n count: function(callback, context){\n this._cleanParams();\n this.params.returnCountOnly = true;\n return this.request(function(error, response){\n callback.call(this, error, (response && response.count), response);\n }, context);\n },\n\n ids: function(callback, context){\n this._cleanParams();\n this.params.returnIdsOnly = true;\n return this.request(function(error, response){\n callback.call(this, error, (response && response.objectIds), response);\n }, context);\n },\n\n // only valid for Feature Services running on ArcGIS Server 10.3 or ArcGIS Online\n bounds: function(callback, context){\n this._cleanParams();\n this.params.returnExtentOnly = true;\n return this.request(function(error, response){\n callback.call(context, error, (response && response.extent && EsriLeaflet.Util.extentToBounds(response.extent)), response);\n }, context);\n },\n\n // only valid for image services\n pixelSize: function(point){\n point = L.point(point);\n this.params.pixelSize = [point.x,point.y];\n return this;\n },\n\n // only valid for map services\n layer: function(layer){\n this.path = layer + '/query';\n return this;\n },\n\n _trapSQLerrors: function(error){\n if (error){\n if (error.code === '400'){\n EsriLeaflet.Util.warn('one common syntax error in query requests is encasing string values in double quotes instead of single quotes');\n }\n }\n },\n\n _cleanParams: function(){\n delete this.params.returnIdsOnly;\n delete this.params.returnExtentOnly;\n delete this.params.returnCountOnly;\n },\n\n _setGeometry: function(geometry) {\n this.params.inSr = 4326;\n\n // convert bounds to extent and finish\n if ( geometry instanceof L.LatLngBounds ) {\n // set geometry + geometryType\n this.params.geometry = EsriLeaflet.Util.boundsToExtent(geometry);\n this.params.geometryType = 'esriGeometryEnvelope';\n return;\n }\n\n // convert L.Marker > L.LatLng\n if(geometry.getLatLng){\n geometry = geometry.getLatLng();\n }\n\n // convert L.LatLng to a geojson point and continue;\n if (geometry instanceof L.LatLng) {\n geometry = {\n type: 'Point',\n coordinates: [geometry.lng, geometry.lat]\n };\n }\n\n // handle L.GeoJSON, pull out the first geometry\n if ( geometry instanceof L.GeoJSON ) {\n //reassign geometry to the GeoJSON value (we are assuming that only one feature is present)\n geometry = geometry.getLayers()[0].feature.geometry;\n this.params.geometry = EsriLeaflet.Util.geojsonToArcGIS(geometry);\n this.params.geometryType = EsriLeaflet.Util.geojsonTypeToArcGIS(geometry.type);\n }\n\n // Handle L.Polyline and L.Polygon\n if (geometry.toGeoJSON) {\n geometry = geometry.toGeoJSON();\n }\n\n // handle GeoJSON feature by pulling out the geometry\n if ( geometry.type === 'Feature' ) {\n // get the geometry of the geojson feature\n geometry = geometry.geometry;\n }\n\n // confirm that our GeoJSON is a point, line or polygon\n if ( geometry.type === 'Point' || geometry.type === 'LineString' || geometry.type === 'Polygon') {\n this.params.geometry = EsriLeaflet.Util.geojsonToArcGIS(geometry);\n this.params.geometryType = EsriLeaflet.Util.geojsonTypeToArcGIS(geometry.type);\n return;\n }\n\n // warn the user if we havn't found a\n /* global console */\n EsriLeaflet.Util.warn('invalid geometry passed to spatial query. Should be an L.LatLng, L.LatLngBounds or L.Marker or a GeoJSON Point Line or Polygon object');\n\n return;\n }\n});\n\nEsriLeaflet.Tasks.query = function(params){\n return new EsriLeaflet.Tasks.Query(params);\n};","EsriLeaflet.Layers.FeatureGrid = L.Class.extend({\n\n includes: L.Mixin.Events,\n\n options: {\n cellSize: 512,\n updateInterval: 150\n },\n\n initialize: function (options) {\n options = L.setOptions(this, options);\n },\n\n onAdd: function (map) {\n this._map = map;\n this._update = L.Util.limitExecByInterval(this._update, this.options.updateInterval, this);\n\n // @TODO remove for leaflet 0.8\n this._map.addEventListener(this.getEvents(), this);\n\n this._reset();\n this._update();\n },\n\n onRemove: function(){\n this._map.removeEventListener(this.getEvents(), this);\n this._removeCells();\n },\n\n getEvents: function () {\n var events = {\n viewreset: this._reset,\n moveend: this._update,\n zoomend : this._onZoom\n };\n\n return events;\n },\n\n addTo: function(map){\n map.addLayer(this);\n return this;\n },\n\n removeFrom: function(map){\n map.removeLayer(this);\n return this;\n },\n\n _onZoom : function () {\n var zoom = this._map.getZoom();\n\n if (zoom > this.options.maxZoom ||\n zoom < this.options.minZoom) {\n this.removeFrom(this._map);\n this._map.addEventListener('zoomend', this.getEvents().zoomend, this);\n } else if (!this._map.hasLayer(this)) {\n this._map.removeEventListener('zoomend', this.getEvents().zoomend, this);\n this.addTo(this._map);\n }\n\n },\n\n _reset: function () {\n this._removeCells();\n\n this._cells = {};\n this._activeCells = {};\n this._cellsToLoad = 0;\n this._cellsTotal = 0;\n\n // @TODO enable at Leaflet 0.8\n // this._cellNumBounds = this._getCellNumBounds();\n\n this._resetWrap();\n },\n\n _resetWrap: function () {\n var map = this._map,\n crs = map.options.crs;\n\n if (crs.infinite) { return; }\n\n var cellSize = this._getCellSize();\n\n if (crs.wrapLng) {\n this._wrapLng = [\n Math.floor(map.project([0, crs.wrapLng[0]]).x / cellSize),\n Math.ceil(map.project([0, crs.wrapLng[1]]).x / cellSize)\n ];\n }\n\n if (crs.wrapLat) {\n this._wrapLat = [\n Math.floor(map.project([crs.wrapLat[0], 0]).y / cellSize),\n Math.ceil(map.project([crs.wrapLat[1], 0]).y / cellSize)\n ];\n }\n },\n\n _getCellSize: function () {\n return this.options.cellSize;\n },\n\n _update: function () {\n if (!this._map) { return; }\n\n var bounds = this._map.getPixelBounds(),\n zoom = this._map.getZoom(),\n cellSize = this._getCellSize(),\n cellPadding = [cellSize/2,cellSize/2];\n // cellPadding = [0,0]\n\n if (zoom > this.options.maxZoom ||\n zoom < this.options.minZoom) { return; }\n\n // cell coordinates range for the current view\n var topLeft = bounds.min.subtract(cellPadding).divideBy(cellSize).floor();\n topLeft.x = Math.max(topLeft.x, 0);\n topLeft.y = Math.max(topLeft.y, 0);\n\n var cellBounds = L.bounds(topLeft, bounds.max.add(cellPadding).divideBy(cellSize).floor());\n\n // remove any present cells that are off the specified bounds\n this._removeOtherCells(cellBounds);\n this._addCells(cellBounds);\n },\n\n _addCells: function (bounds) {\n var queue = [],\n center = bounds.getCenter(),\n zoom = this._map.getZoom();\n\n var j, i, coords;\n // create a queue of coordinates to load cells from\n for (j = bounds.min.y; j <= bounds.max.y; j++) {\n for (i = bounds.min.x; i <= bounds.max.x; i++) {\n coords = new L.Point(i, j);\n coords.z = zoom;\n\n // @TODO enable at Leaflet 0.8\n // if (this._isValidCell(coords)) {\n // queue.push(coords);\n // }\n\n queue.push(coords);\n }\n }\n var cellsToLoad = queue.length;\n\n if (cellsToLoad === 0) { return; }\n\n this._cellsToLoad += cellsToLoad;\n this._cellsTotal += cellsToLoad;\n\n // sort cell queue to load cells in order of their distance to center\n queue.sort(function (a, b) {\n return a.distanceTo(center) - b.distanceTo(center);\n });\n\n for (i = 0; i < cellsToLoad; i++) {\n this._addCell(queue[i]);\n }\n },\n\n // @TODO enable at Leaflet 0.8\n // _isValidCell: function (coords) {\n // var crs = this._map.options.crs;\n\n // if (!crs.infinite) {\n // // don't load cell if it's out of bounds and not wrapped\n // var bounds = this._cellNumBounds;\n // if (\n // (!crs.wrapLng && (coords.x < bounds.min.x || coords.x > bounds.max.x)) ||\n // (!crs.wrapLat && (coords.y < bounds.min.y || coords.y > bounds.max.y))\n // ) {\n // return false;\n // }\n // }\n\n // if (!this.options.bounds) {\n // return true;\n // }\n\n // // don't load cell if it doesn't intersect the bounds in options\n // var cellBounds = this._cellCoordsToBounds(coords);\n // return L.latLngBounds(this.options.bounds).intersects(cellBounds);\n // },\n\n // converts cell coordinates to its geographical bounds\n _cellCoordsToBounds: function (coords) {\n var map = this._map,\n cellSize = this.options.cellSize,\n\n nwPoint = coords.multiplyBy(cellSize),\n sePoint = nwPoint.add([cellSize, cellSize]),\n\n // @TODO for Leaflet 0.8\n // nw = map.wrapLatLng(map.unproject(nwPoint, coords.z)),\n // se = map.wrapLatLng(map.unproject(sePoint, coords.z));\n\n nw = map.unproject(nwPoint, coords.z).wrap(),\n se = map.unproject(sePoint, coords.z).wrap();\n\n return new L.LatLngBounds(nw, se);\n },\n\n // converts cell coordinates to key for the cell cache\n _cellCoordsToKey: function (coords) {\n return coords.x + ':' + coords.y;\n },\n\n // converts cell cache key to coordiantes\n _keyToCellCoords: function (key) {\n var kArr = key.split(':'),\n x = parseInt(kArr[0], 10),\n y = parseInt(kArr[1], 10);\n\n return new L.Point(x, y);\n },\n\n // remove any present cells that are off the specified bounds\n _removeOtherCells: function (bounds) {\n for (var key in this._cells) {\n if (!bounds.contains(this._keyToCellCoords(key))) {\n this._removeCell(key);\n }\n }\n },\n\n _removeCell: function (key) {\n var cell = this._activeCells[key];\n if(cell){\n delete this._activeCells[key];\n\n if (this.cellLeave) {\n this.cellLeave(cell.bounds, cell.coords);\n }\n\n this.fire('cellleave', {\n bounds: cell.bounds,\n coords: cell.coords\n });\n }\n },\n\n _removeCells: function(){\n for (var key in this._cells) {\n var bounds = this._cells[key].bounds;\n var coords = this._cells[key].coords;\n\n if (this.cellLeave) {\n this.cellLeave(bounds, coords);\n }\n\n this.fire('cellleave', {\n bounds: bounds,\n coords: coords\n });\n }\n },\n\n _addCell: function (coords) {\n\n // wrap cell coords if necessary (depending on CRS)\n this._wrapCoords(coords);\n\n // generate the cell key\n var key = this._cellCoordsToKey(coords);\n\n // get the cell from the cache\n var cell = this._cells[key];\n // if this cell should be shown as isnt active yet (enter)\n\n if (cell && !this._activeCells[key]) {\n if (this.cellEnter) {\n this.cellEnter(cell.bounds, coords);\n }\n\n this.fire('cellenter', {\n bounds: cell.bounds,\n coords: coords\n });\n\n this._activeCells[key] = cell;\n }\n\n // if we dont have this cell in the cache yet (create)\n if (!cell) {\n cell = {\n coords: coords,\n bounds: this._cellCoordsToBounds(coords)\n };\n\n this._cells[key] = cell;\n this._activeCells[key] = cell;\n\n if(this.createCell){\n this.createCell(cell.bounds, coords);\n }\n\n this.fire('cellcreate', {\n bounds: cell.bounds,\n coords: coords\n });\n }\n },\n\n _wrapCoords: function (coords) {\n coords.x = this._wrapLng ? L.Util.wrapNum(coords.x, this._wrapLng) : coords.x;\n coords.y = this._wrapLat ? L.Util.wrapNum(coords.y, this._wrapLat) : coords.y;\n }\n\n // get the global cell coordinates range for the current zoom\n // @TODO enable at Leaflet 0.8\n // _getCellNumBounds: function () {\n // // @TODO for Leaflet 0.8\n // // var bounds = this._map.getPixelWorldBounds(),\n // // size = this._getCellSize();\n // //\n // // return bounds ? L.bounds(\n // // bounds.min.divideBy(size).floor(),\n // // bounds.max.divideBy(size).ceil().subtract([1, 1])) : null;\n // }\n\n});","(function(EsriLeaflet){\n\n EsriLeaflet.Layers.FeatureManager = EsriLeaflet.Layers.FeatureGrid.extend({\n\n /**\n * Options\n */\n\n options: {\n where: '1=1',\n fields: ['*'],\n from: false,\n to: false,\n timeField: false,\n timeFilterMode: 'server',\n simplifyFactor: 0,\n precision: 6\n },\n\n /**\n * Constructor\n */\n\n initialize: function (options) {\n EsriLeaflet.Layers.FeatureGrid.prototype.initialize.call(this, options);\n\n options.url = EsriLeaflet.Util.cleanUrl(options.url);\n options = L.setOptions(this, options);\n\n this._service = new EsriLeaflet.Services.FeatureLayerService(options);\n\n //use case insensitive regex to look for common fieldnames used for indexing\n /*global console */\n if (this.options.fields[0] !== '*'){\n var oidCheck = false;\n for (var i = 0; i < this.options.fields.length; i++){\n if (this.options.fields[i].match(/^(OBJECTID|FID|OID|ID)$/i)){\n oidCheck = true;\n }\n }\n if (oidCheck === false) {\n EsriLeaflet.Util.warn('no known esriFieldTypeOID field detected in fields Array. Please add an attribute field containing unique IDs to ensure the layer can be drawn correctly.');\n }\n }\n\n // Leaflet 0.8 change to new propagation\n this._service.on('authenticationrequired requeststart requestend requesterror requestsuccess', function (e) {\n e = L.extend({\n target: this\n }, e);\n this.fire(e.type, e);\n }, this);\n\n if(this.options.timeField.start && this.options.timeField.end){\n this._startTimeIndex = new BinarySearchIndex();\n this._endTimeIndex = new BinarySearchIndex();\n } else if(this.options.timeField){\n this._timeIndex = new BinarySearchIndex();\n }\n\n this._cache = {};\n this._currentSnapshot = []; // cache of what layers should be active\n this._activeRequests = 0;\n this._pendingRequests = [];\n },\n\n /**\n * Layer Interface\n */\n\n onAdd: function(map){\n return EsriLeaflet.Layers.FeatureGrid.prototype.onAdd.call(this, map);\n },\n\n onRemove: function(map){\n return EsriLeaflet.Layers.FeatureGrid.prototype.onRemove.call(this, map);\n },\n\n getAttribution: function () {\n return this.options.attribution;\n },\n\n /**\n * Feature Managment\n */\n\n createCell: function(bounds, coords){\n this._requestFeatures(bounds, coords);\n },\n\n _requestFeatures: function(bounds, coords, callback){\n this._activeRequests++;\n\n // our first active request fires loading\n if(this._activeRequests === 1){\n this.fire('loading', {\n bounds: bounds\n });\n }\n\n this._buildQuery(bounds).run(function(error, featureCollection, response){\n if(response && response.exceededTransferLimit){\n this.fire('drawlimitexceeded');\n }\n\n // no error, features\n if(!error && featureCollection && featureCollection.features.length && !this._removed){\n // schedule adding features until the next animation frame\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){\n this._addFeatures(featureCollection.features, coords);\n this._postProcessFeatures(bounds);\n }, this));\n }\n\n // no error, no features\n if (!error && featureCollection && !featureCollection.features.length) {\n this._postProcessFeatures(bounds);\n }\n\n if(callback){\n callback.call(this, error, featureCollection);\n }\n }, this);\n },\n\n _postProcessFeatures: function (bounds) {\n //deincriment the request counter now that we have processed features\n this._activeRequests--;\n\n // if there are no more active requests fire a load event for this view\n if(this._activeRequests <= 0){\n this.fire('load', {\n bounds: bounds\n });\n }\n },\n\n _cacheKey: function (coords){\n return coords.z + ':' + coords.x + ':' +coords.y;\n },\n\n _addFeatures: function(features, coords){\n var key = this._cacheKey(coords);\n this._cache[key] = this._cache[key] || [];\n\n for (var i = features.length - 1; i >= 0; i--) {\n var id = features[i].id;\n this._currentSnapshot.push(id);\n this._cache[key].push(id);\n /*\n should we refactor the code in FeatureManager.setWhere()\n so that we can reuse it to make sure that we remove features\n on the client that are removed from the service?\n */\n\n }\n\n if(this.options.timeField){\n this._buildTimeIndexes(features);\n }\n\n var zoom = this._map.getZoom();\n\n if (zoom > this.options.maxZoom ||\n zoom < this.options.minZoom) { return; }\n\n this.createLayers(features);\n },\n\n _buildQuery: function(bounds){\n var query = this._service.query()\n .intersects(bounds)\n .where(this.options.where)\n .fields(this.options.fields)\n .precision(this.options.precision);\n\n if(this.options.simplifyFactor){\n query.simplify(this._map, this.options.simplifyFactor);\n }\n\n if(this.options.timeFilterMode === 'server' && this.options.from && this.options.to){\n query.between(this.options.from, this.options.to);\n }\n\n return query;\n },\n\n /**\n * Where Methods\n */\n\n setWhere: function(where, callback, context){\n\n this.options.where = (where && where.length) ? where : '1=1';\n\n var oldSnapshot = [];\n var newSnapshot = [];\n var pendingRequests = 0;\n var mostRecentError = null;\n var requestCallback = L.Util.bind(function(error, featureCollection){\n pendingRequests--;\n\n if(error) {\n mostRecentError = error;\n }\n\n if(featureCollection){\n for (var i = featureCollection.features.length - 1; i >= 0; i--) {\n newSnapshot.push(featureCollection.features[i].id);\n }\n }\n\n if(pendingRequests <= 0) {\n this._currentSnapshot = newSnapshot;\n // delay adding features until the next animation frame\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function() {\n this.removeLayers(oldSnapshot);\n this.addLayers(newSnapshot);\n if(callback) {\n callback.call(context, mostRecentError);\n }\n }, this));\n }\n }, this);\n\n for (var i = this._currentSnapshot.length - 1; i >= 0; i--) {\n oldSnapshot.push(this._currentSnapshot[i]);\n }\n\n for(var key in this._activeCells){\n pendingRequests++;\n var coords = this._keyToCellCoords(key);\n var bounds = this._cellCoordsToBounds(coords);\n this._requestFeatures(bounds, key, requestCallback);\n }\n\n return this;\n },\n\n getWhere: function(){\n return this.options.where;\n },\n\n /**\n * Time Range Methods\n */\n\n getTimeRange: function(){\n return [this.options.from, this.options.to];\n },\n\n setTimeRange: function(from, to, callback, context){\n var oldFrom = this.options.from;\n var oldTo = this.options.to;\n var pendingRequests = 0;\n var mostRecentError = null;\n var requestCallback = L.Util.bind(function(error){\n if(error){\n mostRecentError = error;\n }\n\n this._filterExistingFeatures(oldFrom, oldTo, from, to);\n\n pendingRequests--;\n\n if(callback && pendingRequests <= 0){\n callback.call(context, mostRecentError);\n }\n }, this);\n\n this.options.from = from;\n this.options.to = to;\n\n this._filterExistingFeatures(oldFrom, oldTo, from, to);\n\n if(this.options.timeFilterMode === 'server') {\n for(var key in this._activeCells){\n pendingRequests++;\n var coords = this._keyToCellCoords(key);\n var bounds = this._cellCoordsToBounds(coords);\n this._requestFeatures(bounds, key, requestCallback);\n }\n }\n },\n\n refresh: function(){\n for(var key in this._activeCells){\n var coords = this._keyToCellCoords(key);\n var bounds = this._cellCoordsToBounds(coords);\n this._requestFeatures(bounds, key);\n }\n\n if(this.redraw){\n this.once('load', function(){\n this.eachFeature(function(layer){\n this._redraw(layer.feature.id);\n }, this);\n }, this);\n }\n },\n\n _filterExistingFeatures: function (oldFrom, oldTo, newFrom, newTo) {\n var layersToRemove = (oldFrom && oldTo) ? this._getFeaturesInTimeRange(oldFrom, oldTo) : this._currentSnapshot;\n var layersToAdd = this._getFeaturesInTimeRange(newFrom, newTo);\n\n if(layersToAdd.indexOf){\n for (var i = 0; i < layersToAdd.length; i++) {\n var shouldRemoveLayer = layersToRemove.indexOf(layersToAdd[i]);\n if(shouldRemoveLayer >= 0){\n layersToRemove.splice(shouldRemoveLayer, 1);\n }\n }\n }\n\n // schedule adding features until the next animation frame\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){\n this.removeLayers(layersToRemove);\n this.addLayers(layersToAdd);\n }, this));\n },\n\n _getFeaturesInTimeRange: function(start, end){\n var ids = [];\n var search;\n\n if(this.options.timeField.start && this.options.timeField.end){\n var startTimes = this._startTimeIndex.between(start, end);\n var endTimes = this._endTimeIndex.between(start, end);\n search = startTimes.concat(endTimes);\n } else {\n search = this._timeIndex.between(start, end);\n }\n\n for (var i = search.length - 1; i >= 0; i--) {\n ids.push(search[i].id);\n }\n\n return ids;\n },\n\n _buildTimeIndexes: function(geojson){\n var i;\n var feature;\n if(this.options.timeField.start && this.options.timeField.end){\n var startTimeEntries = [];\n var endTimeEntries = [];\n for (i = geojson.length - 1; i >= 0; i--) {\n feature = geojson[i];\n startTimeEntries.push( {\n id: feature.id,\n value: new Date(feature.properties[this.options.timeField.start])\n });\n endTimeEntries.push( {\n id: feature.id,\n value: new Date(feature.properties[this.options.timeField.end])\n });\n }\n this._startTimeIndex.bulkAdd(startTimeEntries);\n this._endTimeIndex.bulkAdd(endTimeEntries);\n } else {\n var timeEntries = [];\n for (i = geojson.length - 1; i >= 0; i--) {\n feature = geojson[i];\n timeEntries.push( {\n id: feature.id,\n value: new Date(feature.properties[this.options.timeField])\n });\n }\n\n this._timeIndex.bulkAdd(timeEntries);\n }\n },\n\n _featureWithinTimeRange: function(feature){\n if(!this.options.from || !this.options.to){\n return true;\n }\n\n var from = +this.options.from.valueOf();\n var to = +this.options.to.valueOf();\n\n if(typeof this.options.timeField === 'string'){\n var date = +feature.properties[this.options.timeField];\n return (date >= from) && (date <= to);\n }\n\n if(this.options.timeField.start && this.options.timeField.end){\n var startDate = +feature.properties[this.options.timeField.start];\n var endDate = +feature.properties[this.options.timeField.end];\n return ((startDate >= from) && (startDate <= to)) || ((endDate >= from) && (endDate <= to));\n }\n },\n\n /**\n * Service Methods\n */\n\n authenticate: function(token){\n this._service.authenticate(token);\n return this;\n },\n\n metadata: function(callback, context){\n this._service.metadata(callback, context);\n return this;\n },\n\n query: function(){\n return this._service.query();\n },\n\n _getMetadata: function(callback){\n if(this._metadata){\n var error;\n callback(error, this._metadata);\n } else {\n this.metadata(L.Util.bind(function(error, response) {\n this._metadata = response;\n callback(error, this._metadata);\n }, this));\n }\n },\n\n addFeature: function(feature, callback, context){\n this._getMetadata(L.Util.bind(function(error, metadata){\n this._service.addFeature(feature, L.Util.bind(function(error, response){\n if(!error){\n // assign ID from result to appropriate objectid field from service metadata\n feature.properties[metadata.objectIdField] = response.objectId;\n\n // we also need to update the geojson id for createLayers() to function\n feature.id = response.objectId;\n this.createLayers([feature]);\n }\n\n if(callback){\n callback.call(context, error, response);\n }\n }, this));\n }, this));\n },\n\n updateFeature: function(feature, callback, context){\n this._service.updateFeature(feature, function(error, response){\n if(!error){\n this.removeLayers([feature.id], true);\n this.createLayers([feature]);\n }\n\n if(callback){\n callback.call(context, error, response);\n }\n }, this);\n },\n\n deleteFeature: function(id, callback, context){\n this._service.deleteFeature(id, function(error, response){\n if(!error && response.objectId){\n this.removeLayers([response.objectId], true);\n }\n\n if(callback){\n callback.call(context, error, response);\n }\n }, this);\n },\n\n deleteFeatures: function(ids, callback, context){\n return this._service.deleteFeatures(ids, function(error, response){\n if(!error && response.length > 0){\n for (var i=0; i +query) {\n maxIndex = currentIndex - 1;\n } else {\n return currentIndex;\n }\n }\n\n return ~maxIndex;\n };\n\n BinarySearchIndex.prototype.sort = function(){\n this.values.sort(function(a, b) {\n return +b.value - +a.value;\n }).reverse();\n this.dirty = false;\n };\n\n BinarySearchIndex.prototype.between = function(start, end){\n if(this.dirty){\n this.sort();\n }\n\n var startIndex = this._query(start);\n var endIndex = this._query(end);\n\n if(startIndex === 0 && endIndex === 0){\n return [];\n }\n\n startIndex = Math.abs(startIndex);\n endIndex = (endIndex < 0) ? Math.abs(endIndex): endIndex + 1;\n\n return this.values.slice(startIndex, endIndex);\n };\n\n BinarySearchIndex.prototype.bulkAdd = function(items){\n this.dirty = true;\n this.values = this.values.concat(items);\n };\n\n})(EsriLeaflet);\n","EsriLeaflet.Layers.FeatureLayer = EsriLeaflet.Layers.FeatureManager.extend({\n\n statics: {\n EVENTS: 'click dblclick mouseover mouseout mousemove contextmenu popupopen popupclose'\n },\n\n options: {\n cacheLayers: true\n },\n\n /**\n * Constructor\n */\n\n initialize: function (options) {\n EsriLeaflet.Layers.FeatureManager.prototype.initialize.call(this, options);\n\n options = L.setOptions(this, options);\n\n this._layers = {};\n this._leafletIds = {};\n this._key = 'c'+(Math.random() * 1e9).toString(36).replace('.', '_');\n },\n\n /**\n * Layer Interface\n */\n\n onAdd: function(map){\n map.on('zoomstart zoomend', function(e){\n this._zooming = (e.type === 'zoomstart');\n }, this);\n this._removed = false;\n\n return EsriLeaflet.Layers.FeatureManager.prototype.onAdd.call(this, map);\n },\n\n onRemove: function(map){\n this._removed = true;\n for (var i in this._layers) {\n map.removeLayer(this._layers[i]);\n }\n\n return EsriLeaflet.Layers.FeatureManager.prototype.onRemove.call(this, map);\n },\n\n createNewLayer: function(geojson){\n // @TODO Leaflet 0.8\n //newLayer = L.GeoJSON.geometryToLayer(geojson, this.options);\n return L.GeoJSON.geometryToLayer(geojson, this.options.pointToLayer, L.GeoJSON.coordsToLatLng, this.options);\n },\n\n _updateLayer: function(layer, geojson){\n // convert the geojson coordinates into a Leaflet LatLng array/nested arrays\n // pass it to setLatLngs to update layer geometries\n var latlngs = [];\n var coordsToLatLng = this.options.coordsToLatLng || L.GeoJSON.coordsToLatLng;\n\n // copy new attributes, if present\n if (geojson.properties) {\n layer.feature.properties = geojson.properties;\n }\n\n switch(geojson.geometry.type){\n case 'Point':\n latlngs = L.GeoJSON.coordsToLatLng(geojson.geometry.coordinates);\n layer.setLatLng(latlngs);\n break;\n case 'LineString':\n latlngs = L.GeoJSON.coordsToLatLngs(geojson.geometry.coordinates, 0, coordsToLatLng);\n layer.setLatLngs(latlngs);\n break;\n case 'MultiLineString':\n latlngs = L.GeoJSON.coordsToLatLngs(geojson.geometry.coordinates, 1, coordsToLatLng);\n layer.setLatLngs(latlngs);\n break;\n case 'Polygon':\n latlngs = L.GeoJSON.coordsToLatLngs(geojson.geometry.coordinates, 1, coordsToLatLng);\n layer.setLatLngs(latlngs);\n break;\n case 'MultiPolygon':\n latlngs = L.GeoJSON.coordsToLatLngs(geojson.geometry.coordinates, 2, coordsToLatLng);\n layer.setLatLngs(latlngs);\n break;\n }\n },\n\n /**\n * Feature Management Methods\n */\n\n createLayers: function(features){\n for (var i = features.length - 1; i >= 0; i--) {\n\n var geojson = features[i];\n\n var layer = this._layers[geojson.id];\n var newLayer;\n\n if(layer && !this._map.hasLayer(layer)){\n this._map.addLayer(layer);\n }\n\n // update geomerty if neccessary\n if (layer && (layer.setLatLngs || layer.setLatLng)) {\n this._updateLayer(layer, geojson);\n }\n\n\n if(!layer){\n newLayer = this.createNewLayer(geojson);\n newLayer.feature = geojson;\n\n if (this.options.style) {\n newLayer._originalStyle = this.options.style;\n }\n\n // circleMarker check\n else if (newLayer.setStyle) {\n newLayer._originalStyle = newLayer.options;\n }\n\n newLayer._leaflet_id = this._key + '_' + geojson.id;\n\n this._leafletIds[newLayer._leaflet_id] = geojson.id;\n\n // bubble events from layers to this\n // @TODO Leaflet 0.8\n // newLayer.addEventParent(this);\n\n newLayer.on(EsriLeaflet.Layers.FeatureLayer.EVENTS, this._propagateEvent, this);\n\n // bind a popup if we have one\n if(this._popup && newLayer.bindPopup){\n newLayer.bindPopup(this._popup(newLayer.feature, newLayer), this._popupOptions);\n }\n\n if(this.options.onEachFeature){\n this.options.onEachFeature(newLayer.feature, newLayer);\n }\n\n // cache the layer\n this._layers[newLayer.feature.id] = newLayer;\n\n // style the layer\n this.resetStyle(newLayer.feature.id);\n\n this.fire('createfeature', {\n feature: newLayer.feature\n });\n\n // add the layer if it is within the time bounds or our layer is not time enabled\n if(!this.options.timeField || (this.options.timeField && this._featureWithinTimeRange(geojson)) ){\n this._map.addLayer(newLayer);\n }\n }\n }\n },\n\n addLayers: function(ids){\n for (var i = ids.length - 1; i >= 0; i--) {\n var layer = this._layers[ids[i]];\n if(layer){\n this.fire('addfeature', {\n feature: layer.feature\n });\n this._map.addLayer(layer);\n }\n }\n },\n\n removeLayers: function(ids, permanent){\n for (var i = ids.length - 1; i >= 0; i--) {\n var id = ids[i];\n var layer = this._layers[id];\n if(layer){\n this.fire('removefeature', {\n feature: layer.feature,\n permanent: permanent\n });\n this._map.removeLayer(layer);\n }\n if(layer && permanent){\n delete this._layers[id];\n }\n }\n },\n\n cellEnter: function(bounds, coords){\n if(!this._zooming){\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){\n var cacheKey = this._cacheKey(coords);\n var cellKey = this._cellCoordsToKey(coords);\n var layers = this._cache[cacheKey];\n if(this._activeCells[cellKey] && layers){\n this.addLayers(layers);\n }\n }, this));\n }\n },\n\n cellLeave: function(bounds, coords){\n if(!this._zooming){\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){\n var cacheKey = this._cacheKey(coords);\n var cellKey = this._cellCoordsToKey(coords);\n var layers = this._cache[cacheKey];\n var mapBounds = this._map.getBounds();\n if(!this._activeCells[cellKey] && layers){\n var removable = true;\n\n for (var i = 0; i < layers.length; i++) {\n var layer = this._layers[layers[i]];\n if(layer && layer.getBounds && mapBounds.intersects(layer.getBounds())){\n removable = false;\n }\n }\n\n if(removable){\n this.removeLayers(layers, !this.options.cacheLayers);\n }\n\n if(!this.options.cacheLayers && removable){\n delete this._cache[cacheKey];\n delete this._cells[cellKey];\n delete this._activeCells[cellKey];\n }\n }\n }, this));\n }\n },\n\n /**\n * Styling Methods\n */\n\n resetStyle: function (id) {\n var layer = this._layers[id];\n\n if(layer){\n this.setFeatureStyle(layer.feature.id, layer._originalStyle);\n }\n\n return this;\n },\n\n setStyle: function (style) {\n this.options.style = style;\n this.eachFeature(function (layer) {\n this.setFeatureStyle(layer.feature.id, style);\n }, this);\n return this;\n },\n\n setFeatureStyle: function (id, style) {\n var layer = this._layers[id];\n\n if (typeof style === 'function') {\n style = style(layer.feature);\n }\n\n if (!style && !layer.defaultOptions) {\n style = L.Path.prototype.options;\n style.fill = true; //not set by default\n }\n\n if (layer && layer.setStyle) {\n layer.setStyle(style);\n }\n\n return this;\n },\n\n /**\n * Popup Methods\n */\n\n bindPopup: function (fn, options) {\n this._popup = fn;\n this._popupOptions = options;\n for (var i in this._layers) {\n var layer = this._layers[i];\n var popupContent = this._popup(layer.feature, layer);\n layer.bindPopup(popupContent, options);\n }\n return this;\n },\n\n unbindPopup: function () {\n this._popup = false;\n for (var i in this._layers) {\n var layer = this._layers[i];\n if (layer.unbindPopup) {\n layer.unbindPopup();\n } else if (layer.getLayers) {\n var groupLayers = layer.getLayers();\n for (var j in groupLayers) {\n var gLayer = groupLayers[j];\n gLayer.unbindPopup();\n }\n }\n }\n return this;\n },\n\n /**\n * Utility Methods\n */\n\n eachFeature: function (fn, context) {\n for (var i in this._layers) {\n fn.call(context, this._layers[i]);\n }\n return this;\n },\n\n getFeature: function (id) {\n return this._layers[id];\n },\n\n bringToBack: function () {\n this.eachFeature(function (layer) {\n if(layer.bringToBack) {\n layer.bringToBack();\n }\n });\n },\n\n bringToFront: function () {\n this.eachFeature(function (layer) {\n if(layer.bringToFront) {\n layer.bringToFront();\n }\n });\n },\n\n redraw: function (id) {\n if (id) {\n this._redraw(id);\n }\n return this;\n },\n\n _redraw: function(id) {\n var layer = this._layers[id];\n var geojson = layer.feature;\n\n // if this looks like a marker\n if (layer && layer.setIcon && this.options.pointToLayer) {\n // update custom symbology, if necessary\n if (this.options.pointToLayer){\n var getIcon = this.options.pointToLayer(geojson, L.latLng(geojson.geometry.coordinates[1], geojson.geometry.coordinates[0]));\n var updatedIcon = getIcon.options.icon;\n layer.setIcon(updatedIcon);\n }\n }\n\n // looks like a vector marker (circleMarker)\n if (layer && layer.setStyle && this.options.pointToLayer) {\n var getStyle = this.options.pointToLayer(geojson, L.latLng(geojson.geometry.coordinates[1], geojson.geometry.coordinates[0]));\n var updatedStyle = getStyle.options;\n this.setFeatureStyle(geojson.id, updatedStyle);\n }\n\n // looks like a path (polygon/polyline)\n if(layer && layer.setStyle && this.options.style) {\n this.resetStyle(geojson.id);\n }\n },\n\n // from https://github.com/Leaflet/Leaflet/blob/v0.7.2/src/layer/FeatureGroup.js\n // @TODO remove at Leaflet 0.8\n _propagateEvent: function (e) {\n e.layer = this._layers[this._leafletIds[e.target._leaflet_id]];\n e.target = this;\n this.fire(e.type, e);\n }\n});\n\nEsriLeaflet.FeatureLayer = EsriLeaflet.Layers.FeatureLayer;\n\nEsriLeaflet.Layers.featureLayer = function(options){\n return new EsriLeaflet.Layers.FeatureLayer(options);\n};\n\nEsriLeaflet.featureLayer = function(options){\n return new EsriLeaflet.Layers.FeatureLayer(options);\n};\n"]} \ No newline at end of file +{"version":3,"sources":["../../../src/EsriLeaflet.js","../../../src/Util.js","../../../src/Request.js","../../../src/Services/Service.js","../../../src/Services/FeatureLayerService.js","../../../src/Tasks/Task.js","../../../src/Tasks/Query.js","../../../src/Layers/FeatureLayer/FeatureGrid.js","../../../src/Layers/FeatureLayer/FeatureManager.js","../../../src/Layers/FeatureLayer/FeatureLayer.js"],"names":[],"mappings":"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","file":"esri-leaflet-feature-layer-src.js","sourcesContent":["var EsriLeaflet = { //jshint ignore:line\n VERSION: '1.0.3',\n Layers: {},\n Services: {},\n Controls: {},\n Tasks: {},\n Util: {},\n Support: {\n CORS: !!(window.XMLHttpRequest && 'withCredentials' in new XMLHttpRequest()),\n pointerEvents: document.documentElement.style.pointerEvents === ''\n }\n};\n\nif(typeof window !== 'undefined' && window.L){\n window.L.esri = EsriLeaflet;\n}\n","(function(EsriLeaflet){\n\n // normalize request animation frame\n var raf = window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.msRequestAnimationFrame ||\n function(cb) { return window.setTimeout(cb, 1000 / 60); };\n\n // shallow object clone for feature properties and attributes\n // from http://jsperf.com/cloning-an-object/2\n function clone(obj) {\n var target = {};\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n target[i] = obj[i];\n }\n }\n return target;\n }\n\n // checks if 2 x,y points are equal\n function pointsEqual(a, b) {\n for (var i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n\n // checks if the first and last points of a ring are equal and closes the ring\n function closeRing(coordinates) {\n if (!pointsEqual(coordinates[0], coordinates[coordinates.length - 1])) {\n coordinates.push(coordinates[0]);\n }\n return coordinates;\n }\n\n // determine if polygon ring coordinates are clockwise. clockwise signifies outer ring, counter-clockwise an inner ring\n // or hole. this logic was found at http://stackoverflow.com/questions/1165647/how-to-determine-if-a-list-of-polygon-\n // points-are-in-clockwise-order\n function ringIsClockwise(ringToTest) {\n var total = 0,i = 0;\n var rLength = ringToTest.length;\n var pt1 = ringToTest[i];\n var pt2;\n for (i; i < rLength - 1; i++) {\n pt2 = ringToTest[i + 1];\n total += (pt2[0] - pt1[0]) * (pt2[1] + pt1[1]);\n pt1 = pt2;\n }\n return (total >= 0);\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L504-L519\n function vertexIntersectsVertex(a1, a2, b1, b2) {\n var uaT = (b2[0] - b1[0]) * (a1[1] - b1[1]) - (b2[1] - b1[1]) * (a1[0] - b1[0]);\n var ubT = (a2[0] - a1[0]) * (a1[1] - b1[1]) - (a2[1] - a1[1]) * (a1[0] - b1[0]);\n var uB = (b2[1] - b1[1]) * (a2[0] - a1[0]) - (b2[0] - b1[0]) * (a2[1] - a1[1]);\n\n if ( uB !== 0 ) {\n var ua = uaT / uB;\n var ub = ubT / uB;\n\n if ( 0 <= ua && ua <= 1 && 0 <= ub && ub <= 1 ) {\n return true;\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L521-L531\n function arrayIntersectsArray(a, b) {\n for (var i = 0; i < a.length - 1; i++) {\n for (var j = 0; j < b.length - 1; j++) {\n if (vertexIntersectsVertex(a[i], a[i + 1], b[j], b[j + 1])) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L470-L480\n function coordinatesContainPoint(coordinates, point) {\n var contains = false;\n for(var i = -1, l = coordinates.length, j = l - 1; ++i < l; j = i) {\n if (((coordinates[i][1] <= point[1] && point[1] < coordinates[j][1]) ||\n (coordinates[j][1] <= point[1] && point[1] < coordinates[i][1])) &&\n (point[0] < (coordinates[j][0] - coordinates[i][0]) * (point[1] - coordinates[i][1]) / (coordinates[j][1] - coordinates[i][1]) + coordinates[i][0])) {\n contains = !contains;\n }\n }\n return contains;\n }\n\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L106-L113\n function coordinatesContainCoordinates(outer, inner){\n var intersects = arrayIntersectsArray(outer, inner);\n var contains = coordinatesContainPoint(outer, inner[0]);\n if(!intersects && contains){\n return true;\n }\n return false;\n }\n\n // do any polygons in this array contain any other polygons in this array?\n // used for checking for holes in arcgis rings\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L117-L172\n function convertRingsToGeoJSON(rings){\n var outerRings = [];\n var holes = [];\n var x; // iterator\n var outerRing; // current outer ring being evaluated\n var hole; // current hole being evaluated\n\n // for each ring\n for (var r = 0; r < rings.length; r++) {\n var ring = closeRing(rings[r].slice(0));\n if(ring.length < 4){\n continue;\n }\n // is this ring an outer ring? is it clockwise?\n if(ringIsClockwise(ring)){\n var polygon = [ ring ];\n outerRings.push(polygon); // push to outer rings\n } else {\n holes.push(ring); // counterclockwise push to holes\n }\n }\n\n var uncontainedHoles = [];\n\n // while there are holes left...\n while(holes.length){\n // pop a hole off out stack\n hole = holes.pop();\n\n // loop over all outer rings and see if they contain our hole.\n var contained = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(coordinatesContainCoordinates(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n contained = true;\n break;\n }\n }\n\n // ring is not contained in any outer ring\n // sometimes this happens https://github.com/Esri/esri-leaflet/issues/320\n if(!contained){\n uncontainedHoles.push(hole);\n }\n }\n\n // if we couldn't match any holes using contains we can try intersects...\n while(uncontainedHoles.length){\n // pop a hole off out stack\n hole = uncontainedHoles.pop();\n\n // loop over all outer rings and see if any intersect our hole.\n var intersects = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(arrayIntersectsArray(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n intersects = true;\n break;\n }\n }\n\n if(!intersects) {\n outerRings.push([hole.reverse()]);\n }\n }\n\n if(outerRings.length === 1){\n return {\n type: 'Polygon',\n coordinates: outerRings[0]\n };\n } else {\n return {\n type: 'MultiPolygon',\n coordinates: outerRings\n };\n }\n }\n\n // This function ensures that rings are oriented in the right directions\n // outer rings are clockwise, holes are counterclockwise\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function orientRings(poly){\n var output = [];\n var polygon = poly.slice(0);\n var outerRing = closeRing(polygon.shift().slice(0));\n if(outerRing.length >= 4){\n if(!ringIsClockwise(outerRing)){\n outerRing.reverse();\n }\n\n output.push(outerRing);\n\n for (var i = 0; i < polygon.length; i++) {\n var hole = closeRing(polygon[i].slice(0));\n if(hole.length >= 4){\n if(ringIsClockwise(hole)){\n hole.reverse();\n }\n output.push(hole);\n }\n }\n }\n\n return output;\n }\n\n // This function flattens holes in multipolygons to one array of polygons\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function flattenMultiPolygonRings(rings){\n var output = [];\n for (var i = 0; i < rings.length; i++) {\n var polygon = orientRings(rings[i]);\n for (var x = polygon.length - 1; x >= 0; x--) {\n var ring = polygon[x].slice(0);\n output.push(ring);\n }\n }\n return output;\n }\n\n // convert an extent (ArcGIS) to LatLngBounds (Leaflet)\n EsriLeaflet.Util.extentToBounds = function(extent){\n var sw = new L.LatLng(extent.ymin, extent.xmin);\n var ne = new L.LatLng(extent.ymax, extent.xmax);\n return new L.LatLngBounds(sw, ne);\n };\n\n // convert an LatLngBounds (Leaflet) to extent (ArcGIS)\n EsriLeaflet.Util.boundsToExtent = function(bounds) {\n bounds = L.latLngBounds(bounds);\n return {\n 'xmin': bounds.getSouthWest().lng,\n 'ymin': bounds.getSouthWest().lat,\n 'xmax': bounds.getNorthEast().lng,\n 'ymax': bounds.getNorthEast().lat,\n 'spatialReference': {\n 'wkid' : 4326\n }\n };\n };\n\n EsriLeaflet.Util.arcgisToGeojson = function (arcgis, idAttribute){\n var geojson = {};\n\n if(typeof arcgis.x === 'number' && typeof arcgis.y === 'number'){\n geojson.type = 'Point';\n geojson.coordinates = [arcgis.x, arcgis.y];\n }\n\n if(arcgis.points){\n geojson.type = 'MultiPoint';\n geojson.coordinates = arcgis.points.slice(0);\n }\n\n if(arcgis.paths) {\n if(arcgis.paths.length === 1){\n geojson.type = 'LineString';\n geojson.coordinates = arcgis.paths[0].slice(0);\n } else {\n geojson.type = 'MultiLineString';\n geojson.coordinates = arcgis.paths.slice(0);\n }\n }\n\n if(arcgis.rings) {\n geojson = convertRingsToGeoJSON(arcgis.rings.slice(0));\n }\n\n if(arcgis.geometry || arcgis.attributes) {\n geojson.type = 'Feature';\n geojson.geometry = (arcgis.geometry) ? EsriLeaflet.Util.arcgisToGeojson(arcgis.geometry) : null;\n geojson.properties = (arcgis.attributes) ? clone(arcgis.attributes) : null;\n if(arcgis.attributes) {\n geojson.id = arcgis.attributes[idAttribute] || arcgis.attributes.OBJECTID || arcgis.attributes.FID;\n }\n }\n\n return geojson;\n };\n\n // GeoJSON -> ArcGIS\n EsriLeaflet.Util.geojsonToArcGIS = function(geojson, idAttribute){\n idAttribute = idAttribute || 'OBJECTID';\n var spatialReference = { wkid: 4326 };\n var result = {};\n var i;\n\n switch(geojson.type){\n case 'Point':\n result.x = geojson.coordinates[0];\n result.y = geojson.coordinates[1];\n result.spatialReference = spatialReference;\n break;\n case 'MultiPoint':\n result.points = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'LineString':\n result.paths = [geojson.coordinates.slice(0)];\n result.spatialReference = spatialReference;\n break;\n case 'MultiLineString':\n result.paths = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'Polygon':\n result.rings = orientRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'MultiPolygon':\n result.rings = flattenMultiPolygonRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'Feature':\n if(geojson.geometry) {\n result.geometry = EsriLeaflet.Util.geojsonToArcGIS(geojson.geometry, idAttribute);\n }\n result.attributes = (geojson.properties) ? clone(geojson.properties) : {};\n if(geojson.id){\n result.attributes[idAttribute] = geojson.id;\n }\n break;\n case 'FeatureCollection':\n result = [];\n for (i = 0; i < geojson.features.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.features[i], idAttribute));\n }\n break;\n case 'GeometryCollection':\n result = [];\n for (i = 0; i < geojson.geometries.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.geometries[i], idAttribute));\n }\n break;\n }\n\n return result;\n };\n\n EsriLeaflet.Util.responseToFeatureCollection = function(response, idAttribute){\n var objectIdField;\n\n if(idAttribute){\n objectIdField = idAttribute;\n } else if(response.objectIdFieldName){\n objectIdField = response.objectIdFieldName;\n } else if(response.fields) {\n for (var j = 0; j <= response.fields.length - 1; j++) {\n if(response.fields[j].type === 'esriFieldTypeOID') {\n objectIdField = response.fields[j].name;\n break;\n }\n }\n } else {\n objectIdField = 'OBJECTID';\n }\n\n var featureCollection = {\n type: 'FeatureCollection',\n features: []\n };\n var features = response.features || response.results;\n if(features.length){\n for (var i = features.length - 1; i >= 0; i--) {\n featureCollection.features.push(EsriLeaflet.Util.arcgisToGeojson(features[i], objectIdField));\n }\n }\n\n return featureCollection;\n };\n\n // trim url whitespace and add a trailing slash if needed\n EsriLeaflet.Util.cleanUrl = function(url){\n //trim leading and trailing spaces, but not spaces inside the url\n url = url.replace(/^\\s+|\\s+$|\\A\\s+|\\s+\\z/g, '');\n\n //add a trailing slash to the url if the user omitted it\n if(url[url.length-1] !== '/'){\n url += '/';\n }\n\n return url;\n };\n\n EsriLeaflet.Util.isArcgisOnline = function(url){\n /* hosted feature services can emit geojson natively.\n our check for 'geojson' support will need to be revisted\n once the functionality makes its way to ArcGIS Server*/\n return (/\\.arcgis\\.com.*?FeatureServer/g).test(url);\n };\n\n EsriLeaflet.Util.geojsonTypeToArcGIS = function (geoJsonType) {\n var arcgisGeometryType;\n switch (geoJsonType) {\n case 'Point':\n arcgisGeometryType = 'esriGeometryPoint';\n break;\n case 'MultiPoint':\n arcgisGeometryType = 'esriGeometryMultipoint';\n break;\n case 'LineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'MultiLineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'Polygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n case 'MultiPolygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n }\n return arcgisGeometryType;\n };\n\n EsriLeaflet.Util.requestAnimationFrame = L.Util.bind(raf, window);\n\n EsriLeaflet.Util.warn = function (message) {\n if(console && console.warn) {\n console.warn(message);\n }\n };\n\n})(EsriLeaflet);","(function(EsriLeaflet){\n\n var callbacks = 0;\n\n window._EsriLeafletCallbacks = {};\n\n function serialize(params){\n var data = '';\n\n params.f = params.f || 'json';\n\n for (var key in params){\n if(params.hasOwnProperty(key)){\n var param = params[key];\n var type = Object.prototype.toString.call(param);\n var value;\n\n if(data.length){\n data += '&';\n }\n\n if (type === '[object Array]'){\n value = (Object.prototype.toString.call(param[0]) === '[object Object]') ? JSON.stringify(param) : param.join(',');\n } else if (type === '[object Object]') {\n value = JSON.stringify(param);\n } else if (type === '[object Date]'){\n value = param.valueOf();\n } else {\n value = param;\n }\n\n data += encodeURIComponent(key) + '=' + encodeURIComponent(value);\n }\n }\n\n return data;\n }\n\n function createRequest(callback, context){\n var httpRequest = new XMLHttpRequest();\n\n httpRequest.onerror = function(e) {\n httpRequest.onreadystatechange = L.Util.falseFn;\n\n callback.call(context, {\n error: {\n code: 500,\n message: 'XMLHttpRequest error'\n }\n }, null);\n };\n\n httpRequest.onreadystatechange = function(){\n var response;\n var error;\n\n if (httpRequest.readyState === 4) {\n try {\n response = JSON.parse(httpRequest.responseText);\n } catch(e) {\n response = null;\n error = {\n code: 500,\n message: 'Could not parse response as JSON. This could also be caused by a CORS or XMLHttpRequest error.'\n };\n }\n\n if (!error && response.error) {\n error = response.error;\n response = null;\n }\n\n httpRequest.onerror = L.Util.falseFn;\n\n callback.call(context, error, response);\n }\n };\n\n return httpRequest;\n }\n\n // AJAX handlers for CORS (modern browsers) or JSONP (older browsers)\n EsriLeaflet.Request = {\n request: function(url, params, callback, context){\n var paramString = serialize(params);\n var httpRequest = createRequest(callback, context);\n var requestLength = (url + '?' + paramString).length;\n\n // request is less then 2000 characters and the browser supports CORS, make GET request with XMLHttpRequest\n if(requestLength <= 2000 && L.esri.Support.CORS){\n httpRequest.open('GET', url + '?' + paramString);\n httpRequest.send(null);\n\n // request is less more then 2000 characters and the browser supports CORS, make POST request with XMLHttpRequest\n } else if (requestLength > 2000 && L.esri.Support.CORS){\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(paramString);\n\n // request is less more then 2000 characters and the browser does not support CORS, make a JSONP request\n } else if(requestLength <= 2000 && !L.esri.Support.CORS){\n return L.esri.Request.get.JSONP(url, params, callback, context);\n\n // request is longer then 2000 characters and the browser does not support CORS, log a warning\n } else {\n EsriLeaflet.Util.warn('a request to ' + url + ' was longer then 2000 characters and this browser cannot make a cross-domain post request. Please use a proxy http://esri.github.io/esri-leaflet/api-reference/request.html');\n return;\n }\n\n return httpRequest;\n },\n\n post: {\n XMLHTTP: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(serialize(params));\n\n return httpRequest;\n }\n },\n\n get: {\n CORS: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n\n httpRequest.open('GET', url + '?' + serialize(params), true);\n httpRequest.send(null);\n\n return httpRequest;\n },\n JSONP: function(url, params, callback, context){\n var callbackId = 'c' + callbacks;\n\n params.callback = 'window._EsriLeafletCallbacks.' + callbackId;\n\n var script = L.DomUtil.create('script', null, document.body);\n script.type = 'text/javascript';\n script.src = url + '?' + serialize(params);\n script.id = callbackId;\n\n window._EsriLeafletCallbacks[callbackId] = function(response){\n if(window._EsriLeafletCallbacks[callbackId] !== true){\n var error;\n var responseType = Object.prototype.toString.call(response);\n\n if(!(responseType === '[object Object]' || responseType === '[object Array]')){\n error = {\n error: {\n code: 500,\n message: 'Expected array or object as JSONP response'\n }\n };\n response = null;\n }\n\n if (!error && response.error) {\n error = response;\n response = null;\n }\n\n callback.call(context, error, response);\n window._EsriLeafletCallbacks[callbackId] = true;\n }\n };\n\n callbacks++;\n\n return {\n id: callbackId,\n url: script.src,\n abort: function(){\n window._EsriLeafletCallbacks._callback[callbackId]({\n code: 0,\n message: 'Request aborted.'\n });\n }\n };\n }\n }\n };\n\n // choose the correct AJAX handler depending on CORS support\n EsriLeaflet.get = (EsriLeaflet.Support.CORS) ? EsriLeaflet.Request.get.CORS : EsriLeaflet.Request.get.JSONP;\n\n // always use XMLHttpRequest for posts\n EsriLeaflet.post = EsriLeaflet.Request.post.XMLHTTP;\n\n // expose a common request method the uses GET\\POST based on request length\n EsriLeaflet.request = EsriLeaflet.Request.request;\n\n})(EsriLeaflet);","EsriLeaflet.Services.Service = L.Class.extend({\n\n includes: L.Mixin.Events,\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n initialize: function (options) {\n options = options || {};\n this._requestQueue = [];\n this._authenticating = false;\n L.Util.setOptions(this, options);\n this.options.url = EsriLeaflet.Util.cleanUrl(this.options.url);\n },\n\n get: function (path, params, callback, context) {\n return this._request('get', path, params, callback, context);\n },\n\n post: function (path, params, callback, context) {\n return this._request('post', path, params, callback, context);\n },\n\n request: function (path, params, callback, context) {\n return this._request('request', path, params, callback, context);\n },\n\n metadata: function (callback, context) {\n return this._request('get', '', {}, callback, context);\n },\n\n authenticate: function(token){\n this._authenticating = false;\n this.options.token = token;\n this._runQueue();\n return this;\n },\n\n _request: function(method, path, params, callback, context){\n this.fire('requeststart', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n\n var wrappedCallback = this._createServiceCallback(method, path, params, callback, context);\n\n if (this.options.token) {\n params.token = this.options.token;\n }\n\n if (this._authenticating) {\n this._requestQueue.push([method, path, params, callback, context]);\n return;\n } else {\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, wrappedCallback);\n } else {\n return EsriLeaflet[method](url, params, wrappedCallback);\n }\n }\n },\n\n _createServiceCallback: function(method, path, params, callback, context){\n return L.Util.bind(function(error, response){\n\n if (error && (error.code === 499 || error.code === 498)) {\n this._authenticating = true;\n\n this._requestQueue.push([method, path, params, callback, context]);\n\n // fire an event for users to handle and re-authenticate\n this.fire('authenticationrequired', {\n authenticate: L.Util.bind(this.authenticate, this)\n });\n\n // if the user has access to a callback they can handle the auth error\n error.authenticate = L.Util.bind(this.authenticate, this);\n }\n\n callback.call(context, error, response);\n\n if(error) {\n this.fire('requesterror', {\n url: this.options.url + path,\n params: params,\n message: error.message,\n code: error.code,\n method: method\n });\n } else {\n this.fire('requestsuccess', {\n url: this.options.url + path,\n params: params,\n response: response,\n method: method\n });\n }\n\n this.fire('requestend', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n }, this);\n },\n\n _runQueue: function(){\n for (var i = this._requestQueue.length - 1; i >= 0; i--) {\n var request = this._requestQueue[i];\n var method = request.shift();\n this[method].apply(this, request);\n }\n this._requestQueue = [];\n }\n\n});\n\nEsriLeaflet.Services.service = function(params){\n return new EsriLeaflet.Services.Service(params);\n};\n","EsriLeaflet.Services.FeatureLayerService = EsriLeaflet.Services.Service.extend({\n\n options: {\n idAttribute: 'OBJECTID'\n },\n\n query: function(){\n return new EsriLeaflet.Tasks.Query(this);\n },\n\n addFeature: function(feature, callback, context) {\n delete feature.id;\n\n feature = EsriLeaflet.Util.geojsonToArcGIS(feature);\n\n return this.post('addFeatures', {\n features: [feature]\n }, function(error, response){\n var result = (response && response.addResults) ? response.addResults[0] : undefined;\n if(callback){\n callback.call(context, error || response.addResults[0].error, result);\n }\n }, context);\n },\n\n updateFeature: function(feature, callback, context) {\n feature = EsriLeaflet.Util.geojsonToArcGIS(feature, this.options.idAttribute);\n\n return this.post('updateFeatures', {\n features: [feature]\n }, function(error, response){\n var result = (response && response.updateResults) ? response.updateResults[0] : undefined;\n if(callback){\n callback.call(context, error || response.updateResults[0].error, result);\n }\n }, context);\n },\n\n deleteFeature: function(id, callback, context) {\n return this.post('deleteFeatures', {\n objectIds: id\n }, function(error, response){\n var result = (response && response.deleteResults) ? response.deleteResults[0] : undefined;\n if(callback){\n callback.call(context, error || response.deleteResults[0].error, result);\n }\n }, context);\n },\n\n deleteFeatures: function(ids, callback, context) {\n return this.post('deleteFeatures', {\n objectIds: ids\n }, function(error, response){\n // pass back the entire array\n var result = (response && response.deleteResults) ? response.deleteResults : undefined;\n if(callback){\n callback.call(context, error || response.deleteResults[0].error, result);\n }\n }, context);\n }\n});\n\nEsriLeaflet.Services.featureLayerService = function(options) {\n return new EsriLeaflet.Services.FeatureLayerService(options);\n};\n","EsriLeaflet.Tasks.Task = L.Class.extend({\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n //Generate a method for each methodName:paramName in the setters for this task.\n generateSetter: function(param, context){\n return L.Util.bind(function(value){\n this.params[param] = value;\n return this;\n }, context);\n },\n\n initialize: function(endpoint){\n // endpoint can be either a url (and options) for an ArcGIS Rest Service or an instance of EsriLeaflet.Service\n if(endpoint.request && endpoint.options){\n this._service = endpoint;\n L.Util.setOptions(this, endpoint.options);\n } else {\n L.Util.setOptions(this, endpoint);\n this.options.url = L.esri.Util.cleanUrl(endpoint.url);\n }\n\n // clone default params into this object\n this.params = L.Util.extend({}, this.params || {});\n\n // generate setter methods based on the setters object implimented a child class\n if(this.setters){\n for (var setter in this.setters){\n var param = this.setters[setter];\n this[setter] = this.generateSetter(param, this);\n }\n }\n },\n\n token: function(token){\n if(this._service){\n this._service.authenticate(token);\n } else {\n this.params.token = token;\n }\n return this;\n },\n\n request: function(callback, context){\n if(this._service){\n return this._service.request(this.path, this.params, callback, context);\n } else {\n return this._request('request', this.path, this.params, callback, context);\n }\n },\n\n _request: function(method, path, params, callback, context){\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, callback, context);\n } else{\n return EsriLeaflet[method](url, params, callback, context);\n }\n }\n});","EsriLeaflet.Tasks.Query = EsriLeaflet.Tasks.Task.extend({\n setters: {\n 'offset': 'offset',\n 'limit': 'limit',\n 'fields': 'outFields',\n 'precision': 'geometryPrecision',\n 'featureIds': 'objectIds',\n 'returnGeometry': 'returnGeometry',\n 'token': 'token'\n },\n\n path: 'query',\n\n params: {\n returnGeometry: true,\n where: '1=1',\n outSr: 4326,\n outFields: '*'\n },\n\n within: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelContains'; // will make code read layer within geometry, to the api this will reads geometry contains layer\n return this;\n },\n\n intersects: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelIntersects';\n return this;\n },\n\n contains: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelWithin'; // will make code read layer contains geometry, to the api this will reads geometry within layer\n return this;\n },\n\n // crosses: function(geometry){\n // this._setGeometry(geometry);\n // this.params.spatialRel = 'esriSpatialRelCrosses';\n // return this;\n // },\n\n // touches: function(geometry){\n // this._setGeometry(geometry);\n // this.params.spatialRel = 'esriSpatialRelTouches';\n // return this;\n // },\n\n overlaps: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelOverlaps';\n return this;\n },\n\n // only valid for Feature Services running on ArcGIS Server 10.3 or ArcGIS Online\n nearby: function(latlng, radius){\n latlng = L.latLng(latlng);\n this.params.geometry = [latlng.lng, latlng.lat];\n this.params.geometryType = 'esriGeometryPoint';\n this.params.spatialRel = 'esriSpatialRelIntersects';\n this.params.units = 'esriSRUnit_Meter';\n this.params.distance = radius;\n this.params.inSr = 4326;\n return this;\n },\n\n where: function(string){\n // instead of converting double-quotes to single quotes, pass as is, and provide a more informative message if a 400 is encountered\n this.params.where = string;\n return this;\n },\n\n between: function(start, end){\n this.params.time = [start.valueOf(), end.valueOf()];\n return this;\n },\n\n simplify: function(map, factor){\n var mapWidth = Math.abs(map.getBounds().getWest() - map.getBounds().getEast());\n this.params.maxAllowableOffset = (mapWidth / map.getSize().y) * factor;\n return this;\n },\n\n orderBy: function(fieldName, order){\n order = order || 'ASC';\n this.params.orderByFields = (this.params.orderByFields) ? this.params.orderByFields + ',' : '';\n this.params.orderByFields += ([fieldName, order]).join(' ');\n return this;\n },\n\n run: function(callback, context){\n this._cleanParams();\n\n // if the service is hosted on arcgis online request geojson directly\n if(EsriLeaflet.Util.isArcgisOnline(this.options.url)){\n this.params.f = 'geojson';\n\n return this.request(function(error, response){\n this._trapSQLerrors(error);\n callback.call(context, error, response, response);\n }, this);\n\n // otherwise convert it in the callback then pass it on\n } else {\n return this.request(function(error, response){\n this._trapSQLerrors(error);\n callback.call(context, error, (response && EsriLeaflet.Util.responseToFeatureCollection(response)), response);\n }, this);\n }\n },\n\n count: function(callback, context){\n this._cleanParams();\n this.params.returnCountOnly = true;\n return this.request(function(error, response){\n callback.call(this, error, (response && response.count), response);\n }, context);\n },\n\n ids: function(callback, context){\n this._cleanParams();\n this.params.returnIdsOnly = true;\n return this.request(function(error, response){\n callback.call(this, error, (response && response.objectIds), response);\n }, context);\n },\n\n // only valid for Feature Services running on ArcGIS Server 10.3 or ArcGIS Online\n bounds: function(callback, context){\n this._cleanParams();\n this.params.returnExtentOnly = true;\n return this.request(function(error, response){\n callback.call(context, error, (response && response.extent && EsriLeaflet.Util.extentToBounds(response.extent)), response);\n }, context);\n },\n\n // only valid for image services\n pixelSize: function(point){\n point = L.point(point);\n this.params.pixelSize = [point.x,point.y];\n return this;\n },\n\n // only valid for map services\n layer: function(layer){\n this.path = layer + '/query';\n return this;\n },\n\n _trapSQLerrors: function(error){\n if (error){\n if (error.code === '400'){\n EsriLeaflet.Util.warn('one common syntax error in query requests is encasing string values in double quotes instead of single quotes');\n }\n }\n },\n\n _cleanParams: function(){\n delete this.params.returnIdsOnly;\n delete this.params.returnExtentOnly;\n delete this.params.returnCountOnly;\n },\n\n _setGeometry: function(geometry) {\n this.params.inSr = 4326;\n\n // convert bounds to extent and finish\n if ( geometry instanceof L.LatLngBounds ) {\n // set geometry + geometryType\n this.params.geometry = EsriLeaflet.Util.boundsToExtent(geometry);\n this.params.geometryType = 'esriGeometryEnvelope';\n return;\n }\n\n // convert L.Marker > L.LatLng\n if(geometry.getLatLng){\n geometry = geometry.getLatLng();\n }\n\n // convert L.LatLng to a geojson point and continue;\n if (geometry instanceof L.LatLng) {\n geometry = {\n type: 'Point',\n coordinates: [geometry.lng, geometry.lat]\n };\n }\n\n // handle L.GeoJSON, pull out the first geometry\n if ( geometry instanceof L.GeoJSON ) {\n //reassign geometry to the GeoJSON value (we are assuming that only one feature is present)\n geometry = geometry.getLayers()[0].feature.geometry;\n this.params.geometry = EsriLeaflet.Util.geojsonToArcGIS(geometry);\n this.params.geometryType = EsriLeaflet.Util.geojsonTypeToArcGIS(geometry.type);\n }\n\n // Handle L.Polyline and L.Polygon\n if (geometry.toGeoJSON) {\n geometry = geometry.toGeoJSON();\n }\n\n // handle GeoJSON feature by pulling out the geometry\n if ( geometry.type === 'Feature' ) {\n // get the geometry of the geojson feature\n geometry = geometry.geometry;\n }\n\n // confirm that our GeoJSON is a point, line or polygon\n if ( geometry.type === 'Point' || geometry.type === 'LineString' || geometry.type === 'Polygon') {\n this.params.geometry = EsriLeaflet.Util.geojsonToArcGIS(geometry);\n this.params.geometryType = EsriLeaflet.Util.geojsonTypeToArcGIS(geometry.type);\n return;\n }\n\n // warn the user if we havn't found a\n /* global console */\n EsriLeaflet.Util.warn('invalid geometry passed to spatial query. Should be an L.LatLng, L.LatLngBounds or L.Marker or a GeoJSON Point Line or Polygon object');\n\n return;\n }\n});\n\nEsriLeaflet.Tasks.query = function(params){\n return new EsriLeaflet.Tasks.Query(params);\n};","EsriLeaflet.Layers.FeatureGrid = L.Class.extend({\n\n includes: L.Mixin.Events,\n\n options: {\n cellSize: 512,\n updateInterval: 150\n },\n\n initialize: function (options) {\n options = L.setOptions(this, options);\n },\n\n onAdd: function (map) {\n this._map = map;\n this._update = L.Util.limitExecByInterval(this._update, this.options.updateInterval, this);\n\n // @TODO remove for leaflet 0.8\n this._map.addEventListener(this.getEvents(), this);\n\n this._reset();\n this._update();\n },\n\n onRemove: function(){\n this._map.removeEventListener(this.getEvents(), this);\n this._removeCells();\n },\n\n getEvents: function () {\n var events = {\n viewreset: this._reset,\n moveend: this._update,\n zoomend : this._onZoom\n };\n\n return events;\n },\n\n addTo: function(map){\n map.addLayer(this);\n return this;\n },\n\n removeFrom: function(map){\n map.removeLayer(this);\n return this;\n },\n\n _onZoom : function () {\n var zoom = this._map.getZoom();\n\n if (zoom > this.options.maxZoom ||\n zoom < this.options.minZoom) {\n this.removeFrom(this._map);\n this._map.addEventListener('zoomend', this.getEvents().zoomend, this);\n } else if (!this._map.hasLayer(this)) {\n this._map.removeEventListener('zoomend', this.getEvents().zoomend, this);\n this.addTo(this._map);\n }\n\n },\n\n _reset: function () {\n this._removeCells();\n\n this._cells = {};\n this._activeCells = {};\n this._cellsToLoad = 0;\n this._cellsTotal = 0;\n\n // @TODO enable at Leaflet 0.8\n // this._cellNumBounds = this._getCellNumBounds();\n\n this._resetWrap();\n },\n\n _resetWrap: function () {\n var map = this._map,\n crs = map.options.crs;\n\n if (crs.infinite) { return; }\n\n var cellSize = this._getCellSize();\n\n if (crs.wrapLng) {\n this._wrapLng = [\n Math.floor(map.project([0, crs.wrapLng[0]]).x / cellSize),\n Math.ceil(map.project([0, crs.wrapLng[1]]).x / cellSize)\n ];\n }\n\n if (crs.wrapLat) {\n this._wrapLat = [\n Math.floor(map.project([crs.wrapLat[0], 0]).y / cellSize),\n Math.ceil(map.project([crs.wrapLat[1], 0]).y / cellSize)\n ];\n }\n },\n\n _getCellSize: function () {\n return this.options.cellSize;\n },\n\n _update: function () {\n if (!this._map) { return; }\n\n var bounds = this._map.getPixelBounds(),\n zoom = this._map.getZoom(),\n cellSize = this._getCellSize(),\n cellPadding = [cellSize/2,cellSize/2];\n // cellPadding = [0,0]\n\n if (zoom > this.options.maxZoom ||\n zoom < this.options.minZoom) { return; }\n\n // cell coordinates range for the current view\n var topLeft = bounds.min.subtract(cellPadding).divideBy(cellSize).floor();\n topLeft.x = Math.max(topLeft.x, 0);\n topLeft.y = Math.max(topLeft.y, 0);\n\n var cellBounds = L.bounds(topLeft, bounds.max.add(cellPadding).divideBy(cellSize).floor());\n\n // remove any present cells that are off the specified bounds\n this._removeOtherCells(cellBounds);\n this._addCells(cellBounds);\n },\n\n _addCells: function (bounds) {\n var queue = [],\n center = bounds.getCenter(),\n zoom = this._map.getZoom();\n\n var j, i, coords;\n // create a queue of coordinates to load cells from\n for (j = bounds.min.y; j <= bounds.max.y; j++) {\n for (i = bounds.min.x; i <= bounds.max.x; i++) {\n coords = new L.Point(i, j);\n coords.z = zoom;\n\n // @TODO enable at Leaflet 0.8\n // if (this._isValidCell(coords)) {\n // queue.push(coords);\n // }\n\n queue.push(coords);\n }\n }\n var cellsToLoad = queue.length;\n\n if (cellsToLoad === 0) { return; }\n\n this._cellsToLoad += cellsToLoad;\n this._cellsTotal += cellsToLoad;\n\n // sort cell queue to load cells in order of their distance to center\n queue.sort(function (a, b) {\n return a.distanceTo(center) - b.distanceTo(center);\n });\n\n for (i = 0; i < cellsToLoad; i++) {\n this._addCell(queue[i]);\n }\n },\n\n // @TODO enable at Leaflet 0.8\n // _isValidCell: function (coords) {\n // var crs = this._map.options.crs;\n\n // if (!crs.infinite) {\n // // don't load cell if it's out of bounds and not wrapped\n // var bounds = this._cellNumBounds;\n // if (\n // (!crs.wrapLng && (coords.x < bounds.min.x || coords.x > bounds.max.x)) ||\n // (!crs.wrapLat && (coords.y < bounds.min.y || coords.y > bounds.max.y))\n // ) {\n // return false;\n // }\n // }\n\n // if (!this.options.bounds) {\n // return true;\n // }\n\n // // don't load cell if it doesn't intersect the bounds in options\n // var cellBounds = this._cellCoordsToBounds(coords);\n // return L.latLngBounds(this.options.bounds).intersects(cellBounds);\n // },\n\n // converts cell coordinates to its geographical bounds\n _cellCoordsToBounds: function (coords) {\n var map = this._map,\n cellSize = this.options.cellSize,\n\n nwPoint = coords.multiplyBy(cellSize),\n sePoint = nwPoint.add([cellSize, cellSize]),\n\n // @TODO for Leaflet 0.8\n // nw = map.wrapLatLng(map.unproject(nwPoint, coords.z)),\n // se = map.wrapLatLng(map.unproject(sePoint, coords.z));\n\n nw = map.unproject(nwPoint, coords.z).wrap(),\n se = map.unproject(sePoint, coords.z).wrap();\n\n return new L.LatLngBounds(nw, se);\n },\n\n // converts cell coordinates to key for the cell cache\n _cellCoordsToKey: function (coords) {\n return coords.x + ':' + coords.y;\n },\n\n // converts cell cache key to coordiantes\n _keyToCellCoords: function (key) {\n var kArr = key.split(':'),\n x = parseInt(kArr[0], 10),\n y = parseInt(kArr[1], 10);\n\n return new L.Point(x, y);\n },\n\n // remove any present cells that are off the specified bounds\n _removeOtherCells: function (bounds) {\n for (var key in this._cells) {\n if (!bounds.contains(this._keyToCellCoords(key))) {\n this._removeCell(key);\n }\n }\n },\n\n _removeCell: function (key) {\n var cell = this._activeCells[key];\n if(cell){\n delete this._activeCells[key];\n\n if (this.cellLeave) {\n this.cellLeave(cell.bounds, cell.coords);\n }\n\n this.fire('cellleave', {\n bounds: cell.bounds,\n coords: cell.coords\n });\n }\n },\n\n _removeCells: function(){\n for (var key in this._cells) {\n var bounds = this._cells[key].bounds;\n var coords = this._cells[key].coords;\n\n if (this.cellLeave) {\n this.cellLeave(bounds, coords);\n }\n\n this.fire('cellleave', {\n bounds: bounds,\n coords: coords\n });\n }\n },\n\n _addCell: function (coords) {\n\n // wrap cell coords if necessary (depending on CRS)\n this._wrapCoords(coords);\n\n // generate the cell key\n var key = this._cellCoordsToKey(coords);\n\n // get the cell from the cache\n var cell = this._cells[key];\n // if this cell should be shown as isnt active yet (enter)\n\n if (cell && !this._activeCells[key]) {\n if (this.cellEnter) {\n this.cellEnter(cell.bounds, coords);\n }\n\n this.fire('cellenter', {\n bounds: cell.bounds,\n coords: coords\n });\n\n this._activeCells[key] = cell;\n }\n\n // if we dont have this cell in the cache yet (create)\n if (!cell) {\n cell = {\n coords: coords,\n bounds: this._cellCoordsToBounds(coords)\n };\n\n this._cells[key] = cell;\n this._activeCells[key] = cell;\n\n if(this.createCell){\n this.createCell(cell.bounds, coords);\n }\n\n this.fire('cellcreate', {\n bounds: cell.bounds,\n coords: coords\n });\n }\n },\n\n _wrapCoords: function (coords) {\n coords.x = this._wrapLng ? L.Util.wrapNum(coords.x, this._wrapLng) : coords.x;\n coords.y = this._wrapLat ? L.Util.wrapNum(coords.y, this._wrapLat) : coords.y;\n }\n\n // get the global cell coordinates range for the current zoom\n // @TODO enable at Leaflet 0.8\n // _getCellNumBounds: function () {\n // // @TODO for Leaflet 0.8\n // // var bounds = this._map.getPixelWorldBounds(),\n // // size = this._getCellSize();\n // //\n // // return bounds ? L.bounds(\n // // bounds.min.divideBy(size).floor(),\n // // bounds.max.divideBy(size).ceil().subtract([1, 1])) : null;\n // }\n\n});","(function(EsriLeaflet){\n\n EsriLeaflet.Layers.FeatureManager = EsriLeaflet.Layers.FeatureGrid.extend({\n\n /**\n * Options\n */\n\n options: {\n where: '1=1',\n fields: ['*'],\n from: false,\n to: false,\n timeField: false,\n timeFilterMode: 'server',\n simplifyFactor: 0,\n precision: 6\n },\n\n /**\n * Constructor\n */\n\n initialize: function (options) {\n EsriLeaflet.Layers.FeatureGrid.prototype.initialize.call(this, options);\n\n options.url = EsriLeaflet.Util.cleanUrl(options.url);\n options = L.setOptions(this, options);\n\n this._service = new EsriLeaflet.Services.FeatureLayerService(options);\n\n //use case insensitive regex to look for common fieldnames used for indexing\n /*global console */\n if (this.options.fields[0] !== '*'){\n var oidCheck = false;\n for (var i = 0; i < this.options.fields.length; i++){\n if (this.options.fields[i].match(/^(OBJECTID|FID|OID|ID)$/i)){\n oidCheck = true;\n }\n }\n if (oidCheck === false) {\n EsriLeaflet.Util.warn('no known esriFieldTypeOID field detected in fields Array. Please add an attribute field containing unique IDs to ensure the layer can be drawn correctly.');\n }\n }\n\n // Leaflet 0.8 change to new propagation\n this._service.on('authenticationrequired requeststart requestend requesterror requestsuccess', function (e) {\n e = L.extend({\n target: this\n }, e);\n this.fire(e.type, e);\n }, this);\n\n if(this.options.timeField.start && this.options.timeField.end){\n this._startTimeIndex = new BinarySearchIndex();\n this._endTimeIndex = new BinarySearchIndex();\n } else if(this.options.timeField){\n this._timeIndex = new BinarySearchIndex();\n }\n\n this._cache = {};\n this._currentSnapshot = []; // cache of what layers should be active\n this._activeRequests = 0;\n this._pendingRequests = [];\n },\n\n /**\n * Layer Interface\n */\n\n onAdd: function(map){\n return EsriLeaflet.Layers.FeatureGrid.prototype.onAdd.call(this, map);\n },\n\n onRemove: function(map){\n return EsriLeaflet.Layers.FeatureGrid.prototype.onRemove.call(this, map);\n },\n\n getAttribution: function () {\n return this.options.attribution;\n },\n\n /**\n * Feature Managment\n */\n\n createCell: function(bounds, coords){\n this._requestFeatures(bounds, coords);\n },\n\n _requestFeatures: function(bounds, coords, callback){\n this._activeRequests++;\n\n // our first active request fires loading\n if(this._activeRequests === 1){\n this.fire('loading', {\n bounds: bounds\n });\n }\n\n this._buildQuery(bounds).run(function(error, featureCollection, response){\n if(response && response.exceededTransferLimit){\n this.fire('drawlimitexceeded');\n }\n\n // no error, features\n if(!error && featureCollection && featureCollection.features.length && !this._removed){\n // schedule adding features until the next animation frame\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){\n this._addFeatures(featureCollection.features, coords);\n this._postProcessFeatures(bounds);\n }, this));\n }\n\n // no error, no features\n if (!error && featureCollection && !featureCollection.features.length) {\n this._postProcessFeatures(bounds);\n }\n\n if(callback){\n callback.call(this, error, featureCollection);\n }\n }, this);\n },\n\n _postProcessFeatures: function (bounds) {\n //deincriment the request counter now that we have processed features\n this._activeRequests--;\n\n // if there are no more active requests fire a load event for this view\n if(this._activeRequests <= 0){\n this.fire('load', {\n bounds: bounds\n });\n }\n },\n\n _cacheKey: function (coords){\n return coords.z + ':' + coords.x + ':' +coords.y;\n },\n\n _addFeatures: function(features, coords){\n var key = this._cacheKey(coords);\n this._cache[key] = this._cache[key] || [];\n\n for (var i = features.length - 1; i >= 0; i--) {\n var id = features[i].id;\n this._currentSnapshot.push(id);\n this._cache[key].push(id);\n /*\n should we refactor the code in FeatureManager.setWhere()\n so that we can reuse it to make sure that we remove features\n on the client that are removed from the service?\n */\n\n }\n\n if(this.options.timeField){\n this._buildTimeIndexes(features);\n }\n\n var zoom = this._map.getZoom();\n\n if (zoom > this.options.maxZoom ||\n zoom < this.options.minZoom) { return; }\n\n this.createLayers(features);\n },\n\n _buildQuery: function(bounds){\n var query = this._service.query()\n .intersects(bounds)\n .where(this.options.where)\n .fields(this.options.fields)\n .precision(this.options.precision);\n\n if(this.options.simplifyFactor){\n query.simplify(this._map, this.options.simplifyFactor);\n }\n\n if(this.options.timeFilterMode === 'server' && this.options.from && this.options.to){\n query.between(this.options.from, this.options.to);\n }\n\n return query;\n },\n\n /**\n * Where Methods\n */\n\n setWhere: function(where, callback, context){\n\n this.options.where = (where && where.length) ? where : '1=1';\n\n var oldSnapshot = [];\n var newSnapshot = [];\n var pendingRequests = 0;\n var mostRecentError = null;\n var requestCallback = L.Util.bind(function(error, featureCollection){\n pendingRequests--;\n\n if(error) {\n mostRecentError = error;\n }\n\n if(featureCollection){\n for (var i = featureCollection.features.length - 1; i >= 0; i--) {\n newSnapshot.push(featureCollection.features[i].id);\n }\n }\n\n if(pendingRequests <= 0) {\n this._currentSnapshot = newSnapshot;\n // delay adding features until the next animation frame\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function() {\n this.removeLayers(oldSnapshot);\n this.addLayers(newSnapshot);\n if(callback) {\n callback.call(context, mostRecentError);\n }\n }, this));\n }\n }, this);\n\n for (var i = this._currentSnapshot.length - 1; i >= 0; i--) {\n oldSnapshot.push(this._currentSnapshot[i]);\n }\n\n for(var key in this._activeCells){\n pendingRequests++;\n var coords = this._keyToCellCoords(key);\n var bounds = this._cellCoordsToBounds(coords);\n this._requestFeatures(bounds, key, requestCallback);\n }\n\n return this;\n },\n\n getWhere: function(){\n return this.options.where;\n },\n\n /**\n * Time Range Methods\n */\n\n getTimeRange: function(){\n return [this.options.from, this.options.to];\n },\n\n setTimeRange: function(from, to, callback, context){\n var oldFrom = this.options.from;\n var oldTo = this.options.to;\n var pendingRequests = 0;\n var mostRecentError = null;\n var requestCallback = L.Util.bind(function(error){\n if(error){\n mostRecentError = error;\n }\n\n this._filterExistingFeatures(oldFrom, oldTo, from, to);\n\n pendingRequests--;\n\n if(callback && pendingRequests <= 0){\n callback.call(context, mostRecentError);\n }\n }, this);\n\n this.options.from = from;\n this.options.to = to;\n\n this._filterExistingFeatures(oldFrom, oldTo, from, to);\n\n if(this.options.timeFilterMode === 'server') {\n for(var key in this._activeCells){\n pendingRequests++;\n var coords = this._keyToCellCoords(key);\n var bounds = this._cellCoordsToBounds(coords);\n this._requestFeatures(bounds, key, requestCallback);\n }\n }\n },\n\n refresh: function(){\n for(var key in this._activeCells){\n var coords = this._keyToCellCoords(key);\n var bounds = this._cellCoordsToBounds(coords);\n this._requestFeatures(bounds, key);\n }\n\n if(this.redraw){\n this.once('load', function(){\n this.eachFeature(function(layer){\n this._redraw(layer.feature.id);\n }, this);\n }, this);\n }\n },\n\n _filterExistingFeatures: function (oldFrom, oldTo, newFrom, newTo) {\n var layersToRemove = (oldFrom && oldTo) ? this._getFeaturesInTimeRange(oldFrom, oldTo) : this._currentSnapshot;\n var layersToAdd = this._getFeaturesInTimeRange(newFrom, newTo);\n\n if(layersToAdd.indexOf){\n for (var i = 0; i < layersToAdd.length; i++) {\n var shouldRemoveLayer = layersToRemove.indexOf(layersToAdd[i]);\n if(shouldRemoveLayer >= 0){\n layersToRemove.splice(shouldRemoveLayer, 1);\n }\n }\n }\n\n // schedule adding features until the next animation frame\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){\n this.removeLayers(layersToRemove);\n this.addLayers(layersToAdd);\n }, this));\n },\n\n _getFeaturesInTimeRange: function(start, end){\n var ids = [];\n var search;\n\n if(this.options.timeField.start && this.options.timeField.end){\n var startTimes = this._startTimeIndex.between(start, end);\n var endTimes = this._endTimeIndex.between(start, end);\n search = startTimes.concat(endTimes);\n } else {\n search = this._timeIndex.between(start, end);\n }\n\n for (var i = search.length - 1; i >= 0; i--) {\n ids.push(search[i].id);\n }\n\n return ids;\n },\n\n _buildTimeIndexes: function(geojson){\n var i;\n var feature;\n if(this.options.timeField.start && this.options.timeField.end){\n var startTimeEntries = [];\n var endTimeEntries = [];\n for (i = geojson.length - 1; i >= 0; i--) {\n feature = geojson[i];\n startTimeEntries.push( {\n id: feature.id,\n value: new Date(feature.properties[this.options.timeField.start])\n });\n endTimeEntries.push( {\n id: feature.id,\n value: new Date(feature.properties[this.options.timeField.end])\n });\n }\n this._startTimeIndex.bulkAdd(startTimeEntries);\n this._endTimeIndex.bulkAdd(endTimeEntries);\n } else {\n var timeEntries = [];\n for (i = geojson.length - 1; i >= 0; i--) {\n feature = geojson[i];\n timeEntries.push( {\n id: feature.id,\n value: new Date(feature.properties[this.options.timeField])\n });\n }\n\n this._timeIndex.bulkAdd(timeEntries);\n }\n },\n\n _featureWithinTimeRange: function(feature){\n if(!this.options.from || !this.options.to){\n return true;\n }\n\n var from = +this.options.from.valueOf();\n var to = +this.options.to.valueOf();\n\n if(typeof this.options.timeField === 'string'){\n var date = +feature.properties[this.options.timeField];\n return (date >= from) && (date <= to);\n }\n\n if(this.options.timeField.start && this.options.timeField.end){\n var startDate = +feature.properties[this.options.timeField.start];\n var endDate = +feature.properties[this.options.timeField.end];\n return ((startDate >= from) && (startDate <= to)) || ((endDate >= from) && (endDate <= to));\n }\n },\n\n /**\n * Service Methods\n */\n\n authenticate: function(token){\n this._service.authenticate(token);\n return this;\n },\n\n metadata: function(callback, context){\n this._service.metadata(callback, context);\n return this;\n },\n\n query: function(){\n return this._service.query();\n },\n\n _getMetadata: function(callback){\n if(this._metadata){\n var error;\n callback(error, this._metadata);\n } else {\n this.metadata(L.Util.bind(function(error, response) {\n this._metadata = response;\n callback(error, this._metadata);\n }, this));\n }\n },\n\n addFeature: function(feature, callback, context){\n this._getMetadata(L.Util.bind(function(error, metadata){\n this._service.addFeature(feature, L.Util.bind(function(error, response){\n if(!error){\n // assign ID from result to appropriate objectid field from service metadata\n feature.properties[metadata.objectIdField] = response.objectId;\n\n // we also need to update the geojson id for createLayers() to function\n feature.id = response.objectId;\n this.createLayers([feature]);\n }\n\n if(callback){\n callback.call(context, error, response);\n }\n }, this));\n }, this));\n },\n\n updateFeature: function(feature, callback, context){\n this._service.updateFeature(feature, function(error, response){\n if(!error){\n this.removeLayers([feature.id], true);\n this.createLayers([feature]);\n }\n\n if(callback){\n callback.call(context, error, response);\n }\n }, this);\n },\n\n deleteFeature: function(id, callback, context){\n this._service.deleteFeature(id, function(error, response){\n if(!error && response.objectId){\n this.removeLayers([response.objectId], true);\n }\n\n if(callback){\n callback.call(context, error, response);\n }\n }, this);\n },\n\n deleteFeatures: function(ids, callback, context){\n return this._service.deleteFeatures(ids, function(error, response){\n if(!error && response.length > 0){\n for (var i=0; i +query) {\n maxIndex = currentIndex - 1;\n } else {\n return currentIndex;\n }\n }\n\n return ~maxIndex;\n };\n\n BinarySearchIndex.prototype.sort = function(){\n this.values.sort(function(a, b) {\n return +b.value - +a.value;\n }).reverse();\n this.dirty = false;\n };\n\n BinarySearchIndex.prototype.between = function(start, end){\n if(this.dirty){\n this.sort();\n }\n\n var startIndex = this._query(start);\n var endIndex = this._query(end);\n\n if(startIndex === 0 && endIndex === 0){\n return [];\n }\n\n startIndex = Math.abs(startIndex);\n endIndex = (endIndex < 0) ? Math.abs(endIndex): endIndex + 1;\n\n return this.values.slice(startIndex, endIndex);\n };\n\n BinarySearchIndex.prototype.bulkAdd = function(items){\n this.dirty = true;\n this.values = this.values.concat(items);\n };\n\n})(EsriLeaflet);\n","EsriLeaflet.Layers.FeatureLayer = EsriLeaflet.Layers.FeatureManager.extend({\n\n statics: {\n EVENTS: 'click dblclick mouseover mouseout mousemove contextmenu popupopen popupclose'\n },\n\n options: {\n cacheLayers: true\n },\n\n /**\n * Constructor\n */\n\n initialize: function (options) {\n EsriLeaflet.Layers.FeatureManager.prototype.initialize.call(this, options);\n\n options = L.setOptions(this, options);\n\n this._layers = {};\n this._leafletIds = {};\n this._key = 'c'+(Math.random() * 1e9).toString(36).replace('.', '_');\n },\n\n /**\n * Layer Interface\n */\n\n onAdd: function(map){\n map.on('zoomstart zoomend', function(e){\n this._zooming = (e.type === 'zoomstart');\n }, this);\n this._removed = false;\n\n return EsriLeaflet.Layers.FeatureManager.prototype.onAdd.call(this, map);\n },\n\n onRemove: function(map){\n this._removed = true;\n for (var i in this._layers) {\n map.removeLayer(this._layers[i]);\n }\n\n return EsriLeaflet.Layers.FeatureManager.prototype.onRemove.call(this, map);\n },\n\n createNewLayer: function(geojson){\n // @TODO Leaflet 0.8\n //newLayer = L.GeoJSON.geometryToLayer(geojson, this.options);\n return L.GeoJSON.geometryToLayer(geojson, this.options.pointToLayer, L.GeoJSON.coordsToLatLng, this.options);\n },\n\n _updateLayer: function(layer, geojson){\n // convert the geojson coordinates into a Leaflet LatLng array/nested arrays\n // pass it to setLatLngs to update layer geometries\n var latlngs = [];\n var coordsToLatLng = this.options.coordsToLatLng || L.GeoJSON.coordsToLatLng;\n\n // copy new attributes, if present\n if (geojson.properties) {\n layer.feature.properties = geojson.properties;\n }\n\n switch(geojson.geometry.type){\n case 'Point':\n latlngs = L.GeoJSON.coordsToLatLng(geojson.geometry.coordinates);\n layer.setLatLng(latlngs);\n break;\n case 'LineString':\n latlngs = L.GeoJSON.coordsToLatLngs(geojson.geometry.coordinates, 0, coordsToLatLng);\n layer.setLatLngs(latlngs);\n break;\n case 'MultiLineString':\n latlngs = L.GeoJSON.coordsToLatLngs(geojson.geometry.coordinates, 1, coordsToLatLng);\n layer.setLatLngs(latlngs);\n break;\n case 'Polygon':\n latlngs = L.GeoJSON.coordsToLatLngs(geojson.geometry.coordinates, 1, coordsToLatLng);\n layer.setLatLngs(latlngs);\n break;\n case 'MultiPolygon':\n latlngs = L.GeoJSON.coordsToLatLngs(geojson.geometry.coordinates, 2, coordsToLatLng);\n layer.setLatLngs(latlngs);\n break;\n }\n },\n\n /**\n * Feature Management Methods\n */\n\n createLayers: function(features){\n for (var i = features.length - 1; i >= 0; i--) {\n\n var geojson = features[i];\n\n var layer = this._layers[geojson.id];\n var newLayer;\n\n if(layer && !this._map.hasLayer(layer)){\n this._map.addLayer(layer);\n }\n\n // update geomerty if neccessary\n if (layer && (layer.setLatLngs || layer.setLatLng)) {\n this._updateLayer(layer, geojson);\n }\n\n\n if(!layer){\n newLayer = this.createNewLayer(geojson);\n newLayer.feature = geojson;\n\n if (this.options.style) {\n newLayer._originalStyle = this.options.style;\n }\n\n // circleMarker check\n else if (newLayer.setStyle) {\n newLayer._originalStyle = newLayer.options;\n }\n\n newLayer._leaflet_id = this._key + '_' + geojson.id;\n\n this._leafletIds[newLayer._leaflet_id] = geojson.id;\n\n // bubble events from layers to this\n // @TODO Leaflet 0.8\n // newLayer.addEventParent(this);\n\n newLayer.on(EsriLeaflet.Layers.FeatureLayer.EVENTS, this._propagateEvent, this);\n\n // bind a popup if we have one\n if(this._popup && newLayer.bindPopup){\n newLayer.bindPopup(this._popup(newLayer.feature, newLayer), this._popupOptions);\n }\n\n if(this.options.onEachFeature){\n this.options.onEachFeature(newLayer.feature, newLayer);\n }\n\n // cache the layer\n this._layers[newLayer.feature.id] = newLayer;\n\n // style the layer\n this.resetStyle(newLayer.feature.id);\n\n this.fire('createfeature', {\n feature: newLayer.feature\n });\n\n // add the layer if it is within the time bounds or our layer is not time enabled\n if(!this.options.timeField || (this.options.timeField && this._featureWithinTimeRange(geojson)) ){\n this._map.addLayer(newLayer);\n }\n }\n }\n },\n\n addLayers: function(ids){\n for (var i = ids.length - 1; i >= 0; i--) {\n var layer = this._layers[ids[i]];\n if(layer){\n this.fire('addfeature', {\n feature: layer.feature\n });\n this._map.addLayer(layer);\n }\n }\n },\n\n removeLayers: function(ids, permanent){\n for (var i = ids.length - 1; i >= 0; i--) {\n var id = ids[i];\n var layer = this._layers[id];\n if(layer){\n this.fire('removefeature', {\n feature: layer.feature,\n permanent: permanent\n });\n this._map.removeLayer(layer);\n }\n if(layer && permanent){\n delete this._layers[id];\n }\n }\n },\n\n cellEnter: function(bounds, coords){\n if(!this._zooming){\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){\n var cacheKey = this._cacheKey(coords);\n var cellKey = this._cellCoordsToKey(coords);\n var layers = this._cache[cacheKey];\n if(this._activeCells[cellKey] && layers){\n this.addLayers(layers);\n }\n }, this));\n }\n },\n\n cellLeave: function(bounds, coords){\n if(!this._zooming){\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){\n var cacheKey = this._cacheKey(coords);\n var cellKey = this._cellCoordsToKey(coords);\n var layers = this._cache[cacheKey];\n var mapBounds = this._map.getBounds();\n if(!this._activeCells[cellKey] && layers){\n var removable = true;\n\n for (var i = 0; i < layers.length; i++) {\n var layer = this._layers[layers[i]];\n if(layer && layer.getBounds && mapBounds.intersects(layer.getBounds())){\n removable = false;\n }\n }\n\n if(removable){\n this.removeLayers(layers, !this.options.cacheLayers);\n }\n\n if(!this.options.cacheLayers && removable){\n delete this._cache[cacheKey];\n delete this._cells[cellKey];\n delete this._activeCells[cellKey];\n }\n }\n }, this));\n }\n },\n\n /**\n * Styling Methods\n */\n\n resetStyle: function (id) {\n var layer = this._layers[id];\n\n if(layer){\n this.setFeatureStyle(layer.feature.id, layer._originalStyle);\n }\n\n return this;\n },\n\n setStyle: function (style) {\n this.options.style = style;\n this.eachFeature(function (layer) {\n this.setFeatureStyle(layer.feature.id, style);\n }, this);\n return this;\n },\n\n setFeatureStyle: function (id, style) {\n var layer = this._layers[id];\n\n if (typeof style === 'function') {\n style = style(layer.feature);\n }\n\n if (!style && !layer.defaultOptions) {\n style = L.Path.prototype.options;\n style.fill = true; //not set by default\n }\n\n if (layer && layer.setStyle) {\n layer.setStyle(style);\n }\n\n return this;\n },\n\n /**\n * Popup Methods\n */\n\n bindPopup: function (fn, options) {\n this._popup = fn;\n this._popupOptions = options;\n for (var i in this._layers) {\n var layer = this._layers[i];\n var popupContent = this._popup(layer.feature, layer);\n layer.bindPopup(popupContent, options);\n }\n return this;\n },\n\n unbindPopup: function () {\n this._popup = false;\n for (var i in this._layers) {\n var layer = this._layers[i];\n if (layer.unbindPopup) {\n layer.unbindPopup();\n } else if (layer.getLayers) {\n var groupLayers = layer.getLayers();\n for (var j in groupLayers) {\n var gLayer = groupLayers[j];\n gLayer.unbindPopup();\n }\n }\n }\n return this;\n },\n\n /**\n * Utility Methods\n */\n\n eachFeature: function (fn, context) {\n for (var i in this._layers) {\n fn.call(context, this._layers[i]);\n }\n return this;\n },\n\n getFeature: function (id) {\n return this._layers[id];\n },\n\n bringToBack: function () {\n this.eachFeature(function (layer) {\n if(layer.bringToBack) {\n layer.bringToBack();\n }\n });\n },\n\n bringToFront: function () {\n this.eachFeature(function (layer) {\n if(layer.bringToFront) {\n layer.bringToFront();\n }\n });\n },\n\n redraw: function (id) {\n if (id) {\n this._redraw(id);\n }\n return this;\n },\n\n _redraw: function(id) {\n var layer = this._layers[id];\n var geojson = layer.feature;\n\n // if this looks like a marker\n if (layer && layer.setIcon && this.options.pointToLayer) {\n // update custom symbology, if necessary\n if (this.options.pointToLayer){\n var getIcon = this.options.pointToLayer(geojson, L.latLng(geojson.geometry.coordinates[1], geojson.geometry.coordinates[0]));\n var updatedIcon = getIcon.options.icon;\n layer.setIcon(updatedIcon);\n }\n }\n\n // looks like a vector marker (circleMarker)\n if (layer && layer.setStyle && this.options.pointToLayer) {\n var getStyle = this.options.pointToLayer(geojson, L.latLng(geojson.geometry.coordinates[1], geojson.geometry.coordinates[0]));\n var updatedStyle = getStyle.options;\n this.setFeatureStyle(geojson.id, updatedStyle);\n }\n\n // looks like a path (polygon/polyline)\n if(layer && layer.setStyle && this.options.style) {\n this.resetStyle(geojson.id);\n }\n },\n\n // from https://github.com/Leaflet/Leaflet/blob/v0.7.2/src/layer/FeatureGroup.js\n // @TODO remove at Leaflet 0.8\n _propagateEvent: function (e) {\n e.layer = this._layers[this._leafletIds[e.target._leaflet_id]];\n e.target = this;\n this.fire(e.type, e);\n }\n});\n\nEsriLeaflet.FeatureLayer = EsriLeaflet.Layers.FeatureLayer;\n\nEsriLeaflet.Layers.featureLayer = function(options){\n return new EsriLeaflet.Layers.FeatureLayer(options);\n};\n\nEsriLeaflet.featureLayer = function(options){\n return new EsriLeaflet.Layers.FeatureLayer(options);\n};\n"]} \ No newline at end of file diff --git a/dist/builds/feature-layer/esri-leaflet-feature-layer.js b/dist/builds/feature-layer/esri-leaflet-feature-layer.js index ed0c0b920..02e0f9177 100644 --- a/dist/builds/feature-layer/esri-leaflet-feature-layer.js +++ b/dist/builds/feature-layer/esri-leaflet-feature-layer.js @@ -1,5 +1,5 @@ -/*! esri-leaflet - v1.0.2 - 2015-12-31 -* Copyright (c) 2015 Environmental Systems Research Institute, Inc. +/*! esri-leaflet - v1.0.3 - 2016-02-22 +* Copyright (c) 2016 Environmental Systems Research Institute, Inc. * Apache License*/ (function (factory) { //define an AMD module that relies on 'leaflet' @@ -17,7 +17,7 @@ } }(function (L) { -var EsriLeaflet={VERSION:"1.0.2",Layers:{},Services:{},Controls:{},Tasks:{},Util:{},Support:{CORS:!!(window.XMLHttpRequest&&"withCredentials"in new XMLHttpRequest),pointerEvents:""===document.documentElement.style.pointerEvents}};"undefined"!=typeof window&&window.L&&(window.L.esri=EsriLeaflet),function(a){function b(a){var b={};for(var c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);return b}function c(a,b){for(var c=0;cd;d++)b=a[d+1],c+=(b[0]-f[0])*(b[1]+f[1]),f=b;return c>=0}function f(a,b,c,d){var e=(d[0]-c[0])*(a[1]-c[1])-(d[1]-c[1])*(a[0]-c[0]),f=(b[0]-a[0])*(a[1]-c[1])-(b[1]-a[1])*(a[0]-c[0]),g=(d[1]-c[1])*(b[0]-a[0])-(d[0]-c[0])*(b[1]-a[1]);if(0!==g){var h=e/g,i=f/g;if(h>=0&&1>=h&&i>=0&&1>=i)return!0}return!1}function g(a,b){for(var c=0;c=0;b--)if(c=h[b][0],i(c,f)){h[b].push(f),o=!0;break}o||n.push(f)}for(;n.length;){f=n.pop();var p=!1;for(b=h.length-1;b>=0;b--)if(c=h[b][0],g(c,f)){h[b].push(f),p=!0;break}p||h.push([f.reverse()])}return 1===h.length?{type:"Polygon",coordinates:h[0]}:{type:"MultiPolygon",coordinates:h}}function k(a){var b=[],c=a.slice(0),f=d(c.shift().slice(0));if(f.length>=4){e(f)||f.reverse(),b.push(f);for(var g=0;g=4&&(e(h)&&h.reverse(),b.push(h))}}return b}function l(a){for(var b=[],c=0;c=0;e--){var f=d[e].slice(0);b.push(f)}return b}var m=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.msRequestAnimationFrame||function(a){return window.setTimeout(a,1e3/60)};a.Util.extentToBounds=function(a){var b=new L.LatLng(a.ymin,a.xmin),c=new L.LatLng(a.ymax,a.xmax);return new L.LatLngBounds(b,c)},a.Util.boundsToExtent=function(a){return a=L.latLngBounds(a),{xmin:a.getSouthWest().lng,ymin:a.getSouthWest().lat,xmax:a.getNorthEast().lng,ymax:a.getNorthEast().lat,spatialReference:{wkid:4326}}},a.Util.arcgisToGeojson=function(c,d){var e={};return"number"==typeof c.x&&"number"==typeof c.y&&(e.type="Point",e.coordinates=[c.x,c.y]),c.points&&(e.type="MultiPoint",e.coordinates=c.points.slice(0)),c.paths&&(1===c.paths.length?(e.type="LineString",e.coordinates=c.paths[0].slice(0)):(e.type="MultiLineString",e.coordinates=c.paths.slice(0))),c.rings&&(e=j(c.rings.slice(0))),(c.geometry||c.attributes)&&(e.type="Feature",e.geometry=c.geometry?a.Util.arcgisToGeojson(c.geometry):null,e.properties=c.attributes?b(c.attributes):null,c.attributes&&(e.id=c.attributes[d]||c.attributes.OBJECTID||c.attributes.FID)),e},a.Util.geojsonToArcGIS=function(c,d){d=d||"OBJECTID";var e,f={wkid:4326},g={};switch(c.type){case"Point":g.x=c.coordinates[0],g.y=c.coordinates[1],g.spatialReference=f;break;case"MultiPoint":g.points=c.coordinates.slice(0),g.spatialReference=f;break;case"LineString":g.paths=[c.coordinates.slice(0)],g.spatialReference=f;break;case"MultiLineString":g.paths=c.coordinates.slice(0),g.spatialReference=f;break;case"Polygon":g.rings=k(c.coordinates.slice(0)),g.spatialReference=f;break;case"MultiPolygon":g.rings=l(c.coordinates.slice(0)),g.spatialReference=f;break;case"Feature":c.geometry&&(g.geometry=a.Util.geojsonToArcGIS(c.geometry,d)),g.attributes=c.properties?b(c.properties):{},c.id&&(g.attributes[d]=c.id);break;case"FeatureCollection":for(g=[],e=0;e=0;h--)f.features.push(a.Util.arcgisToGeojson(g[h],d));return f},a.Util.cleanUrl=function(a){return a=a.replace(/^\s+|\s+$|\A\s+|\s+\z/g,""),"/"!==a[a.length-1]&&(a+="/"),a},a.Util.isArcgisOnline=function(a){return/\.arcgis\.com.*?FeatureServer/g.test(a)},a.Util.geojsonTypeToArcGIS=function(a){var b;switch(a){case"Point":b="esriGeometryPoint";break;case"MultiPoint":b="esriGeometryMultipoint";break;case"LineString":b="esriGeometryPolyline";break;case"MultiLineString":b="esriGeometryPolyline";break;case"Polygon":b="esriGeometryPolygon";break;case"MultiPolygon":b="esriGeometryPolygon"}return b},a.Util.requestAnimationFrame=L.Util.bind(m,window),a.Util.warn=function(a){console&&console.warn&&console.warn(a)}}(EsriLeaflet),function(a){function b(a){var b="";a.f=a.f||"json";for(var c in a)if(a.hasOwnProperty(c)){var d,e=a[c],f=Object.prototype.toString.call(e);b.length&&(b+="&"),d="[object Array]"===f?"[object Object]"===Object.prototype.toString.call(e[0])?JSON.stringify(e):e.join(","):"[object Object]"===f?JSON.stringify(e):"[object Date]"===f?e.valueOf():e,b+=encodeURIComponent(c)+"="+encodeURIComponent(d)}return b}function c(a,b){var c=new XMLHttpRequest;return c.onerror=function(d){c.onreadystatechange=L.Util.falseFn,a.call(b,{error:{code:500,message:"XMLHttpRequest error"}},null)},c.onreadystatechange=function(){var d,e;if(4===c.readyState){try{d=JSON.parse(c.responseText)}catch(f){d=null,e={code:500,message:"Could not parse response as JSON. This could also be caused by a CORS or XMLHttpRequest error."}}!e&&d.error&&(e=d.error,d=null),c.onerror=L.Util.falseFn,a.call(b,e,d)}},c}var d=0;window._EsriLeafletCallbacks={},a.Request={request:function(d,e,f,g){var h=b(e),i=c(f,g),j=(d+"?"+h).length;if(2e3>=j&&L.esri.Support.CORS)i.open("GET",d+"?"+h),i.send(null);else{if(!(j>2e3&&L.esri.Support.CORS))return 2e3>=j&&!L.esri.Support.CORS?L.esri.Request.get.JSONP(d,e,f,g):void a.Util.warn("a request to "+d+" was longer then 2000 characters and this browser cannot make a cross-domain post request. Please use a proxy http://esri.github.io/esri-leaflet/api-reference/request.html");i.open("POST",d),i.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),i.send(h)}return i},post:{XMLHTTP:function(a,d,e,f){var g=c(e,f);return g.open("POST",a),g.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),g.send(b(d)),g}},get:{CORS:function(a,d,e,f){var g=c(e,f);return g.open("GET",a+"?"+b(d),!0),g.send(null),g},JSONP:function(a,c,e,f){var g="c"+d;c.callback="window._EsriLeafletCallbacks."+g;var h=L.DomUtil.create("script",null,document.body);return h.type="text/javascript",h.src=a+"?"+b(c),h.id=g,window._EsriLeafletCallbacks[g]=function(a){if(window._EsriLeafletCallbacks[g]!==!0){var b,c=Object.prototype.toString.call(a);"[object Object]"!==c&&"[object Array]"!==c&&(b={error:{code:500,message:"Expected array or object as JSONP response"}},a=null),!b&&a.error&&(b=a,a=null),e.call(f,b,a),window._EsriLeafletCallbacks[g]=!0}},d++,{id:g,url:h.src,abort:function(){window._EsriLeafletCallbacks._callback[g]({code:0,message:"Request aborted."})}}}}},a.get=a.Support.CORS?a.Request.get.CORS:a.Request.get.JSONP,a.post=a.Request.post.XMLHTTP,a.request=a.Request.request}(EsriLeaflet),EsriLeaflet.Services.Service=L.Class.extend({includes:L.Mixin.Events,options:{proxy:!1,useCors:EsriLeaflet.Support.CORS},initialize:function(a){a=a||{},this._requestQueue=[],this._authenticating=!1,L.Util.setOptions(this,a),this.options.url=EsriLeaflet.Util.cleanUrl(this.options.url)},get:function(a,b,c,d){return this._request("get",a,b,c,d)},post:function(a,b,c,d){return this._request("post",a,b,c,d)},request:function(a,b,c,d){return this._request("request",a,b,c,d)},metadata:function(a,b){return this._request("get","",{},a,b)},authenticate:function(a){return this._authenticating=!1,this.options.token=a,this._runQueue(),this},_request:function(a,b,c,d,e){this.fire("requeststart",{url:this.options.url+b,params:c,method:a});var f=this._createServiceCallback(a,b,c,d,e);if(this.options.token&&(c.token=this.options.token),this._authenticating)return void this._requestQueue.push([a,b,c,d,e]);var g=this.options.proxy?this.options.proxy+"?"+this.options.url+b:this.options.url+b;return"get"!==a&&"request"!==a||this.options.useCors?EsriLeaflet[a](g,c,f):EsriLeaflet.Request.get.JSONP(g,c,f)},_createServiceCallback:function(a,b,c,d,e){return L.Util.bind(function(f,g){!f||499!==f.code&&498!==f.code||(this._authenticating=!0,this._requestQueue.push([a,b,c,d,e]),this.fire("authenticationrequired",{authenticate:L.Util.bind(this.authenticate,this)}),f.authenticate=L.Util.bind(this.authenticate,this)),d.call(e,f,g),f?this.fire("requesterror",{url:this.options.url+b,params:c,message:f.message,code:f.code,method:a}):this.fire("requestsuccess",{url:this.options.url+b,params:c,response:g,method:a}),this.fire("requestend",{url:this.options.url+b,params:c,method:a})},this)},_runQueue:function(){for(var a=this._requestQueue.length-1;a>=0;a--){var b=this._requestQueue[a],c=b.shift();this[c].apply(this,b)}this._requestQueue=[]}}),EsriLeaflet.Services.service=function(a){return new EsriLeaflet.Services.Service(a)},EsriLeaflet.Services.FeatureLayerService=EsriLeaflet.Services.Service.extend({options:{idAttribute:"OBJECTID"},query:function(){return new EsriLeaflet.Tasks.Query(this)},addFeature:function(a,b,c){return delete a.id,a=EsriLeaflet.Util.geojsonToArcGIS(a),this.post("addFeatures",{features:[a]},function(a,d){var e=d&&d.addResults?d.addResults[0]:void 0;b&&b.call(c,a||d.addResults[0].error,e)},c)},updateFeature:function(a,b,c){return a=EsriLeaflet.Util.geojsonToArcGIS(a,this.options.idAttribute),this.post("updateFeatures",{features:[a]},function(a,d){var e=d&&d.updateResults?d.updateResults[0]:void 0;b&&b.call(c,a||d.updateResults[0].error,e)},c)},deleteFeature:function(a,b,c){return this.post("deleteFeatures",{objectIds:a},function(a,d){var e=d&&d.deleteResults?d.deleteResults[0]:void 0;b&&b.call(c,a||d.deleteResults[0].error,e)},c)},deleteFeatures:function(a,b,c){return this.post("deleteFeatures",{objectIds:a},function(a,d){var e=d&&d.deleteResults?d.deleteResults:void 0;b&&b.call(c,a||d.deleteResults[0].error,e)},c)}}),EsriLeaflet.Services.featureLayerService=function(a){return new EsriLeaflet.Services.FeatureLayerService(a)},EsriLeaflet.Tasks.Task=L.Class.extend({options:{proxy:!1,useCors:EsriLeaflet.Support.CORS},generateSetter:function(a,b){return L.Util.bind(function(b){return this.params[a]=b,this},b)},initialize:function(a){if(a.request&&a.options?(this._service=a,L.Util.setOptions(this,a.options)):(L.Util.setOptions(this,a),this.options.url=L.esri.Util.cleanUrl(a.url)),this.params=L.Util.extend({},this.params||{}),this.setters)for(var b in this.setters){var c=this.setters[b];this[b]=this.generateSetter(c,this)}},token:function(a){return this._service?this._service.authenticate(a):this.params.token=a,this},request:function(a,b){return this._service?this._service.request(this.path,this.params,a,b):this._request("request",this.path,this.params,a,b)},_request:function(a,b,c,d,e){var f=this.options.proxy?this.options.proxy+"?"+this.options.url+b:this.options.url+b;return"get"!==a&&"request"!==a||this.options.useCors?EsriLeaflet[a](f,c,d,e):EsriLeaflet.Request.get.JSONP(f,c,d,e)}}),EsriLeaflet.Tasks.Query=EsriLeaflet.Tasks.Task.extend({setters:{offset:"offset",limit:"limit",fields:"outFields",precision:"geometryPrecision",featureIds:"objectIds",returnGeometry:"returnGeometry",token:"token"},path:"query",params:{returnGeometry:!0,where:"1=1",outSr:4326,outFields:"*"},within:function(a){return this._setGeometry(a),this.params.spatialRel="esriSpatialRelContains",this},intersects:function(a){return this._setGeometry(a),this.params.spatialRel="esriSpatialRelIntersects",this},contains:function(a){return this._setGeometry(a),this.params.spatialRel="esriSpatialRelWithin",this},overlaps:function(a){return this._setGeometry(a),this.params.spatialRel="esriSpatialRelOverlaps",this},nearby:function(a,b){return a=L.latLng(a),this.params.geometry=[a.lng,a.lat],this.params.geometryType="esriGeometryPoint",this.params.spatialRel="esriSpatialRelIntersects",this.params.units="esriSRUnit_Meter",this.params.distance=b,this.params.inSr=4326,this},where:function(a){return this.params.where=a,this},between:function(a,b){return this.params.time=[a.valueOf(),b.valueOf()],this},simplify:function(a,b){var c=Math.abs(a.getBounds().getWest()-a.getBounds().getEast());return this.params.maxAllowableOffset=c/a.getSize().y*b,this},orderBy:function(a,b){return b=b||"ASC",this.params.orderByFields=this.params.orderByFields?this.params.orderByFields+",":"",this.params.orderByFields+=[a,b].join(" "),this},run:function(a,b){return this._cleanParams(),EsriLeaflet.Util.isArcgisOnline(this.options.url)?(this.params.f="geojson",this.request(function(c,d){this._trapSQLerrors(c),a.call(b,c,d,d)},this)):this.request(function(c,d){this._trapSQLerrors(c),a.call(b,c,d&&EsriLeaflet.Util.responseToFeatureCollection(d),d)},this)},count:function(a,b){return this._cleanParams(),this.params.returnCountOnly=!0,this.request(function(b,c){a.call(this,b,c&&c.count,c)},b)},ids:function(a,b){return this._cleanParams(),this.params.returnIdsOnly=!0,this.request(function(b,c){a.call(this,b,c&&c.objectIds,c)},b)},bounds:function(a,b){return this._cleanParams(),this.params.returnExtentOnly=!0,this.request(function(c,d){a.call(b,c,d&&d.extent&&EsriLeaflet.Util.extentToBounds(d.extent),d)},b)},pixelSize:function(a){return a=L.point(a),this.params.pixelSize=[a.x,a.y],this},layer:function(a){return this.path=a+"/query",this},_trapSQLerrors:function(a){a&&"400"===a.code&&EsriLeaflet.Util.warn("one common syntax error in query requests is encasing string values in double quotes instead of single quotes")},_cleanParams:function(){delete this.params.returnIdsOnly,delete this.params.returnExtentOnly,delete this.params.returnCountOnly},_setGeometry:function(a){return this.params.inSr=4326,a instanceof L.LatLngBounds?(this.params.geometry=EsriLeaflet.Util.boundsToExtent(a),void(this.params.geometryType="esriGeometryEnvelope")):(a.getLatLng&&(a=a.getLatLng()),a instanceof L.LatLng&&(a={type:"Point",coordinates:[a.lng,a.lat]}),a instanceof L.GeoJSON&&(a=a.getLayers()[0].feature.geometry,this.params.geometry=EsriLeaflet.Util.geojsonToArcGIS(a),this.params.geometryType=EsriLeaflet.Util.geojsonTypeToArcGIS(a.type)),a.toGeoJSON&&(a=a.toGeoJSON()),"Feature"===a.type&&(a=a.geometry),"Point"===a.type||"LineString"===a.type||"Polygon"===a.type?(this.params.geometry=EsriLeaflet.Util.geojsonToArcGIS(a),void(this.params.geometryType=EsriLeaflet.Util.geojsonTypeToArcGIS(a.type))):void EsriLeaflet.Util.warn("invalid geometry passed to spatial query. Should be an L.LatLng, L.LatLngBounds or L.Marker or a GeoJSON Point Line or Polygon object"))}}),EsriLeaflet.Tasks.query=function(a){return new EsriLeaflet.Tasks.Query(a)},EsriLeaflet.Layers.FeatureGrid=L.Class.extend({includes:L.Mixin.Events,options:{cellSize:512,updateInterval:150},initialize:function(a){a=L.setOptions(this,a)},onAdd:function(a){this._map=a,this._update=L.Util.limitExecByInterval(this._update,this.options.updateInterval,this),this._map.addEventListener(this.getEvents(),this),this._reset(),this._update()},onRemove:function(){this._map.removeEventListener(this.getEvents(),this),this._removeCells()},getEvents:function(){var a={viewreset:this._reset,moveend:this._update,zoomend:this._onZoom};return a},addTo:function(a){return a.addLayer(this),this},removeFrom:function(a){return a.removeLayer(this),this},_onZoom:function(){var a=this._map.getZoom();a>this.options.maxZoom||athis.options.maxZoom||bc;c++)this._addCell(e[c])},_cellCoordsToBounds:function(a){var b=this._map,c=this.options.cellSize,d=a.multiplyBy(c),e=d.add([c,c]),f=b.unproject(d,a.z).wrap(),g=b.unproject(e,a.z).wrap();return new L.LatLngBounds(f,g)},_cellCoordsToKey:function(a){return a.x+":"+a.y},_keyToCellCoords:function(a){var b=a.split(":"),c=parseInt(b[0],10),d=parseInt(b[1],10);return new L.Point(c,d)},_removeOtherCells:function(a){for(var b in this._cells)a.contains(this._keyToCellCoords(b))||this._removeCell(b)},_removeCell:function(a){var b=this._activeCells[a];b&&(delete this._activeCells[a],this.cellLeave&&this.cellLeave(b.bounds,b.coords),this.fire("cellleave",{bounds:b.bounds,coords:b.coords}))},_removeCells:function(){for(var a in this._cells){var b=this._cells[a].bounds,c=this._cells[a].coords;this.cellLeave&&this.cellLeave(b,c),this.fire("cellleave",{bounds:b,coords:c})}},_addCell:function(a){this._wrapCoords(a);var b=this._cellCoordsToKey(a),c=this._cells[b];c&&!this._activeCells[b]&&(this.cellEnter&&this.cellEnter(c.bounds,a),this.fire("cellenter",{bounds:c.bounds,coords:a}),this._activeCells[b]=c),c||(c={coords:a,bounds:this._cellCoordsToBounds(a)},this._cells[b]=c,this._activeCells[b]=c,this.createCell&&this.createCell(c.bounds,a),this.fire("cellcreate",{bounds:c.bounds,coords:a}))},_wrapCoords:function(a){a.x=this._wrapLng?L.Util.wrapNum(a.x,this._wrapLng):a.x,a.y=this._wrapLat?L.Util.wrapNum(a.y,this._wrapLat):a.y}}),function(a){function b(a){this.values=a||[]}a.Layers.FeatureManager=a.Layers.FeatureGrid.extend({options:{where:"1=1",fields:["*"],from:!1,to:!1,timeField:!1,timeFilterMode:"server",simplifyFactor:0,precision:6},initialize:function(c){if(a.Layers.FeatureGrid.prototype.initialize.call(this,c),c.url=a.Util.cleanUrl(c.url),c=L.setOptions(this,c),this._service=new a.Services.FeatureLayerService(c),"*"!==this.options.fields[0]){for(var d=!1,e=0;e=0;d--){var e=a[d].id;this._currentSnapshot.push(e),this._cache[c].push(e)}this.options.timeField&&this._buildTimeIndexes(a);var f=this._map.getZoom();f>this.options.maxZoom||f=0;j--)f.push(i.features[j].id);0>=g&&(this._currentSnapshot=f,a.Util.requestAnimationFrame(L.Util.bind(function(){this.removeLayers(e),this.addLayers(f),c&&c.call(d,h)},this)))},this),j=this._currentSnapshot.length-1;j>=0;j--)e.push(this._currentSnapshot[j]);for(var k in this._activeCells){g++;var l=this._keyToCellCoords(k),m=this._cellCoordsToBounds(l);this._requestFeatures(m,k,i)}return this},getWhere:function(){return this.options.where},getTimeRange:function(){return[this.options.from,this.options.to]},setTimeRange:function(a,b,c,d){var e=this.options.from,f=this.options.to,g=0,h=null,i=L.Util.bind(function(i){i&&(h=i),this._filterExistingFeatures(e,f,a,b),g--,c&&0>=g&&c.call(d,h)},this);if(this.options.from=a,this.options.to=b,this._filterExistingFeatures(e,f,a,b),"server"===this.options.timeFilterMode)for(var j in this._activeCells){g++;var k=this._keyToCellCoords(j),l=this._cellCoordsToBounds(k);this._requestFeatures(l,j,i)}},refresh:function(){for(var a in this._activeCells){var b=this._keyToCellCoords(a),c=this._cellCoordsToBounds(b);this._requestFeatures(c,a)}this.redraw&&this.once("load",function(){this.eachFeature(function(a){this._redraw(a.feature.id)},this)},this)},_filterExistingFeatures:function(b,c,d,e){var f=b&&c?this._getFeaturesInTimeRange(b,c):this._currentSnapshot,g=this._getFeaturesInTimeRange(d,e);if(g.indexOf)for(var h=0;h=0&&f.splice(i,1)}a.Util.requestAnimationFrame(L.Util.bind(function(){this.removeLayers(f),this.addLayers(g)},this))},_getFeaturesInTimeRange:function(a,b){var c,d=[];if(this.options.timeField.start&&this.options.timeField.end){var e=this._startTimeIndex.between(a,b),f=this._endTimeIndex.between(a,b);c=e.concat(f)}else c=this._timeIndex.between(a,b);for(var g=c.length-1;g>=0;g--)d.push(c[g].id);return d},_buildTimeIndexes:function(a){var b,c;if(this.options.timeField.start&&this.options.timeField.end){var d=[],e=[];for(b=a.length-1;b>=0;b--)c=a[b],d.push({id:c.id,value:new Date(c.properties[this.options.timeField.start])}),e.push({id:c.id,value:new Date(c.properties[this.options.timeField.end])});this._startTimeIndex.bulkAdd(d),this._endTimeIndex.bulkAdd(e)}else{var f=[];for(b=a.length-1;b>=0;b--)c=a[b],f.push({id:c.id,value:new Date(c.properties[this.options.timeField])});this._timeIndex.bulkAdd(f)}},_featureWithinTimeRange:function(a){if(!this.options.from||!this.options.to)return!0;var b=+this.options.from.valueOf(),c=+this.options.to.valueOf();if("string"==typeof this.options.timeField){var d=+a.properties[this.options.timeField];return d>=b&&c>=d}if(this.options.timeField.start&&this.options.timeField.end){var e=+a.properties[this.options.timeField.start],f=+a.properties[this.options.timeField.end];return e>=b&&c>=e||f>=b&&c>=f}},authenticate:function(a){return this._service.authenticate(a),this},metadata:function(a,b){return this._service.metadata(a,b),this},query:function(){return this._service.query()},_getMetadata:function(a){if(this._metadata){var b;a(b,this._metadata)}else this.metadata(L.Util.bind(function(b,c){this._metadata=c,a(b,this._metadata)},this))},addFeature:function(a,b,c){this._getMetadata(L.Util.bind(function(d,e){this._service.addFeature(a,L.Util.bind(function(d,f){d||(a.properties[e.objectIdField]=f.objectId,a.id=f.objectId,this.createLayers([a])),b&&b.call(c,d,f)},this))},this))},updateFeature:function(a,b,c){this._service.updateFeature(a,function(d,e){d||(this.removeLayers([a.id],!0),this.createLayers([a])),b&&b.call(c,d,e)},this)},deleteFeature:function(a,b,c){this._service.deleteFeature(a,function(a,d){!a&&d.objectId&&this.removeLayers([d.objectId],!0),b&&b.call(c,a,d)},this)},deleteFeatures:function(a,b,c){return this._service.deleteFeatures(a,function(a,d){if(!a&&d.length>0)for(var e=0;e=e;)if(d=b=(e+f)/2|0,c=this.values[Math.round(b)],+c.value<+a)e=b+1;else{if(!(+c.value>+a))return b;f=b-1}return~f},b.prototype.sort=function(){this.values.sort(function(a,b){return+b.value-+a.value}).reverse(),this.dirty=!1},b.prototype.between=function(a,b){this.dirty&&this.sort();var c=this._query(a),d=this._query(b);return 0===c&&0===d?[]:(c=Math.abs(c),d=0>d?Math.abs(d):d+1,this.values.slice(c,d))},b.prototype.bulkAdd=function(a){this.dirty=!0,this.values=this.values.concat(a)}}(EsriLeaflet),EsriLeaflet.Layers.FeatureLayer=EsriLeaflet.Layers.FeatureManager.extend({statics:{EVENTS:"click dblclick mouseover mouseout mousemove contextmenu popupopen popupclose"},options:{cacheLayers:!0},initialize:function(a){EsriLeaflet.Layers.FeatureManager.prototype.initialize.call(this,a),a=L.setOptions(this,a),this._layers={},this._leafletIds={},this._key="c"+(1e9*Math.random()).toString(36).replace(".","_")},onAdd:function(a){return a.on("zoomstart zoomend",function(a){this._zooming="zoomstart"===a.type},this),this._removed=!1,EsriLeaflet.Layers.FeatureManager.prototype.onAdd.call(this,a)},onRemove:function(a){this._removed=!0;for(var b in this._layers)a.removeLayer(this._layers[b]);return EsriLeaflet.Layers.FeatureManager.prototype.onRemove.call(this,a)},createNewLayer:function(a){return L.GeoJSON.geometryToLayer(a,this.options.pointToLayer,L.GeoJSON.coordsToLatLng,this.options)},_updateLayer:function(a,b){var c=[],d=this.options.coordsToLatLng||L.GeoJSON.coordsToLatLng;switch(b.properties&&(a.feature.properties=b.properties),b.geometry.type){case"Point":c=L.GeoJSON.coordsToLatLng(b.geometry.coordinates),a.setLatLng(c);break;case"LineString":c=L.GeoJSON.coordsToLatLngs(b.geometry.coordinates,0,d),a.setLatLngs(c);break;case"MultiLineString":c=L.GeoJSON.coordsToLatLngs(b.geometry.coordinates,1,d),a.setLatLngs(c);break;case"Polygon":c=L.GeoJSON.coordsToLatLngs(b.geometry.coordinates,1,d),a.setLatLngs(c);break;case"MultiPolygon":c=L.GeoJSON.coordsToLatLngs(b.geometry.coordinates,2,d),a.setLatLngs(c)}},createLayers:function(a){for(var b=a.length-1;b>=0;b--){var c,d=a[b],e=this._layers[d.id];e&&!this._map.hasLayer(e)&&this._map.addLayer(e),e&&(e.setLatLngs||e.setLatLng)&&this._updateLayer(e,d),e||(c=this.createNewLayer(d),c.feature=d,this.options.style?c._originalStyle=this.options.style:c.setStyle&&(c._originalStyle=c.options),c._leaflet_id=this._key+"_"+d.id,this._leafletIds[c._leaflet_id]=d.id,c.on(EsriLeaflet.Layers.FeatureLayer.EVENTS,this._propagateEvent,this),this._popup&&c.bindPopup&&c.bindPopup(this._popup(c.feature,c),this._popupOptions),this.options.onEachFeature&&this.options.onEachFeature(c.feature,c),this._layers[c.feature.id]=c,this.resetStyle(c.feature.id),this.fire("createfeature",{feature:c.feature}),(!this.options.timeField||this.options.timeField&&this._featureWithinTimeRange(d))&&this._map.addLayer(c))}},addLayers:function(a){for(var b=a.length-1;b>=0;b--){var c=this._layers[a[b]];c&&(this.fire("addfeature",{feature:c.feature}),this._map.addLayer(c))}},removeLayers:function(a,b){for(var c=a.length-1;c>=0;c--){var d=a[c],e=this._layers[d];e&&(this.fire("removefeature",{feature:e.feature,permanent:b}),this._map.removeLayer(e)),e&&b&&delete this._layers[d]}},cellEnter:function(a,b){this._zooming||EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){var a=this._cacheKey(b),c=this._cellCoordsToKey(b),d=this._cache[a];this._activeCells[c]&&d&&this.addLayers(d)},this))},cellLeave:function(a,b){this._zooming||EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){var a=this._cacheKey(b),c=this._cellCoordsToKey(b),d=this._cache[a],e=this._map.getBounds();if(!this._activeCells[c]&&d){for(var f=!0,g=0;gd;d++)b=a[d+1],c+=(b[0]-f[0])*(b[1]+f[1]),f=b;return c>=0}function f(a,b,c,d){var e=(d[0]-c[0])*(a[1]-c[1])-(d[1]-c[1])*(a[0]-c[0]),f=(b[0]-a[0])*(a[1]-c[1])-(b[1]-a[1])*(a[0]-c[0]),g=(d[1]-c[1])*(b[0]-a[0])-(d[0]-c[0])*(b[1]-a[1]);if(0!==g){var h=e/g,i=f/g;if(h>=0&&1>=h&&i>=0&&1>=i)return!0}return!1}function g(a,b){for(var c=0;c=0;b--)if(c=h[b][0],i(c,f)){h[b].push(f),o=!0;break}o||n.push(f)}for(;n.length;){f=n.pop();var p=!1;for(b=h.length-1;b>=0;b--)if(c=h[b][0],g(c,f)){h[b].push(f),p=!0;break}p||h.push([f.reverse()])}return 1===h.length?{type:"Polygon",coordinates:h[0]}:{type:"MultiPolygon",coordinates:h}}function k(a){var b=[],c=a.slice(0),f=d(c.shift().slice(0));if(f.length>=4){e(f)||f.reverse(),b.push(f);for(var g=0;g=4&&(e(h)&&h.reverse(),b.push(h))}}return b}function l(a){for(var b=[],c=0;c=0;e--){var f=d[e].slice(0);b.push(f)}return b}var m=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.msRequestAnimationFrame||function(a){return window.setTimeout(a,1e3/60)};a.Util.extentToBounds=function(a){var b=new L.LatLng(a.ymin,a.xmin),c=new L.LatLng(a.ymax,a.xmax);return new L.LatLngBounds(b,c)},a.Util.boundsToExtent=function(a){return a=L.latLngBounds(a),{xmin:a.getSouthWest().lng,ymin:a.getSouthWest().lat,xmax:a.getNorthEast().lng,ymax:a.getNorthEast().lat,spatialReference:{wkid:4326}}},a.Util.arcgisToGeojson=function(c,d){var e={};return"number"==typeof c.x&&"number"==typeof c.y&&(e.type="Point",e.coordinates=[c.x,c.y]),c.points&&(e.type="MultiPoint",e.coordinates=c.points.slice(0)),c.paths&&(1===c.paths.length?(e.type="LineString",e.coordinates=c.paths[0].slice(0)):(e.type="MultiLineString",e.coordinates=c.paths.slice(0))),c.rings&&(e=j(c.rings.slice(0))),(c.geometry||c.attributes)&&(e.type="Feature",e.geometry=c.geometry?a.Util.arcgisToGeojson(c.geometry):null,e.properties=c.attributes?b(c.attributes):null,c.attributes&&(e.id=c.attributes[d]||c.attributes.OBJECTID||c.attributes.FID)),e},a.Util.geojsonToArcGIS=function(c,d){d=d||"OBJECTID";var e,f={wkid:4326},g={};switch(c.type){case"Point":g.x=c.coordinates[0],g.y=c.coordinates[1],g.spatialReference=f;break;case"MultiPoint":g.points=c.coordinates.slice(0),g.spatialReference=f;break;case"LineString":g.paths=[c.coordinates.slice(0)],g.spatialReference=f;break;case"MultiLineString":g.paths=c.coordinates.slice(0),g.spatialReference=f;break;case"Polygon":g.rings=k(c.coordinates.slice(0)),g.spatialReference=f;break;case"MultiPolygon":g.rings=l(c.coordinates.slice(0)),g.spatialReference=f;break;case"Feature":c.geometry&&(g.geometry=a.Util.geojsonToArcGIS(c.geometry,d)),g.attributes=c.properties?b(c.properties):{},c.id&&(g.attributes[d]=c.id);break;case"FeatureCollection":for(g=[],e=0;e=0;h--)f.features.push(a.Util.arcgisToGeojson(g[h],d));return f},a.Util.cleanUrl=function(a){return a=a.replace(/^\s+|\s+$|\A\s+|\s+\z/g,""),"/"!==a[a.length-1]&&(a+="/"),a},a.Util.isArcgisOnline=function(a){return/\.arcgis\.com.*?FeatureServer/g.test(a)},a.Util.geojsonTypeToArcGIS=function(a){var b;switch(a){case"Point":b="esriGeometryPoint";break;case"MultiPoint":b="esriGeometryMultipoint";break;case"LineString":b="esriGeometryPolyline";break;case"MultiLineString":b="esriGeometryPolyline";break;case"Polygon":b="esriGeometryPolygon";break;case"MultiPolygon":b="esriGeometryPolygon"}return b},a.Util.requestAnimationFrame=L.Util.bind(m,window),a.Util.warn=function(a){console&&console.warn&&console.warn(a)}}(EsriLeaflet),function(a){function b(a){var b="";a.f=a.f||"json";for(var c in a)if(a.hasOwnProperty(c)){var d,e=a[c],f=Object.prototype.toString.call(e);b.length&&(b+="&"),d="[object Array]"===f?"[object Object]"===Object.prototype.toString.call(e[0])?JSON.stringify(e):e.join(","):"[object Object]"===f?JSON.stringify(e):"[object Date]"===f?e.valueOf():e,b+=encodeURIComponent(c)+"="+encodeURIComponent(d)}return b}function c(a,b){var c=new XMLHttpRequest;return c.onerror=function(d){c.onreadystatechange=L.Util.falseFn,a.call(b,{error:{code:500,message:"XMLHttpRequest error"}},null)},c.onreadystatechange=function(){var d,e;if(4===c.readyState){try{d=JSON.parse(c.responseText)}catch(f){d=null,e={code:500,message:"Could not parse response as JSON. This could also be caused by a CORS or XMLHttpRequest error."}}!e&&d.error&&(e=d.error,d=null),c.onerror=L.Util.falseFn,a.call(b,e,d)}},c}var d=0;window._EsriLeafletCallbacks={},a.Request={request:function(d,e,f,g){var h=b(e),i=c(f,g),j=(d+"?"+h).length;if(2e3>=j&&L.esri.Support.CORS)i.open("GET",d+"?"+h),i.send(null);else{if(!(j>2e3&&L.esri.Support.CORS))return 2e3>=j&&!L.esri.Support.CORS?L.esri.Request.get.JSONP(d,e,f,g):void a.Util.warn("a request to "+d+" was longer then 2000 characters and this browser cannot make a cross-domain post request. Please use a proxy http://esri.github.io/esri-leaflet/api-reference/request.html");i.open("POST",d),i.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),i.send(h)}return i},post:{XMLHTTP:function(a,d,e,f){var g=c(e,f);return g.open("POST",a),g.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),g.send(b(d)),g}},get:{CORS:function(a,d,e,f){var g=c(e,f);return g.open("GET",a+"?"+b(d),!0),g.send(null),g},JSONP:function(a,c,e,f){var g="c"+d;c.callback="window._EsriLeafletCallbacks."+g;var h=L.DomUtil.create("script",null,document.body);return h.type="text/javascript",h.src=a+"?"+b(c),h.id=g,window._EsriLeafletCallbacks[g]=function(a){if(window._EsriLeafletCallbacks[g]!==!0){var b,c=Object.prototype.toString.call(a);"[object Object]"!==c&&"[object Array]"!==c&&(b={error:{code:500,message:"Expected array or object as JSONP response"}},a=null),!b&&a.error&&(b=a,a=null),e.call(f,b,a),window._EsriLeafletCallbacks[g]=!0}},d++,{id:g,url:h.src,abort:function(){window._EsriLeafletCallbacks._callback[g]({code:0,message:"Request aborted."})}}}}},a.get=a.Support.CORS?a.Request.get.CORS:a.Request.get.JSONP,a.post=a.Request.post.XMLHTTP,a.request=a.Request.request}(EsriLeaflet),EsriLeaflet.Services.Service=L.Class.extend({includes:L.Mixin.Events,options:{proxy:!1,useCors:EsriLeaflet.Support.CORS},initialize:function(a){a=a||{},this._requestQueue=[],this._authenticating=!1,L.Util.setOptions(this,a),this.options.url=EsriLeaflet.Util.cleanUrl(this.options.url)},get:function(a,b,c,d){return this._request("get",a,b,c,d)},post:function(a,b,c,d){return this._request("post",a,b,c,d)},request:function(a,b,c,d){return this._request("request",a,b,c,d)},metadata:function(a,b){return this._request("get","",{},a,b)},authenticate:function(a){return this._authenticating=!1,this.options.token=a,this._runQueue(),this},_request:function(a,b,c,d,e){this.fire("requeststart",{url:this.options.url+b,params:c,method:a});var f=this._createServiceCallback(a,b,c,d,e);if(this.options.token&&(c.token=this.options.token),this._authenticating)return void this._requestQueue.push([a,b,c,d,e]);var g=this.options.proxy?this.options.proxy+"?"+this.options.url+b:this.options.url+b;return"get"!==a&&"request"!==a||this.options.useCors?EsriLeaflet[a](g,c,f):EsriLeaflet.Request.get.JSONP(g,c,f)},_createServiceCallback:function(a,b,c,d,e){return L.Util.bind(function(f,g){!f||499!==f.code&&498!==f.code||(this._authenticating=!0,this._requestQueue.push([a,b,c,d,e]),this.fire("authenticationrequired",{authenticate:L.Util.bind(this.authenticate,this)}),f.authenticate=L.Util.bind(this.authenticate,this)),d.call(e,f,g),f?this.fire("requesterror",{url:this.options.url+b,params:c,message:f.message,code:f.code,method:a}):this.fire("requestsuccess",{url:this.options.url+b,params:c,response:g,method:a}),this.fire("requestend",{url:this.options.url+b,params:c,method:a})},this)},_runQueue:function(){for(var a=this._requestQueue.length-1;a>=0;a--){var b=this._requestQueue[a],c=b.shift();this[c].apply(this,b)}this._requestQueue=[]}}),EsriLeaflet.Services.service=function(a){return new EsriLeaflet.Services.Service(a)},EsriLeaflet.Services.FeatureLayerService=EsriLeaflet.Services.Service.extend({options:{idAttribute:"OBJECTID"},query:function(){return new EsriLeaflet.Tasks.Query(this)},addFeature:function(a,b,c){return delete a.id,a=EsriLeaflet.Util.geojsonToArcGIS(a),this.post("addFeatures",{features:[a]},function(a,d){var e=d&&d.addResults?d.addResults[0]:void 0;b&&b.call(c,a||d.addResults[0].error,e)},c)},updateFeature:function(a,b,c){return a=EsriLeaflet.Util.geojsonToArcGIS(a,this.options.idAttribute),this.post("updateFeatures",{features:[a]},function(a,d){var e=d&&d.updateResults?d.updateResults[0]:void 0;b&&b.call(c,a||d.updateResults[0].error,e)},c)},deleteFeature:function(a,b,c){return this.post("deleteFeatures",{objectIds:a},function(a,d){var e=d&&d.deleteResults?d.deleteResults[0]:void 0;b&&b.call(c,a||d.deleteResults[0].error,e)},c)},deleteFeatures:function(a,b,c){return this.post("deleteFeatures",{objectIds:a},function(a,d){var e=d&&d.deleteResults?d.deleteResults:void 0;b&&b.call(c,a||d.deleteResults[0].error,e)},c)}}),EsriLeaflet.Services.featureLayerService=function(a){return new EsriLeaflet.Services.FeatureLayerService(a)},EsriLeaflet.Tasks.Task=L.Class.extend({options:{proxy:!1,useCors:EsriLeaflet.Support.CORS},generateSetter:function(a,b){return L.Util.bind(function(b){return this.params[a]=b,this},b)},initialize:function(a){if(a.request&&a.options?(this._service=a,L.Util.setOptions(this,a.options)):(L.Util.setOptions(this,a),this.options.url=L.esri.Util.cleanUrl(a.url)),this.params=L.Util.extend({},this.params||{}),this.setters)for(var b in this.setters){var c=this.setters[b];this[b]=this.generateSetter(c,this)}},token:function(a){return this._service?this._service.authenticate(a):this.params.token=a,this},request:function(a,b){return this._service?this._service.request(this.path,this.params,a,b):this._request("request",this.path,this.params,a,b)},_request:function(a,b,c,d,e){var f=this.options.proxy?this.options.proxy+"?"+this.options.url+b:this.options.url+b;return"get"!==a&&"request"!==a||this.options.useCors?EsriLeaflet[a](f,c,d,e):EsriLeaflet.Request.get.JSONP(f,c,d,e)}}),EsriLeaflet.Tasks.Query=EsriLeaflet.Tasks.Task.extend({setters:{offset:"offset",limit:"limit",fields:"outFields",precision:"geometryPrecision",featureIds:"objectIds",returnGeometry:"returnGeometry",token:"token"},path:"query",params:{returnGeometry:!0,where:"1=1",outSr:4326,outFields:"*"},within:function(a){return this._setGeometry(a),this.params.spatialRel="esriSpatialRelContains",this},intersects:function(a){return this._setGeometry(a),this.params.spatialRel="esriSpatialRelIntersects",this},contains:function(a){return this._setGeometry(a),this.params.spatialRel="esriSpatialRelWithin",this},overlaps:function(a){return this._setGeometry(a),this.params.spatialRel="esriSpatialRelOverlaps",this},nearby:function(a,b){return a=L.latLng(a),this.params.geometry=[a.lng,a.lat],this.params.geometryType="esriGeometryPoint",this.params.spatialRel="esriSpatialRelIntersects",this.params.units="esriSRUnit_Meter",this.params.distance=b,this.params.inSr=4326,this},where:function(a){return this.params.where=a,this},between:function(a,b){return this.params.time=[a.valueOf(),b.valueOf()],this},simplify:function(a,b){var c=Math.abs(a.getBounds().getWest()-a.getBounds().getEast());return this.params.maxAllowableOffset=c/a.getSize().y*b,this},orderBy:function(a,b){return b=b||"ASC",this.params.orderByFields=this.params.orderByFields?this.params.orderByFields+",":"",this.params.orderByFields+=[a,b].join(" "),this},run:function(a,b){return this._cleanParams(),EsriLeaflet.Util.isArcgisOnline(this.options.url)?(this.params.f="geojson",this.request(function(c,d){this._trapSQLerrors(c),a.call(b,c,d,d)},this)):this.request(function(c,d){this._trapSQLerrors(c),a.call(b,c,d&&EsriLeaflet.Util.responseToFeatureCollection(d),d)},this)},count:function(a,b){return this._cleanParams(),this.params.returnCountOnly=!0,this.request(function(b,c){a.call(this,b,c&&c.count,c)},b)},ids:function(a,b){return this._cleanParams(),this.params.returnIdsOnly=!0,this.request(function(b,c){a.call(this,b,c&&c.objectIds,c)},b)},bounds:function(a,b){return this._cleanParams(),this.params.returnExtentOnly=!0,this.request(function(c,d){a.call(b,c,d&&d.extent&&EsriLeaflet.Util.extentToBounds(d.extent),d)},b)},pixelSize:function(a){return a=L.point(a),this.params.pixelSize=[a.x,a.y],this},layer:function(a){return this.path=a+"/query",this},_trapSQLerrors:function(a){a&&"400"===a.code&&EsriLeaflet.Util.warn("one common syntax error in query requests is encasing string values in double quotes instead of single quotes")},_cleanParams:function(){delete this.params.returnIdsOnly,delete this.params.returnExtentOnly,delete this.params.returnCountOnly},_setGeometry:function(a){return this.params.inSr=4326,a instanceof L.LatLngBounds?(this.params.geometry=EsriLeaflet.Util.boundsToExtent(a),void(this.params.geometryType="esriGeometryEnvelope")):(a.getLatLng&&(a=a.getLatLng()),a instanceof L.LatLng&&(a={type:"Point",coordinates:[a.lng,a.lat]}),a instanceof L.GeoJSON&&(a=a.getLayers()[0].feature.geometry,this.params.geometry=EsriLeaflet.Util.geojsonToArcGIS(a),this.params.geometryType=EsriLeaflet.Util.geojsonTypeToArcGIS(a.type)),a.toGeoJSON&&(a=a.toGeoJSON()),"Feature"===a.type&&(a=a.geometry),"Point"===a.type||"LineString"===a.type||"Polygon"===a.type?(this.params.geometry=EsriLeaflet.Util.geojsonToArcGIS(a),void(this.params.geometryType=EsriLeaflet.Util.geojsonTypeToArcGIS(a.type))):void EsriLeaflet.Util.warn("invalid geometry passed to spatial query. Should be an L.LatLng, L.LatLngBounds or L.Marker or a GeoJSON Point Line or Polygon object"))}}),EsriLeaflet.Tasks.query=function(a){return new EsriLeaflet.Tasks.Query(a)},EsriLeaflet.Layers.FeatureGrid=L.Class.extend({includes:L.Mixin.Events,options:{cellSize:512,updateInterval:150},initialize:function(a){a=L.setOptions(this,a)},onAdd:function(a){this._map=a,this._update=L.Util.limitExecByInterval(this._update,this.options.updateInterval,this),this._map.addEventListener(this.getEvents(),this),this._reset(),this._update()},onRemove:function(){this._map.removeEventListener(this.getEvents(),this),this._removeCells()},getEvents:function(){var a={viewreset:this._reset,moveend:this._update,zoomend:this._onZoom};return a},addTo:function(a){return a.addLayer(this),this},removeFrom:function(a){return a.removeLayer(this),this},_onZoom:function(){var a=this._map.getZoom();a>this.options.maxZoom||athis.options.maxZoom||bc;c++)this._addCell(e[c])},_cellCoordsToBounds:function(a){var b=this._map,c=this.options.cellSize,d=a.multiplyBy(c),e=d.add([c,c]),f=b.unproject(d,a.z).wrap(),g=b.unproject(e,a.z).wrap();return new L.LatLngBounds(f,g)},_cellCoordsToKey:function(a){return a.x+":"+a.y},_keyToCellCoords:function(a){var b=a.split(":"),c=parseInt(b[0],10),d=parseInt(b[1],10);return new L.Point(c,d)},_removeOtherCells:function(a){for(var b in this._cells)a.contains(this._keyToCellCoords(b))||this._removeCell(b)},_removeCell:function(a){var b=this._activeCells[a];b&&(delete this._activeCells[a],this.cellLeave&&this.cellLeave(b.bounds,b.coords),this.fire("cellleave",{bounds:b.bounds,coords:b.coords}))},_removeCells:function(){for(var a in this._cells){var b=this._cells[a].bounds,c=this._cells[a].coords;this.cellLeave&&this.cellLeave(b,c),this.fire("cellleave",{bounds:b,coords:c})}},_addCell:function(a){this._wrapCoords(a);var b=this._cellCoordsToKey(a),c=this._cells[b];c&&!this._activeCells[b]&&(this.cellEnter&&this.cellEnter(c.bounds,a),this.fire("cellenter",{bounds:c.bounds,coords:a}),this._activeCells[b]=c),c||(c={coords:a,bounds:this._cellCoordsToBounds(a)},this._cells[b]=c,this._activeCells[b]=c,this.createCell&&this.createCell(c.bounds,a),this.fire("cellcreate",{bounds:c.bounds,coords:a}))},_wrapCoords:function(a){a.x=this._wrapLng?L.Util.wrapNum(a.x,this._wrapLng):a.x,a.y=this._wrapLat?L.Util.wrapNum(a.y,this._wrapLat):a.y}}),function(a){function b(a){this.values=a||[]}a.Layers.FeatureManager=a.Layers.FeatureGrid.extend({options:{where:"1=1",fields:["*"],from:!1,to:!1,timeField:!1,timeFilterMode:"server",simplifyFactor:0,precision:6},initialize:function(c){if(a.Layers.FeatureGrid.prototype.initialize.call(this,c),c.url=a.Util.cleanUrl(c.url),c=L.setOptions(this,c),this._service=new a.Services.FeatureLayerService(c),"*"!==this.options.fields[0]){for(var d=!1,e=0;e=0;d--){var e=a[d].id;this._currentSnapshot.push(e),this._cache[c].push(e)}this.options.timeField&&this._buildTimeIndexes(a);var f=this._map.getZoom();f>this.options.maxZoom||f=0;j--)f.push(i.features[j].id);0>=g&&(this._currentSnapshot=f,a.Util.requestAnimationFrame(L.Util.bind(function(){this.removeLayers(e),this.addLayers(f),c&&c.call(d,h)},this)))},this),j=this._currentSnapshot.length-1;j>=0;j--)e.push(this._currentSnapshot[j]);for(var k in this._activeCells){g++;var l=this._keyToCellCoords(k),m=this._cellCoordsToBounds(l);this._requestFeatures(m,k,i)}return this},getWhere:function(){return this.options.where},getTimeRange:function(){return[this.options.from,this.options.to]},setTimeRange:function(a,b,c,d){var e=this.options.from,f=this.options.to,g=0,h=null,i=L.Util.bind(function(i){i&&(h=i),this._filterExistingFeatures(e,f,a,b),g--,c&&0>=g&&c.call(d,h)},this);if(this.options.from=a,this.options.to=b,this._filterExistingFeatures(e,f,a,b),"server"===this.options.timeFilterMode)for(var j in this._activeCells){g++;var k=this._keyToCellCoords(j),l=this._cellCoordsToBounds(k);this._requestFeatures(l,j,i)}},refresh:function(){for(var a in this._activeCells){var b=this._keyToCellCoords(a),c=this._cellCoordsToBounds(b);this._requestFeatures(c,a)}this.redraw&&this.once("load",function(){this.eachFeature(function(a){this._redraw(a.feature.id)},this)},this)},_filterExistingFeatures:function(b,c,d,e){var f=b&&c?this._getFeaturesInTimeRange(b,c):this._currentSnapshot,g=this._getFeaturesInTimeRange(d,e);if(g.indexOf)for(var h=0;h=0&&f.splice(i,1)}a.Util.requestAnimationFrame(L.Util.bind(function(){this.removeLayers(f),this.addLayers(g)},this))},_getFeaturesInTimeRange:function(a,b){var c,d=[];if(this.options.timeField.start&&this.options.timeField.end){var e=this._startTimeIndex.between(a,b),f=this._endTimeIndex.between(a,b);c=e.concat(f)}else c=this._timeIndex.between(a,b);for(var g=c.length-1;g>=0;g--)d.push(c[g].id);return d},_buildTimeIndexes:function(a){var b,c;if(this.options.timeField.start&&this.options.timeField.end){var d=[],e=[];for(b=a.length-1;b>=0;b--)c=a[b],d.push({id:c.id,value:new Date(c.properties[this.options.timeField.start])}),e.push({id:c.id,value:new Date(c.properties[this.options.timeField.end])});this._startTimeIndex.bulkAdd(d),this._endTimeIndex.bulkAdd(e)}else{var f=[];for(b=a.length-1;b>=0;b--)c=a[b],f.push({id:c.id,value:new Date(c.properties[this.options.timeField])});this._timeIndex.bulkAdd(f)}},_featureWithinTimeRange:function(a){if(!this.options.from||!this.options.to)return!0;var b=+this.options.from.valueOf(),c=+this.options.to.valueOf();if("string"==typeof this.options.timeField){var d=+a.properties[this.options.timeField];return d>=b&&c>=d}if(this.options.timeField.start&&this.options.timeField.end){var e=+a.properties[this.options.timeField.start],f=+a.properties[this.options.timeField.end];return e>=b&&c>=e||f>=b&&c>=f}},authenticate:function(a){return this._service.authenticate(a),this},metadata:function(a,b){return this._service.metadata(a,b),this},query:function(){return this._service.query()},_getMetadata:function(a){if(this._metadata){var b;a(b,this._metadata)}else this.metadata(L.Util.bind(function(b,c){this._metadata=c,a(b,this._metadata)},this))},addFeature:function(a,b,c){this._getMetadata(L.Util.bind(function(d,e){this._service.addFeature(a,L.Util.bind(function(d,f){d||(a.properties[e.objectIdField]=f.objectId,a.id=f.objectId,this.createLayers([a])),b&&b.call(c,d,f)},this))},this))},updateFeature:function(a,b,c){this._service.updateFeature(a,function(d,e){d||(this.removeLayers([a.id],!0),this.createLayers([a])),b&&b.call(c,d,e)},this)},deleteFeature:function(a,b,c){this._service.deleteFeature(a,function(a,d){!a&&d.objectId&&this.removeLayers([d.objectId],!0),b&&b.call(c,a,d)},this)},deleteFeatures:function(a,b,c){return this._service.deleteFeatures(a,function(a,d){if(!a&&d.length>0)for(var e=0;e=e;)if(d=b=(e+f)/2|0,c=this.values[Math.round(b)],+c.value<+a)e=b+1;else{if(!(+c.value>+a))return b;f=b-1}return~f},b.prototype.sort=function(){this.values.sort(function(a,b){return+b.value-+a.value}).reverse(),this.dirty=!1},b.prototype.between=function(a,b){this.dirty&&this.sort();var c=this._query(a),d=this._query(b);return 0===c&&0===d?[]:(c=Math.abs(c),d=0>d?Math.abs(d):d+1,this.values.slice(c,d))},b.prototype.bulkAdd=function(a){this.dirty=!0,this.values=this.values.concat(a)}}(EsriLeaflet),EsriLeaflet.Layers.FeatureLayer=EsriLeaflet.Layers.FeatureManager.extend({statics:{EVENTS:"click dblclick mouseover mouseout mousemove contextmenu popupopen popupclose"},options:{cacheLayers:!0},initialize:function(a){EsriLeaflet.Layers.FeatureManager.prototype.initialize.call(this,a),a=L.setOptions(this,a),this._layers={},this._leafletIds={},this._key="c"+(1e9*Math.random()).toString(36).replace(".","_")},onAdd:function(a){return a.on("zoomstart zoomend",function(a){this._zooming="zoomstart"===a.type},this),this._removed=!1,EsriLeaflet.Layers.FeatureManager.prototype.onAdd.call(this,a)},onRemove:function(a){this._removed=!0;for(var b in this._layers)a.removeLayer(this._layers[b]);return EsriLeaflet.Layers.FeatureManager.prototype.onRemove.call(this,a)},createNewLayer:function(a){return L.GeoJSON.geometryToLayer(a,this.options.pointToLayer,L.GeoJSON.coordsToLatLng,this.options)},_updateLayer:function(a,b){var c=[],d=this.options.coordsToLatLng||L.GeoJSON.coordsToLatLng;switch(b.properties&&(a.feature.properties=b.properties),b.geometry.type){case"Point":c=L.GeoJSON.coordsToLatLng(b.geometry.coordinates),a.setLatLng(c);break;case"LineString":c=L.GeoJSON.coordsToLatLngs(b.geometry.coordinates,0,d),a.setLatLngs(c);break;case"MultiLineString":c=L.GeoJSON.coordsToLatLngs(b.geometry.coordinates,1,d),a.setLatLngs(c);break;case"Polygon":c=L.GeoJSON.coordsToLatLngs(b.geometry.coordinates,1,d),a.setLatLngs(c);break;case"MultiPolygon":c=L.GeoJSON.coordsToLatLngs(b.geometry.coordinates,2,d),a.setLatLngs(c)}},createLayers:function(a){for(var b=a.length-1;b>=0;b--){var c,d=a[b],e=this._layers[d.id];e&&!this._map.hasLayer(e)&&this._map.addLayer(e),e&&(e.setLatLngs||e.setLatLng)&&this._updateLayer(e,d),e||(c=this.createNewLayer(d),c.feature=d,this.options.style?c._originalStyle=this.options.style:c.setStyle&&(c._originalStyle=c.options),c._leaflet_id=this._key+"_"+d.id,this._leafletIds[c._leaflet_id]=d.id,c.on(EsriLeaflet.Layers.FeatureLayer.EVENTS,this._propagateEvent,this),this._popup&&c.bindPopup&&c.bindPopup(this._popup(c.feature,c),this._popupOptions),this.options.onEachFeature&&this.options.onEachFeature(c.feature,c),this._layers[c.feature.id]=c,this.resetStyle(c.feature.id),this.fire("createfeature",{feature:c.feature}),(!this.options.timeField||this.options.timeField&&this._featureWithinTimeRange(d))&&this._map.addLayer(c))}},addLayers:function(a){for(var b=a.length-1;b>=0;b--){var c=this._layers[a[b]];c&&(this.fire("addfeature",{feature:c.feature}),this._map.addLayer(c))}},removeLayers:function(a,b){for(var c=a.length-1;c>=0;c--){var d=a[c],e=this._layers[d];e&&(this.fire("removefeature",{feature:e.feature,permanent:b}),this._map.removeLayer(e)),e&&b&&delete this._layers[d]}},cellEnter:function(a,b){this._zooming||EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){var a=this._cacheKey(b),c=this._cellCoordsToKey(b),d=this._cache[a];this._activeCells[c]&&d&&this.addLayers(d)},this))},cellLeave:function(a,b){this._zooming||EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){var a=this._cacheKey(b),c=this._cellCoordsToKey(b),d=this._cache[a],e=this._map.getBounds();if(!this._activeCells[c]&&d){for(var f=!0,g=0;g= 0);\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L504-L519\n function vertexIntersectsVertex(a1, a2, b1, b2) {\n var uaT = (b2[0] - b1[0]) * (a1[1] - b1[1]) - (b2[1] - b1[1]) * (a1[0] - b1[0]);\n var ubT = (a2[0] - a1[0]) * (a1[1] - b1[1]) - (a2[1] - a1[1]) * (a1[0] - b1[0]);\n var uB = (b2[1] - b1[1]) * (a2[0] - a1[0]) - (b2[0] - b1[0]) * (a2[1] - a1[1]);\n\n if ( uB !== 0 ) {\n var ua = uaT / uB;\n var ub = ubT / uB;\n\n if ( 0 <= ua && ua <= 1 && 0 <= ub && ub <= 1 ) {\n return true;\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L521-L531\n function arrayIntersectsArray(a, b) {\n for (var i = 0; i < a.length - 1; i++) {\n for (var j = 0; j < b.length - 1; j++) {\n if (vertexIntersectsVertex(a[i], a[i + 1], b[j], b[j + 1])) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L470-L480\n function coordinatesContainPoint(coordinates, point) {\n var contains = false;\n for(var i = -1, l = coordinates.length, j = l - 1; ++i < l; j = i) {\n if (((coordinates[i][1] <= point[1] && point[1] < coordinates[j][1]) ||\n (coordinates[j][1] <= point[1] && point[1] < coordinates[i][1])) &&\n (point[0] < (coordinates[j][0] - coordinates[i][0]) * (point[1] - coordinates[i][1]) / (coordinates[j][1] - coordinates[i][1]) + coordinates[i][0])) {\n contains = !contains;\n }\n }\n return contains;\n }\n\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L106-L113\n function coordinatesContainCoordinates(outer, inner){\n var intersects = arrayIntersectsArray(outer, inner);\n var contains = coordinatesContainPoint(outer, inner[0]);\n if(!intersects && contains){\n return true;\n }\n return false;\n }\n\n // do any polygons in this array contain any other polygons in this array?\n // used for checking for holes in arcgis rings\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L117-L172\n function convertRingsToGeoJSON(rings){\n var outerRings = [];\n var holes = [];\n var x; // iterator\n var outerRing; // current outer ring being evaluated\n var hole; // current hole being evaluated\n\n // for each ring\n for (var r = 0; r < rings.length; r++) {\n var ring = closeRing(rings[r].slice(0));\n if(ring.length < 4){\n continue;\n }\n // is this ring an outer ring? is it clockwise?\n if(ringIsClockwise(ring)){\n var polygon = [ ring ];\n outerRings.push(polygon); // push to outer rings\n } else {\n holes.push(ring); // counterclockwise push to holes\n }\n }\n\n var uncontainedHoles = [];\n\n // while there are holes left...\n while(holes.length){\n // pop a hole off out stack\n hole = holes.pop();\n\n // loop over all outer rings and see if they contain our hole.\n var contained = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(coordinatesContainCoordinates(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n contained = true;\n break;\n }\n }\n\n // ring is not contained in any outer ring\n // sometimes this happens https://github.com/Esri/esri-leaflet/issues/320\n if(!contained){\n uncontainedHoles.push(hole);\n }\n }\n\n // if we couldn't match any holes using contains we can try intersects...\n while(uncontainedHoles.length){\n // pop a hole off out stack\n hole = uncontainedHoles.pop();\n\n // loop over all outer rings and see if any intersect our hole.\n var intersects = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(arrayIntersectsArray(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n intersects = true;\n break;\n }\n }\n\n if(!intersects) {\n outerRings.push([hole.reverse()]);\n }\n }\n\n if(outerRings.length === 1){\n return {\n type: 'Polygon',\n coordinates: outerRings[0]\n };\n } else {\n return {\n type: 'MultiPolygon',\n coordinates: outerRings\n };\n }\n }\n\n // This function ensures that rings are oriented in the right directions\n // outer rings are clockwise, holes are counterclockwise\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function orientRings(poly){\n var output = [];\n var polygon = poly.slice(0);\n var outerRing = closeRing(polygon.shift().slice(0));\n if(outerRing.length >= 4){\n if(!ringIsClockwise(outerRing)){\n outerRing.reverse();\n }\n\n output.push(outerRing);\n\n for (var i = 0; i < polygon.length; i++) {\n var hole = closeRing(polygon[i].slice(0));\n if(hole.length >= 4){\n if(ringIsClockwise(hole)){\n hole.reverse();\n }\n output.push(hole);\n }\n }\n }\n\n return output;\n }\n\n // This function flattens holes in multipolygons to one array of polygons\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function flattenMultiPolygonRings(rings){\n var output = [];\n for (var i = 0; i < rings.length; i++) {\n var polygon = orientRings(rings[i]);\n for (var x = polygon.length - 1; x >= 0; x--) {\n var ring = polygon[x].slice(0);\n output.push(ring);\n }\n }\n return output;\n }\n\n // convert an extent (ArcGIS) to LatLngBounds (Leaflet)\n EsriLeaflet.Util.extentToBounds = function(extent){\n var sw = new L.LatLng(extent.ymin, extent.xmin);\n var ne = new L.LatLng(extent.ymax, extent.xmax);\n return new L.LatLngBounds(sw, ne);\n };\n\n // convert an LatLngBounds (Leaflet) to extent (ArcGIS)\n EsriLeaflet.Util.boundsToExtent = function(bounds) {\n bounds = L.latLngBounds(bounds);\n return {\n 'xmin': bounds.getSouthWest().lng,\n 'ymin': bounds.getSouthWest().lat,\n 'xmax': bounds.getNorthEast().lng,\n 'ymax': bounds.getNorthEast().lat,\n 'spatialReference': {\n 'wkid' : 4326\n }\n };\n };\n\n EsriLeaflet.Util.arcgisToGeojson = function (arcgis, idAttribute){\n var geojson = {};\n\n if(typeof arcgis.x === 'number' && typeof arcgis.y === 'number'){\n geojson.type = 'Point';\n geojson.coordinates = [arcgis.x, arcgis.y];\n }\n\n if(arcgis.points){\n geojson.type = 'MultiPoint';\n geojson.coordinates = arcgis.points.slice(0);\n }\n\n if(arcgis.paths) {\n if(arcgis.paths.length === 1){\n geojson.type = 'LineString';\n geojson.coordinates = arcgis.paths[0].slice(0);\n } else {\n geojson.type = 'MultiLineString';\n geojson.coordinates = arcgis.paths.slice(0);\n }\n }\n\n if(arcgis.rings) {\n geojson = convertRingsToGeoJSON(arcgis.rings.slice(0));\n }\n\n if(arcgis.geometry || arcgis.attributes) {\n geojson.type = 'Feature';\n geojson.geometry = (arcgis.geometry) ? EsriLeaflet.Util.arcgisToGeojson(arcgis.geometry) : null;\n geojson.properties = (arcgis.attributes) ? clone(arcgis.attributes) : null;\n if(arcgis.attributes) {\n geojson.id = arcgis.attributes[idAttribute] || arcgis.attributes.OBJECTID || arcgis.attributes.FID;\n }\n }\n\n return geojson;\n };\n\n // GeoJSON -> ArcGIS\n EsriLeaflet.Util.geojsonToArcGIS = function(geojson, idAttribute){\n idAttribute = idAttribute || 'OBJECTID';\n var spatialReference = { wkid: 4326 };\n var result = {};\n var i;\n\n switch(geojson.type){\n case 'Point':\n result.x = geojson.coordinates[0];\n result.y = geojson.coordinates[1];\n result.spatialReference = spatialReference;\n break;\n case 'MultiPoint':\n result.points = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'LineString':\n result.paths = [geojson.coordinates.slice(0)];\n result.spatialReference = spatialReference;\n break;\n case 'MultiLineString':\n result.paths = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'Polygon':\n result.rings = orientRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'MultiPolygon':\n result.rings = flattenMultiPolygonRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'Feature':\n if(geojson.geometry) {\n result.geometry = EsriLeaflet.Util.geojsonToArcGIS(geojson.geometry, idAttribute);\n }\n result.attributes = (geojson.properties) ? clone(geojson.properties) : {};\n if(geojson.id){\n result.attributes[idAttribute] = geojson.id;\n }\n break;\n case 'FeatureCollection':\n result = [];\n for (i = 0; i < geojson.features.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.features[i], idAttribute));\n }\n break;\n case 'GeometryCollection':\n result = [];\n for (i = 0; i < geojson.geometries.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.geometries[i], idAttribute));\n }\n break;\n }\n\n return result;\n };\n\n EsriLeaflet.Util.responseToFeatureCollection = function(response, idAttribute){\n var objectIdField;\n\n if(idAttribute){\n objectIdField = idAttribute;\n } else if(response.objectIdFieldName){\n objectIdField = response.objectIdFieldName;\n } else if(response.fields) {\n for (var j = 0; j <= response.fields.length - 1; j++) {\n if(response.fields[j].type === 'esriFieldTypeOID') {\n objectIdField = response.fields[j].name;\n break;\n }\n }\n } else {\n objectIdField = 'OBJECTID';\n }\n\n var featureCollection = {\n type: 'FeatureCollection',\n features: []\n };\n var features = response.features || response.results;\n if(features.length){\n for (var i = features.length - 1; i >= 0; i--) {\n featureCollection.features.push(EsriLeaflet.Util.arcgisToGeojson(features[i], objectIdField));\n }\n }\n\n return featureCollection;\n };\n\n // trim url whitespace and add a trailing slash if needed\n EsriLeaflet.Util.cleanUrl = function(url){\n //trim leading and trailing spaces, but not spaces inside the url\n url = url.replace(/^\\s+|\\s+$|\\A\\s+|\\s+\\z/g, '');\n\n //add a trailing slash to the url if the user omitted it\n if(url[url.length-1] !== '/'){\n url += '/';\n }\n\n return url;\n };\n\n EsriLeaflet.Util.isArcgisOnline = function(url){\n /* hosted feature services can emit geojson natively.\n our check for 'geojson' support will need to be revisted\n once the functionality makes its way to ArcGIS Server*/\n return (/\\.arcgis\\.com.*?FeatureServer/g).test(url);\n };\n\n EsriLeaflet.Util.geojsonTypeToArcGIS = function (geoJsonType) {\n var arcgisGeometryType;\n switch (geoJsonType) {\n case 'Point':\n arcgisGeometryType = 'esriGeometryPoint';\n break;\n case 'MultiPoint':\n arcgisGeometryType = 'esriGeometryMultipoint';\n break;\n case 'LineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'MultiLineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'Polygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n case 'MultiPolygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n }\n return arcgisGeometryType;\n };\n\n EsriLeaflet.Util.requestAnimationFrame = L.Util.bind(raf, window);\n\n EsriLeaflet.Util.warn = function (message) {\n if(console && console.warn) {\n console.warn(message);\n }\n };\n\n})(EsriLeaflet);","(function(EsriLeaflet){\n\n var callbacks = 0;\n\n window._EsriLeafletCallbacks = {};\n\n function serialize(params){\n var data = '';\n\n params.f = params.f || 'json';\n\n for (var key in params){\n if(params.hasOwnProperty(key)){\n var param = params[key];\n var type = Object.prototype.toString.call(param);\n var value;\n\n if(data.length){\n data += '&';\n }\n\n if (type === '[object Array]'){\n value = (Object.prototype.toString.call(param[0]) === '[object Object]') ? JSON.stringify(param) : param.join(',');\n } else if (type === '[object Object]') {\n value = JSON.stringify(param);\n } else if (type === '[object Date]'){\n value = param.valueOf();\n } else {\n value = param;\n }\n\n data += encodeURIComponent(key) + '=' + encodeURIComponent(value);\n }\n }\n\n return data;\n }\n\n function createRequest(callback, context){\n var httpRequest = new XMLHttpRequest();\n\n httpRequest.onerror = function(e) {\n httpRequest.onreadystatechange = L.Util.falseFn;\n\n callback.call(context, {\n error: {\n code: 500,\n message: 'XMLHttpRequest error'\n }\n }, null);\n };\n\n httpRequest.onreadystatechange = function(){\n var response;\n var error;\n\n if (httpRequest.readyState === 4) {\n try {\n response = JSON.parse(httpRequest.responseText);\n } catch(e) {\n response = null;\n error = {\n code: 500,\n message: 'Could not parse response as JSON. This could also be caused by a CORS or XMLHttpRequest error.'\n };\n }\n\n if (!error && response.error) {\n error = response.error;\n response = null;\n }\n\n httpRequest.onerror = L.Util.falseFn;\n\n callback.call(context, error, response);\n }\n };\n\n return httpRequest;\n }\n\n // AJAX handlers for CORS (modern browsers) or JSONP (older browsers)\n EsriLeaflet.Request = {\n request: function(url, params, callback, context){\n var paramString = serialize(params);\n var httpRequest = createRequest(callback, context);\n var requestLength = (url + '?' + paramString).length;\n\n // request is less then 2000 characters and the browser supports CORS, make GET request with XMLHttpRequest\n if(requestLength <= 2000 && L.esri.Support.CORS){\n httpRequest.open('GET', url + '?' + paramString);\n httpRequest.send(null);\n\n // request is less more then 2000 characters and the browser supports CORS, make POST request with XMLHttpRequest\n } else if (requestLength > 2000 && L.esri.Support.CORS){\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(paramString);\n\n // request is less more then 2000 characters and the browser does not support CORS, make a JSONP request\n } else if(requestLength <= 2000 && !L.esri.Support.CORS){\n return L.esri.Request.get.JSONP(url, params, callback, context);\n\n // request is longer then 2000 characters and the browser does not support CORS, log a warning\n } else {\n EsriLeaflet.Util.warn('a request to ' + url + ' was longer then 2000 characters and this browser cannot make a cross-domain post request. Please use a proxy http://esri.github.io/esri-leaflet/api-reference/request.html');\n return;\n }\n\n return httpRequest;\n },\n\n post: {\n XMLHTTP: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(serialize(params));\n\n return httpRequest;\n }\n },\n\n get: {\n CORS: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n\n httpRequest.open('GET', url + '?' + serialize(params), true);\n httpRequest.send(null);\n\n return httpRequest;\n },\n JSONP: function(url, params, callback, context){\n var callbackId = 'c' + callbacks;\n\n params.callback = 'window._EsriLeafletCallbacks.' + callbackId;\n\n var script = L.DomUtil.create('script', null, document.body);\n script.type = 'text/javascript';\n script.src = url + '?' + serialize(params);\n script.id = callbackId;\n\n window._EsriLeafletCallbacks[callbackId] = function(response){\n if(window._EsriLeafletCallbacks[callbackId] !== true){\n var error;\n var responseType = Object.prototype.toString.call(response);\n\n if(!(responseType === '[object Object]' || responseType === '[object Array]')){\n error = {\n error: {\n code: 500,\n message: 'Expected array or object as JSONP response'\n }\n };\n response = null;\n }\n\n if (!error && response.error) {\n error = response;\n response = null;\n }\n\n callback.call(context, error, response);\n window._EsriLeafletCallbacks[callbackId] = true;\n }\n };\n\n callbacks++;\n\n return {\n id: callbackId,\n url: script.src,\n abort: function(){\n window._EsriLeafletCallbacks._callback[callbackId]({\n code: 0,\n message: 'Request aborted.'\n });\n }\n };\n }\n }\n };\n\n // choose the correct AJAX handler depending on CORS support\n EsriLeaflet.get = (EsriLeaflet.Support.CORS) ? EsriLeaflet.Request.get.CORS : EsriLeaflet.Request.get.JSONP;\n\n // always use XMLHttpRequest for posts\n EsriLeaflet.post = EsriLeaflet.Request.post.XMLHTTP;\n\n // expose a common request method the uses GET\\POST based on request length\n EsriLeaflet.request = EsriLeaflet.Request.request;\n\n})(EsriLeaflet);","EsriLeaflet.Services.Service = L.Class.extend({\n\n includes: L.Mixin.Events,\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n initialize: function (options) {\n options = options || {};\n this._requestQueue = [];\n this._authenticating = false;\n L.Util.setOptions(this, options);\n this.options.url = EsriLeaflet.Util.cleanUrl(this.options.url);\n },\n\n get: function (path, params, callback, context) {\n return this._request('get', path, params, callback, context);\n },\n\n post: function (path, params, callback, context) {\n return this._request('post', path, params, callback, context);\n },\n\n request: function (path, params, callback, context) {\n return this._request('request', path, params, callback, context);\n },\n\n metadata: function (callback, context) {\n return this._request('get', '', {}, callback, context);\n },\n\n authenticate: function(token){\n this._authenticating = false;\n this.options.token = token;\n this._runQueue();\n return this;\n },\n\n _request: function(method, path, params, callback, context){\n this.fire('requeststart', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n\n var wrappedCallback = this._createServiceCallback(method, path, params, callback, context);\n\n if (this.options.token) {\n params.token = this.options.token;\n }\n\n if (this._authenticating) {\n this._requestQueue.push([method, path, params, callback, context]);\n return;\n } else {\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, wrappedCallback);\n } else {\n return EsriLeaflet[method](url, params, wrappedCallback);\n }\n }\n },\n\n _createServiceCallback: function(method, path, params, callback, context){\n return L.Util.bind(function(error, response){\n\n if (error && (error.code === 499 || error.code === 498)) {\n this._authenticating = true;\n\n this._requestQueue.push([method, path, params, callback, context]);\n\n // fire an event for users to handle and re-authenticate\n this.fire('authenticationrequired', {\n authenticate: L.Util.bind(this.authenticate, this)\n });\n\n // if the user has access to a callback they can handle the auth error\n error.authenticate = L.Util.bind(this.authenticate, this);\n }\n\n callback.call(context, error, response);\n\n if(error) {\n this.fire('requesterror', {\n url: this.options.url + path,\n params: params,\n message: error.message,\n code: error.code,\n method: method\n });\n } else {\n this.fire('requestsuccess', {\n url: this.options.url + path,\n params: params,\n response: response,\n method: method\n });\n }\n\n this.fire('requestend', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n }, this);\n },\n\n _runQueue: function(){\n for (var i = this._requestQueue.length - 1; i >= 0; i--) {\n var request = this._requestQueue[i];\n var method = request.shift();\n this[method].apply(this, request);\n }\n this._requestQueue = [];\n }\n\n});\n\nEsriLeaflet.Services.service = function(params){\n return new EsriLeaflet.Services.Service(params);\n};\n","EsriLeaflet.Services.FeatureLayerService = EsriLeaflet.Services.Service.extend({\n\n options: {\n idAttribute: 'OBJECTID'\n },\n\n query: function(){\n return new EsriLeaflet.Tasks.Query(this);\n },\n\n addFeature: function(feature, callback, context) {\n delete feature.id;\n\n feature = EsriLeaflet.Util.geojsonToArcGIS(feature);\n\n return this.post('addFeatures', {\n features: [feature]\n }, function(error, response){\n var result = (response && response.addResults) ? response.addResults[0] : undefined;\n if(callback){\n callback.call(context, error || response.addResults[0].error, result);\n }\n }, context);\n },\n\n updateFeature: function(feature, callback, context) {\n feature = EsriLeaflet.Util.geojsonToArcGIS(feature, this.options.idAttribute);\n\n return this.post('updateFeatures', {\n features: [feature]\n }, function(error, response){\n var result = (response && response.updateResults) ? response.updateResults[0] : undefined;\n if(callback){\n callback.call(context, error || response.updateResults[0].error, result);\n }\n }, context);\n },\n\n deleteFeature: function(id, callback, context) {\n return this.post('deleteFeatures', {\n objectIds: id\n }, function(error, response){\n var result = (response && response.deleteResults) ? response.deleteResults[0] : undefined;\n if(callback){\n callback.call(context, error || response.deleteResults[0].error, result);\n }\n }, context);\n },\n\n deleteFeatures: function(ids, callback, context) {\n return this.post('deleteFeatures', {\n objectIds: ids\n }, function(error, response){\n // pass back the entire array\n var result = (response && response.deleteResults) ? response.deleteResults : undefined;\n if(callback){\n callback.call(context, error || response.deleteResults[0].error, result);\n }\n }, context);\n }\n});\n\nEsriLeaflet.Services.featureLayerService = function(options) {\n return new EsriLeaflet.Services.FeatureLayerService(options);\n};\n","EsriLeaflet.Tasks.Task = L.Class.extend({\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n //Generate a method for each methodName:paramName in the setters for this task.\n generateSetter: function(param, context){\n return L.Util.bind(function(value){\n this.params[param] = value;\n return this;\n }, context);\n },\n\n initialize: function(endpoint){\n // endpoint can be either a url (and options) for an ArcGIS Rest Service or an instance of EsriLeaflet.Service\n if(endpoint.request && endpoint.options){\n this._service = endpoint;\n L.Util.setOptions(this, endpoint.options);\n } else {\n L.Util.setOptions(this, endpoint);\n this.options.url = L.esri.Util.cleanUrl(endpoint.url);\n }\n\n // clone default params into this object\n this.params = L.Util.extend({}, this.params || {});\n\n // generate setter methods based on the setters object implimented a child class\n if(this.setters){\n for (var setter in this.setters){\n var param = this.setters[setter];\n this[setter] = this.generateSetter(param, this);\n }\n }\n },\n\n token: function(token){\n if(this._service){\n this._service.authenticate(token);\n } else {\n this.params.token = token;\n }\n return this;\n },\n\n request: function(callback, context){\n if(this._service){\n return this._service.request(this.path, this.params, callback, context);\n } else {\n return this._request('request', this.path, this.params, callback, context);\n }\n },\n\n _request: function(method, path, params, callback, context){\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, callback, context);\n } else{\n return EsriLeaflet[method](url, params, callback, context);\n }\n }\n});","EsriLeaflet.Tasks.Query = EsriLeaflet.Tasks.Task.extend({\n setters: {\n 'offset': 'offset',\n 'limit': 'limit',\n 'fields': 'outFields',\n 'precision': 'geometryPrecision',\n 'featureIds': 'objectIds',\n 'returnGeometry': 'returnGeometry',\n 'token': 'token'\n },\n\n path: 'query',\n\n params: {\n returnGeometry: true,\n where: '1=1',\n outSr: 4326,\n outFields: '*'\n },\n\n within: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelContains'; // will make code read layer within geometry, to the api this will reads geometry contains layer\n return this;\n },\n\n intersects: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelIntersects';\n return this;\n },\n\n contains: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelWithin'; // will make code read layer contains geometry, to the api this will reads geometry within layer\n return this;\n },\n\n // crosses: function(geometry){\n // this._setGeometry(geometry);\n // this.params.spatialRel = 'esriSpatialRelCrosses';\n // return this;\n // },\n\n // touches: function(geometry){\n // this._setGeometry(geometry);\n // this.params.spatialRel = 'esriSpatialRelTouches';\n // return this;\n // },\n\n overlaps: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelOverlaps';\n return this;\n },\n\n // only valid for Feature Services running on ArcGIS Server 10.3 or ArcGIS Online\n nearby: function(latlng, radius){\n latlng = L.latLng(latlng);\n this.params.geometry = [latlng.lng, latlng.lat];\n this.params.geometryType = 'esriGeometryPoint';\n this.params.spatialRel = 'esriSpatialRelIntersects';\n this.params.units = 'esriSRUnit_Meter';\n this.params.distance = radius;\n this.params.inSr = 4326;\n return this;\n },\n\n where: function(string){\n // instead of converting double-quotes to single quotes, pass as is, and provide a more informative message if a 400 is encountered\n this.params.where = string;\n return this;\n },\n\n between: function(start, end){\n this.params.time = [start.valueOf(), end.valueOf()];\n return this;\n },\n\n simplify: function(map, factor){\n var mapWidth = Math.abs(map.getBounds().getWest() - map.getBounds().getEast());\n this.params.maxAllowableOffset = (mapWidth / map.getSize().y) * factor;\n return this;\n },\n\n orderBy: function(fieldName, order){\n order = order || 'ASC';\n this.params.orderByFields = (this.params.orderByFields) ? this.params.orderByFields + ',' : '';\n this.params.orderByFields += ([fieldName, order]).join(' ');\n return this;\n },\n\n run: function(callback, context){\n this._cleanParams();\n\n // if the service is hosted on arcgis online request geojson directly\n if(EsriLeaflet.Util.isArcgisOnline(this.options.url)){\n this.params.f = 'geojson';\n\n return this.request(function(error, response){\n this._trapSQLerrors(error);\n callback.call(context, error, response, response);\n }, this);\n\n // otherwise convert it in the callback then pass it on\n } else {\n return this.request(function(error, response){\n this._trapSQLerrors(error);\n callback.call(context, error, (response && EsriLeaflet.Util.responseToFeatureCollection(response)), response);\n }, this);\n }\n },\n\n count: function(callback, context){\n this._cleanParams();\n this.params.returnCountOnly = true;\n return this.request(function(error, response){\n callback.call(this, error, (response && response.count), response);\n }, context);\n },\n\n ids: function(callback, context){\n this._cleanParams();\n this.params.returnIdsOnly = true;\n return this.request(function(error, response){\n callback.call(this, error, (response && response.objectIds), response);\n }, context);\n },\n\n // only valid for Feature Services running on ArcGIS Server 10.3 or ArcGIS Online\n bounds: function(callback, context){\n this._cleanParams();\n this.params.returnExtentOnly = true;\n return this.request(function(error, response){\n callback.call(context, error, (response && response.extent && EsriLeaflet.Util.extentToBounds(response.extent)), response);\n }, context);\n },\n\n // only valid for image services\n pixelSize: function(point){\n point = L.point(point);\n this.params.pixelSize = [point.x,point.y];\n return this;\n },\n\n // only valid for map services\n layer: function(layer){\n this.path = layer + '/query';\n return this;\n },\n\n _trapSQLerrors: function(error){\n if (error){\n if (error.code === '400'){\n EsriLeaflet.Util.warn('one common syntax error in query requests is encasing string values in double quotes instead of single quotes');\n }\n }\n },\n\n _cleanParams: function(){\n delete this.params.returnIdsOnly;\n delete this.params.returnExtentOnly;\n delete this.params.returnCountOnly;\n },\n\n _setGeometry: function(geometry) {\n this.params.inSr = 4326;\n\n // convert bounds to extent and finish\n if ( geometry instanceof L.LatLngBounds ) {\n // set geometry + geometryType\n this.params.geometry = EsriLeaflet.Util.boundsToExtent(geometry);\n this.params.geometryType = 'esriGeometryEnvelope';\n return;\n }\n\n // convert L.Marker > L.LatLng\n if(geometry.getLatLng){\n geometry = geometry.getLatLng();\n }\n\n // convert L.LatLng to a geojson point and continue;\n if (geometry instanceof L.LatLng) {\n geometry = {\n type: 'Point',\n coordinates: [geometry.lng, geometry.lat]\n };\n }\n\n // handle L.GeoJSON, pull out the first geometry\n if ( geometry instanceof L.GeoJSON ) {\n //reassign geometry to the GeoJSON value (we are assuming that only one feature is present)\n geometry = geometry.getLayers()[0].feature.geometry;\n this.params.geometry = EsriLeaflet.Util.geojsonToArcGIS(geometry);\n this.params.geometryType = EsriLeaflet.Util.geojsonTypeToArcGIS(geometry.type);\n }\n\n // Handle L.Polyline and L.Polygon\n if (geometry.toGeoJSON) {\n geometry = geometry.toGeoJSON();\n }\n\n // handle GeoJSON feature by pulling out the geometry\n if ( geometry.type === 'Feature' ) {\n // get the geometry of the geojson feature\n geometry = geometry.geometry;\n }\n\n // confirm that our GeoJSON is a point, line or polygon\n if ( geometry.type === 'Point' || geometry.type === 'LineString' || geometry.type === 'Polygon') {\n this.params.geometry = EsriLeaflet.Util.geojsonToArcGIS(geometry);\n this.params.geometryType = EsriLeaflet.Util.geojsonTypeToArcGIS(geometry.type);\n return;\n }\n\n // warn the user if we havn't found a\n /* global console */\n EsriLeaflet.Util.warn('invalid geometry passed to spatial query. Should be an L.LatLng, L.LatLngBounds or L.Marker or a GeoJSON Point Line or Polygon object');\n\n return;\n }\n});\n\nEsriLeaflet.Tasks.query = function(params){\n return new EsriLeaflet.Tasks.Query(params);\n};","EsriLeaflet.Layers.FeatureGrid = L.Class.extend({\n\n includes: L.Mixin.Events,\n\n options: {\n cellSize: 512,\n updateInterval: 150\n },\n\n initialize: function (options) {\n options = L.setOptions(this, options);\n },\n\n onAdd: function (map) {\n this._map = map;\n this._update = L.Util.limitExecByInterval(this._update, this.options.updateInterval, this);\n\n // @TODO remove for leaflet 0.8\n this._map.addEventListener(this.getEvents(), this);\n\n this._reset();\n this._update();\n },\n\n onRemove: function(){\n this._map.removeEventListener(this.getEvents(), this);\n this._removeCells();\n },\n\n getEvents: function () {\n var events = {\n viewreset: this._reset,\n moveend: this._update,\n zoomend : this._onZoom\n };\n\n return events;\n },\n\n addTo: function(map){\n map.addLayer(this);\n return this;\n },\n\n removeFrom: function(map){\n map.removeLayer(this);\n return this;\n },\n\n _onZoom : function () {\n var zoom = this._map.getZoom();\n\n if (zoom > this.options.maxZoom ||\n zoom < this.options.minZoom) {\n this.removeFrom(this._map);\n this._map.addEventListener('zoomend', this.getEvents().zoomend, this);\n } else if (!this._map.hasLayer(this)) {\n this._map.removeEventListener('zoomend', this.getEvents().zoomend, this);\n this.addTo(this._map);\n }\n\n },\n\n _reset: function () {\n this._removeCells();\n\n this._cells = {};\n this._activeCells = {};\n this._cellsToLoad = 0;\n this._cellsTotal = 0;\n\n // @TODO enable at Leaflet 0.8\n // this._cellNumBounds = this._getCellNumBounds();\n\n this._resetWrap();\n },\n\n _resetWrap: function () {\n var map = this._map,\n crs = map.options.crs;\n\n if (crs.infinite) { return; }\n\n var cellSize = this._getCellSize();\n\n if (crs.wrapLng) {\n this._wrapLng = [\n Math.floor(map.project([0, crs.wrapLng[0]]).x / cellSize),\n Math.ceil(map.project([0, crs.wrapLng[1]]).x / cellSize)\n ];\n }\n\n if (crs.wrapLat) {\n this._wrapLat = [\n Math.floor(map.project([crs.wrapLat[0], 0]).y / cellSize),\n Math.ceil(map.project([crs.wrapLat[1], 0]).y / cellSize)\n ];\n }\n },\n\n _getCellSize: function () {\n return this.options.cellSize;\n },\n\n _update: function () {\n if (!this._map) { return; }\n\n var bounds = this._map.getPixelBounds(),\n zoom = this._map.getZoom(),\n cellSize = this._getCellSize(),\n cellPadding = [cellSize/2,cellSize/2];\n // cellPadding = [0,0]\n\n if (zoom > this.options.maxZoom ||\n zoom < this.options.minZoom) { return; }\n\n // cell coordinates range for the current view\n var topLeft = bounds.min.subtract(cellPadding).divideBy(cellSize).floor();\n topLeft.x = Math.max(topLeft.x, 0);\n topLeft.y = Math.max(topLeft.y, 0);\n\n var cellBounds = L.bounds(topLeft, bounds.max.add(cellPadding).divideBy(cellSize).floor());\n\n // remove any present cells that are off the specified bounds\n this._removeOtherCells(cellBounds);\n this._addCells(cellBounds);\n },\n\n _addCells: function (bounds) {\n var queue = [],\n center = bounds.getCenter(),\n zoom = this._map.getZoom();\n\n var j, i, coords;\n // create a queue of coordinates to load cells from\n for (j = bounds.min.y; j <= bounds.max.y; j++) {\n for (i = bounds.min.x; i <= bounds.max.x; i++) {\n coords = new L.Point(i, j);\n coords.z = zoom;\n\n // @TODO enable at Leaflet 0.8\n // if (this._isValidCell(coords)) {\n // queue.push(coords);\n // }\n\n queue.push(coords);\n }\n }\n var cellsToLoad = queue.length;\n\n if (cellsToLoad === 0) { return; }\n\n this._cellsToLoad += cellsToLoad;\n this._cellsTotal += cellsToLoad;\n\n // sort cell queue to load cells in order of their distance to center\n queue.sort(function (a, b) {\n return a.distanceTo(center) - b.distanceTo(center);\n });\n\n for (i = 0; i < cellsToLoad; i++) {\n this._addCell(queue[i]);\n }\n },\n\n // @TODO enable at Leaflet 0.8\n // _isValidCell: function (coords) {\n // var crs = this._map.options.crs;\n\n // if (!crs.infinite) {\n // // don't load cell if it's out of bounds and not wrapped\n // var bounds = this._cellNumBounds;\n // if (\n // (!crs.wrapLng && (coords.x < bounds.min.x || coords.x > bounds.max.x)) ||\n // (!crs.wrapLat && (coords.y < bounds.min.y || coords.y > bounds.max.y))\n // ) {\n // return false;\n // }\n // }\n\n // if (!this.options.bounds) {\n // return true;\n // }\n\n // // don't load cell if it doesn't intersect the bounds in options\n // var cellBounds = this._cellCoordsToBounds(coords);\n // return L.latLngBounds(this.options.bounds).intersects(cellBounds);\n // },\n\n // converts cell coordinates to its geographical bounds\n _cellCoordsToBounds: function (coords) {\n var map = this._map,\n cellSize = this.options.cellSize,\n\n nwPoint = coords.multiplyBy(cellSize),\n sePoint = nwPoint.add([cellSize, cellSize]),\n\n // @TODO for Leaflet 0.8\n // nw = map.wrapLatLng(map.unproject(nwPoint, coords.z)),\n // se = map.wrapLatLng(map.unproject(sePoint, coords.z));\n\n nw = map.unproject(nwPoint, coords.z).wrap(),\n se = map.unproject(sePoint, coords.z).wrap();\n\n return new L.LatLngBounds(nw, se);\n },\n\n // converts cell coordinates to key for the cell cache\n _cellCoordsToKey: function (coords) {\n return coords.x + ':' + coords.y;\n },\n\n // converts cell cache key to coordiantes\n _keyToCellCoords: function (key) {\n var kArr = key.split(':'),\n x = parseInt(kArr[0], 10),\n y = parseInt(kArr[1], 10);\n\n return new L.Point(x, y);\n },\n\n // remove any present cells that are off the specified bounds\n _removeOtherCells: function (bounds) {\n for (var key in this._cells) {\n if (!bounds.contains(this._keyToCellCoords(key))) {\n this._removeCell(key);\n }\n }\n },\n\n _removeCell: function (key) {\n var cell = this._activeCells[key];\n if(cell){\n delete this._activeCells[key];\n\n if (this.cellLeave) {\n this.cellLeave(cell.bounds, cell.coords);\n }\n\n this.fire('cellleave', {\n bounds: cell.bounds,\n coords: cell.coords\n });\n }\n },\n\n _removeCells: function(){\n for (var key in this._cells) {\n var bounds = this._cells[key].bounds;\n var coords = this._cells[key].coords;\n\n if (this.cellLeave) {\n this.cellLeave(bounds, coords);\n }\n\n this.fire('cellleave', {\n bounds: bounds,\n coords: coords\n });\n }\n },\n\n _addCell: function (coords) {\n\n // wrap cell coords if necessary (depending on CRS)\n this._wrapCoords(coords);\n\n // generate the cell key\n var key = this._cellCoordsToKey(coords);\n\n // get the cell from the cache\n var cell = this._cells[key];\n // if this cell should be shown as isnt active yet (enter)\n\n if (cell && !this._activeCells[key]) {\n if (this.cellEnter) {\n this.cellEnter(cell.bounds, coords);\n }\n\n this.fire('cellenter', {\n bounds: cell.bounds,\n coords: coords\n });\n\n this._activeCells[key] = cell;\n }\n\n // if we dont have this cell in the cache yet (create)\n if (!cell) {\n cell = {\n coords: coords,\n bounds: this._cellCoordsToBounds(coords)\n };\n\n this._cells[key] = cell;\n this._activeCells[key] = cell;\n\n if(this.createCell){\n this.createCell(cell.bounds, coords);\n }\n\n this.fire('cellcreate', {\n bounds: cell.bounds,\n coords: coords\n });\n }\n },\n\n _wrapCoords: function (coords) {\n coords.x = this._wrapLng ? L.Util.wrapNum(coords.x, this._wrapLng) : coords.x;\n coords.y = this._wrapLat ? L.Util.wrapNum(coords.y, this._wrapLat) : coords.y;\n }\n\n // get the global cell coordinates range for the current zoom\n // @TODO enable at Leaflet 0.8\n // _getCellNumBounds: function () {\n // // @TODO for Leaflet 0.8\n // // var bounds = this._map.getPixelWorldBounds(),\n // // size = this._getCellSize();\n // //\n // // return bounds ? L.bounds(\n // // bounds.min.divideBy(size).floor(),\n // // bounds.max.divideBy(size).ceil().subtract([1, 1])) : null;\n // }\n\n});","(function(EsriLeaflet){\n\n EsriLeaflet.Layers.FeatureManager = EsriLeaflet.Layers.FeatureGrid.extend({\n\n /**\n * Options\n */\n\n options: {\n where: '1=1',\n fields: ['*'],\n from: false,\n to: false,\n timeField: false,\n timeFilterMode: 'server',\n simplifyFactor: 0,\n precision: 6\n },\n\n /**\n * Constructor\n */\n\n initialize: function (options) {\n EsriLeaflet.Layers.FeatureGrid.prototype.initialize.call(this, options);\n\n options.url = EsriLeaflet.Util.cleanUrl(options.url);\n options = L.setOptions(this, options);\n\n this._service = new EsriLeaflet.Services.FeatureLayerService(options);\n\n //use case insensitive regex to look for common fieldnames used for indexing\n /*global console */\n if (this.options.fields[0] !== '*'){\n var oidCheck = false;\n for (var i = 0; i < this.options.fields.length; i++){\n if (this.options.fields[i].match(/^(OBJECTID|FID|OID|ID)$/i)){\n oidCheck = true;\n }\n }\n if (oidCheck === false) {\n EsriLeaflet.Util.warn('no known esriFieldTypeOID field detected in fields Array. Please add an attribute field containing unique IDs to ensure the layer can be drawn correctly.');\n }\n }\n\n // Leaflet 0.8 change to new propagation\n this._service.on('authenticationrequired requeststart requestend requesterror requestsuccess', function (e) {\n e = L.extend({\n target: this\n }, e);\n this.fire(e.type, e);\n }, this);\n\n if(this.options.timeField.start && this.options.timeField.end){\n this._startTimeIndex = new BinarySearchIndex();\n this._endTimeIndex = new BinarySearchIndex();\n } else if(this.options.timeField){\n this._timeIndex = new BinarySearchIndex();\n }\n\n this._cache = {};\n this._currentSnapshot = []; // cache of what layers should be active\n this._activeRequests = 0;\n this._pendingRequests = [];\n },\n\n /**\n * Layer Interface\n */\n\n onAdd: function(map){\n return EsriLeaflet.Layers.FeatureGrid.prototype.onAdd.call(this, map);\n },\n\n onRemove: function(map){\n return EsriLeaflet.Layers.FeatureGrid.prototype.onRemove.call(this, map);\n },\n\n getAttribution: function () {\n return this.options.attribution;\n },\n\n /**\n * Feature Managment\n */\n\n createCell: function(bounds, coords){\n this._requestFeatures(bounds, coords);\n },\n\n _requestFeatures: function(bounds, coords, callback){\n this._activeRequests++;\n\n // our first active request fires loading\n if(this._activeRequests === 1){\n this.fire('loading', {\n bounds: bounds\n });\n }\n\n this._buildQuery(bounds).run(function(error, featureCollection, response){\n if(response && response.exceededTransferLimit){\n this.fire('drawlimitexceeded');\n }\n\n // no error, features\n if(!error && featureCollection && featureCollection.features.length && !this._removed){\n // schedule adding features until the next animation frame\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){\n this._addFeatures(featureCollection.features, coords);\n this._postProcessFeatures(bounds);\n }, this));\n }\n\n // no error, no features\n if (!error && featureCollection && !featureCollection.features.length) {\n this._postProcessFeatures(bounds);\n }\n\n if(callback){\n callback.call(this, error, featureCollection);\n }\n }, this);\n },\n\n _postProcessFeatures: function (bounds) {\n //deincriment the request counter now that we have processed features\n this._activeRequests--;\n\n // if there are no more active requests fire a load event for this view\n if(this._activeRequests <= 0){\n this.fire('load', {\n bounds: bounds\n });\n }\n },\n\n _cacheKey: function (coords){\n return coords.z + ':' + coords.x + ':' +coords.y;\n },\n\n _addFeatures: function(features, coords){\n var key = this._cacheKey(coords);\n this._cache[key] = this._cache[key] || [];\n\n for (var i = features.length - 1; i >= 0; i--) {\n var id = features[i].id;\n this._currentSnapshot.push(id);\n this._cache[key].push(id);\n /*\n should we refactor the code in FeatureManager.setWhere()\n so that we can reuse it to make sure that we remove features\n on the client that are removed from the service?\n */\n\n }\n\n if(this.options.timeField){\n this._buildTimeIndexes(features);\n }\n\n var zoom = this._map.getZoom();\n\n if (zoom > this.options.maxZoom ||\n zoom < this.options.minZoom) { return; }\n\n this.createLayers(features);\n },\n\n _buildQuery: function(bounds){\n var query = this._service.query()\n .intersects(bounds)\n .where(this.options.where)\n .fields(this.options.fields)\n .precision(this.options.precision);\n\n if(this.options.simplifyFactor){\n query.simplify(this._map, this.options.simplifyFactor);\n }\n\n if(this.options.timeFilterMode === 'server' && this.options.from && this.options.to){\n query.between(this.options.from, this.options.to);\n }\n\n return query;\n },\n\n /**\n * Where Methods\n */\n\n setWhere: function(where, callback, context){\n\n this.options.where = (where && where.length) ? where : '1=1';\n\n var oldSnapshot = [];\n var newSnapshot = [];\n var pendingRequests = 0;\n var mostRecentError = null;\n var requestCallback = L.Util.bind(function(error, featureCollection){\n pendingRequests--;\n\n if(error) {\n mostRecentError = error;\n }\n\n if(featureCollection){\n for (var i = featureCollection.features.length - 1; i >= 0; i--) {\n newSnapshot.push(featureCollection.features[i].id);\n }\n }\n\n if(pendingRequests <= 0) {\n this._currentSnapshot = newSnapshot;\n // delay adding features until the next animation frame\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function() {\n this.removeLayers(oldSnapshot);\n this.addLayers(newSnapshot);\n if(callback) {\n callback.call(context, mostRecentError);\n }\n }, this));\n }\n }, this);\n\n for (var i = this._currentSnapshot.length - 1; i >= 0; i--) {\n oldSnapshot.push(this._currentSnapshot[i]);\n }\n\n for(var key in this._activeCells){\n pendingRequests++;\n var coords = this._keyToCellCoords(key);\n var bounds = this._cellCoordsToBounds(coords);\n this._requestFeatures(bounds, key, requestCallback);\n }\n\n return this;\n },\n\n getWhere: function(){\n return this.options.where;\n },\n\n /**\n * Time Range Methods\n */\n\n getTimeRange: function(){\n return [this.options.from, this.options.to];\n },\n\n setTimeRange: function(from, to, callback, context){\n var oldFrom = this.options.from;\n var oldTo = this.options.to;\n var pendingRequests = 0;\n var mostRecentError = null;\n var requestCallback = L.Util.bind(function(error){\n if(error){\n mostRecentError = error;\n }\n\n this._filterExistingFeatures(oldFrom, oldTo, from, to);\n\n pendingRequests--;\n\n if(callback && pendingRequests <= 0){\n callback.call(context, mostRecentError);\n }\n }, this);\n\n this.options.from = from;\n this.options.to = to;\n\n this._filterExistingFeatures(oldFrom, oldTo, from, to);\n\n if(this.options.timeFilterMode === 'server') {\n for(var key in this._activeCells){\n pendingRequests++;\n var coords = this._keyToCellCoords(key);\n var bounds = this._cellCoordsToBounds(coords);\n this._requestFeatures(bounds, key, requestCallback);\n }\n }\n },\n\n refresh: function(){\n for(var key in this._activeCells){\n var coords = this._keyToCellCoords(key);\n var bounds = this._cellCoordsToBounds(coords);\n this._requestFeatures(bounds, key);\n }\n\n if(this.redraw){\n this.once('load', function(){\n this.eachFeature(function(layer){\n this._redraw(layer.feature.id);\n }, this);\n }, this);\n }\n },\n\n _filterExistingFeatures: function (oldFrom, oldTo, newFrom, newTo) {\n var layersToRemove = (oldFrom && oldTo) ? this._getFeaturesInTimeRange(oldFrom, oldTo) : this._currentSnapshot;\n var layersToAdd = this._getFeaturesInTimeRange(newFrom, newTo);\n\n if(layersToAdd.indexOf){\n for (var i = 0; i < layersToAdd.length; i++) {\n var shouldRemoveLayer = layersToRemove.indexOf(layersToAdd[i]);\n if(shouldRemoveLayer >= 0){\n layersToRemove.splice(shouldRemoveLayer, 1);\n }\n }\n }\n\n // schedule adding features until the next animation frame\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){\n this.removeLayers(layersToRemove);\n this.addLayers(layersToAdd);\n }, this));\n },\n\n _getFeaturesInTimeRange: function(start, end){\n var ids = [];\n var search;\n\n if(this.options.timeField.start && this.options.timeField.end){\n var startTimes = this._startTimeIndex.between(start, end);\n var endTimes = this._endTimeIndex.between(start, end);\n search = startTimes.concat(endTimes);\n } else {\n search = this._timeIndex.between(start, end);\n }\n\n for (var i = search.length - 1; i >= 0; i--) {\n ids.push(search[i].id);\n }\n\n return ids;\n },\n\n _buildTimeIndexes: function(geojson){\n var i;\n var feature;\n if(this.options.timeField.start && this.options.timeField.end){\n var startTimeEntries = [];\n var endTimeEntries = [];\n for (i = geojson.length - 1; i >= 0; i--) {\n feature = geojson[i];\n startTimeEntries.push( {\n id: feature.id,\n value: new Date(feature.properties[this.options.timeField.start])\n });\n endTimeEntries.push( {\n id: feature.id,\n value: new Date(feature.properties[this.options.timeField.end])\n });\n }\n this._startTimeIndex.bulkAdd(startTimeEntries);\n this._endTimeIndex.bulkAdd(endTimeEntries);\n } else {\n var timeEntries = [];\n for (i = geojson.length - 1; i >= 0; i--) {\n feature = geojson[i];\n timeEntries.push( {\n id: feature.id,\n value: new Date(feature.properties[this.options.timeField])\n });\n }\n\n this._timeIndex.bulkAdd(timeEntries);\n }\n },\n\n _featureWithinTimeRange: function(feature){\n if(!this.options.from || !this.options.to){\n return true;\n }\n\n var from = +this.options.from.valueOf();\n var to = +this.options.to.valueOf();\n\n if(typeof this.options.timeField === 'string'){\n var date = +feature.properties[this.options.timeField];\n return (date >= from) && (date <= to);\n }\n\n if(this.options.timeField.start && this.options.timeField.end){\n var startDate = +feature.properties[this.options.timeField.start];\n var endDate = +feature.properties[this.options.timeField.end];\n return ((startDate >= from) && (startDate <= to)) || ((endDate >= from) && (endDate <= to));\n }\n },\n\n /**\n * Service Methods\n */\n\n authenticate: function(token){\n this._service.authenticate(token);\n return this;\n },\n\n metadata: function(callback, context){\n this._service.metadata(callback, context);\n return this;\n },\n\n query: function(){\n return this._service.query();\n },\n\n _getMetadata: function(callback){\n if(this._metadata){\n var error;\n callback(error, this._metadata);\n } else {\n this.metadata(L.Util.bind(function(error, response) {\n this._metadata = response;\n callback(error, this._metadata);\n }, this));\n }\n },\n\n addFeature: function(feature, callback, context){\n this._getMetadata(L.Util.bind(function(error, metadata){\n this._service.addFeature(feature, L.Util.bind(function(error, response){\n if(!error){\n // assign ID from result to appropriate objectid field from service metadata\n feature.properties[metadata.objectIdField] = response.objectId;\n\n // we also need to update the geojson id for createLayers() to function\n feature.id = response.objectId;\n this.createLayers([feature]);\n }\n\n if(callback){\n callback.call(context, error, response);\n }\n }, this));\n }, this));\n },\n\n updateFeature: function(feature, callback, context){\n this._service.updateFeature(feature, function(error, response){\n if(!error){\n this.removeLayers([feature.id], true);\n this.createLayers([feature]);\n }\n\n if(callback){\n callback.call(context, error, response);\n }\n }, this);\n },\n\n deleteFeature: function(id, callback, context){\n this._service.deleteFeature(id, function(error, response){\n if(!error && response.objectId){\n this.removeLayers([response.objectId], true);\n }\n\n if(callback){\n callback.call(context, error, response);\n }\n }, this);\n },\n\n deleteFeatures: function(ids, callback, context){\n return this._service.deleteFeatures(ids, function(error, response){\n if(!error && response.length > 0){\n for (var i=0; i +query) {\n maxIndex = currentIndex - 1;\n } else {\n return currentIndex;\n }\n }\n\n return ~maxIndex;\n };\n\n BinarySearchIndex.prototype.sort = function(){\n this.values.sort(function(a, b) {\n return +b.value - +a.value;\n }).reverse();\n this.dirty = false;\n };\n\n BinarySearchIndex.prototype.between = function(start, end){\n if(this.dirty){\n this.sort();\n }\n\n var startIndex = this._query(start);\n var endIndex = this._query(end);\n\n if(startIndex === 0 && endIndex === 0){\n return [];\n }\n\n startIndex = Math.abs(startIndex);\n endIndex = (endIndex < 0) ? Math.abs(endIndex): endIndex + 1;\n\n return this.values.slice(startIndex, endIndex);\n };\n\n BinarySearchIndex.prototype.bulkAdd = function(items){\n this.dirty = true;\n this.values = this.values.concat(items);\n };\n\n})(EsriLeaflet);\n","EsriLeaflet.Layers.FeatureLayer = EsriLeaflet.Layers.FeatureManager.extend({\n\n statics: {\n EVENTS: 'click dblclick mouseover mouseout mousemove contextmenu popupopen popupclose'\n },\n\n options: {\n cacheLayers: true\n },\n\n /**\n * Constructor\n */\n\n initialize: function (options) {\n EsriLeaflet.Layers.FeatureManager.prototype.initialize.call(this, options);\n\n options = L.setOptions(this, options);\n\n this._layers = {};\n this._leafletIds = {};\n this._key = 'c'+(Math.random() * 1e9).toString(36).replace('.', '_');\n },\n\n /**\n * Layer Interface\n */\n\n onAdd: function(map){\n map.on('zoomstart zoomend', function(e){\n this._zooming = (e.type === 'zoomstart');\n }, this);\n this._removed = false;\n\n return EsriLeaflet.Layers.FeatureManager.prototype.onAdd.call(this, map);\n },\n\n onRemove: function(map){\n this._removed = true;\n for (var i in this._layers) {\n map.removeLayer(this._layers[i]);\n }\n\n return EsriLeaflet.Layers.FeatureManager.prototype.onRemove.call(this, map);\n },\n\n createNewLayer: function(geojson){\n // @TODO Leaflet 0.8\n //newLayer = L.GeoJSON.geometryToLayer(geojson, this.options);\n return L.GeoJSON.geometryToLayer(geojson, this.options.pointToLayer, L.GeoJSON.coordsToLatLng, this.options);\n },\n\n _updateLayer: function(layer, geojson){\n // convert the geojson coordinates into a Leaflet LatLng array/nested arrays\n // pass it to setLatLngs to update layer geometries\n var latlngs = [];\n var coordsToLatLng = this.options.coordsToLatLng || L.GeoJSON.coordsToLatLng;\n\n // copy new attributes, if present\n if (geojson.properties) {\n layer.feature.properties = geojson.properties;\n }\n\n switch(geojson.geometry.type){\n case 'Point':\n latlngs = L.GeoJSON.coordsToLatLng(geojson.geometry.coordinates);\n layer.setLatLng(latlngs);\n break;\n case 'LineString':\n latlngs = L.GeoJSON.coordsToLatLngs(geojson.geometry.coordinates, 0, coordsToLatLng);\n layer.setLatLngs(latlngs);\n break;\n case 'MultiLineString':\n latlngs = L.GeoJSON.coordsToLatLngs(geojson.geometry.coordinates, 1, coordsToLatLng);\n layer.setLatLngs(latlngs);\n break;\n case 'Polygon':\n latlngs = L.GeoJSON.coordsToLatLngs(geojson.geometry.coordinates, 1, coordsToLatLng);\n layer.setLatLngs(latlngs);\n break;\n case 'MultiPolygon':\n latlngs = L.GeoJSON.coordsToLatLngs(geojson.geometry.coordinates, 2, coordsToLatLng);\n layer.setLatLngs(latlngs);\n break;\n }\n },\n\n /**\n * Feature Management Methods\n */\n\n createLayers: function(features){\n for (var i = features.length - 1; i >= 0; i--) {\n\n var geojson = features[i];\n\n var layer = this._layers[geojson.id];\n var newLayer;\n\n if(layer && !this._map.hasLayer(layer)){\n this._map.addLayer(layer);\n }\n\n // update geomerty if neccessary\n if (layer && (layer.setLatLngs || layer.setLatLng)) {\n this._updateLayer(layer, geojson);\n }\n\n\n if(!layer){\n newLayer = this.createNewLayer(geojson);\n newLayer.feature = geojson;\n\n if (this.options.style) {\n newLayer._originalStyle = this.options.style;\n }\n\n // circleMarker check\n else if (newLayer.setStyle) {\n newLayer._originalStyle = newLayer.options;\n }\n\n newLayer._leaflet_id = this._key + '_' + geojson.id;\n\n this._leafletIds[newLayer._leaflet_id] = geojson.id;\n\n // bubble events from layers to this\n // @TODO Leaflet 0.8\n // newLayer.addEventParent(this);\n\n newLayer.on(EsriLeaflet.Layers.FeatureLayer.EVENTS, this._propagateEvent, this);\n\n // bind a popup if we have one\n if(this._popup && newLayer.bindPopup){\n newLayer.bindPopup(this._popup(newLayer.feature, newLayer), this._popupOptions);\n }\n\n if(this.options.onEachFeature){\n this.options.onEachFeature(newLayer.feature, newLayer);\n }\n\n // cache the layer\n this._layers[newLayer.feature.id] = newLayer;\n\n // style the layer\n this.resetStyle(newLayer.feature.id);\n\n this.fire('createfeature', {\n feature: newLayer.feature\n });\n\n // add the layer if it is within the time bounds or our layer is not time enabled\n if(!this.options.timeField || (this.options.timeField && this._featureWithinTimeRange(geojson)) ){\n this._map.addLayer(newLayer);\n }\n }\n }\n },\n\n addLayers: function(ids){\n for (var i = ids.length - 1; i >= 0; i--) {\n var layer = this._layers[ids[i]];\n if(layer){\n this.fire('addfeature', {\n feature: layer.feature\n });\n this._map.addLayer(layer);\n }\n }\n },\n\n removeLayers: function(ids, permanent){\n for (var i = ids.length - 1; i >= 0; i--) {\n var id = ids[i];\n var layer = this._layers[id];\n if(layer){\n this.fire('removefeature', {\n feature: layer.feature,\n permanent: permanent\n });\n this._map.removeLayer(layer);\n }\n if(layer && permanent){\n delete this._layers[id];\n }\n }\n },\n\n cellEnter: function(bounds, coords){\n if(!this._zooming){\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){\n var cacheKey = this._cacheKey(coords);\n var cellKey = this._cellCoordsToKey(coords);\n var layers = this._cache[cacheKey];\n if(this._activeCells[cellKey] && layers){\n this.addLayers(layers);\n }\n }, this));\n }\n },\n\n cellLeave: function(bounds, coords){\n if(!this._zooming){\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){\n var cacheKey = this._cacheKey(coords);\n var cellKey = this._cellCoordsToKey(coords);\n var layers = this._cache[cacheKey];\n var mapBounds = this._map.getBounds();\n if(!this._activeCells[cellKey] && layers){\n var removable = true;\n\n for (var i = 0; i < layers.length; i++) {\n var layer = this._layers[layers[i]];\n if(layer && layer.getBounds && mapBounds.intersects(layer.getBounds())){\n removable = false;\n }\n }\n\n if(removable){\n this.removeLayers(layers, !this.options.cacheLayers);\n }\n\n if(!this.options.cacheLayers && removable){\n delete this._cache[cacheKey];\n delete this._cells[cellKey];\n delete this._activeCells[cellKey];\n }\n }\n }, this));\n }\n },\n\n /**\n * Styling Methods\n */\n\n resetStyle: function (id) {\n var layer = this._layers[id];\n\n if(layer){\n this.setFeatureStyle(layer.feature.id, layer._originalStyle);\n }\n\n return this;\n },\n\n setStyle: function (style) {\n this.options.style = style;\n this.eachFeature(function (layer) {\n this.setFeatureStyle(layer.feature.id, style);\n }, this);\n return this;\n },\n\n setFeatureStyle: function (id, style) {\n var layer = this._layers[id];\n\n if (typeof style === 'function') {\n style = style(layer.feature);\n }\n\n if (!style && !layer.defaultOptions) {\n style = L.Path.prototype.options;\n style.fill = true; //not set by default\n }\n\n if (layer && layer.setStyle) {\n layer.setStyle(style);\n }\n\n return this;\n },\n\n /**\n * Popup Methods\n */\n\n bindPopup: function (fn, options) {\n this._popup = fn;\n this._popupOptions = options;\n for (var i in this._layers) {\n var layer = this._layers[i];\n var popupContent = this._popup(layer.feature, layer);\n layer.bindPopup(popupContent, options);\n }\n return this;\n },\n\n unbindPopup: function () {\n this._popup = false;\n for (var i in this._layers) {\n var layer = this._layers[i];\n if (layer.unbindPopup) {\n layer.unbindPopup();\n } else if (layer.getLayers) {\n var groupLayers = layer.getLayers();\n for (var j in groupLayers) {\n var gLayer = groupLayers[j];\n gLayer.unbindPopup();\n }\n }\n }\n return this;\n },\n\n /**\n * Utility Methods\n */\n\n eachFeature: function (fn, context) {\n for (var i in this._layers) {\n fn.call(context, this._layers[i]);\n }\n return this;\n },\n\n getFeature: function (id) {\n return this._layers[id];\n },\n\n bringToBack: function () {\n this.eachFeature(function (layer) {\n if(layer.bringToBack) {\n layer.bringToBack();\n }\n });\n },\n\n bringToFront: function () {\n this.eachFeature(function (layer) {\n if(layer.bringToFront) {\n layer.bringToFront();\n }\n });\n },\n\n redraw: function (id) {\n if (id) {\n this._redraw(id);\n }\n return this;\n },\n\n _redraw: function(id) {\n var layer = this._layers[id];\n var geojson = layer.feature;\n\n // if this looks like a marker\n if (layer && layer.setIcon && this.options.pointToLayer) {\n // update custom symbology, if necessary\n if (this.options.pointToLayer){\n var getIcon = this.options.pointToLayer(geojson, L.latLng(geojson.geometry.coordinates[1], geojson.geometry.coordinates[0]));\n var updatedIcon = getIcon.options.icon;\n layer.setIcon(updatedIcon);\n }\n }\n\n // looks like a vector marker (circleMarker)\n if (layer && layer.setStyle && this.options.pointToLayer) {\n var getStyle = this.options.pointToLayer(geojson, L.latLng(geojson.geometry.coordinates[1], geojson.geometry.coordinates[0]));\n var updatedStyle = getStyle.options;\n this.setFeatureStyle(geojson.id, updatedStyle);\n }\n\n // looks like a path (polygon/polyline)\n if(layer && layer.setStyle && this.options.style) {\n this.resetStyle(geojson.id);\n }\n },\n\n // from https://github.com/Leaflet/Leaflet/blob/v0.7.2/src/layer/FeatureGroup.js\n // @TODO remove at Leaflet 0.8\n _propagateEvent: function (e) {\n e.layer = this._layers[this._leafletIds[e.target._leaflet_id]];\n e.target = this;\n this.fire(e.type, e);\n }\n});\n\nEsriLeaflet.FeatureLayer = EsriLeaflet.Layers.FeatureLayer;\n\nEsriLeaflet.Layers.featureLayer = function(options){\n return new EsriLeaflet.Layers.FeatureLayer(options);\n};\n\nEsriLeaflet.featureLayer = function(options){\n return new EsriLeaflet.Layers.FeatureLayer(options);\n};\n"]} \ No newline at end of file +{"version":3,"sources":["../../../src/EsriLeaflet.js","../../../src/Util.js","../../../src/Request.js","../../../src/Services/Service.js","../../../src/Services/FeatureLayerService.js","../../../src/Tasks/Task.js","../../../src/Tasks/Query.js","../../../src/Layers/FeatureLayer/FeatureGrid.js","../../../src/Layers/FeatureLayer/FeatureManager.js","../../../src/Layers/FeatureLayer/FeatureLayer.js"],"names":["EsriLeaflet","VERSION","Layers","Services","Controls","Tasks","Util","Support","CORS","window","XMLHttpRequest","pointerEvents","document","documentElement","style","L","esri","clone","obj","target","i","hasOwnProperty","pointsEqual","a","b","length","closeRing","coordinates","push","ringIsClockwise","ringToTest","pt2","total","rLength","pt1","vertexIntersectsVertex","a1","a2","b1","b2","uaT","ubT","uB","ua","ub","arrayIntersectsArray","j","coordinatesContainPoint","point","contains","l","coordinatesContainCoordinates","outer","inner","intersects","convertRingsToGeoJSON","rings","x","outerRing","hole","outerRings","holes","r","ring","slice","polygon","uncontainedHoles","pop","contained","reverse","type","orientRings","poly","output","shift","flattenMultiPolygonRings","raf","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","msRequestAnimationFrame","cb","setTimeout","extentToBounds","extent","sw","LatLng","ymin","xmin","ne","ymax","xmax","LatLngBounds","boundsToExtent","bounds","latLngBounds","getSouthWest","lng","lat","getNorthEast","spatialReference","wkid","arcgisToGeojson","arcgis","idAttribute","geojson","y","points","paths","geometry","attributes","properties","id","OBJECTID","FID","geojsonToArcGIS","result","features","geometries","responseToFeatureCollection","response","objectIdField","objectIdFieldName","fields","name","featureCollection","results","cleanUrl","url","replace","isArcgisOnline","test","geojsonTypeToArcGIS","geoJsonType","arcgisGeometryType","bind","warn","message","console","serialize","params","data","f","key","value","param","Object","prototype","toString","call","JSON","stringify","join","valueOf","encodeURIComponent","createRequest","callback","context","httpRequest","onerror","e","onreadystatechange","falseFn","error","code","readyState","parse","responseText","callbacks","_EsriLeafletCallbacks","Request","request","paramString","requestLength","open","send","get","JSONP","setRequestHeader","post","XMLHTTP","callbackId","script","DomUtil","create","body","src","responseType","abort","_callback","Service","Class","extend","includes","Mixin","Events","options","proxy","useCors","initialize","this","_requestQueue","_authenticating","setOptions","path","_request","metadata","authenticate","token","_runQueue","method","fire","wrappedCallback","_createServiceCallback","apply","service","FeatureLayerService","query","Query","addFeature","feature","addResults","undefined","updateFeature","updateResults","deleteFeature","objectIds","deleteResults","deleteFeatures","ids","featureLayerService","Task","generateSetter","endpoint","_service","setters","setter","offset","limit","precision","featureIds","returnGeometry","where","outSr","outFields","within","_setGeometry","spatialRel","overlaps","nearby","latlng","radius","latLng","geometryType","units","distance","inSr","string","between","start","end","time","simplify","map","factor","mapWidth","Math","abs","getBounds","getWest","getEast","maxAllowableOffset","getSize","orderBy","fieldName","order","orderByFields","run","_cleanParams","_trapSQLerrors","count","returnCountOnly","returnIdsOnly","returnExtentOnly","pixelSize","layer","getLatLng","GeoJSON","getLayers","toGeoJSON","FeatureGrid","cellSize","updateInterval","onAdd","_map","_update","limitExecByInterval","addEventListener","getEvents","_reset","onRemove","removeEventListener","_removeCells","events","viewreset","moveend","zoomend","_onZoom","addTo","addLayer","removeFrom","removeLayer","zoom","getZoom","maxZoom","minZoom","hasLayer","_cells","_activeCells","_cellsToLoad","_cellsTotal","_resetWrap","crs","infinite","_getCellSize","wrapLng","_wrapLng","floor","project","ceil","wrapLat","_wrapLat","getPixelBounds","cellPadding","topLeft","min","subtract","divideBy","max","cellBounds","add","_removeOtherCells","_addCells","coords","queue","center","getCenter","Point","z","cellsToLoad","sort","distanceTo","_addCell","_cellCoordsToBounds","nwPoint","multiplyBy","sePoint","nw","unproject","wrap","se","_cellCoordsToKey","_keyToCellCoords","kArr","split","parseInt","_removeCell","cell","cellLeave","_wrapCoords","cellEnter","createCell","wrapNum","BinarySearchIndex","values","FeatureManager","from","to","timeField","timeFilterMode","simplifyFactor","oidCheck","match","on","_startTimeIndex","_endTimeIndex","_timeIndex","_cache","_currentSnapshot","_activeRequests","_pendingRequests","getAttribution","attribution","_requestFeatures","_buildQuery","exceededTransferLimit","_removed","_addFeatures","_postProcessFeatures","_cacheKey","_buildTimeIndexes","createLayers","setWhere","oldSnapshot","newSnapshot","pendingRequests","mostRecentError","requestCallback","removeLayers","addLayers","getWhere","getTimeRange","setTimeRange","oldFrom","oldTo","_filterExistingFeatures","refresh","redraw","once","eachFeature","_redraw","newFrom","newTo","layersToRemove","_getFeaturesInTimeRange","layersToAdd","indexOf","shouldRemoveLayer","splice","search","startTimes","endTimes","concat","startTimeEntries","endTimeEntries","Date","bulkAdd","timeEntries","_featureWithinTimeRange","date","startDate","endDate","_getMetadata","_metadata","objectId","_query","currentIndex","currentElement","resultIndex","minIndex","maxIndex","round","dirty","startIndex","endIndex","items","FeatureLayer","statics","EVENTS","cacheLayers","_layers","_leafletIds","_key","random","_zooming","createNewLayer","geometryToLayer","pointToLayer","coordsToLatLng","_updateLayer","latlngs","setLatLng","coordsToLatLngs","setLatLngs","newLayer","_originalStyle","setStyle","_leaflet_id","_propagateEvent","_popup","bindPopup","_popupOptions","onEachFeature","resetStyle","permanent","cacheKey","cellKey","layers","mapBounds","removable","setFeatureStyle","defaultOptions","Path","fill","fn","popupContent","unbindPopup","groupLayers","gLayer","getFeature","bringToBack","bringToFront","setIcon","getIcon","updatedIcon","icon","getStyle","updatedStyle","featureLayer"],"mappings":"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","file":"esri-leaflet-feature-layer.js","sourcesContent":["var EsriLeaflet = { //jshint ignore:line\n VERSION: '1.0.3',\n Layers: {},\n Services: {},\n Controls: {},\n Tasks: {},\n Util: {},\n Support: {\n CORS: !!(window.XMLHttpRequest && 'withCredentials' in new XMLHttpRequest()),\n pointerEvents: document.documentElement.style.pointerEvents === ''\n }\n};\n\nif(typeof window !== 'undefined' && window.L){\n window.L.esri = EsriLeaflet;\n}\n","(function(EsriLeaflet){\n\n // normalize request animation frame\n var raf = window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.msRequestAnimationFrame ||\n function(cb) { return window.setTimeout(cb, 1000 / 60); };\n\n // shallow object clone for feature properties and attributes\n // from http://jsperf.com/cloning-an-object/2\n function clone(obj) {\n var target = {};\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n target[i] = obj[i];\n }\n }\n return target;\n }\n\n // checks if 2 x,y points are equal\n function pointsEqual(a, b) {\n for (var i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n\n // checks if the first and last points of a ring are equal and closes the ring\n function closeRing(coordinates) {\n if (!pointsEqual(coordinates[0], coordinates[coordinates.length - 1])) {\n coordinates.push(coordinates[0]);\n }\n return coordinates;\n }\n\n // determine if polygon ring coordinates are clockwise. clockwise signifies outer ring, counter-clockwise an inner ring\n // or hole. this logic was found at http://stackoverflow.com/questions/1165647/how-to-determine-if-a-list-of-polygon-\n // points-are-in-clockwise-order\n function ringIsClockwise(ringToTest) {\n var total = 0,i = 0;\n var rLength = ringToTest.length;\n var pt1 = ringToTest[i];\n var pt2;\n for (i; i < rLength - 1; i++) {\n pt2 = ringToTest[i + 1];\n total += (pt2[0] - pt1[0]) * (pt2[1] + pt1[1]);\n pt1 = pt2;\n }\n return (total >= 0);\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L504-L519\n function vertexIntersectsVertex(a1, a2, b1, b2) {\n var uaT = (b2[0] - b1[0]) * (a1[1] - b1[1]) - (b2[1] - b1[1]) * (a1[0] - b1[0]);\n var ubT = (a2[0] - a1[0]) * (a1[1] - b1[1]) - (a2[1] - a1[1]) * (a1[0] - b1[0]);\n var uB = (b2[1] - b1[1]) * (a2[0] - a1[0]) - (b2[0] - b1[0]) * (a2[1] - a1[1]);\n\n if ( uB !== 0 ) {\n var ua = uaT / uB;\n var ub = ubT / uB;\n\n if ( 0 <= ua && ua <= 1 && 0 <= ub && ub <= 1 ) {\n return true;\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L521-L531\n function arrayIntersectsArray(a, b) {\n for (var i = 0; i < a.length - 1; i++) {\n for (var j = 0; j < b.length - 1; j++) {\n if (vertexIntersectsVertex(a[i], a[i + 1], b[j], b[j + 1])) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L470-L480\n function coordinatesContainPoint(coordinates, point) {\n var contains = false;\n for(var i = -1, l = coordinates.length, j = l - 1; ++i < l; j = i) {\n if (((coordinates[i][1] <= point[1] && point[1] < coordinates[j][1]) ||\n (coordinates[j][1] <= point[1] && point[1] < coordinates[i][1])) &&\n (point[0] < (coordinates[j][0] - coordinates[i][0]) * (point[1] - coordinates[i][1]) / (coordinates[j][1] - coordinates[i][1]) + coordinates[i][0])) {\n contains = !contains;\n }\n }\n return contains;\n }\n\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L106-L113\n function coordinatesContainCoordinates(outer, inner){\n var intersects = arrayIntersectsArray(outer, inner);\n var contains = coordinatesContainPoint(outer, inner[0]);\n if(!intersects && contains){\n return true;\n }\n return false;\n }\n\n // do any polygons in this array contain any other polygons in this array?\n // used for checking for holes in arcgis rings\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L117-L172\n function convertRingsToGeoJSON(rings){\n var outerRings = [];\n var holes = [];\n var x; // iterator\n var outerRing; // current outer ring being evaluated\n var hole; // current hole being evaluated\n\n // for each ring\n for (var r = 0; r < rings.length; r++) {\n var ring = closeRing(rings[r].slice(0));\n if(ring.length < 4){\n continue;\n }\n // is this ring an outer ring? is it clockwise?\n if(ringIsClockwise(ring)){\n var polygon = [ ring ];\n outerRings.push(polygon); // push to outer rings\n } else {\n holes.push(ring); // counterclockwise push to holes\n }\n }\n\n var uncontainedHoles = [];\n\n // while there are holes left...\n while(holes.length){\n // pop a hole off out stack\n hole = holes.pop();\n\n // loop over all outer rings and see if they contain our hole.\n var contained = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(coordinatesContainCoordinates(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n contained = true;\n break;\n }\n }\n\n // ring is not contained in any outer ring\n // sometimes this happens https://github.com/Esri/esri-leaflet/issues/320\n if(!contained){\n uncontainedHoles.push(hole);\n }\n }\n\n // if we couldn't match any holes using contains we can try intersects...\n while(uncontainedHoles.length){\n // pop a hole off out stack\n hole = uncontainedHoles.pop();\n\n // loop over all outer rings and see if any intersect our hole.\n var intersects = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(arrayIntersectsArray(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n intersects = true;\n break;\n }\n }\n\n if(!intersects) {\n outerRings.push([hole.reverse()]);\n }\n }\n\n if(outerRings.length === 1){\n return {\n type: 'Polygon',\n coordinates: outerRings[0]\n };\n } else {\n return {\n type: 'MultiPolygon',\n coordinates: outerRings\n };\n }\n }\n\n // This function ensures that rings are oriented in the right directions\n // outer rings are clockwise, holes are counterclockwise\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function orientRings(poly){\n var output = [];\n var polygon = poly.slice(0);\n var outerRing = closeRing(polygon.shift().slice(0));\n if(outerRing.length >= 4){\n if(!ringIsClockwise(outerRing)){\n outerRing.reverse();\n }\n\n output.push(outerRing);\n\n for (var i = 0; i < polygon.length; i++) {\n var hole = closeRing(polygon[i].slice(0));\n if(hole.length >= 4){\n if(ringIsClockwise(hole)){\n hole.reverse();\n }\n output.push(hole);\n }\n }\n }\n\n return output;\n }\n\n // This function flattens holes in multipolygons to one array of polygons\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function flattenMultiPolygonRings(rings){\n var output = [];\n for (var i = 0; i < rings.length; i++) {\n var polygon = orientRings(rings[i]);\n for (var x = polygon.length - 1; x >= 0; x--) {\n var ring = polygon[x].slice(0);\n output.push(ring);\n }\n }\n return output;\n }\n\n // convert an extent (ArcGIS) to LatLngBounds (Leaflet)\n EsriLeaflet.Util.extentToBounds = function(extent){\n var sw = new L.LatLng(extent.ymin, extent.xmin);\n var ne = new L.LatLng(extent.ymax, extent.xmax);\n return new L.LatLngBounds(sw, ne);\n };\n\n // convert an LatLngBounds (Leaflet) to extent (ArcGIS)\n EsriLeaflet.Util.boundsToExtent = function(bounds) {\n bounds = L.latLngBounds(bounds);\n return {\n 'xmin': bounds.getSouthWest().lng,\n 'ymin': bounds.getSouthWest().lat,\n 'xmax': bounds.getNorthEast().lng,\n 'ymax': bounds.getNorthEast().lat,\n 'spatialReference': {\n 'wkid' : 4326\n }\n };\n };\n\n EsriLeaflet.Util.arcgisToGeojson = function (arcgis, idAttribute){\n var geojson = {};\n\n if(typeof arcgis.x === 'number' && typeof arcgis.y === 'number'){\n geojson.type = 'Point';\n geojson.coordinates = [arcgis.x, arcgis.y];\n }\n\n if(arcgis.points){\n geojson.type = 'MultiPoint';\n geojson.coordinates = arcgis.points.slice(0);\n }\n\n if(arcgis.paths) {\n if(arcgis.paths.length === 1){\n geojson.type = 'LineString';\n geojson.coordinates = arcgis.paths[0].slice(0);\n } else {\n geojson.type = 'MultiLineString';\n geojson.coordinates = arcgis.paths.slice(0);\n }\n }\n\n if(arcgis.rings) {\n geojson = convertRingsToGeoJSON(arcgis.rings.slice(0));\n }\n\n if(arcgis.geometry || arcgis.attributes) {\n geojson.type = 'Feature';\n geojson.geometry = (arcgis.geometry) ? EsriLeaflet.Util.arcgisToGeojson(arcgis.geometry) : null;\n geojson.properties = (arcgis.attributes) ? clone(arcgis.attributes) : null;\n if(arcgis.attributes) {\n geojson.id = arcgis.attributes[idAttribute] || arcgis.attributes.OBJECTID || arcgis.attributes.FID;\n }\n }\n\n return geojson;\n };\n\n // GeoJSON -> ArcGIS\n EsriLeaflet.Util.geojsonToArcGIS = function(geojson, idAttribute){\n idAttribute = idAttribute || 'OBJECTID';\n var spatialReference = { wkid: 4326 };\n var result = {};\n var i;\n\n switch(geojson.type){\n case 'Point':\n result.x = geojson.coordinates[0];\n result.y = geojson.coordinates[1];\n result.spatialReference = spatialReference;\n break;\n case 'MultiPoint':\n result.points = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'LineString':\n result.paths = [geojson.coordinates.slice(0)];\n result.spatialReference = spatialReference;\n break;\n case 'MultiLineString':\n result.paths = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'Polygon':\n result.rings = orientRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'MultiPolygon':\n result.rings = flattenMultiPolygonRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'Feature':\n if(geojson.geometry) {\n result.geometry = EsriLeaflet.Util.geojsonToArcGIS(geojson.geometry, idAttribute);\n }\n result.attributes = (geojson.properties) ? clone(geojson.properties) : {};\n if(geojson.id){\n result.attributes[idAttribute] = geojson.id;\n }\n break;\n case 'FeatureCollection':\n result = [];\n for (i = 0; i < geojson.features.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.features[i], idAttribute));\n }\n break;\n case 'GeometryCollection':\n result = [];\n for (i = 0; i < geojson.geometries.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.geometries[i], idAttribute));\n }\n break;\n }\n\n return result;\n };\n\n EsriLeaflet.Util.responseToFeatureCollection = function(response, idAttribute){\n var objectIdField;\n\n if(idAttribute){\n objectIdField = idAttribute;\n } else if(response.objectIdFieldName){\n objectIdField = response.objectIdFieldName;\n } else if(response.fields) {\n for (var j = 0; j <= response.fields.length - 1; j++) {\n if(response.fields[j].type === 'esriFieldTypeOID') {\n objectIdField = response.fields[j].name;\n break;\n }\n }\n } else {\n objectIdField = 'OBJECTID';\n }\n\n var featureCollection = {\n type: 'FeatureCollection',\n features: []\n };\n var features = response.features || response.results;\n if(features.length){\n for (var i = features.length - 1; i >= 0; i--) {\n featureCollection.features.push(EsriLeaflet.Util.arcgisToGeojson(features[i], objectIdField));\n }\n }\n\n return featureCollection;\n };\n\n // trim url whitespace and add a trailing slash if needed\n EsriLeaflet.Util.cleanUrl = function(url){\n //trim leading and trailing spaces, but not spaces inside the url\n url = url.replace(/^\\s+|\\s+$|\\A\\s+|\\s+\\z/g, '');\n\n //add a trailing slash to the url if the user omitted it\n if(url[url.length-1] !== '/'){\n url += '/';\n }\n\n return url;\n };\n\n EsriLeaflet.Util.isArcgisOnline = function(url){\n /* hosted feature services can emit geojson natively.\n our check for 'geojson' support will need to be revisted\n once the functionality makes its way to ArcGIS Server*/\n return (/\\.arcgis\\.com.*?FeatureServer/g).test(url);\n };\n\n EsriLeaflet.Util.geojsonTypeToArcGIS = function (geoJsonType) {\n var arcgisGeometryType;\n switch (geoJsonType) {\n case 'Point':\n arcgisGeometryType = 'esriGeometryPoint';\n break;\n case 'MultiPoint':\n arcgisGeometryType = 'esriGeometryMultipoint';\n break;\n case 'LineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'MultiLineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'Polygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n case 'MultiPolygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n }\n return arcgisGeometryType;\n };\n\n EsriLeaflet.Util.requestAnimationFrame = L.Util.bind(raf, window);\n\n EsriLeaflet.Util.warn = function (message) {\n if(console && console.warn) {\n console.warn(message);\n }\n };\n\n})(EsriLeaflet);","(function(EsriLeaflet){\n\n var callbacks = 0;\n\n window._EsriLeafletCallbacks = {};\n\n function serialize(params){\n var data = '';\n\n params.f = params.f || 'json';\n\n for (var key in params){\n if(params.hasOwnProperty(key)){\n var param = params[key];\n var type = Object.prototype.toString.call(param);\n var value;\n\n if(data.length){\n data += '&';\n }\n\n if (type === '[object Array]'){\n value = (Object.prototype.toString.call(param[0]) === '[object Object]') ? JSON.stringify(param) : param.join(',');\n } else if (type === '[object Object]') {\n value = JSON.stringify(param);\n } else if (type === '[object Date]'){\n value = param.valueOf();\n } else {\n value = param;\n }\n\n data += encodeURIComponent(key) + '=' + encodeURIComponent(value);\n }\n }\n\n return data;\n }\n\n function createRequest(callback, context){\n var httpRequest = new XMLHttpRequest();\n\n httpRequest.onerror = function(e) {\n httpRequest.onreadystatechange = L.Util.falseFn;\n\n callback.call(context, {\n error: {\n code: 500,\n message: 'XMLHttpRequest error'\n }\n }, null);\n };\n\n httpRequest.onreadystatechange = function(){\n var response;\n var error;\n\n if (httpRequest.readyState === 4) {\n try {\n response = JSON.parse(httpRequest.responseText);\n } catch(e) {\n response = null;\n error = {\n code: 500,\n message: 'Could not parse response as JSON. This could also be caused by a CORS or XMLHttpRequest error.'\n };\n }\n\n if (!error && response.error) {\n error = response.error;\n response = null;\n }\n\n httpRequest.onerror = L.Util.falseFn;\n\n callback.call(context, error, response);\n }\n };\n\n return httpRequest;\n }\n\n // AJAX handlers for CORS (modern browsers) or JSONP (older browsers)\n EsriLeaflet.Request = {\n request: function(url, params, callback, context){\n var paramString = serialize(params);\n var httpRequest = createRequest(callback, context);\n var requestLength = (url + '?' + paramString).length;\n\n // request is less then 2000 characters and the browser supports CORS, make GET request with XMLHttpRequest\n if(requestLength <= 2000 && L.esri.Support.CORS){\n httpRequest.open('GET', url + '?' + paramString);\n httpRequest.send(null);\n\n // request is less more then 2000 characters and the browser supports CORS, make POST request with XMLHttpRequest\n } else if (requestLength > 2000 && L.esri.Support.CORS){\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(paramString);\n\n // request is less more then 2000 characters and the browser does not support CORS, make a JSONP request\n } else if(requestLength <= 2000 && !L.esri.Support.CORS){\n return L.esri.Request.get.JSONP(url, params, callback, context);\n\n // request is longer then 2000 characters and the browser does not support CORS, log a warning\n } else {\n EsriLeaflet.Util.warn('a request to ' + url + ' was longer then 2000 characters and this browser cannot make a cross-domain post request. Please use a proxy http://esri.github.io/esri-leaflet/api-reference/request.html');\n return;\n }\n\n return httpRequest;\n },\n\n post: {\n XMLHTTP: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(serialize(params));\n\n return httpRequest;\n }\n },\n\n get: {\n CORS: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n\n httpRequest.open('GET', url + '?' + serialize(params), true);\n httpRequest.send(null);\n\n return httpRequest;\n },\n JSONP: function(url, params, callback, context){\n var callbackId = 'c' + callbacks;\n\n params.callback = 'window._EsriLeafletCallbacks.' + callbackId;\n\n var script = L.DomUtil.create('script', null, document.body);\n script.type = 'text/javascript';\n script.src = url + '?' + serialize(params);\n script.id = callbackId;\n\n window._EsriLeafletCallbacks[callbackId] = function(response){\n if(window._EsriLeafletCallbacks[callbackId] !== true){\n var error;\n var responseType = Object.prototype.toString.call(response);\n\n if(!(responseType === '[object Object]' || responseType === '[object Array]')){\n error = {\n error: {\n code: 500,\n message: 'Expected array or object as JSONP response'\n }\n };\n response = null;\n }\n\n if (!error && response.error) {\n error = response;\n response = null;\n }\n\n callback.call(context, error, response);\n window._EsriLeafletCallbacks[callbackId] = true;\n }\n };\n\n callbacks++;\n\n return {\n id: callbackId,\n url: script.src,\n abort: function(){\n window._EsriLeafletCallbacks._callback[callbackId]({\n code: 0,\n message: 'Request aborted.'\n });\n }\n };\n }\n }\n };\n\n // choose the correct AJAX handler depending on CORS support\n EsriLeaflet.get = (EsriLeaflet.Support.CORS) ? EsriLeaflet.Request.get.CORS : EsriLeaflet.Request.get.JSONP;\n\n // always use XMLHttpRequest for posts\n EsriLeaflet.post = EsriLeaflet.Request.post.XMLHTTP;\n\n // expose a common request method the uses GET\\POST based on request length\n EsriLeaflet.request = EsriLeaflet.Request.request;\n\n})(EsriLeaflet);","EsriLeaflet.Services.Service = L.Class.extend({\n\n includes: L.Mixin.Events,\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n initialize: function (options) {\n options = options || {};\n this._requestQueue = [];\n this._authenticating = false;\n L.Util.setOptions(this, options);\n this.options.url = EsriLeaflet.Util.cleanUrl(this.options.url);\n },\n\n get: function (path, params, callback, context) {\n return this._request('get', path, params, callback, context);\n },\n\n post: function (path, params, callback, context) {\n return this._request('post', path, params, callback, context);\n },\n\n request: function (path, params, callback, context) {\n return this._request('request', path, params, callback, context);\n },\n\n metadata: function (callback, context) {\n return this._request('get', '', {}, callback, context);\n },\n\n authenticate: function(token){\n this._authenticating = false;\n this.options.token = token;\n this._runQueue();\n return this;\n },\n\n _request: function(method, path, params, callback, context){\n this.fire('requeststart', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n\n var wrappedCallback = this._createServiceCallback(method, path, params, callback, context);\n\n if (this.options.token) {\n params.token = this.options.token;\n }\n\n if (this._authenticating) {\n this._requestQueue.push([method, path, params, callback, context]);\n return;\n } else {\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, wrappedCallback);\n } else {\n return EsriLeaflet[method](url, params, wrappedCallback);\n }\n }\n },\n\n _createServiceCallback: function(method, path, params, callback, context){\n return L.Util.bind(function(error, response){\n\n if (error && (error.code === 499 || error.code === 498)) {\n this._authenticating = true;\n\n this._requestQueue.push([method, path, params, callback, context]);\n\n // fire an event for users to handle and re-authenticate\n this.fire('authenticationrequired', {\n authenticate: L.Util.bind(this.authenticate, this)\n });\n\n // if the user has access to a callback they can handle the auth error\n error.authenticate = L.Util.bind(this.authenticate, this);\n }\n\n callback.call(context, error, response);\n\n if(error) {\n this.fire('requesterror', {\n url: this.options.url + path,\n params: params,\n message: error.message,\n code: error.code,\n method: method\n });\n } else {\n this.fire('requestsuccess', {\n url: this.options.url + path,\n params: params,\n response: response,\n method: method\n });\n }\n\n this.fire('requestend', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n }, this);\n },\n\n _runQueue: function(){\n for (var i = this._requestQueue.length - 1; i >= 0; i--) {\n var request = this._requestQueue[i];\n var method = request.shift();\n this[method].apply(this, request);\n }\n this._requestQueue = [];\n }\n\n});\n\nEsriLeaflet.Services.service = function(params){\n return new EsriLeaflet.Services.Service(params);\n};\n","EsriLeaflet.Services.FeatureLayerService = EsriLeaflet.Services.Service.extend({\n\n options: {\n idAttribute: 'OBJECTID'\n },\n\n query: function(){\n return new EsriLeaflet.Tasks.Query(this);\n },\n\n addFeature: function(feature, callback, context) {\n delete feature.id;\n\n feature = EsriLeaflet.Util.geojsonToArcGIS(feature);\n\n return this.post('addFeatures', {\n features: [feature]\n }, function(error, response){\n var result = (response && response.addResults) ? response.addResults[0] : undefined;\n if(callback){\n callback.call(context, error || response.addResults[0].error, result);\n }\n }, context);\n },\n\n updateFeature: function(feature, callback, context) {\n feature = EsriLeaflet.Util.geojsonToArcGIS(feature, this.options.idAttribute);\n\n return this.post('updateFeatures', {\n features: [feature]\n }, function(error, response){\n var result = (response && response.updateResults) ? response.updateResults[0] : undefined;\n if(callback){\n callback.call(context, error || response.updateResults[0].error, result);\n }\n }, context);\n },\n\n deleteFeature: function(id, callback, context) {\n return this.post('deleteFeatures', {\n objectIds: id\n }, function(error, response){\n var result = (response && response.deleteResults) ? response.deleteResults[0] : undefined;\n if(callback){\n callback.call(context, error || response.deleteResults[0].error, result);\n }\n }, context);\n },\n\n deleteFeatures: function(ids, callback, context) {\n return this.post('deleteFeatures', {\n objectIds: ids\n }, function(error, response){\n // pass back the entire array\n var result = (response && response.deleteResults) ? response.deleteResults : undefined;\n if(callback){\n callback.call(context, error || response.deleteResults[0].error, result);\n }\n }, context);\n }\n});\n\nEsriLeaflet.Services.featureLayerService = function(options) {\n return new EsriLeaflet.Services.FeatureLayerService(options);\n};\n","EsriLeaflet.Tasks.Task = L.Class.extend({\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n //Generate a method for each methodName:paramName in the setters for this task.\n generateSetter: function(param, context){\n return L.Util.bind(function(value){\n this.params[param] = value;\n return this;\n }, context);\n },\n\n initialize: function(endpoint){\n // endpoint can be either a url (and options) for an ArcGIS Rest Service or an instance of EsriLeaflet.Service\n if(endpoint.request && endpoint.options){\n this._service = endpoint;\n L.Util.setOptions(this, endpoint.options);\n } else {\n L.Util.setOptions(this, endpoint);\n this.options.url = L.esri.Util.cleanUrl(endpoint.url);\n }\n\n // clone default params into this object\n this.params = L.Util.extend({}, this.params || {});\n\n // generate setter methods based on the setters object implimented a child class\n if(this.setters){\n for (var setter in this.setters){\n var param = this.setters[setter];\n this[setter] = this.generateSetter(param, this);\n }\n }\n },\n\n token: function(token){\n if(this._service){\n this._service.authenticate(token);\n } else {\n this.params.token = token;\n }\n return this;\n },\n\n request: function(callback, context){\n if(this._service){\n return this._service.request(this.path, this.params, callback, context);\n } else {\n return this._request('request', this.path, this.params, callback, context);\n }\n },\n\n _request: function(method, path, params, callback, context){\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, callback, context);\n } else{\n return EsriLeaflet[method](url, params, callback, context);\n }\n }\n});","EsriLeaflet.Tasks.Query = EsriLeaflet.Tasks.Task.extend({\n setters: {\n 'offset': 'offset',\n 'limit': 'limit',\n 'fields': 'outFields',\n 'precision': 'geometryPrecision',\n 'featureIds': 'objectIds',\n 'returnGeometry': 'returnGeometry',\n 'token': 'token'\n },\n\n path: 'query',\n\n params: {\n returnGeometry: true,\n where: '1=1',\n outSr: 4326,\n outFields: '*'\n },\n\n within: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelContains'; // will make code read layer within geometry, to the api this will reads geometry contains layer\n return this;\n },\n\n intersects: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelIntersects';\n return this;\n },\n\n contains: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelWithin'; // will make code read layer contains geometry, to the api this will reads geometry within layer\n return this;\n },\n\n // crosses: function(geometry){\n // this._setGeometry(geometry);\n // this.params.spatialRel = 'esriSpatialRelCrosses';\n // return this;\n // },\n\n // touches: function(geometry){\n // this._setGeometry(geometry);\n // this.params.spatialRel = 'esriSpatialRelTouches';\n // return this;\n // },\n\n overlaps: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelOverlaps';\n return this;\n },\n\n // only valid for Feature Services running on ArcGIS Server 10.3 or ArcGIS Online\n nearby: function(latlng, radius){\n latlng = L.latLng(latlng);\n this.params.geometry = [latlng.lng, latlng.lat];\n this.params.geometryType = 'esriGeometryPoint';\n this.params.spatialRel = 'esriSpatialRelIntersects';\n this.params.units = 'esriSRUnit_Meter';\n this.params.distance = radius;\n this.params.inSr = 4326;\n return this;\n },\n\n where: function(string){\n // instead of converting double-quotes to single quotes, pass as is, and provide a more informative message if a 400 is encountered\n this.params.where = string;\n return this;\n },\n\n between: function(start, end){\n this.params.time = [start.valueOf(), end.valueOf()];\n return this;\n },\n\n simplify: function(map, factor){\n var mapWidth = Math.abs(map.getBounds().getWest() - map.getBounds().getEast());\n this.params.maxAllowableOffset = (mapWidth / map.getSize().y) * factor;\n return this;\n },\n\n orderBy: function(fieldName, order){\n order = order || 'ASC';\n this.params.orderByFields = (this.params.orderByFields) ? this.params.orderByFields + ',' : '';\n this.params.orderByFields += ([fieldName, order]).join(' ');\n return this;\n },\n\n run: function(callback, context){\n this._cleanParams();\n\n // if the service is hosted on arcgis online request geojson directly\n if(EsriLeaflet.Util.isArcgisOnline(this.options.url)){\n this.params.f = 'geojson';\n\n return this.request(function(error, response){\n this._trapSQLerrors(error);\n callback.call(context, error, response, response);\n }, this);\n\n // otherwise convert it in the callback then pass it on\n } else {\n return this.request(function(error, response){\n this._trapSQLerrors(error);\n callback.call(context, error, (response && EsriLeaflet.Util.responseToFeatureCollection(response)), response);\n }, this);\n }\n },\n\n count: function(callback, context){\n this._cleanParams();\n this.params.returnCountOnly = true;\n return this.request(function(error, response){\n callback.call(this, error, (response && response.count), response);\n }, context);\n },\n\n ids: function(callback, context){\n this._cleanParams();\n this.params.returnIdsOnly = true;\n return this.request(function(error, response){\n callback.call(this, error, (response && response.objectIds), response);\n }, context);\n },\n\n // only valid for Feature Services running on ArcGIS Server 10.3 or ArcGIS Online\n bounds: function(callback, context){\n this._cleanParams();\n this.params.returnExtentOnly = true;\n return this.request(function(error, response){\n callback.call(context, error, (response && response.extent && EsriLeaflet.Util.extentToBounds(response.extent)), response);\n }, context);\n },\n\n // only valid for image services\n pixelSize: function(point){\n point = L.point(point);\n this.params.pixelSize = [point.x,point.y];\n return this;\n },\n\n // only valid for map services\n layer: function(layer){\n this.path = layer + '/query';\n return this;\n },\n\n _trapSQLerrors: function(error){\n if (error){\n if (error.code === '400'){\n EsriLeaflet.Util.warn('one common syntax error in query requests is encasing string values in double quotes instead of single quotes');\n }\n }\n },\n\n _cleanParams: function(){\n delete this.params.returnIdsOnly;\n delete this.params.returnExtentOnly;\n delete this.params.returnCountOnly;\n },\n\n _setGeometry: function(geometry) {\n this.params.inSr = 4326;\n\n // convert bounds to extent and finish\n if ( geometry instanceof L.LatLngBounds ) {\n // set geometry + geometryType\n this.params.geometry = EsriLeaflet.Util.boundsToExtent(geometry);\n this.params.geometryType = 'esriGeometryEnvelope';\n return;\n }\n\n // convert L.Marker > L.LatLng\n if(geometry.getLatLng){\n geometry = geometry.getLatLng();\n }\n\n // convert L.LatLng to a geojson point and continue;\n if (geometry instanceof L.LatLng) {\n geometry = {\n type: 'Point',\n coordinates: [geometry.lng, geometry.lat]\n };\n }\n\n // handle L.GeoJSON, pull out the first geometry\n if ( geometry instanceof L.GeoJSON ) {\n //reassign geometry to the GeoJSON value (we are assuming that only one feature is present)\n geometry = geometry.getLayers()[0].feature.geometry;\n this.params.geometry = EsriLeaflet.Util.geojsonToArcGIS(geometry);\n this.params.geometryType = EsriLeaflet.Util.geojsonTypeToArcGIS(geometry.type);\n }\n\n // Handle L.Polyline and L.Polygon\n if (geometry.toGeoJSON) {\n geometry = geometry.toGeoJSON();\n }\n\n // handle GeoJSON feature by pulling out the geometry\n if ( geometry.type === 'Feature' ) {\n // get the geometry of the geojson feature\n geometry = geometry.geometry;\n }\n\n // confirm that our GeoJSON is a point, line or polygon\n if ( geometry.type === 'Point' || geometry.type === 'LineString' || geometry.type === 'Polygon') {\n this.params.geometry = EsriLeaflet.Util.geojsonToArcGIS(geometry);\n this.params.geometryType = EsriLeaflet.Util.geojsonTypeToArcGIS(geometry.type);\n return;\n }\n\n // warn the user if we havn't found a\n /* global console */\n EsriLeaflet.Util.warn('invalid geometry passed to spatial query. Should be an L.LatLng, L.LatLngBounds or L.Marker or a GeoJSON Point Line or Polygon object');\n\n return;\n }\n});\n\nEsriLeaflet.Tasks.query = function(params){\n return new EsriLeaflet.Tasks.Query(params);\n};","EsriLeaflet.Layers.FeatureGrid = L.Class.extend({\n\n includes: L.Mixin.Events,\n\n options: {\n cellSize: 512,\n updateInterval: 150\n },\n\n initialize: function (options) {\n options = L.setOptions(this, options);\n },\n\n onAdd: function (map) {\n this._map = map;\n this._update = L.Util.limitExecByInterval(this._update, this.options.updateInterval, this);\n\n // @TODO remove for leaflet 0.8\n this._map.addEventListener(this.getEvents(), this);\n\n this._reset();\n this._update();\n },\n\n onRemove: function(){\n this._map.removeEventListener(this.getEvents(), this);\n this._removeCells();\n },\n\n getEvents: function () {\n var events = {\n viewreset: this._reset,\n moveend: this._update,\n zoomend : this._onZoom\n };\n\n return events;\n },\n\n addTo: function(map){\n map.addLayer(this);\n return this;\n },\n\n removeFrom: function(map){\n map.removeLayer(this);\n return this;\n },\n\n _onZoom : function () {\n var zoom = this._map.getZoom();\n\n if (zoom > this.options.maxZoom ||\n zoom < this.options.minZoom) {\n this.removeFrom(this._map);\n this._map.addEventListener('zoomend', this.getEvents().zoomend, this);\n } else if (!this._map.hasLayer(this)) {\n this._map.removeEventListener('zoomend', this.getEvents().zoomend, this);\n this.addTo(this._map);\n }\n\n },\n\n _reset: function () {\n this._removeCells();\n\n this._cells = {};\n this._activeCells = {};\n this._cellsToLoad = 0;\n this._cellsTotal = 0;\n\n // @TODO enable at Leaflet 0.8\n // this._cellNumBounds = this._getCellNumBounds();\n\n this._resetWrap();\n },\n\n _resetWrap: function () {\n var map = this._map,\n crs = map.options.crs;\n\n if (crs.infinite) { return; }\n\n var cellSize = this._getCellSize();\n\n if (crs.wrapLng) {\n this._wrapLng = [\n Math.floor(map.project([0, crs.wrapLng[0]]).x / cellSize),\n Math.ceil(map.project([0, crs.wrapLng[1]]).x / cellSize)\n ];\n }\n\n if (crs.wrapLat) {\n this._wrapLat = [\n Math.floor(map.project([crs.wrapLat[0], 0]).y / cellSize),\n Math.ceil(map.project([crs.wrapLat[1], 0]).y / cellSize)\n ];\n }\n },\n\n _getCellSize: function () {\n return this.options.cellSize;\n },\n\n _update: function () {\n if (!this._map) { return; }\n\n var bounds = this._map.getPixelBounds(),\n zoom = this._map.getZoom(),\n cellSize = this._getCellSize(),\n cellPadding = [cellSize/2,cellSize/2];\n // cellPadding = [0,0]\n\n if (zoom > this.options.maxZoom ||\n zoom < this.options.minZoom) { return; }\n\n // cell coordinates range for the current view\n var topLeft = bounds.min.subtract(cellPadding).divideBy(cellSize).floor();\n topLeft.x = Math.max(topLeft.x, 0);\n topLeft.y = Math.max(topLeft.y, 0);\n\n var cellBounds = L.bounds(topLeft, bounds.max.add(cellPadding).divideBy(cellSize).floor());\n\n // remove any present cells that are off the specified bounds\n this._removeOtherCells(cellBounds);\n this._addCells(cellBounds);\n },\n\n _addCells: function (bounds) {\n var queue = [],\n center = bounds.getCenter(),\n zoom = this._map.getZoom();\n\n var j, i, coords;\n // create a queue of coordinates to load cells from\n for (j = bounds.min.y; j <= bounds.max.y; j++) {\n for (i = bounds.min.x; i <= bounds.max.x; i++) {\n coords = new L.Point(i, j);\n coords.z = zoom;\n\n // @TODO enable at Leaflet 0.8\n // if (this._isValidCell(coords)) {\n // queue.push(coords);\n // }\n\n queue.push(coords);\n }\n }\n var cellsToLoad = queue.length;\n\n if (cellsToLoad === 0) { return; }\n\n this._cellsToLoad += cellsToLoad;\n this._cellsTotal += cellsToLoad;\n\n // sort cell queue to load cells in order of their distance to center\n queue.sort(function (a, b) {\n return a.distanceTo(center) - b.distanceTo(center);\n });\n\n for (i = 0; i < cellsToLoad; i++) {\n this._addCell(queue[i]);\n }\n },\n\n // @TODO enable at Leaflet 0.8\n // _isValidCell: function (coords) {\n // var crs = this._map.options.crs;\n\n // if (!crs.infinite) {\n // // don't load cell if it's out of bounds and not wrapped\n // var bounds = this._cellNumBounds;\n // if (\n // (!crs.wrapLng && (coords.x < bounds.min.x || coords.x > bounds.max.x)) ||\n // (!crs.wrapLat && (coords.y < bounds.min.y || coords.y > bounds.max.y))\n // ) {\n // return false;\n // }\n // }\n\n // if (!this.options.bounds) {\n // return true;\n // }\n\n // // don't load cell if it doesn't intersect the bounds in options\n // var cellBounds = this._cellCoordsToBounds(coords);\n // return L.latLngBounds(this.options.bounds).intersects(cellBounds);\n // },\n\n // converts cell coordinates to its geographical bounds\n _cellCoordsToBounds: function (coords) {\n var map = this._map,\n cellSize = this.options.cellSize,\n\n nwPoint = coords.multiplyBy(cellSize),\n sePoint = nwPoint.add([cellSize, cellSize]),\n\n // @TODO for Leaflet 0.8\n // nw = map.wrapLatLng(map.unproject(nwPoint, coords.z)),\n // se = map.wrapLatLng(map.unproject(sePoint, coords.z));\n\n nw = map.unproject(nwPoint, coords.z).wrap(),\n se = map.unproject(sePoint, coords.z).wrap();\n\n return new L.LatLngBounds(nw, se);\n },\n\n // converts cell coordinates to key for the cell cache\n _cellCoordsToKey: function (coords) {\n return coords.x + ':' + coords.y;\n },\n\n // converts cell cache key to coordiantes\n _keyToCellCoords: function (key) {\n var kArr = key.split(':'),\n x = parseInt(kArr[0], 10),\n y = parseInt(kArr[1], 10);\n\n return new L.Point(x, y);\n },\n\n // remove any present cells that are off the specified bounds\n _removeOtherCells: function (bounds) {\n for (var key in this._cells) {\n if (!bounds.contains(this._keyToCellCoords(key))) {\n this._removeCell(key);\n }\n }\n },\n\n _removeCell: function (key) {\n var cell = this._activeCells[key];\n if(cell){\n delete this._activeCells[key];\n\n if (this.cellLeave) {\n this.cellLeave(cell.bounds, cell.coords);\n }\n\n this.fire('cellleave', {\n bounds: cell.bounds,\n coords: cell.coords\n });\n }\n },\n\n _removeCells: function(){\n for (var key in this._cells) {\n var bounds = this._cells[key].bounds;\n var coords = this._cells[key].coords;\n\n if (this.cellLeave) {\n this.cellLeave(bounds, coords);\n }\n\n this.fire('cellleave', {\n bounds: bounds,\n coords: coords\n });\n }\n },\n\n _addCell: function (coords) {\n\n // wrap cell coords if necessary (depending on CRS)\n this._wrapCoords(coords);\n\n // generate the cell key\n var key = this._cellCoordsToKey(coords);\n\n // get the cell from the cache\n var cell = this._cells[key];\n // if this cell should be shown as isnt active yet (enter)\n\n if (cell && !this._activeCells[key]) {\n if (this.cellEnter) {\n this.cellEnter(cell.bounds, coords);\n }\n\n this.fire('cellenter', {\n bounds: cell.bounds,\n coords: coords\n });\n\n this._activeCells[key] = cell;\n }\n\n // if we dont have this cell in the cache yet (create)\n if (!cell) {\n cell = {\n coords: coords,\n bounds: this._cellCoordsToBounds(coords)\n };\n\n this._cells[key] = cell;\n this._activeCells[key] = cell;\n\n if(this.createCell){\n this.createCell(cell.bounds, coords);\n }\n\n this.fire('cellcreate', {\n bounds: cell.bounds,\n coords: coords\n });\n }\n },\n\n _wrapCoords: function (coords) {\n coords.x = this._wrapLng ? L.Util.wrapNum(coords.x, this._wrapLng) : coords.x;\n coords.y = this._wrapLat ? L.Util.wrapNum(coords.y, this._wrapLat) : coords.y;\n }\n\n // get the global cell coordinates range for the current zoom\n // @TODO enable at Leaflet 0.8\n // _getCellNumBounds: function () {\n // // @TODO for Leaflet 0.8\n // // var bounds = this._map.getPixelWorldBounds(),\n // // size = this._getCellSize();\n // //\n // // return bounds ? L.bounds(\n // // bounds.min.divideBy(size).floor(),\n // // bounds.max.divideBy(size).ceil().subtract([1, 1])) : null;\n // }\n\n});","(function(EsriLeaflet){\n\n EsriLeaflet.Layers.FeatureManager = EsriLeaflet.Layers.FeatureGrid.extend({\n\n /**\n * Options\n */\n\n options: {\n where: '1=1',\n fields: ['*'],\n from: false,\n to: false,\n timeField: false,\n timeFilterMode: 'server',\n simplifyFactor: 0,\n precision: 6\n },\n\n /**\n * Constructor\n */\n\n initialize: function (options) {\n EsriLeaflet.Layers.FeatureGrid.prototype.initialize.call(this, options);\n\n options.url = EsriLeaflet.Util.cleanUrl(options.url);\n options = L.setOptions(this, options);\n\n this._service = new EsriLeaflet.Services.FeatureLayerService(options);\n\n //use case insensitive regex to look for common fieldnames used for indexing\n /*global console */\n if (this.options.fields[0] !== '*'){\n var oidCheck = false;\n for (var i = 0; i < this.options.fields.length; i++){\n if (this.options.fields[i].match(/^(OBJECTID|FID|OID|ID)$/i)){\n oidCheck = true;\n }\n }\n if (oidCheck === false) {\n EsriLeaflet.Util.warn('no known esriFieldTypeOID field detected in fields Array. Please add an attribute field containing unique IDs to ensure the layer can be drawn correctly.');\n }\n }\n\n // Leaflet 0.8 change to new propagation\n this._service.on('authenticationrequired requeststart requestend requesterror requestsuccess', function (e) {\n e = L.extend({\n target: this\n }, e);\n this.fire(e.type, e);\n }, this);\n\n if(this.options.timeField.start && this.options.timeField.end){\n this._startTimeIndex = new BinarySearchIndex();\n this._endTimeIndex = new BinarySearchIndex();\n } else if(this.options.timeField){\n this._timeIndex = new BinarySearchIndex();\n }\n\n this._cache = {};\n this._currentSnapshot = []; // cache of what layers should be active\n this._activeRequests = 0;\n this._pendingRequests = [];\n },\n\n /**\n * Layer Interface\n */\n\n onAdd: function(map){\n return EsriLeaflet.Layers.FeatureGrid.prototype.onAdd.call(this, map);\n },\n\n onRemove: function(map){\n return EsriLeaflet.Layers.FeatureGrid.prototype.onRemove.call(this, map);\n },\n\n getAttribution: function () {\n return this.options.attribution;\n },\n\n /**\n * Feature Managment\n */\n\n createCell: function(bounds, coords){\n this._requestFeatures(bounds, coords);\n },\n\n _requestFeatures: function(bounds, coords, callback){\n this._activeRequests++;\n\n // our first active request fires loading\n if(this._activeRequests === 1){\n this.fire('loading', {\n bounds: bounds\n });\n }\n\n this._buildQuery(bounds).run(function(error, featureCollection, response){\n if(response && response.exceededTransferLimit){\n this.fire('drawlimitexceeded');\n }\n\n // no error, features\n if(!error && featureCollection && featureCollection.features.length && !this._removed){\n // schedule adding features until the next animation frame\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){\n this._addFeatures(featureCollection.features, coords);\n this._postProcessFeatures(bounds);\n }, this));\n }\n\n // no error, no features\n if (!error && featureCollection && !featureCollection.features.length) {\n this._postProcessFeatures(bounds);\n }\n\n if(callback){\n callback.call(this, error, featureCollection);\n }\n }, this);\n },\n\n _postProcessFeatures: function (bounds) {\n //deincriment the request counter now that we have processed features\n this._activeRequests--;\n\n // if there are no more active requests fire a load event for this view\n if(this._activeRequests <= 0){\n this.fire('load', {\n bounds: bounds\n });\n }\n },\n\n _cacheKey: function (coords){\n return coords.z + ':' + coords.x + ':' +coords.y;\n },\n\n _addFeatures: function(features, coords){\n var key = this._cacheKey(coords);\n this._cache[key] = this._cache[key] || [];\n\n for (var i = features.length - 1; i >= 0; i--) {\n var id = features[i].id;\n this._currentSnapshot.push(id);\n this._cache[key].push(id);\n /*\n should we refactor the code in FeatureManager.setWhere()\n so that we can reuse it to make sure that we remove features\n on the client that are removed from the service?\n */\n\n }\n\n if(this.options.timeField){\n this._buildTimeIndexes(features);\n }\n\n var zoom = this._map.getZoom();\n\n if (zoom > this.options.maxZoom ||\n zoom < this.options.minZoom) { return; }\n\n this.createLayers(features);\n },\n\n _buildQuery: function(bounds){\n var query = this._service.query()\n .intersects(bounds)\n .where(this.options.where)\n .fields(this.options.fields)\n .precision(this.options.precision);\n\n if(this.options.simplifyFactor){\n query.simplify(this._map, this.options.simplifyFactor);\n }\n\n if(this.options.timeFilterMode === 'server' && this.options.from && this.options.to){\n query.between(this.options.from, this.options.to);\n }\n\n return query;\n },\n\n /**\n * Where Methods\n */\n\n setWhere: function(where, callback, context){\n\n this.options.where = (where && where.length) ? where : '1=1';\n\n var oldSnapshot = [];\n var newSnapshot = [];\n var pendingRequests = 0;\n var mostRecentError = null;\n var requestCallback = L.Util.bind(function(error, featureCollection){\n pendingRequests--;\n\n if(error) {\n mostRecentError = error;\n }\n\n if(featureCollection){\n for (var i = featureCollection.features.length - 1; i >= 0; i--) {\n newSnapshot.push(featureCollection.features[i].id);\n }\n }\n\n if(pendingRequests <= 0) {\n this._currentSnapshot = newSnapshot;\n // delay adding features until the next animation frame\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function() {\n this.removeLayers(oldSnapshot);\n this.addLayers(newSnapshot);\n if(callback) {\n callback.call(context, mostRecentError);\n }\n }, this));\n }\n }, this);\n\n for (var i = this._currentSnapshot.length - 1; i >= 0; i--) {\n oldSnapshot.push(this._currentSnapshot[i]);\n }\n\n for(var key in this._activeCells){\n pendingRequests++;\n var coords = this._keyToCellCoords(key);\n var bounds = this._cellCoordsToBounds(coords);\n this._requestFeatures(bounds, key, requestCallback);\n }\n\n return this;\n },\n\n getWhere: function(){\n return this.options.where;\n },\n\n /**\n * Time Range Methods\n */\n\n getTimeRange: function(){\n return [this.options.from, this.options.to];\n },\n\n setTimeRange: function(from, to, callback, context){\n var oldFrom = this.options.from;\n var oldTo = this.options.to;\n var pendingRequests = 0;\n var mostRecentError = null;\n var requestCallback = L.Util.bind(function(error){\n if(error){\n mostRecentError = error;\n }\n\n this._filterExistingFeatures(oldFrom, oldTo, from, to);\n\n pendingRequests--;\n\n if(callback && pendingRequests <= 0){\n callback.call(context, mostRecentError);\n }\n }, this);\n\n this.options.from = from;\n this.options.to = to;\n\n this._filterExistingFeatures(oldFrom, oldTo, from, to);\n\n if(this.options.timeFilterMode === 'server') {\n for(var key in this._activeCells){\n pendingRequests++;\n var coords = this._keyToCellCoords(key);\n var bounds = this._cellCoordsToBounds(coords);\n this._requestFeatures(bounds, key, requestCallback);\n }\n }\n },\n\n refresh: function(){\n for(var key in this._activeCells){\n var coords = this._keyToCellCoords(key);\n var bounds = this._cellCoordsToBounds(coords);\n this._requestFeatures(bounds, key);\n }\n\n if(this.redraw){\n this.once('load', function(){\n this.eachFeature(function(layer){\n this._redraw(layer.feature.id);\n }, this);\n }, this);\n }\n },\n\n _filterExistingFeatures: function (oldFrom, oldTo, newFrom, newTo) {\n var layersToRemove = (oldFrom && oldTo) ? this._getFeaturesInTimeRange(oldFrom, oldTo) : this._currentSnapshot;\n var layersToAdd = this._getFeaturesInTimeRange(newFrom, newTo);\n\n if(layersToAdd.indexOf){\n for (var i = 0; i < layersToAdd.length; i++) {\n var shouldRemoveLayer = layersToRemove.indexOf(layersToAdd[i]);\n if(shouldRemoveLayer >= 0){\n layersToRemove.splice(shouldRemoveLayer, 1);\n }\n }\n }\n\n // schedule adding features until the next animation frame\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){\n this.removeLayers(layersToRemove);\n this.addLayers(layersToAdd);\n }, this));\n },\n\n _getFeaturesInTimeRange: function(start, end){\n var ids = [];\n var search;\n\n if(this.options.timeField.start && this.options.timeField.end){\n var startTimes = this._startTimeIndex.between(start, end);\n var endTimes = this._endTimeIndex.between(start, end);\n search = startTimes.concat(endTimes);\n } else {\n search = this._timeIndex.between(start, end);\n }\n\n for (var i = search.length - 1; i >= 0; i--) {\n ids.push(search[i].id);\n }\n\n return ids;\n },\n\n _buildTimeIndexes: function(geojson){\n var i;\n var feature;\n if(this.options.timeField.start && this.options.timeField.end){\n var startTimeEntries = [];\n var endTimeEntries = [];\n for (i = geojson.length - 1; i >= 0; i--) {\n feature = geojson[i];\n startTimeEntries.push( {\n id: feature.id,\n value: new Date(feature.properties[this.options.timeField.start])\n });\n endTimeEntries.push( {\n id: feature.id,\n value: new Date(feature.properties[this.options.timeField.end])\n });\n }\n this._startTimeIndex.bulkAdd(startTimeEntries);\n this._endTimeIndex.bulkAdd(endTimeEntries);\n } else {\n var timeEntries = [];\n for (i = geojson.length - 1; i >= 0; i--) {\n feature = geojson[i];\n timeEntries.push( {\n id: feature.id,\n value: new Date(feature.properties[this.options.timeField])\n });\n }\n\n this._timeIndex.bulkAdd(timeEntries);\n }\n },\n\n _featureWithinTimeRange: function(feature){\n if(!this.options.from || !this.options.to){\n return true;\n }\n\n var from = +this.options.from.valueOf();\n var to = +this.options.to.valueOf();\n\n if(typeof this.options.timeField === 'string'){\n var date = +feature.properties[this.options.timeField];\n return (date >= from) && (date <= to);\n }\n\n if(this.options.timeField.start && this.options.timeField.end){\n var startDate = +feature.properties[this.options.timeField.start];\n var endDate = +feature.properties[this.options.timeField.end];\n return ((startDate >= from) && (startDate <= to)) || ((endDate >= from) && (endDate <= to));\n }\n },\n\n /**\n * Service Methods\n */\n\n authenticate: function(token){\n this._service.authenticate(token);\n return this;\n },\n\n metadata: function(callback, context){\n this._service.metadata(callback, context);\n return this;\n },\n\n query: function(){\n return this._service.query();\n },\n\n _getMetadata: function(callback){\n if(this._metadata){\n var error;\n callback(error, this._metadata);\n } else {\n this.metadata(L.Util.bind(function(error, response) {\n this._metadata = response;\n callback(error, this._metadata);\n }, this));\n }\n },\n\n addFeature: function(feature, callback, context){\n this._getMetadata(L.Util.bind(function(error, metadata){\n this._service.addFeature(feature, L.Util.bind(function(error, response){\n if(!error){\n // assign ID from result to appropriate objectid field from service metadata\n feature.properties[metadata.objectIdField] = response.objectId;\n\n // we also need to update the geojson id for createLayers() to function\n feature.id = response.objectId;\n this.createLayers([feature]);\n }\n\n if(callback){\n callback.call(context, error, response);\n }\n }, this));\n }, this));\n },\n\n updateFeature: function(feature, callback, context){\n this._service.updateFeature(feature, function(error, response){\n if(!error){\n this.removeLayers([feature.id], true);\n this.createLayers([feature]);\n }\n\n if(callback){\n callback.call(context, error, response);\n }\n }, this);\n },\n\n deleteFeature: function(id, callback, context){\n this._service.deleteFeature(id, function(error, response){\n if(!error && response.objectId){\n this.removeLayers([response.objectId], true);\n }\n\n if(callback){\n callback.call(context, error, response);\n }\n }, this);\n },\n\n deleteFeatures: function(ids, callback, context){\n return this._service.deleteFeatures(ids, function(error, response){\n if(!error && response.length > 0){\n for (var i=0; i +query) {\n maxIndex = currentIndex - 1;\n } else {\n return currentIndex;\n }\n }\n\n return ~maxIndex;\n };\n\n BinarySearchIndex.prototype.sort = function(){\n this.values.sort(function(a, b) {\n return +b.value - +a.value;\n }).reverse();\n this.dirty = false;\n };\n\n BinarySearchIndex.prototype.between = function(start, end){\n if(this.dirty){\n this.sort();\n }\n\n var startIndex = this._query(start);\n var endIndex = this._query(end);\n\n if(startIndex === 0 && endIndex === 0){\n return [];\n }\n\n startIndex = Math.abs(startIndex);\n endIndex = (endIndex < 0) ? Math.abs(endIndex): endIndex + 1;\n\n return this.values.slice(startIndex, endIndex);\n };\n\n BinarySearchIndex.prototype.bulkAdd = function(items){\n this.dirty = true;\n this.values = this.values.concat(items);\n };\n\n})(EsriLeaflet);\n","EsriLeaflet.Layers.FeatureLayer = EsriLeaflet.Layers.FeatureManager.extend({\n\n statics: {\n EVENTS: 'click dblclick mouseover mouseout mousemove contextmenu popupopen popupclose'\n },\n\n options: {\n cacheLayers: true\n },\n\n /**\n * Constructor\n */\n\n initialize: function (options) {\n EsriLeaflet.Layers.FeatureManager.prototype.initialize.call(this, options);\n\n options = L.setOptions(this, options);\n\n this._layers = {};\n this._leafletIds = {};\n this._key = 'c'+(Math.random() * 1e9).toString(36).replace('.', '_');\n },\n\n /**\n * Layer Interface\n */\n\n onAdd: function(map){\n map.on('zoomstart zoomend', function(e){\n this._zooming = (e.type === 'zoomstart');\n }, this);\n this._removed = false;\n\n return EsriLeaflet.Layers.FeatureManager.prototype.onAdd.call(this, map);\n },\n\n onRemove: function(map){\n this._removed = true;\n for (var i in this._layers) {\n map.removeLayer(this._layers[i]);\n }\n\n return EsriLeaflet.Layers.FeatureManager.prototype.onRemove.call(this, map);\n },\n\n createNewLayer: function(geojson){\n // @TODO Leaflet 0.8\n //newLayer = L.GeoJSON.geometryToLayer(geojson, this.options);\n return L.GeoJSON.geometryToLayer(geojson, this.options.pointToLayer, L.GeoJSON.coordsToLatLng, this.options);\n },\n\n _updateLayer: function(layer, geojson){\n // convert the geojson coordinates into a Leaflet LatLng array/nested arrays\n // pass it to setLatLngs to update layer geometries\n var latlngs = [];\n var coordsToLatLng = this.options.coordsToLatLng || L.GeoJSON.coordsToLatLng;\n\n // copy new attributes, if present\n if (geojson.properties) {\n layer.feature.properties = geojson.properties;\n }\n\n switch(geojson.geometry.type){\n case 'Point':\n latlngs = L.GeoJSON.coordsToLatLng(geojson.geometry.coordinates);\n layer.setLatLng(latlngs);\n break;\n case 'LineString':\n latlngs = L.GeoJSON.coordsToLatLngs(geojson.geometry.coordinates, 0, coordsToLatLng);\n layer.setLatLngs(latlngs);\n break;\n case 'MultiLineString':\n latlngs = L.GeoJSON.coordsToLatLngs(geojson.geometry.coordinates, 1, coordsToLatLng);\n layer.setLatLngs(latlngs);\n break;\n case 'Polygon':\n latlngs = L.GeoJSON.coordsToLatLngs(geojson.geometry.coordinates, 1, coordsToLatLng);\n layer.setLatLngs(latlngs);\n break;\n case 'MultiPolygon':\n latlngs = L.GeoJSON.coordsToLatLngs(geojson.geometry.coordinates, 2, coordsToLatLng);\n layer.setLatLngs(latlngs);\n break;\n }\n },\n\n /**\n * Feature Management Methods\n */\n\n createLayers: function(features){\n for (var i = features.length - 1; i >= 0; i--) {\n\n var geojson = features[i];\n\n var layer = this._layers[geojson.id];\n var newLayer;\n\n if(layer && !this._map.hasLayer(layer)){\n this._map.addLayer(layer);\n }\n\n // update geomerty if neccessary\n if (layer && (layer.setLatLngs || layer.setLatLng)) {\n this._updateLayer(layer, geojson);\n }\n\n\n if(!layer){\n newLayer = this.createNewLayer(geojson);\n newLayer.feature = geojson;\n\n if (this.options.style) {\n newLayer._originalStyle = this.options.style;\n }\n\n // circleMarker check\n else if (newLayer.setStyle) {\n newLayer._originalStyle = newLayer.options;\n }\n\n newLayer._leaflet_id = this._key + '_' + geojson.id;\n\n this._leafletIds[newLayer._leaflet_id] = geojson.id;\n\n // bubble events from layers to this\n // @TODO Leaflet 0.8\n // newLayer.addEventParent(this);\n\n newLayer.on(EsriLeaflet.Layers.FeatureLayer.EVENTS, this._propagateEvent, this);\n\n // bind a popup if we have one\n if(this._popup && newLayer.bindPopup){\n newLayer.bindPopup(this._popup(newLayer.feature, newLayer), this._popupOptions);\n }\n\n if(this.options.onEachFeature){\n this.options.onEachFeature(newLayer.feature, newLayer);\n }\n\n // cache the layer\n this._layers[newLayer.feature.id] = newLayer;\n\n // style the layer\n this.resetStyle(newLayer.feature.id);\n\n this.fire('createfeature', {\n feature: newLayer.feature\n });\n\n // add the layer if it is within the time bounds or our layer is not time enabled\n if(!this.options.timeField || (this.options.timeField && this._featureWithinTimeRange(geojson)) ){\n this._map.addLayer(newLayer);\n }\n }\n }\n },\n\n addLayers: function(ids){\n for (var i = ids.length - 1; i >= 0; i--) {\n var layer = this._layers[ids[i]];\n if(layer){\n this.fire('addfeature', {\n feature: layer.feature\n });\n this._map.addLayer(layer);\n }\n }\n },\n\n removeLayers: function(ids, permanent){\n for (var i = ids.length - 1; i >= 0; i--) {\n var id = ids[i];\n var layer = this._layers[id];\n if(layer){\n this.fire('removefeature', {\n feature: layer.feature,\n permanent: permanent\n });\n this._map.removeLayer(layer);\n }\n if(layer && permanent){\n delete this._layers[id];\n }\n }\n },\n\n cellEnter: function(bounds, coords){\n if(!this._zooming){\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){\n var cacheKey = this._cacheKey(coords);\n var cellKey = this._cellCoordsToKey(coords);\n var layers = this._cache[cacheKey];\n if(this._activeCells[cellKey] && layers){\n this.addLayers(layers);\n }\n }, this));\n }\n },\n\n cellLeave: function(bounds, coords){\n if(!this._zooming){\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){\n var cacheKey = this._cacheKey(coords);\n var cellKey = this._cellCoordsToKey(coords);\n var layers = this._cache[cacheKey];\n var mapBounds = this._map.getBounds();\n if(!this._activeCells[cellKey] && layers){\n var removable = true;\n\n for (var i = 0; i < layers.length; i++) {\n var layer = this._layers[layers[i]];\n if(layer && layer.getBounds && mapBounds.intersects(layer.getBounds())){\n removable = false;\n }\n }\n\n if(removable){\n this.removeLayers(layers, !this.options.cacheLayers);\n }\n\n if(!this.options.cacheLayers && removable){\n delete this._cache[cacheKey];\n delete this._cells[cellKey];\n delete this._activeCells[cellKey];\n }\n }\n }, this));\n }\n },\n\n /**\n * Styling Methods\n */\n\n resetStyle: function (id) {\n var layer = this._layers[id];\n\n if(layer){\n this.setFeatureStyle(layer.feature.id, layer._originalStyle);\n }\n\n return this;\n },\n\n setStyle: function (style) {\n this.options.style = style;\n this.eachFeature(function (layer) {\n this.setFeatureStyle(layer.feature.id, style);\n }, this);\n return this;\n },\n\n setFeatureStyle: function (id, style) {\n var layer = this._layers[id];\n\n if (typeof style === 'function') {\n style = style(layer.feature);\n }\n\n if (!style && !layer.defaultOptions) {\n style = L.Path.prototype.options;\n style.fill = true; //not set by default\n }\n\n if (layer && layer.setStyle) {\n layer.setStyle(style);\n }\n\n return this;\n },\n\n /**\n * Popup Methods\n */\n\n bindPopup: function (fn, options) {\n this._popup = fn;\n this._popupOptions = options;\n for (var i in this._layers) {\n var layer = this._layers[i];\n var popupContent = this._popup(layer.feature, layer);\n layer.bindPopup(popupContent, options);\n }\n return this;\n },\n\n unbindPopup: function () {\n this._popup = false;\n for (var i in this._layers) {\n var layer = this._layers[i];\n if (layer.unbindPopup) {\n layer.unbindPopup();\n } else if (layer.getLayers) {\n var groupLayers = layer.getLayers();\n for (var j in groupLayers) {\n var gLayer = groupLayers[j];\n gLayer.unbindPopup();\n }\n }\n }\n return this;\n },\n\n /**\n * Utility Methods\n */\n\n eachFeature: function (fn, context) {\n for (var i in this._layers) {\n fn.call(context, this._layers[i]);\n }\n return this;\n },\n\n getFeature: function (id) {\n return this._layers[id];\n },\n\n bringToBack: function () {\n this.eachFeature(function (layer) {\n if(layer.bringToBack) {\n layer.bringToBack();\n }\n });\n },\n\n bringToFront: function () {\n this.eachFeature(function (layer) {\n if(layer.bringToFront) {\n layer.bringToFront();\n }\n });\n },\n\n redraw: function (id) {\n if (id) {\n this._redraw(id);\n }\n return this;\n },\n\n _redraw: function(id) {\n var layer = this._layers[id];\n var geojson = layer.feature;\n\n // if this looks like a marker\n if (layer && layer.setIcon && this.options.pointToLayer) {\n // update custom symbology, if necessary\n if (this.options.pointToLayer){\n var getIcon = this.options.pointToLayer(geojson, L.latLng(geojson.geometry.coordinates[1], geojson.geometry.coordinates[0]));\n var updatedIcon = getIcon.options.icon;\n layer.setIcon(updatedIcon);\n }\n }\n\n // looks like a vector marker (circleMarker)\n if (layer && layer.setStyle && this.options.pointToLayer) {\n var getStyle = this.options.pointToLayer(geojson, L.latLng(geojson.geometry.coordinates[1], geojson.geometry.coordinates[0]));\n var updatedStyle = getStyle.options;\n this.setFeatureStyle(geojson.id, updatedStyle);\n }\n\n // looks like a path (polygon/polyline)\n if(layer && layer.setStyle && this.options.style) {\n this.resetStyle(geojson.id);\n }\n },\n\n // from https://github.com/Leaflet/Leaflet/blob/v0.7.2/src/layer/FeatureGroup.js\n // @TODO remove at Leaflet 0.8\n _propagateEvent: function (e) {\n e.layer = this._layers[this._leafletIds[e.target._leaflet_id]];\n e.target = this;\n this.fire(e.type, e);\n }\n});\n\nEsriLeaflet.FeatureLayer = EsriLeaflet.Layers.FeatureLayer;\n\nEsriLeaflet.Layers.featureLayer = function(options){\n return new EsriLeaflet.Layers.FeatureLayer(options);\n};\n\nEsriLeaflet.featureLayer = function(options){\n return new EsriLeaflet.Layers.FeatureLayer(options);\n};\n"]} \ No newline at end of file diff --git a/dist/builds/image-service/esri-leaflet-image-service-src.js b/dist/builds/image-service/esri-leaflet-image-service-src.js index c433c8ef9..c099a4ecd 100644 --- a/dist/builds/image-service/esri-leaflet-image-service-src.js +++ b/dist/builds/image-service/esri-leaflet-image-service-src.js @@ -1,5 +1,5 @@ -/*! esri-leaflet - v1.0.2 - 2015-12-31 -* Copyright (c) 2015 Environmental Systems Research Institute, Inc. +/*! esri-leaflet - v1.0.3 - 2016-02-22 +* Copyright (c) 2016 Environmental Systems Research Institute, Inc. * Apache License*/ (function (factory) { //define an AMD module that relies on 'leaflet' @@ -17,7 +17,7 @@ } }(function (L) { var EsriLeaflet = { //jshint ignore:line - VERSION: '1.0.2', + VERSION: '1.0.3', Layers: {}, Services: {}, Controls: {}, @@ -1323,6 +1323,9 @@ EsriLeaflet.Layers.RasterLayer = L.Class.extend({ } if (zoom > this.options.maxZoom || zoom < this.options.minZoom) { + if (this._currentImage) { + this._currentImage._map.removeLayer(this._currentImage); + } return; } var params = this._buildExportParams(); diff --git a/dist/builds/image-service/esri-leaflet-image-service-src.js.map b/dist/builds/image-service/esri-leaflet-image-service-src.js.map index 6a55d24b1..e2b35e15d 100644 --- a/dist/builds/image-service/esri-leaflet-image-service-src.js.map +++ b/dist/builds/image-service/esri-leaflet-image-service-src.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../../src/EsriLeaflet.js","../../../src/Util.js","../../../src/Request.js","../../../src/Services/Service.js","../../../src/Services/ImageService.js","../../../src/Tasks/Task.js","../../../src/Tasks/Query.js","../../../src/Tasks/Identify.js","../../../src/Layers/RasterLayer.js","../../../src/Layers/ImageMapLayer.js"],"names":[],"mappings":"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","file":"esri-leaflet-image-service-src.js","sourcesContent":["var EsriLeaflet = { //jshint ignore:line\n VERSION: '1.0.2',\n Layers: {},\n Services: {},\n Controls: {},\n Tasks: {},\n Util: {},\n Support: {\n CORS: !!(window.XMLHttpRequest && 'withCredentials' in new XMLHttpRequest()),\n pointerEvents: document.documentElement.style.pointerEvents === ''\n }\n};\n\nif(typeof window !== 'undefined' && window.L){\n window.L.esri = EsriLeaflet;\n}\n","(function(EsriLeaflet){\n\n // normalize request animation frame\n var raf = window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.msRequestAnimationFrame ||\n function(cb) { return window.setTimeout(cb, 1000 / 60); };\n\n // shallow object clone for feature properties and attributes\n // from http://jsperf.com/cloning-an-object/2\n function clone(obj) {\n var target = {};\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n target[i] = obj[i];\n }\n }\n return target;\n }\n\n // checks if 2 x,y points are equal\n function pointsEqual(a, b) {\n for (var i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n\n // checks if the first and last points of a ring are equal and closes the ring\n function closeRing(coordinates) {\n if (!pointsEqual(coordinates[0], coordinates[coordinates.length - 1])) {\n coordinates.push(coordinates[0]);\n }\n return coordinates;\n }\n\n // determine if polygon ring coordinates are clockwise. clockwise signifies outer ring, counter-clockwise an inner ring\n // or hole. this logic was found at http://stackoverflow.com/questions/1165647/how-to-determine-if-a-list-of-polygon-\n // points-are-in-clockwise-order\n function ringIsClockwise(ringToTest) {\n var total = 0,i = 0;\n var rLength = ringToTest.length;\n var pt1 = ringToTest[i];\n var pt2;\n for (i; i < rLength - 1; i++) {\n pt2 = ringToTest[i + 1];\n total += (pt2[0] - pt1[0]) * (pt2[1] + pt1[1]);\n pt1 = pt2;\n }\n return (total >= 0);\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L504-L519\n function vertexIntersectsVertex(a1, a2, b1, b2) {\n var uaT = (b2[0] - b1[0]) * (a1[1] - b1[1]) - (b2[1] - b1[1]) * (a1[0] - b1[0]);\n var ubT = (a2[0] - a1[0]) * (a1[1] - b1[1]) - (a2[1] - a1[1]) * (a1[0] - b1[0]);\n var uB = (b2[1] - b1[1]) * (a2[0] - a1[0]) - (b2[0] - b1[0]) * (a2[1] - a1[1]);\n\n if ( uB !== 0 ) {\n var ua = uaT / uB;\n var ub = ubT / uB;\n\n if ( 0 <= ua && ua <= 1 && 0 <= ub && ub <= 1 ) {\n return true;\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L521-L531\n function arrayIntersectsArray(a, b) {\n for (var i = 0; i < a.length - 1; i++) {\n for (var j = 0; j < b.length - 1; j++) {\n if (vertexIntersectsVertex(a[i], a[i + 1], b[j], b[j + 1])) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L470-L480\n function coordinatesContainPoint(coordinates, point) {\n var contains = false;\n for(var i = -1, l = coordinates.length, j = l - 1; ++i < l; j = i) {\n if (((coordinates[i][1] <= point[1] && point[1] < coordinates[j][1]) ||\n (coordinates[j][1] <= point[1] && point[1] < coordinates[i][1])) &&\n (point[0] < (coordinates[j][0] - coordinates[i][0]) * (point[1] - coordinates[i][1]) / (coordinates[j][1] - coordinates[i][1]) + coordinates[i][0])) {\n contains = !contains;\n }\n }\n return contains;\n }\n\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L106-L113\n function coordinatesContainCoordinates(outer, inner){\n var intersects = arrayIntersectsArray(outer, inner);\n var contains = coordinatesContainPoint(outer, inner[0]);\n if(!intersects && contains){\n return true;\n }\n return false;\n }\n\n // do any polygons in this array contain any other polygons in this array?\n // used for checking for holes in arcgis rings\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L117-L172\n function convertRingsToGeoJSON(rings){\n var outerRings = [];\n var holes = [];\n var x; // iterator\n var outerRing; // current outer ring being evaluated\n var hole; // current hole being evaluated\n\n // for each ring\n for (var r = 0; r < rings.length; r++) {\n var ring = closeRing(rings[r].slice(0));\n if(ring.length < 4){\n continue;\n }\n // is this ring an outer ring? is it clockwise?\n if(ringIsClockwise(ring)){\n var polygon = [ ring ];\n outerRings.push(polygon); // push to outer rings\n } else {\n holes.push(ring); // counterclockwise push to holes\n }\n }\n\n var uncontainedHoles = [];\n\n // while there are holes left...\n while(holes.length){\n // pop a hole off out stack\n hole = holes.pop();\n\n // loop over all outer rings and see if they contain our hole.\n var contained = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(coordinatesContainCoordinates(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n contained = true;\n break;\n }\n }\n\n // ring is not contained in any outer ring\n // sometimes this happens https://github.com/Esri/esri-leaflet/issues/320\n if(!contained){\n uncontainedHoles.push(hole);\n }\n }\n\n // if we couldn't match any holes using contains we can try intersects...\n while(uncontainedHoles.length){\n // pop a hole off out stack\n hole = uncontainedHoles.pop();\n\n // loop over all outer rings and see if any intersect our hole.\n var intersects = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(arrayIntersectsArray(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n intersects = true;\n break;\n }\n }\n\n if(!intersects) {\n outerRings.push([hole.reverse()]);\n }\n }\n\n if(outerRings.length === 1){\n return {\n type: 'Polygon',\n coordinates: outerRings[0]\n };\n } else {\n return {\n type: 'MultiPolygon',\n coordinates: outerRings\n };\n }\n }\n\n // This function ensures that rings are oriented in the right directions\n // outer rings are clockwise, holes are counterclockwise\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function orientRings(poly){\n var output = [];\n var polygon = poly.slice(0);\n var outerRing = closeRing(polygon.shift().slice(0));\n if(outerRing.length >= 4){\n if(!ringIsClockwise(outerRing)){\n outerRing.reverse();\n }\n\n output.push(outerRing);\n\n for (var i = 0; i < polygon.length; i++) {\n var hole = closeRing(polygon[i].slice(0));\n if(hole.length >= 4){\n if(ringIsClockwise(hole)){\n hole.reverse();\n }\n output.push(hole);\n }\n }\n }\n\n return output;\n }\n\n // This function flattens holes in multipolygons to one array of polygons\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function flattenMultiPolygonRings(rings){\n var output = [];\n for (var i = 0; i < rings.length; i++) {\n var polygon = orientRings(rings[i]);\n for (var x = polygon.length - 1; x >= 0; x--) {\n var ring = polygon[x].slice(0);\n output.push(ring);\n }\n }\n return output;\n }\n\n // convert an extent (ArcGIS) to LatLngBounds (Leaflet)\n EsriLeaflet.Util.extentToBounds = function(extent){\n var sw = new L.LatLng(extent.ymin, extent.xmin);\n var ne = new L.LatLng(extent.ymax, extent.xmax);\n return new L.LatLngBounds(sw, ne);\n };\n\n // convert an LatLngBounds (Leaflet) to extent (ArcGIS)\n EsriLeaflet.Util.boundsToExtent = function(bounds) {\n bounds = L.latLngBounds(bounds);\n return {\n 'xmin': bounds.getSouthWest().lng,\n 'ymin': bounds.getSouthWest().lat,\n 'xmax': bounds.getNorthEast().lng,\n 'ymax': bounds.getNorthEast().lat,\n 'spatialReference': {\n 'wkid' : 4326\n }\n };\n };\n\n EsriLeaflet.Util.arcgisToGeojson = function (arcgis, idAttribute){\n var geojson = {};\n\n if(typeof arcgis.x === 'number' && typeof arcgis.y === 'number'){\n geojson.type = 'Point';\n geojson.coordinates = [arcgis.x, arcgis.y];\n }\n\n if(arcgis.points){\n geojson.type = 'MultiPoint';\n geojson.coordinates = arcgis.points.slice(0);\n }\n\n if(arcgis.paths) {\n if(arcgis.paths.length === 1){\n geojson.type = 'LineString';\n geojson.coordinates = arcgis.paths[0].slice(0);\n } else {\n geojson.type = 'MultiLineString';\n geojson.coordinates = arcgis.paths.slice(0);\n }\n }\n\n if(arcgis.rings) {\n geojson = convertRingsToGeoJSON(arcgis.rings.slice(0));\n }\n\n if(arcgis.geometry || arcgis.attributes) {\n geojson.type = 'Feature';\n geojson.geometry = (arcgis.geometry) ? EsriLeaflet.Util.arcgisToGeojson(arcgis.geometry) : null;\n geojson.properties = (arcgis.attributes) ? clone(arcgis.attributes) : null;\n if(arcgis.attributes) {\n geojson.id = arcgis.attributes[idAttribute] || arcgis.attributes.OBJECTID || arcgis.attributes.FID;\n }\n }\n\n return geojson;\n };\n\n // GeoJSON -> ArcGIS\n EsriLeaflet.Util.geojsonToArcGIS = function(geojson, idAttribute){\n idAttribute = idAttribute || 'OBJECTID';\n var spatialReference = { wkid: 4326 };\n var result = {};\n var i;\n\n switch(geojson.type){\n case 'Point':\n result.x = geojson.coordinates[0];\n result.y = geojson.coordinates[1];\n result.spatialReference = spatialReference;\n break;\n case 'MultiPoint':\n result.points = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'LineString':\n result.paths = [geojson.coordinates.slice(0)];\n result.spatialReference = spatialReference;\n break;\n case 'MultiLineString':\n result.paths = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'Polygon':\n result.rings = orientRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'MultiPolygon':\n result.rings = flattenMultiPolygonRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'Feature':\n if(geojson.geometry) {\n result.geometry = EsriLeaflet.Util.geojsonToArcGIS(geojson.geometry, idAttribute);\n }\n result.attributes = (geojson.properties) ? clone(geojson.properties) : {};\n if(geojson.id){\n result.attributes[idAttribute] = geojson.id;\n }\n break;\n case 'FeatureCollection':\n result = [];\n for (i = 0; i < geojson.features.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.features[i], idAttribute));\n }\n break;\n case 'GeometryCollection':\n result = [];\n for (i = 0; i < geojson.geometries.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.geometries[i], idAttribute));\n }\n break;\n }\n\n return result;\n };\n\n EsriLeaflet.Util.responseToFeatureCollection = function(response, idAttribute){\n var objectIdField;\n\n if(idAttribute){\n objectIdField = idAttribute;\n } else if(response.objectIdFieldName){\n objectIdField = response.objectIdFieldName;\n } else if(response.fields) {\n for (var j = 0; j <= response.fields.length - 1; j++) {\n if(response.fields[j].type === 'esriFieldTypeOID') {\n objectIdField = response.fields[j].name;\n break;\n }\n }\n } else {\n objectIdField = 'OBJECTID';\n }\n\n var featureCollection = {\n type: 'FeatureCollection',\n features: []\n };\n var features = response.features || response.results;\n if(features.length){\n for (var i = features.length - 1; i >= 0; i--) {\n featureCollection.features.push(EsriLeaflet.Util.arcgisToGeojson(features[i], objectIdField));\n }\n }\n\n return featureCollection;\n };\n\n // trim url whitespace and add a trailing slash if needed\n EsriLeaflet.Util.cleanUrl = function(url){\n //trim leading and trailing spaces, but not spaces inside the url\n url = url.replace(/^\\s+|\\s+$|\\A\\s+|\\s+\\z/g, '');\n\n //add a trailing slash to the url if the user omitted it\n if(url[url.length-1] !== '/'){\n url += '/';\n }\n\n return url;\n };\n\n EsriLeaflet.Util.isArcgisOnline = function(url){\n /* hosted feature services can emit geojson natively.\n our check for 'geojson' support will need to be revisted\n once the functionality makes its way to ArcGIS Server*/\n return (/\\.arcgis\\.com.*?FeatureServer/g).test(url);\n };\n\n EsriLeaflet.Util.geojsonTypeToArcGIS = function (geoJsonType) {\n var arcgisGeometryType;\n switch (geoJsonType) {\n case 'Point':\n arcgisGeometryType = 'esriGeometryPoint';\n break;\n case 'MultiPoint':\n arcgisGeometryType = 'esriGeometryMultipoint';\n break;\n case 'LineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'MultiLineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'Polygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n case 'MultiPolygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n }\n return arcgisGeometryType;\n };\n\n EsriLeaflet.Util.requestAnimationFrame = L.Util.bind(raf, window);\n\n EsriLeaflet.Util.warn = function (message) {\n if(console && console.warn) {\n console.warn(message);\n }\n };\n\n})(EsriLeaflet);","(function(EsriLeaflet){\n\n var callbacks = 0;\n\n window._EsriLeafletCallbacks = {};\n\n function serialize(params){\n var data = '';\n\n params.f = params.f || 'json';\n\n for (var key in params){\n if(params.hasOwnProperty(key)){\n var param = params[key];\n var type = Object.prototype.toString.call(param);\n var value;\n\n if(data.length){\n data += '&';\n }\n\n if (type === '[object Array]'){\n value = (Object.prototype.toString.call(param[0]) === '[object Object]') ? JSON.stringify(param) : param.join(',');\n } else if (type === '[object Object]') {\n value = JSON.stringify(param);\n } else if (type === '[object Date]'){\n value = param.valueOf();\n } else {\n value = param;\n }\n\n data += encodeURIComponent(key) + '=' + encodeURIComponent(value);\n }\n }\n\n return data;\n }\n\n function createRequest(callback, context){\n var httpRequest = new XMLHttpRequest();\n\n httpRequest.onerror = function(e) {\n httpRequest.onreadystatechange = L.Util.falseFn;\n\n callback.call(context, {\n error: {\n code: 500,\n message: 'XMLHttpRequest error'\n }\n }, null);\n };\n\n httpRequest.onreadystatechange = function(){\n var response;\n var error;\n\n if (httpRequest.readyState === 4) {\n try {\n response = JSON.parse(httpRequest.responseText);\n } catch(e) {\n response = null;\n error = {\n code: 500,\n message: 'Could not parse response as JSON. This could also be caused by a CORS or XMLHttpRequest error.'\n };\n }\n\n if (!error && response.error) {\n error = response.error;\n response = null;\n }\n\n httpRequest.onerror = L.Util.falseFn;\n\n callback.call(context, error, response);\n }\n };\n\n return httpRequest;\n }\n\n // AJAX handlers for CORS (modern browsers) or JSONP (older browsers)\n EsriLeaflet.Request = {\n request: function(url, params, callback, context){\n var paramString = serialize(params);\n var httpRequest = createRequest(callback, context);\n var requestLength = (url + '?' + paramString).length;\n\n // request is less then 2000 characters and the browser supports CORS, make GET request with XMLHttpRequest\n if(requestLength <= 2000 && L.esri.Support.CORS){\n httpRequest.open('GET', url + '?' + paramString);\n httpRequest.send(null);\n\n // request is less more then 2000 characters and the browser supports CORS, make POST request with XMLHttpRequest\n } else if (requestLength > 2000 && L.esri.Support.CORS){\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(paramString);\n\n // request is less more then 2000 characters and the browser does not support CORS, make a JSONP request\n } else if(requestLength <= 2000 && !L.esri.Support.CORS){\n return L.esri.Request.get.JSONP(url, params, callback, context);\n\n // request is longer then 2000 characters and the browser does not support CORS, log a warning\n } else {\n EsriLeaflet.Util.warn('a request to ' + url + ' was longer then 2000 characters and this browser cannot make a cross-domain post request. Please use a proxy http://esri.github.io/esri-leaflet/api-reference/request.html');\n return;\n }\n\n return httpRequest;\n },\n\n post: {\n XMLHTTP: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(serialize(params));\n\n return httpRequest;\n }\n },\n\n get: {\n CORS: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n\n httpRequest.open('GET', url + '?' + serialize(params), true);\n httpRequest.send(null);\n\n return httpRequest;\n },\n JSONP: function(url, params, callback, context){\n var callbackId = 'c' + callbacks;\n\n params.callback = 'window._EsriLeafletCallbacks.' + callbackId;\n\n var script = L.DomUtil.create('script', null, document.body);\n script.type = 'text/javascript';\n script.src = url + '?' + serialize(params);\n script.id = callbackId;\n\n window._EsriLeafletCallbacks[callbackId] = function(response){\n if(window._EsriLeafletCallbacks[callbackId] !== true){\n var error;\n var responseType = Object.prototype.toString.call(response);\n\n if(!(responseType === '[object Object]' || responseType === '[object Array]')){\n error = {\n error: {\n code: 500,\n message: 'Expected array or object as JSONP response'\n }\n };\n response = null;\n }\n\n if (!error && response.error) {\n error = response;\n response = null;\n }\n\n callback.call(context, error, response);\n window._EsriLeafletCallbacks[callbackId] = true;\n }\n };\n\n callbacks++;\n\n return {\n id: callbackId,\n url: script.src,\n abort: function(){\n window._EsriLeafletCallbacks._callback[callbackId]({\n code: 0,\n message: 'Request aborted.'\n });\n }\n };\n }\n }\n };\n\n // choose the correct AJAX handler depending on CORS support\n EsriLeaflet.get = (EsriLeaflet.Support.CORS) ? EsriLeaflet.Request.get.CORS : EsriLeaflet.Request.get.JSONP;\n\n // always use XMLHttpRequest for posts\n EsriLeaflet.post = EsriLeaflet.Request.post.XMLHTTP;\n\n // expose a common request method the uses GET\\POST based on request length\n EsriLeaflet.request = EsriLeaflet.Request.request;\n\n})(EsriLeaflet);","EsriLeaflet.Services.Service = L.Class.extend({\n\n includes: L.Mixin.Events,\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n initialize: function (options) {\n options = options || {};\n this._requestQueue = [];\n this._authenticating = false;\n L.Util.setOptions(this, options);\n this.options.url = EsriLeaflet.Util.cleanUrl(this.options.url);\n },\n\n get: function (path, params, callback, context) {\n return this._request('get', path, params, callback, context);\n },\n\n post: function (path, params, callback, context) {\n return this._request('post', path, params, callback, context);\n },\n\n request: function (path, params, callback, context) {\n return this._request('request', path, params, callback, context);\n },\n\n metadata: function (callback, context) {\n return this._request('get', '', {}, callback, context);\n },\n\n authenticate: function(token){\n this._authenticating = false;\n this.options.token = token;\n this._runQueue();\n return this;\n },\n\n _request: function(method, path, params, callback, context){\n this.fire('requeststart', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n\n var wrappedCallback = this._createServiceCallback(method, path, params, callback, context);\n\n if (this.options.token) {\n params.token = this.options.token;\n }\n\n if (this._authenticating) {\n this._requestQueue.push([method, path, params, callback, context]);\n return;\n } else {\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, wrappedCallback);\n } else {\n return EsriLeaflet[method](url, params, wrappedCallback);\n }\n }\n },\n\n _createServiceCallback: function(method, path, params, callback, context){\n return L.Util.bind(function(error, response){\n\n if (error && (error.code === 499 || error.code === 498)) {\n this._authenticating = true;\n\n this._requestQueue.push([method, path, params, callback, context]);\n\n // fire an event for users to handle and re-authenticate\n this.fire('authenticationrequired', {\n authenticate: L.Util.bind(this.authenticate, this)\n });\n\n // if the user has access to a callback they can handle the auth error\n error.authenticate = L.Util.bind(this.authenticate, this);\n }\n\n callback.call(context, error, response);\n\n if(error) {\n this.fire('requesterror', {\n url: this.options.url + path,\n params: params,\n message: error.message,\n code: error.code,\n method: method\n });\n } else {\n this.fire('requestsuccess', {\n url: this.options.url + path,\n params: params,\n response: response,\n method: method\n });\n }\n\n this.fire('requestend', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n }, this);\n },\n\n _runQueue: function(){\n for (var i = this._requestQueue.length - 1; i >= 0; i--) {\n var request = this._requestQueue[i];\n var method = request.shift();\n this[method].apply(this, request);\n }\n this._requestQueue = [];\n }\n\n});\n\nEsriLeaflet.Services.service = function(params){\n return new EsriLeaflet.Services.Service(params);\n};\n","EsriLeaflet.Services.ImageService = EsriLeaflet.Services.Service.extend({\n\n query: function () {\n return new EsriLeaflet.Tasks.Query(this);\n },\n\n identify: function() {\n return new EsriLeaflet.Tasks.IdentifyImage(this);\n }\n});\n\nEsriLeaflet.Services.imageService = function(params){\n return new EsriLeaflet.Services.ImageService(params);\n};","EsriLeaflet.Tasks.Task = L.Class.extend({\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n //Generate a method for each methodName:paramName in the setters for this task.\n generateSetter: function(param, context){\n return L.Util.bind(function(value){\n this.params[param] = value;\n return this;\n }, context);\n },\n\n initialize: function(endpoint){\n // endpoint can be either a url (and options) for an ArcGIS Rest Service or an instance of EsriLeaflet.Service\n if(endpoint.request && endpoint.options){\n this._service = endpoint;\n L.Util.setOptions(this, endpoint.options);\n } else {\n L.Util.setOptions(this, endpoint);\n this.options.url = L.esri.Util.cleanUrl(endpoint.url);\n }\n\n // clone default params into this object\n this.params = L.Util.extend({}, this.params || {});\n\n // generate setter methods based on the setters object implimented a child class\n if(this.setters){\n for (var setter in this.setters){\n var param = this.setters[setter];\n this[setter] = this.generateSetter(param, this);\n }\n }\n },\n\n token: function(token){\n if(this._service){\n this._service.authenticate(token);\n } else {\n this.params.token = token;\n }\n return this;\n },\n\n request: function(callback, context){\n if(this._service){\n return this._service.request(this.path, this.params, callback, context);\n } else {\n return this._request('request', this.path, this.params, callback, context);\n }\n },\n\n _request: function(method, path, params, callback, context){\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, callback, context);\n } else{\n return EsriLeaflet[method](url, params, callback, context);\n }\n }\n});","EsriLeaflet.Tasks.Query = EsriLeaflet.Tasks.Task.extend({\n setters: {\n 'offset': 'offset',\n 'limit': 'limit',\n 'fields': 'outFields',\n 'precision': 'geometryPrecision',\n 'featureIds': 'objectIds',\n 'returnGeometry': 'returnGeometry',\n 'token': 'token'\n },\n\n path: 'query',\n\n params: {\n returnGeometry: true,\n where: '1=1',\n outSr: 4326,\n outFields: '*'\n },\n\n within: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelContains'; // will make code read layer within geometry, to the api this will reads geometry contains layer\n return this;\n },\n\n intersects: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelIntersects';\n return this;\n },\n\n contains: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelWithin'; // will make code read layer contains geometry, to the api this will reads geometry within layer\n return this;\n },\n\n // crosses: function(geometry){\n // this._setGeometry(geometry);\n // this.params.spatialRel = 'esriSpatialRelCrosses';\n // return this;\n // },\n\n // touches: function(geometry){\n // this._setGeometry(geometry);\n // this.params.spatialRel = 'esriSpatialRelTouches';\n // return this;\n // },\n\n overlaps: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelOverlaps';\n return this;\n },\n\n // only valid for Feature Services running on ArcGIS Server 10.3 or ArcGIS Online\n nearby: function(latlng, radius){\n latlng = L.latLng(latlng);\n this.params.geometry = [latlng.lng, latlng.lat];\n this.params.geometryType = 'esriGeometryPoint';\n this.params.spatialRel = 'esriSpatialRelIntersects';\n this.params.units = 'esriSRUnit_Meter';\n this.params.distance = radius;\n this.params.inSr = 4326;\n return this;\n },\n\n where: function(string){\n // instead of converting double-quotes to single quotes, pass as is, and provide a more informative message if a 400 is encountered\n this.params.where = string;\n return this;\n },\n\n between: function(start, end){\n this.params.time = [start.valueOf(), end.valueOf()];\n return this;\n },\n\n simplify: function(map, factor){\n var mapWidth = Math.abs(map.getBounds().getWest() - map.getBounds().getEast());\n this.params.maxAllowableOffset = (mapWidth / map.getSize().y) * factor;\n return this;\n },\n\n orderBy: function(fieldName, order){\n order = order || 'ASC';\n this.params.orderByFields = (this.params.orderByFields) ? this.params.orderByFields + ',' : '';\n this.params.orderByFields += ([fieldName, order]).join(' ');\n return this;\n },\n\n run: function(callback, context){\n this._cleanParams();\n\n // if the service is hosted on arcgis online request geojson directly\n if(EsriLeaflet.Util.isArcgisOnline(this.options.url)){\n this.params.f = 'geojson';\n\n return this.request(function(error, response){\n this._trapSQLerrors(error);\n callback.call(context, error, response, response);\n }, this);\n\n // otherwise convert it in the callback then pass it on\n } else {\n return this.request(function(error, response){\n this._trapSQLerrors(error);\n callback.call(context, error, (response && EsriLeaflet.Util.responseToFeatureCollection(response)), response);\n }, this);\n }\n },\n\n count: function(callback, context){\n this._cleanParams();\n this.params.returnCountOnly = true;\n return this.request(function(error, response){\n callback.call(this, error, (response && response.count), response);\n }, context);\n },\n\n ids: function(callback, context){\n this._cleanParams();\n this.params.returnIdsOnly = true;\n return this.request(function(error, response){\n callback.call(this, error, (response && response.objectIds), response);\n }, context);\n },\n\n // only valid for Feature Services running on ArcGIS Server 10.3 or ArcGIS Online\n bounds: function(callback, context){\n this._cleanParams();\n this.params.returnExtentOnly = true;\n return this.request(function(error, response){\n callback.call(context, error, (response && response.extent && EsriLeaflet.Util.extentToBounds(response.extent)), response);\n }, context);\n },\n\n // only valid for image services\n pixelSize: function(point){\n point = L.point(point);\n this.params.pixelSize = [point.x,point.y];\n return this;\n },\n\n // only valid for map services\n layer: function(layer){\n this.path = layer + '/query';\n return this;\n },\n\n _trapSQLerrors: function(error){\n if (error){\n if (error.code === '400'){\n EsriLeaflet.Util.warn('one common syntax error in query requests is encasing string values in double quotes instead of single quotes');\n }\n }\n },\n\n _cleanParams: function(){\n delete this.params.returnIdsOnly;\n delete this.params.returnExtentOnly;\n delete this.params.returnCountOnly;\n },\n\n _setGeometry: function(geometry) {\n this.params.inSr = 4326;\n\n // convert bounds to extent and finish\n if ( geometry instanceof L.LatLngBounds ) {\n // set geometry + geometryType\n this.params.geometry = EsriLeaflet.Util.boundsToExtent(geometry);\n this.params.geometryType = 'esriGeometryEnvelope';\n return;\n }\n\n // convert L.Marker > L.LatLng\n if(geometry.getLatLng){\n geometry = geometry.getLatLng();\n }\n\n // convert L.LatLng to a geojson point and continue;\n if (geometry instanceof L.LatLng) {\n geometry = {\n type: 'Point',\n coordinates: [geometry.lng, geometry.lat]\n };\n }\n\n // handle L.GeoJSON, pull out the first geometry\n if ( geometry instanceof L.GeoJSON ) {\n //reassign geometry to the GeoJSON value (we are assuming that only one feature is present)\n geometry = geometry.getLayers()[0].feature.geometry;\n this.params.geometry = EsriLeaflet.Util.geojsonToArcGIS(geometry);\n this.params.geometryType = EsriLeaflet.Util.geojsonTypeToArcGIS(geometry.type);\n }\n\n // Handle L.Polyline and L.Polygon\n if (geometry.toGeoJSON) {\n geometry = geometry.toGeoJSON();\n }\n\n // handle GeoJSON feature by pulling out the geometry\n if ( geometry.type === 'Feature' ) {\n // get the geometry of the geojson feature\n geometry = geometry.geometry;\n }\n\n // confirm that our GeoJSON is a point, line or polygon\n if ( geometry.type === 'Point' || geometry.type === 'LineString' || geometry.type === 'Polygon') {\n this.params.geometry = EsriLeaflet.Util.geojsonToArcGIS(geometry);\n this.params.geometryType = EsriLeaflet.Util.geojsonTypeToArcGIS(geometry.type);\n return;\n }\n\n // warn the user if we havn't found a\n /* global console */\n EsriLeaflet.Util.warn('invalid geometry passed to spatial query. Should be an L.LatLng, L.LatLngBounds or L.Marker or a GeoJSON Point Line or Polygon object');\n\n return;\n }\n});\n\nEsriLeaflet.Tasks.query = function(params){\n return new EsriLeaflet.Tasks.Query(params);\n};","EsriLeaflet.Tasks.Identify = EsriLeaflet.Tasks.Task.extend({\n path: 'identify',\n\n between: function(start, end){\n this.params.time = [start.valueOf(), end.valueOf()];\n return this;\n }\n});\n","EsriLeaflet.Layers.RasterLayer = L.Class.extend({\n includes: L.Mixin.Events,\n\n options: {\n opacity: 1,\n position: 'front',\n f: 'image'\n },\n\n onAdd: function (map) {\n this._map = map;\n\n this._update = L.Util.limitExecByInterval(this._update, this.options.updateInterval, this);\n\n if (map.options.crs && map.options.crs.code) {\n var sr = map.options.crs.code.split(':')[1];\n this.options.bboxSR = sr;\n this.options.imageSR = sr;\n }\n\n map.on('moveend', this._update, this);\n\n // if we had an image loaded and it matches the\n // current bounds show the image otherwise remove it\n if(this._currentImage && this._currentImage._bounds.equals(this._map.getBounds())){\n map.addLayer(this._currentImage);\n } else if(this._currentImage) {\n this._map.removeLayer(this._currentImage);\n this._currentImage = null;\n }\n\n this._update();\n\n if(this._popup){\n this._map.on('click', this._getPopupData, this);\n this._map.on('dblclick', this._resetPopupState, this);\n }\n },\n\n bindPopup: function(fn, popupOptions){\n this._shouldRenderPopup = false;\n this._lastClick = false;\n this._popup = L.popup(popupOptions);\n this._popupFunction = fn;\n if(this._map){\n this._map.on('click', this._getPopupData, this);\n this._map.on('dblclick', this._resetPopupState, this);\n }\n return this;\n },\n\n unbindPopup: function(){\n if(this._map){\n this._map.closePopup(this._popup);\n this._map.off('click', this._getPopupData, this);\n this._map.off('dblclick', this._resetPopupState, this);\n }\n this._popup = false;\n return this;\n },\n\n onRemove: function (map) {\n if (this._currentImage) {\n this._map.removeLayer(this._currentImage);\n }\n\n if(this._popup){\n this._map.off('click', this._getPopupData, this);\n this._map.off('dblclick', this._resetPopupState, this);\n }\n\n this._map.off('moveend', this._update, this);\n this._map = null;\n },\n\n addTo: function(map){\n map.addLayer(this);\n return this;\n },\n\n removeFrom: function(map){\n map.removeLayer(this);\n return this;\n },\n\n bringToFront: function(){\n this.options.position = 'front';\n if(this._currentImage){\n this._currentImage.bringToFront();\n }\n return this;\n },\n\n bringToBack: function(){\n this.options.position = 'back';\n if(this._currentImage){\n this._currentImage.bringToBack();\n }\n return this;\n },\n\n getAttribution: function () {\n return this.options.attribution;\n },\n\n getOpacity: function(){\n return this.options.opacity;\n },\n\n setOpacity: function(opacity){\n this.options.opacity = opacity;\n this._currentImage.setOpacity(opacity);\n return this;\n },\n\n getTimeRange: function(){\n return [this.options.from, this.options.to];\n },\n\n setTimeRange: function(from, to){\n this.options.from = from;\n this.options.to = to;\n this._update();\n return this;\n },\n\n metadata: function(callback, context){\n this._service.metadata(callback, context);\n return this;\n },\n\n authenticate: function(token){\n this._service.authenticate(token);\n return this;\n },\n\n _renderImage: function(url, bounds){\n if(this._map){\n // create a new image overlay and add it to the map\n // to start loading the image\n // opacity is 0 while the image is loading\n var image = new L.ImageOverlay(url, bounds, {\n opacity: 0\n }).addTo(this._map);\n\n // once the image loads\n image.once('load', function(e){\n var newImage = e.target;\n var oldImage = this._currentImage;\n\n // if the bounds of this image matches the bounds that\n // _renderImage was called with and we have a map with the same bounds\n // hide the old image if there is one and set the opacity\n // of the new image otherwise remove the new image\n if(newImage._bounds.equals(bounds) && newImage._bounds.equals(this._map.getBounds())){\n this._currentImage = newImage;\n\n if(this.options.position === 'front'){\n this.bringToFront();\n } else {\n this.bringToBack();\n }\n\n if(this._map && this._currentImage._map){\n this._currentImage.setOpacity(this.options.opacity);\n } else {\n this._currentImage._map.removeLayer(this._currentImage);\n }\n\n if(oldImage && this._map) {\n this._map.removeLayer(oldImage);\n }\n\n if(oldImage && oldImage._map){\n oldImage._map.removeLayer(oldImage);\n }\n } else {\n this._map.removeLayer(newImage);\n }\n\n this.fire('load', {\n bounds: bounds\n });\n\n }, this);\n\n this.fire('loading', {\n bounds: bounds\n });\n }\n },\n\n _update: function () {\n if(!this._map){\n return;\n }\n\n var zoom = this._map.getZoom();\n var bounds = this._map.getBounds();\n\n if(this._animatingZoom){\n return;\n }\n\n if (this._map._panTransition && this._map._panTransition._inProgress) {\n return;\n }\n\n if (zoom > this.options.maxZoom || zoom < this.options.minZoom) {\n return;\n }\n var params = this._buildExportParams();\n\n this._requestExport(params, bounds);\n },\n\n // TODO: refactor these into raster layer\n _renderPopup: function(latlng, error, results, response){\n latlng = L.latLng(latlng);\n if(this._shouldRenderPopup && this._lastClick.equals(latlng)){\n //add the popup to the map where the mouse was clicked at\n var content = this._popupFunction(error, results, response);\n if (content) {\n this._popup.setLatLng(latlng).setContent(content).openOn(this._map);\n }\n }\n },\n\n _resetPopupState: function(e){\n this._shouldRenderPopup = false;\n this._lastClick = e.latlng;\n },\n\n // from https://github.com/Leaflet/Leaflet/blob/v0.7.2/src/layer/FeatureGroup.js\n // @TODO remove at Leaflet 0.8\n _propagateEvent: function (e) {\n e = L.extend({\n layer: e.target,\n target: this\n }, e);\n this.fire(e.type, e);\n }\n});\n","EsriLeaflet.Layers.ImageMapLayer = EsriLeaflet.Layers.RasterLayer.extend({\n\n options: {\n updateInterval: 150,\n format: 'jpgpng',\n transparent: true,\n f: 'json'\n },\n\n query: function(){\n return this._service.query();\n },\n\n identify: function(){\n return this._service.identify();\n },\n\n initialize: function (options) {\n options.url = EsriLeaflet.Util.cleanUrl(options.url);\n this._service = new EsriLeaflet.Services.ImageService(options);\n this._service.on('authenticationrequired requeststart requestend requesterror requestsuccess', this._propagateEvent, this);\n L.Util.setOptions(this, options);\n },\n\n setPixelType: function (pixelType) {\n this.options.pixelType = pixelType;\n this._update();\n return this;\n },\n\n getPixelType: function () {\n return this.options.pixelType;\n },\n\n setBandIds: function (bandIds) {\n if (L.Util.isArray(bandIds)) {\n this.options.bandIds = bandIds.join(',');\n } else {\n this.options.bandIds = bandIds.toString();\n }\n this._update();\n return this;\n },\n\n getBandIds: function () {\n return this.options.bandIds;\n },\n\n setNoData: function (noData, noDataInterpretation) {\n if (L.Util.isArray(noData)) {\n this.options.noData = noData.join(',');\n } else {\n this.options.noData = noData.toString();\n }\n if (noDataInterpretation) {\n this.options.noDataInterpretation = noDataInterpretation;\n }\n this._update();\n return this;\n },\n\n getNoData: function () {\n return this.options.noData;\n },\n\n getNoDataInterpretation: function () {\n return this.options.noDataInterpretation;\n },\n\n setRenderingRule: function(renderingRule) {\n this.options.renderingRule = renderingRule;\n this._update();\n },\n\n getRenderingRule: function() {\n return this.options.renderingRule;\n },\n\n setMosaicRule: function(mosaicRule) {\n this.options.mosaicRule = mosaicRule;\n this._update();\n },\n\n getMosaicRule: function() {\n return this.options.mosaicRule;\n },\n\n _getPopupData: function(e){\n var callback = L.Util.bind(function(error, results, response) {\n if(error) { return; } // we really can't do anything here but authenticate or requesterror will fire\n setTimeout(L.Util.bind(function(){\n this._renderPopup(e.latlng, error, results, response);\n }, this), 300);\n }, this);\n\n var identifyRequest = this.identify().at(e.latlng);\n\n // set mosaic rule for identify task if it is set for layer\n if (this.options.mosaicRule) {\n identifyRequest.setMosaicRule(this.options.mosaicRule);\n // @TODO: force return catalog items too?\n }\n\n // @TODO: set rendering rule? Not sure,\n // sometimes you want raw pixel values\n // if (this.options.renderingRule) {\n // identifyRequest.setRenderingRule(this.options.renderingRule);\n // }\n\n identifyRequest.run(callback);\n\n // set the flags to show the popup\n this._shouldRenderPopup = true;\n this._lastClick = e.latlng;\n },\n\n _buildExportParams: function () {\n var bounds = this._map.getBounds();\n var size = this._map.getSize();\n var ne = this._map.options.crs.project(bounds._northEast);\n var sw = this._map.options.crs.project(bounds._southWest);\n\n var params = {\n bbox: [sw.x, sw.y, ne.x, ne.y].join(','),\n size: size.x + ',' + size.y,\n format: this.options.format,\n transparent: this.options.transparent,\n bboxSR: this.options.bboxSR,\n imageSR: this.options.imageSR\n };\n\n if (this.options.from && this.options.to) {\n params.time = this.options.from.valueOf() + ',' + this.options.to.valueOf();\n }\n\n if (this.options.pixelType) {\n params.pixelType = this.options.pixelType;\n }\n\n if (this.options.interpolation) {\n params.interpolation = this.options.interpolation;\n }\n\n if (this.options.compressionQuality) {\n params.compressionQuality = this.options.compressionQuality;\n }\n\n if (this.options.bandIds) {\n params.bandIds = this.options.bandIds;\n }\n\n if (this.options.noData) {\n params.noData = this.options.noData;\n }\n\n if (this.options.noDataInterpretation) {\n params.noDataInterpretation = this.options.noDataInterpretation;\n }\n\n if (this._service.options.token) {\n params.token = this._service.options.token;\n }\n\n if(this.options.renderingRule) {\n params.renderingRule = JSON.stringify(this.options.renderingRule);\n }\n\n if(this.options.mosaicRule) {\n params.mosaicRule = JSON.stringify(this.options.mosaicRule);\n }\n\n return params;\n },\n\n _requestExport: function (params, bounds) {\n if (this.options.f === 'json') {\n this._service.request('exportImage', params, function(error, response){\n if(error) { return; } // we really can't do anything here but authenticate or requesterror will fire\n this._renderImage(response.href, bounds);\n }, this);\n } else {\n params.f = 'image';\n this._renderImage(this.options.url + 'exportImage' + L.Util.getParamString(params), bounds);\n }\n }\n});\n\nEsriLeaflet.ImageMapLayer = EsriLeaflet.Layers.ImageMapLayer;\n\nEsriLeaflet.Layers.imageMapLayer = function (options) {\n return new EsriLeaflet.Layers.ImageMapLayer(options);\n};\n\nEsriLeaflet.imageMapLayer = function (options) {\n return new EsriLeaflet.Layers.ImageMapLayer(options);\n};\n"]} \ No newline at end of file +{"version":3,"sources":["../../../src/EsriLeaflet.js","../../../src/Util.js","../../../src/Request.js","../../../src/Services/Service.js","../../../src/Services/ImageService.js","../../../src/Tasks/Task.js","../../../src/Tasks/Query.js","../../../src/Tasks/Identify.js","../../../src/Layers/RasterLayer.js","../../../src/Layers/ImageMapLayer.js"],"names":[],"mappings":"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","file":"esri-leaflet-image-service-src.js","sourcesContent":["var EsriLeaflet = { //jshint ignore:line\n VERSION: '1.0.3',\n Layers: {},\n Services: {},\n Controls: {},\n Tasks: {},\n Util: {},\n Support: {\n CORS: !!(window.XMLHttpRequest && 'withCredentials' in new XMLHttpRequest()),\n pointerEvents: document.documentElement.style.pointerEvents === ''\n }\n};\n\nif(typeof window !== 'undefined' && window.L){\n window.L.esri = EsriLeaflet;\n}\n","(function(EsriLeaflet){\n\n // normalize request animation frame\n var raf = window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.msRequestAnimationFrame ||\n function(cb) { return window.setTimeout(cb, 1000 / 60); };\n\n // shallow object clone for feature properties and attributes\n // from http://jsperf.com/cloning-an-object/2\n function clone(obj) {\n var target = {};\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n target[i] = obj[i];\n }\n }\n return target;\n }\n\n // checks if 2 x,y points are equal\n function pointsEqual(a, b) {\n for (var i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n\n // checks if the first and last points of a ring are equal and closes the ring\n function closeRing(coordinates) {\n if (!pointsEqual(coordinates[0], coordinates[coordinates.length - 1])) {\n coordinates.push(coordinates[0]);\n }\n return coordinates;\n }\n\n // determine if polygon ring coordinates are clockwise. clockwise signifies outer ring, counter-clockwise an inner ring\n // or hole. this logic was found at http://stackoverflow.com/questions/1165647/how-to-determine-if-a-list-of-polygon-\n // points-are-in-clockwise-order\n function ringIsClockwise(ringToTest) {\n var total = 0,i = 0;\n var rLength = ringToTest.length;\n var pt1 = ringToTest[i];\n var pt2;\n for (i; i < rLength - 1; i++) {\n pt2 = ringToTest[i + 1];\n total += (pt2[0] - pt1[0]) * (pt2[1] + pt1[1]);\n pt1 = pt2;\n }\n return (total >= 0);\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L504-L519\n function vertexIntersectsVertex(a1, a2, b1, b2) {\n var uaT = (b2[0] - b1[0]) * (a1[1] - b1[1]) - (b2[1] - b1[1]) * (a1[0] - b1[0]);\n var ubT = (a2[0] - a1[0]) * (a1[1] - b1[1]) - (a2[1] - a1[1]) * (a1[0] - b1[0]);\n var uB = (b2[1] - b1[1]) * (a2[0] - a1[0]) - (b2[0] - b1[0]) * (a2[1] - a1[1]);\n\n if ( uB !== 0 ) {\n var ua = uaT / uB;\n var ub = ubT / uB;\n\n if ( 0 <= ua && ua <= 1 && 0 <= ub && ub <= 1 ) {\n return true;\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L521-L531\n function arrayIntersectsArray(a, b) {\n for (var i = 0; i < a.length - 1; i++) {\n for (var j = 0; j < b.length - 1; j++) {\n if (vertexIntersectsVertex(a[i], a[i + 1], b[j], b[j + 1])) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L470-L480\n function coordinatesContainPoint(coordinates, point) {\n var contains = false;\n for(var i = -1, l = coordinates.length, j = l - 1; ++i < l; j = i) {\n if (((coordinates[i][1] <= point[1] && point[1] < coordinates[j][1]) ||\n (coordinates[j][1] <= point[1] && point[1] < coordinates[i][1])) &&\n (point[0] < (coordinates[j][0] - coordinates[i][0]) * (point[1] - coordinates[i][1]) / (coordinates[j][1] - coordinates[i][1]) + coordinates[i][0])) {\n contains = !contains;\n }\n }\n return contains;\n }\n\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L106-L113\n function coordinatesContainCoordinates(outer, inner){\n var intersects = arrayIntersectsArray(outer, inner);\n var contains = coordinatesContainPoint(outer, inner[0]);\n if(!intersects && contains){\n return true;\n }\n return false;\n }\n\n // do any polygons in this array contain any other polygons in this array?\n // used for checking for holes in arcgis rings\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L117-L172\n function convertRingsToGeoJSON(rings){\n var outerRings = [];\n var holes = [];\n var x; // iterator\n var outerRing; // current outer ring being evaluated\n var hole; // current hole being evaluated\n\n // for each ring\n for (var r = 0; r < rings.length; r++) {\n var ring = closeRing(rings[r].slice(0));\n if(ring.length < 4){\n continue;\n }\n // is this ring an outer ring? is it clockwise?\n if(ringIsClockwise(ring)){\n var polygon = [ ring ];\n outerRings.push(polygon); // push to outer rings\n } else {\n holes.push(ring); // counterclockwise push to holes\n }\n }\n\n var uncontainedHoles = [];\n\n // while there are holes left...\n while(holes.length){\n // pop a hole off out stack\n hole = holes.pop();\n\n // loop over all outer rings and see if they contain our hole.\n var contained = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(coordinatesContainCoordinates(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n contained = true;\n break;\n }\n }\n\n // ring is not contained in any outer ring\n // sometimes this happens https://github.com/Esri/esri-leaflet/issues/320\n if(!contained){\n uncontainedHoles.push(hole);\n }\n }\n\n // if we couldn't match any holes using contains we can try intersects...\n while(uncontainedHoles.length){\n // pop a hole off out stack\n hole = uncontainedHoles.pop();\n\n // loop over all outer rings and see if any intersect our hole.\n var intersects = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(arrayIntersectsArray(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n intersects = true;\n break;\n }\n }\n\n if(!intersects) {\n outerRings.push([hole.reverse()]);\n }\n }\n\n if(outerRings.length === 1){\n return {\n type: 'Polygon',\n coordinates: outerRings[0]\n };\n } else {\n return {\n type: 'MultiPolygon',\n coordinates: outerRings\n };\n }\n }\n\n // This function ensures that rings are oriented in the right directions\n // outer rings are clockwise, holes are counterclockwise\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function orientRings(poly){\n var output = [];\n var polygon = poly.slice(0);\n var outerRing = closeRing(polygon.shift().slice(0));\n if(outerRing.length >= 4){\n if(!ringIsClockwise(outerRing)){\n outerRing.reverse();\n }\n\n output.push(outerRing);\n\n for (var i = 0; i < polygon.length; i++) {\n var hole = closeRing(polygon[i].slice(0));\n if(hole.length >= 4){\n if(ringIsClockwise(hole)){\n hole.reverse();\n }\n output.push(hole);\n }\n }\n }\n\n return output;\n }\n\n // This function flattens holes in multipolygons to one array of polygons\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function flattenMultiPolygonRings(rings){\n var output = [];\n for (var i = 0; i < rings.length; i++) {\n var polygon = orientRings(rings[i]);\n for (var x = polygon.length - 1; x >= 0; x--) {\n var ring = polygon[x].slice(0);\n output.push(ring);\n }\n }\n return output;\n }\n\n // convert an extent (ArcGIS) to LatLngBounds (Leaflet)\n EsriLeaflet.Util.extentToBounds = function(extent){\n var sw = new L.LatLng(extent.ymin, extent.xmin);\n var ne = new L.LatLng(extent.ymax, extent.xmax);\n return new L.LatLngBounds(sw, ne);\n };\n\n // convert an LatLngBounds (Leaflet) to extent (ArcGIS)\n EsriLeaflet.Util.boundsToExtent = function(bounds) {\n bounds = L.latLngBounds(bounds);\n return {\n 'xmin': bounds.getSouthWest().lng,\n 'ymin': bounds.getSouthWest().lat,\n 'xmax': bounds.getNorthEast().lng,\n 'ymax': bounds.getNorthEast().lat,\n 'spatialReference': {\n 'wkid' : 4326\n }\n };\n };\n\n EsriLeaflet.Util.arcgisToGeojson = function (arcgis, idAttribute){\n var geojson = {};\n\n if(typeof arcgis.x === 'number' && typeof arcgis.y === 'number'){\n geojson.type = 'Point';\n geojson.coordinates = [arcgis.x, arcgis.y];\n }\n\n if(arcgis.points){\n geojson.type = 'MultiPoint';\n geojson.coordinates = arcgis.points.slice(0);\n }\n\n if(arcgis.paths) {\n if(arcgis.paths.length === 1){\n geojson.type = 'LineString';\n geojson.coordinates = arcgis.paths[0].slice(0);\n } else {\n geojson.type = 'MultiLineString';\n geojson.coordinates = arcgis.paths.slice(0);\n }\n }\n\n if(arcgis.rings) {\n geojson = convertRingsToGeoJSON(arcgis.rings.slice(0));\n }\n\n if(arcgis.geometry || arcgis.attributes) {\n geojson.type = 'Feature';\n geojson.geometry = (arcgis.geometry) ? EsriLeaflet.Util.arcgisToGeojson(arcgis.geometry) : null;\n geojson.properties = (arcgis.attributes) ? clone(arcgis.attributes) : null;\n if(arcgis.attributes) {\n geojson.id = arcgis.attributes[idAttribute] || arcgis.attributes.OBJECTID || arcgis.attributes.FID;\n }\n }\n\n return geojson;\n };\n\n // GeoJSON -> ArcGIS\n EsriLeaflet.Util.geojsonToArcGIS = function(geojson, idAttribute){\n idAttribute = idAttribute || 'OBJECTID';\n var spatialReference = { wkid: 4326 };\n var result = {};\n var i;\n\n switch(geojson.type){\n case 'Point':\n result.x = geojson.coordinates[0];\n result.y = geojson.coordinates[1];\n result.spatialReference = spatialReference;\n break;\n case 'MultiPoint':\n result.points = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'LineString':\n result.paths = [geojson.coordinates.slice(0)];\n result.spatialReference = spatialReference;\n break;\n case 'MultiLineString':\n result.paths = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'Polygon':\n result.rings = orientRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'MultiPolygon':\n result.rings = flattenMultiPolygonRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'Feature':\n if(geojson.geometry) {\n result.geometry = EsriLeaflet.Util.geojsonToArcGIS(geojson.geometry, idAttribute);\n }\n result.attributes = (geojson.properties) ? clone(geojson.properties) : {};\n if(geojson.id){\n result.attributes[idAttribute] = geojson.id;\n }\n break;\n case 'FeatureCollection':\n result = [];\n for (i = 0; i < geojson.features.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.features[i], idAttribute));\n }\n break;\n case 'GeometryCollection':\n result = [];\n for (i = 0; i < geojson.geometries.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.geometries[i], idAttribute));\n }\n break;\n }\n\n return result;\n };\n\n EsriLeaflet.Util.responseToFeatureCollection = function(response, idAttribute){\n var objectIdField;\n\n if(idAttribute){\n objectIdField = idAttribute;\n } else if(response.objectIdFieldName){\n objectIdField = response.objectIdFieldName;\n } else if(response.fields) {\n for (var j = 0; j <= response.fields.length - 1; j++) {\n if(response.fields[j].type === 'esriFieldTypeOID') {\n objectIdField = response.fields[j].name;\n break;\n }\n }\n } else {\n objectIdField = 'OBJECTID';\n }\n\n var featureCollection = {\n type: 'FeatureCollection',\n features: []\n };\n var features = response.features || response.results;\n if(features.length){\n for (var i = features.length - 1; i >= 0; i--) {\n featureCollection.features.push(EsriLeaflet.Util.arcgisToGeojson(features[i], objectIdField));\n }\n }\n\n return featureCollection;\n };\n\n // trim url whitespace and add a trailing slash if needed\n EsriLeaflet.Util.cleanUrl = function(url){\n //trim leading and trailing spaces, but not spaces inside the url\n url = url.replace(/^\\s+|\\s+$|\\A\\s+|\\s+\\z/g, '');\n\n //add a trailing slash to the url if the user omitted it\n if(url[url.length-1] !== '/'){\n url += '/';\n }\n\n return url;\n };\n\n EsriLeaflet.Util.isArcgisOnline = function(url){\n /* hosted feature services can emit geojson natively.\n our check for 'geojson' support will need to be revisted\n once the functionality makes its way to ArcGIS Server*/\n return (/\\.arcgis\\.com.*?FeatureServer/g).test(url);\n };\n\n EsriLeaflet.Util.geojsonTypeToArcGIS = function (geoJsonType) {\n var arcgisGeometryType;\n switch (geoJsonType) {\n case 'Point':\n arcgisGeometryType = 'esriGeometryPoint';\n break;\n case 'MultiPoint':\n arcgisGeometryType = 'esriGeometryMultipoint';\n break;\n case 'LineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'MultiLineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'Polygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n case 'MultiPolygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n }\n return arcgisGeometryType;\n };\n\n EsriLeaflet.Util.requestAnimationFrame = L.Util.bind(raf, window);\n\n EsriLeaflet.Util.warn = function (message) {\n if(console && console.warn) {\n console.warn(message);\n }\n };\n\n})(EsriLeaflet);","(function(EsriLeaflet){\n\n var callbacks = 0;\n\n window._EsriLeafletCallbacks = {};\n\n function serialize(params){\n var data = '';\n\n params.f = params.f || 'json';\n\n for (var key in params){\n if(params.hasOwnProperty(key)){\n var param = params[key];\n var type = Object.prototype.toString.call(param);\n var value;\n\n if(data.length){\n data += '&';\n }\n\n if (type === '[object Array]'){\n value = (Object.prototype.toString.call(param[0]) === '[object Object]') ? JSON.stringify(param) : param.join(',');\n } else if (type === '[object Object]') {\n value = JSON.stringify(param);\n } else if (type === '[object Date]'){\n value = param.valueOf();\n } else {\n value = param;\n }\n\n data += encodeURIComponent(key) + '=' + encodeURIComponent(value);\n }\n }\n\n return data;\n }\n\n function createRequest(callback, context){\n var httpRequest = new XMLHttpRequest();\n\n httpRequest.onerror = function(e) {\n httpRequest.onreadystatechange = L.Util.falseFn;\n\n callback.call(context, {\n error: {\n code: 500,\n message: 'XMLHttpRequest error'\n }\n }, null);\n };\n\n httpRequest.onreadystatechange = function(){\n var response;\n var error;\n\n if (httpRequest.readyState === 4) {\n try {\n response = JSON.parse(httpRequest.responseText);\n } catch(e) {\n response = null;\n error = {\n code: 500,\n message: 'Could not parse response as JSON. This could also be caused by a CORS or XMLHttpRequest error.'\n };\n }\n\n if (!error && response.error) {\n error = response.error;\n response = null;\n }\n\n httpRequest.onerror = L.Util.falseFn;\n\n callback.call(context, error, response);\n }\n };\n\n return httpRequest;\n }\n\n // AJAX handlers for CORS (modern browsers) or JSONP (older browsers)\n EsriLeaflet.Request = {\n request: function(url, params, callback, context){\n var paramString = serialize(params);\n var httpRequest = createRequest(callback, context);\n var requestLength = (url + '?' + paramString).length;\n\n // request is less then 2000 characters and the browser supports CORS, make GET request with XMLHttpRequest\n if(requestLength <= 2000 && L.esri.Support.CORS){\n httpRequest.open('GET', url + '?' + paramString);\n httpRequest.send(null);\n\n // request is less more then 2000 characters and the browser supports CORS, make POST request with XMLHttpRequest\n } else if (requestLength > 2000 && L.esri.Support.CORS){\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(paramString);\n\n // request is less more then 2000 characters and the browser does not support CORS, make a JSONP request\n } else if(requestLength <= 2000 && !L.esri.Support.CORS){\n return L.esri.Request.get.JSONP(url, params, callback, context);\n\n // request is longer then 2000 characters and the browser does not support CORS, log a warning\n } else {\n EsriLeaflet.Util.warn('a request to ' + url + ' was longer then 2000 characters and this browser cannot make a cross-domain post request. Please use a proxy http://esri.github.io/esri-leaflet/api-reference/request.html');\n return;\n }\n\n return httpRequest;\n },\n\n post: {\n XMLHTTP: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(serialize(params));\n\n return httpRequest;\n }\n },\n\n get: {\n CORS: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n\n httpRequest.open('GET', url + '?' + serialize(params), true);\n httpRequest.send(null);\n\n return httpRequest;\n },\n JSONP: function(url, params, callback, context){\n var callbackId = 'c' + callbacks;\n\n params.callback = 'window._EsriLeafletCallbacks.' + callbackId;\n\n var script = L.DomUtil.create('script', null, document.body);\n script.type = 'text/javascript';\n script.src = url + '?' + serialize(params);\n script.id = callbackId;\n\n window._EsriLeafletCallbacks[callbackId] = function(response){\n if(window._EsriLeafletCallbacks[callbackId] !== true){\n var error;\n var responseType = Object.prototype.toString.call(response);\n\n if(!(responseType === '[object Object]' || responseType === '[object Array]')){\n error = {\n error: {\n code: 500,\n message: 'Expected array or object as JSONP response'\n }\n };\n response = null;\n }\n\n if (!error && response.error) {\n error = response;\n response = null;\n }\n\n callback.call(context, error, response);\n window._EsriLeafletCallbacks[callbackId] = true;\n }\n };\n\n callbacks++;\n\n return {\n id: callbackId,\n url: script.src,\n abort: function(){\n window._EsriLeafletCallbacks._callback[callbackId]({\n code: 0,\n message: 'Request aborted.'\n });\n }\n };\n }\n }\n };\n\n // choose the correct AJAX handler depending on CORS support\n EsriLeaflet.get = (EsriLeaflet.Support.CORS) ? EsriLeaflet.Request.get.CORS : EsriLeaflet.Request.get.JSONP;\n\n // always use XMLHttpRequest for posts\n EsriLeaflet.post = EsriLeaflet.Request.post.XMLHTTP;\n\n // expose a common request method the uses GET\\POST based on request length\n EsriLeaflet.request = EsriLeaflet.Request.request;\n\n})(EsriLeaflet);","EsriLeaflet.Services.Service = L.Class.extend({\n\n includes: L.Mixin.Events,\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n initialize: function (options) {\n options = options || {};\n this._requestQueue = [];\n this._authenticating = false;\n L.Util.setOptions(this, options);\n this.options.url = EsriLeaflet.Util.cleanUrl(this.options.url);\n },\n\n get: function (path, params, callback, context) {\n return this._request('get', path, params, callback, context);\n },\n\n post: function (path, params, callback, context) {\n return this._request('post', path, params, callback, context);\n },\n\n request: function (path, params, callback, context) {\n return this._request('request', path, params, callback, context);\n },\n\n metadata: function (callback, context) {\n return this._request('get', '', {}, callback, context);\n },\n\n authenticate: function(token){\n this._authenticating = false;\n this.options.token = token;\n this._runQueue();\n return this;\n },\n\n _request: function(method, path, params, callback, context){\n this.fire('requeststart', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n\n var wrappedCallback = this._createServiceCallback(method, path, params, callback, context);\n\n if (this.options.token) {\n params.token = this.options.token;\n }\n\n if (this._authenticating) {\n this._requestQueue.push([method, path, params, callback, context]);\n return;\n } else {\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, wrappedCallback);\n } else {\n return EsriLeaflet[method](url, params, wrappedCallback);\n }\n }\n },\n\n _createServiceCallback: function(method, path, params, callback, context){\n return L.Util.bind(function(error, response){\n\n if (error && (error.code === 499 || error.code === 498)) {\n this._authenticating = true;\n\n this._requestQueue.push([method, path, params, callback, context]);\n\n // fire an event for users to handle and re-authenticate\n this.fire('authenticationrequired', {\n authenticate: L.Util.bind(this.authenticate, this)\n });\n\n // if the user has access to a callback they can handle the auth error\n error.authenticate = L.Util.bind(this.authenticate, this);\n }\n\n callback.call(context, error, response);\n\n if(error) {\n this.fire('requesterror', {\n url: this.options.url + path,\n params: params,\n message: error.message,\n code: error.code,\n method: method\n });\n } else {\n this.fire('requestsuccess', {\n url: this.options.url + path,\n params: params,\n response: response,\n method: method\n });\n }\n\n this.fire('requestend', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n }, this);\n },\n\n _runQueue: function(){\n for (var i = this._requestQueue.length - 1; i >= 0; i--) {\n var request = this._requestQueue[i];\n var method = request.shift();\n this[method].apply(this, request);\n }\n this._requestQueue = [];\n }\n\n});\n\nEsriLeaflet.Services.service = function(params){\n return new EsriLeaflet.Services.Service(params);\n};\n","EsriLeaflet.Services.ImageService = EsriLeaflet.Services.Service.extend({\n\n query: function () {\n return new EsriLeaflet.Tasks.Query(this);\n },\n\n identify: function() {\n return new EsriLeaflet.Tasks.IdentifyImage(this);\n }\n});\n\nEsriLeaflet.Services.imageService = function(params){\n return new EsriLeaflet.Services.ImageService(params);\n};","EsriLeaflet.Tasks.Task = L.Class.extend({\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n //Generate a method for each methodName:paramName in the setters for this task.\n generateSetter: function(param, context){\n return L.Util.bind(function(value){\n this.params[param] = value;\n return this;\n }, context);\n },\n\n initialize: function(endpoint){\n // endpoint can be either a url (and options) for an ArcGIS Rest Service or an instance of EsriLeaflet.Service\n if(endpoint.request && endpoint.options){\n this._service = endpoint;\n L.Util.setOptions(this, endpoint.options);\n } else {\n L.Util.setOptions(this, endpoint);\n this.options.url = L.esri.Util.cleanUrl(endpoint.url);\n }\n\n // clone default params into this object\n this.params = L.Util.extend({}, this.params || {});\n\n // generate setter methods based on the setters object implimented a child class\n if(this.setters){\n for (var setter in this.setters){\n var param = this.setters[setter];\n this[setter] = this.generateSetter(param, this);\n }\n }\n },\n\n token: function(token){\n if(this._service){\n this._service.authenticate(token);\n } else {\n this.params.token = token;\n }\n return this;\n },\n\n request: function(callback, context){\n if(this._service){\n return this._service.request(this.path, this.params, callback, context);\n } else {\n return this._request('request', this.path, this.params, callback, context);\n }\n },\n\n _request: function(method, path, params, callback, context){\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, callback, context);\n } else{\n return EsriLeaflet[method](url, params, callback, context);\n }\n }\n});","EsriLeaflet.Tasks.Query = EsriLeaflet.Tasks.Task.extend({\n setters: {\n 'offset': 'offset',\n 'limit': 'limit',\n 'fields': 'outFields',\n 'precision': 'geometryPrecision',\n 'featureIds': 'objectIds',\n 'returnGeometry': 'returnGeometry',\n 'token': 'token'\n },\n\n path: 'query',\n\n params: {\n returnGeometry: true,\n where: '1=1',\n outSr: 4326,\n outFields: '*'\n },\n\n within: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelContains'; // will make code read layer within geometry, to the api this will reads geometry contains layer\n return this;\n },\n\n intersects: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelIntersects';\n return this;\n },\n\n contains: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelWithin'; // will make code read layer contains geometry, to the api this will reads geometry within layer\n return this;\n },\n\n // crosses: function(geometry){\n // this._setGeometry(geometry);\n // this.params.spatialRel = 'esriSpatialRelCrosses';\n // return this;\n // },\n\n // touches: function(geometry){\n // this._setGeometry(geometry);\n // this.params.spatialRel = 'esriSpatialRelTouches';\n // return this;\n // },\n\n overlaps: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelOverlaps';\n return this;\n },\n\n // only valid for Feature Services running on ArcGIS Server 10.3 or ArcGIS Online\n nearby: function(latlng, radius){\n latlng = L.latLng(latlng);\n this.params.geometry = [latlng.lng, latlng.lat];\n this.params.geometryType = 'esriGeometryPoint';\n this.params.spatialRel = 'esriSpatialRelIntersects';\n this.params.units = 'esriSRUnit_Meter';\n this.params.distance = radius;\n this.params.inSr = 4326;\n return this;\n },\n\n where: function(string){\n // instead of converting double-quotes to single quotes, pass as is, and provide a more informative message if a 400 is encountered\n this.params.where = string;\n return this;\n },\n\n between: function(start, end){\n this.params.time = [start.valueOf(), end.valueOf()];\n return this;\n },\n\n simplify: function(map, factor){\n var mapWidth = Math.abs(map.getBounds().getWest() - map.getBounds().getEast());\n this.params.maxAllowableOffset = (mapWidth / map.getSize().y) * factor;\n return this;\n },\n\n orderBy: function(fieldName, order){\n order = order || 'ASC';\n this.params.orderByFields = (this.params.orderByFields) ? this.params.orderByFields + ',' : '';\n this.params.orderByFields += ([fieldName, order]).join(' ');\n return this;\n },\n\n run: function(callback, context){\n this._cleanParams();\n\n // if the service is hosted on arcgis online request geojson directly\n if(EsriLeaflet.Util.isArcgisOnline(this.options.url)){\n this.params.f = 'geojson';\n\n return this.request(function(error, response){\n this._trapSQLerrors(error);\n callback.call(context, error, response, response);\n }, this);\n\n // otherwise convert it in the callback then pass it on\n } else {\n return this.request(function(error, response){\n this._trapSQLerrors(error);\n callback.call(context, error, (response && EsriLeaflet.Util.responseToFeatureCollection(response)), response);\n }, this);\n }\n },\n\n count: function(callback, context){\n this._cleanParams();\n this.params.returnCountOnly = true;\n return this.request(function(error, response){\n callback.call(this, error, (response && response.count), response);\n }, context);\n },\n\n ids: function(callback, context){\n this._cleanParams();\n this.params.returnIdsOnly = true;\n return this.request(function(error, response){\n callback.call(this, error, (response && response.objectIds), response);\n }, context);\n },\n\n // only valid for Feature Services running on ArcGIS Server 10.3 or ArcGIS Online\n bounds: function(callback, context){\n this._cleanParams();\n this.params.returnExtentOnly = true;\n return this.request(function(error, response){\n callback.call(context, error, (response && response.extent && EsriLeaflet.Util.extentToBounds(response.extent)), response);\n }, context);\n },\n\n // only valid for image services\n pixelSize: function(point){\n point = L.point(point);\n this.params.pixelSize = [point.x,point.y];\n return this;\n },\n\n // only valid for map services\n layer: function(layer){\n this.path = layer + '/query';\n return this;\n },\n\n _trapSQLerrors: function(error){\n if (error){\n if (error.code === '400'){\n EsriLeaflet.Util.warn('one common syntax error in query requests is encasing string values in double quotes instead of single quotes');\n }\n }\n },\n\n _cleanParams: function(){\n delete this.params.returnIdsOnly;\n delete this.params.returnExtentOnly;\n delete this.params.returnCountOnly;\n },\n\n _setGeometry: function(geometry) {\n this.params.inSr = 4326;\n\n // convert bounds to extent and finish\n if ( geometry instanceof L.LatLngBounds ) {\n // set geometry + geometryType\n this.params.geometry = EsriLeaflet.Util.boundsToExtent(geometry);\n this.params.geometryType = 'esriGeometryEnvelope';\n return;\n }\n\n // convert L.Marker > L.LatLng\n if(geometry.getLatLng){\n geometry = geometry.getLatLng();\n }\n\n // convert L.LatLng to a geojson point and continue;\n if (geometry instanceof L.LatLng) {\n geometry = {\n type: 'Point',\n coordinates: [geometry.lng, geometry.lat]\n };\n }\n\n // handle L.GeoJSON, pull out the first geometry\n if ( geometry instanceof L.GeoJSON ) {\n //reassign geometry to the GeoJSON value (we are assuming that only one feature is present)\n geometry = geometry.getLayers()[0].feature.geometry;\n this.params.geometry = EsriLeaflet.Util.geojsonToArcGIS(geometry);\n this.params.geometryType = EsriLeaflet.Util.geojsonTypeToArcGIS(geometry.type);\n }\n\n // Handle L.Polyline and L.Polygon\n if (geometry.toGeoJSON) {\n geometry = geometry.toGeoJSON();\n }\n\n // handle GeoJSON feature by pulling out the geometry\n if ( geometry.type === 'Feature' ) {\n // get the geometry of the geojson feature\n geometry = geometry.geometry;\n }\n\n // confirm that our GeoJSON is a point, line or polygon\n if ( geometry.type === 'Point' || geometry.type === 'LineString' || geometry.type === 'Polygon') {\n this.params.geometry = EsriLeaflet.Util.geojsonToArcGIS(geometry);\n this.params.geometryType = EsriLeaflet.Util.geojsonTypeToArcGIS(geometry.type);\n return;\n }\n\n // warn the user if we havn't found a\n /* global console */\n EsriLeaflet.Util.warn('invalid geometry passed to spatial query. Should be an L.LatLng, L.LatLngBounds or L.Marker or a GeoJSON Point Line or Polygon object');\n\n return;\n }\n});\n\nEsriLeaflet.Tasks.query = function(params){\n return new EsriLeaflet.Tasks.Query(params);\n};","EsriLeaflet.Tasks.Identify = EsriLeaflet.Tasks.Task.extend({\n path: 'identify',\n\n between: function(start, end){\n this.params.time = [start.valueOf(), end.valueOf()];\n return this;\n }\n});\n","EsriLeaflet.Layers.RasterLayer = L.Class.extend({\n includes: L.Mixin.Events,\n\n options: {\n opacity: 1,\n position: 'front',\n f: 'image'\n },\n\n onAdd: function (map) {\n this._map = map;\n\n this._update = L.Util.limitExecByInterval(this._update, this.options.updateInterval, this);\n\n if (map.options.crs && map.options.crs.code) {\n var sr = map.options.crs.code.split(':')[1];\n this.options.bboxSR = sr;\n this.options.imageSR = sr;\n }\n\n map.on('moveend', this._update, this);\n\n // if we had an image loaded and it matches the\n // current bounds show the image otherwise remove it\n if(this._currentImage && this._currentImage._bounds.equals(this._map.getBounds())){\n map.addLayer(this._currentImage);\n } else if(this._currentImage) {\n this._map.removeLayer(this._currentImage);\n this._currentImage = null;\n }\n\n this._update();\n\n if(this._popup){\n this._map.on('click', this._getPopupData, this);\n this._map.on('dblclick', this._resetPopupState, this);\n }\n },\n\n bindPopup: function(fn, popupOptions){\n this._shouldRenderPopup = false;\n this._lastClick = false;\n this._popup = L.popup(popupOptions);\n this._popupFunction = fn;\n if(this._map){\n this._map.on('click', this._getPopupData, this);\n this._map.on('dblclick', this._resetPopupState, this);\n }\n return this;\n },\n\n unbindPopup: function(){\n if(this._map){\n this._map.closePopup(this._popup);\n this._map.off('click', this._getPopupData, this);\n this._map.off('dblclick', this._resetPopupState, this);\n }\n this._popup = false;\n return this;\n },\n\n onRemove: function (map) {\n if (this._currentImage) {\n this._map.removeLayer(this._currentImage);\n }\n\n if(this._popup){\n this._map.off('click', this._getPopupData, this);\n this._map.off('dblclick', this._resetPopupState, this);\n }\n\n this._map.off('moveend', this._update, this);\n this._map = null;\n },\n\n addTo: function(map){\n map.addLayer(this);\n return this;\n },\n\n removeFrom: function(map){\n map.removeLayer(this);\n return this;\n },\n\n bringToFront: function(){\n this.options.position = 'front';\n if(this._currentImage){\n this._currentImage.bringToFront();\n }\n return this;\n },\n\n bringToBack: function(){\n this.options.position = 'back';\n if(this._currentImage){\n this._currentImage.bringToBack();\n }\n return this;\n },\n\n getAttribution: function () {\n return this.options.attribution;\n },\n\n getOpacity: function(){\n return this.options.opacity;\n },\n\n setOpacity: function(opacity){\n this.options.opacity = opacity;\n this._currentImage.setOpacity(opacity);\n return this;\n },\n\n getTimeRange: function(){\n return [this.options.from, this.options.to];\n },\n\n setTimeRange: function(from, to){\n this.options.from = from;\n this.options.to = to;\n this._update();\n return this;\n },\n\n metadata: function(callback, context){\n this._service.metadata(callback, context);\n return this;\n },\n\n authenticate: function(token){\n this._service.authenticate(token);\n return this;\n },\n\n _renderImage: function(url, bounds){\n if(this._map){\n // create a new image overlay and add it to the map\n // to start loading the image\n // opacity is 0 while the image is loading\n var image = new L.ImageOverlay(url, bounds, {\n opacity: 0\n }).addTo(this._map);\n\n // once the image loads\n image.once('load', function(e){\n var newImage = e.target;\n var oldImage = this._currentImage;\n\n // if the bounds of this image matches the bounds that\n // _renderImage was called with and we have a map with the same bounds\n // hide the old image if there is one and set the opacity\n // of the new image otherwise remove the new image\n if(newImage._bounds.equals(bounds) && newImage._bounds.equals(this._map.getBounds())){\n this._currentImage = newImage;\n\n if(this.options.position === 'front'){\n this.bringToFront();\n } else {\n this.bringToBack();\n }\n\n if(this._map && this._currentImage._map){\n this._currentImage.setOpacity(this.options.opacity);\n } else {\n this._currentImage._map.removeLayer(this._currentImage);\n }\n\n if(oldImage && this._map) {\n this._map.removeLayer(oldImage);\n }\n\n if(oldImage && oldImage._map){\n oldImage._map.removeLayer(oldImage);\n }\n } else {\n this._map.removeLayer(newImage);\n }\n\n this.fire('load', {\n bounds: bounds\n });\n\n }, this);\n\n this.fire('loading', {\n bounds: bounds\n });\n }\n },\n\n _update: function () {\n if(!this._map){\n return;\n }\n\n var zoom = this._map.getZoom();\n var bounds = this._map.getBounds();\n\n if(this._animatingZoom){\n return;\n }\n\n if (this._map._panTransition && this._map._panTransition._inProgress) {\n return;\n }\n\n if (zoom > this.options.maxZoom || zoom < this.options.minZoom) {\n if (this._currentImage) {\n this._currentImage._map.removeLayer(this._currentImage);\n }\n return;\n }\n var params = this._buildExportParams();\n\n this._requestExport(params, bounds);\n },\n\n // TODO: refactor these into raster layer\n _renderPopup: function(latlng, error, results, response){\n latlng = L.latLng(latlng);\n if(this._shouldRenderPopup && this._lastClick.equals(latlng)){\n //add the popup to the map where the mouse was clicked at\n var content = this._popupFunction(error, results, response);\n if (content) {\n this._popup.setLatLng(latlng).setContent(content).openOn(this._map);\n }\n }\n },\n\n _resetPopupState: function(e){\n this._shouldRenderPopup = false;\n this._lastClick = e.latlng;\n },\n\n // from https://github.com/Leaflet/Leaflet/blob/v0.7.2/src/layer/FeatureGroup.js\n // @TODO remove at Leaflet 0.8\n _propagateEvent: function (e) {\n e = L.extend({\n layer: e.target,\n target: this\n }, e);\n this.fire(e.type, e);\n }\n});\n","EsriLeaflet.Layers.ImageMapLayer = EsriLeaflet.Layers.RasterLayer.extend({\n\n options: {\n updateInterval: 150,\n format: 'jpgpng',\n transparent: true,\n f: 'json'\n },\n\n query: function(){\n return this._service.query();\n },\n\n identify: function(){\n return this._service.identify();\n },\n\n initialize: function (options) {\n options.url = EsriLeaflet.Util.cleanUrl(options.url);\n this._service = new EsriLeaflet.Services.ImageService(options);\n this._service.on('authenticationrequired requeststart requestend requesterror requestsuccess', this._propagateEvent, this);\n L.Util.setOptions(this, options);\n },\n\n setPixelType: function (pixelType) {\n this.options.pixelType = pixelType;\n this._update();\n return this;\n },\n\n getPixelType: function () {\n return this.options.pixelType;\n },\n\n setBandIds: function (bandIds) {\n if (L.Util.isArray(bandIds)) {\n this.options.bandIds = bandIds.join(',');\n } else {\n this.options.bandIds = bandIds.toString();\n }\n this._update();\n return this;\n },\n\n getBandIds: function () {\n return this.options.bandIds;\n },\n\n setNoData: function (noData, noDataInterpretation) {\n if (L.Util.isArray(noData)) {\n this.options.noData = noData.join(',');\n } else {\n this.options.noData = noData.toString();\n }\n if (noDataInterpretation) {\n this.options.noDataInterpretation = noDataInterpretation;\n }\n this._update();\n return this;\n },\n\n getNoData: function () {\n return this.options.noData;\n },\n\n getNoDataInterpretation: function () {\n return this.options.noDataInterpretation;\n },\n\n setRenderingRule: function(renderingRule) {\n this.options.renderingRule = renderingRule;\n this._update();\n },\n\n getRenderingRule: function() {\n return this.options.renderingRule;\n },\n\n setMosaicRule: function(mosaicRule) {\n this.options.mosaicRule = mosaicRule;\n this._update();\n },\n\n getMosaicRule: function() {\n return this.options.mosaicRule;\n },\n\n _getPopupData: function(e){\n var callback = L.Util.bind(function(error, results, response) {\n if(error) { return; } // we really can't do anything here but authenticate or requesterror will fire\n setTimeout(L.Util.bind(function(){\n this._renderPopup(e.latlng, error, results, response);\n }, this), 300);\n }, this);\n\n var identifyRequest = this.identify().at(e.latlng);\n\n // set mosaic rule for identify task if it is set for layer\n if (this.options.mosaicRule) {\n identifyRequest.setMosaicRule(this.options.mosaicRule);\n // @TODO: force return catalog items too?\n }\n\n // @TODO: set rendering rule? Not sure,\n // sometimes you want raw pixel values\n // if (this.options.renderingRule) {\n // identifyRequest.setRenderingRule(this.options.renderingRule);\n // }\n\n identifyRequest.run(callback);\n\n // set the flags to show the popup\n this._shouldRenderPopup = true;\n this._lastClick = e.latlng;\n },\n\n _buildExportParams: function () {\n var bounds = this._map.getBounds();\n var size = this._map.getSize();\n var ne = this._map.options.crs.project(bounds._northEast);\n var sw = this._map.options.crs.project(bounds._southWest);\n\n var params = {\n bbox: [sw.x, sw.y, ne.x, ne.y].join(','),\n size: size.x + ',' + size.y,\n format: this.options.format,\n transparent: this.options.transparent,\n bboxSR: this.options.bboxSR,\n imageSR: this.options.imageSR\n };\n\n if (this.options.from && this.options.to) {\n params.time = this.options.from.valueOf() + ',' + this.options.to.valueOf();\n }\n\n if (this.options.pixelType) {\n params.pixelType = this.options.pixelType;\n }\n\n if (this.options.interpolation) {\n params.interpolation = this.options.interpolation;\n }\n\n if (this.options.compressionQuality) {\n params.compressionQuality = this.options.compressionQuality;\n }\n\n if (this.options.bandIds) {\n params.bandIds = this.options.bandIds;\n }\n\n if (this.options.noData) {\n params.noData = this.options.noData;\n }\n\n if (this.options.noDataInterpretation) {\n params.noDataInterpretation = this.options.noDataInterpretation;\n }\n\n if (this._service.options.token) {\n params.token = this._service.options.token;\n }\n\n if(this.options.renderingRule) {\n params.renderingRule = JSON.stringify(this.options.renderingRule);\n }\n\n if(this.options.mosaicRule) {\n params.mosaicRule = JSON.stringify(this.options.mosaicRule);\n }\n\n return params;\n },\n\n _requestExport: function (params, bounds) {\n if (this.options.f === 'json') {\n this._service.request('exportImage', params, function(error, response){\n if(error) { return; } // we really can't do anything here but authenticate or requesterror will fire\n this._renderImage(response.href, bounds);\n }, this);\n } else {\n params.f = 'image';\n this._renderImage(this.options.url + 'exportImage' + L.Util.getParamString(params), bounds);\n }\n }\n});\n\nEsriLeaflet.ImageMapLayer = EsriLeaflet.Layers.ImageMapLayer;\n\nEsriLeaflet.Layers.imageMapLayer = function (options) {\n return new EsriLeaflet.Layers.ImageMapLayer(options);\n};\n\nEsriLeaflet.imageMapLayer = function (options) {\n return new EsriLeaflet.Layers.ImageMapLayer(options);\n};\n"]} \ No newline at end of file diff --git a/dist/builds/image-service/esri-leaflet-image-service.js b/dist/builds/image-service/esri-leaflet-image-service.js index bc52b4359..b8ac972b4 100644 --- a/dist/builds/image-service/esri-leaflet-image-service.js +++ b/dist/builds/image-service/esri-leaflet-image-service.js @@ -1,5 +1,5 @@ -/*! esri-leaflet - v1.0.2 - 2015-12-31 -* Copyright (c) 2015 Environmental Systems Research Institute, Inc. +/*! esri-leaflet - v1.0.3 - 2016-02-22 +* Copyright (c) 2016 Environmental Systems Research Institute, Inc. * Apache License*/ (function (factory) { //define an AMD module that relies on 'leaflet' @@ -17,7 +17,7 @@ } }(function (L) { -var EsriLeaflet={VERSION:"1.0.2",Layers:{},Services:{},Controls:{},Tasks:{},Util:{},Support:{CORS:!!(window.XMLHttpRequest&&"withCredentials"in new XMLHttpRequest),pointerEvents:""===document.documentElement.style.pointerEvents}};"undefined"!=typeof window&&window.L&&(window.L.esri=EsriLeaflet),function(a){function b(a){var b={};for(var c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);return b}function c(a,b){for(var c=0;cd;d++)b=a[d+1],c+=(b[0]-f[0])*(b[1]+f[1]),f=b;return c>=0}function f(a,b,c,d){var e=(d[0]-c[0])*(a[1]-c[1])-(d[1]-c[1])*(a[0]-c[0]),f=(b[0]-a[0])*(a[1]-c[1])-(b[1]-a[1])*(a[0]-c[0]),g=(d[1]-c[1])*(b[0]-a[0])-(d[0]-c[0])*(b[1]-a[1]);if(0!==g){var h=e/g,i=f/g;if(h>=0&&1>=h&&i>=0&&1>=i)return!0}return!1}function g(a,b){for(var c=0;c=0;b--)if(c=h[b][0],i(c,f)){h[b].push(f),o=!0;break}o||n.push(f)}for(;n.length;){f=n.pop();var p=!1;for(b=h.length-1;b>=0;b--)if(c=h[b][0],g(c,f)){h[b].push(f),p=!0;break}p||h.push([f.reverse()])}return 1===h.length?{type:"Polygon",coordinates:h[0]}:{type:"MultiPolygon",coordinates:h}}function k(a){var b=[],c=a.slice(0),f=d(c.shift().slice(0));if(f.length>=4){e(f)||f.reverse(),b.push(f);for(var g=0;g=4&&(e(h)&&h.reverse(),b.push(h))}}return b}function l(a){for(var b=[],c=0;c=0;e--){var f=d[e].slice(0);b.push(f)}return b}var m=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.msRequestAnimationFrame||function(a){return window.setTimeout(a,1e3/60)};a.Util.extentToBounds=function(a){var b=new L.LatLng(a.ymin,a.xmin),c=new L.LatLng(a.ymax,a.xmax);return new L.LatLngBounds(b,c)},a.Util.boundsToExtent=function(a){return a=L.latLngBounds(a),{xmin:a.getSouthWest().lng,ymin:a.getSouthWest().lat,xmax:a.getNorthEast().lng,ymax:a.getNorthEast().lat,spatialReference:{wkid:4326}}},a.Util.arcgisToGeojson=function(c,d){var e={};return"number"==typeof c.x&&"number"==typeof c.y&&(e.type="Point",e.coordinates=[c.x,c.y]),c.points&&(e.type="MultiPoint",e.coordinates=c.points.slice(0)),c.paths&&(1===c.paths.length?(e.type="LineString",e.coordinates=c.paths[0].slice(0)):(e.type="MultiLineString",e.coordinates=c.paths.slice(0))),c.rings&&(e=j(c.rings.slice(0))),(c.geometry||c.attributes)&&(e.type="Feature",e.geometry=c.geometry?a.Util.arcgisToGeojson(c.geometry):null,e.properties=c.attributes?b(c.attributes):null,c.attributes&&(e.id=c.attributes[d]||c.attributes.OBJECTID||c.attributes.FID)),e},a.Util.geojsonToArcGIS=function(c,d){d=d||"OBJECTID";var e,f={wkid:4326},g={};switch(c.type){case"Point":g.x=c.coordinates[0],g.y=c.coordinates[1],g.spatialReference=f;break;case"MultiPoint":g.points=c.coordinates.slice(0),g.spatialReference=f;break;case"LineString":g.paths=[c.coordinates.slice(0)],g.spatialReference=f;break;case"MultiLineString":g.paths=c.coordinates.slice(0),g.spatialReference=f;break;case"Polygon":g.rings=k(c.coordinates.slice(0)),g.spatialReference=f;break;case"MultiPolygon":g.rings=l(c.coordinates.slice(0)),g.spatialReference=f;break;case"Feature":c.geometry&&(g.geometry=a.Util.geojsonToArcGIS(c.geometry,d)),g.attributes=c.properties?b(c.properties):{},c.id&&(g.attributes[d]=c.id);break;case"FeatureCollection":for(g=[],e=0;e=0;h--)f.features.push(a.Util.arcgisToGeojson(g[h],d));return f},a.Util.cleanUrl=function(a){return a=a.replace(/^\s+|\s+$|\A\s+|\s+\z/g,""),"/"!==a[a.length-1]&&(a+="/"),a},a.Util.isArcgisOnline=function(a){return/\.arcgis\.com.*?FeatureServer/g.test(a)},a.Util.geojsonTypeToArcGIS=function(a){var b;switch(a){case"Point":b="esriGeometryPoint";break;case"MultiPoint":b="esriGeometryMultipoint";break;case"LineString":b="esriGeometryPolyline";break;case"MultiLineString":b="esriGeometryPolyline";break;case"Polygon":b="esriGeometryPolygon";break;case"MultiPolygon":b="esriGeometryPolygon"}return b},a.Util.requestAnimationFrame=L.Util.bind(m,window),a.Util.warn=function(a){console&&console.warn&&console.warn(a)}}(EsriLeaflet),function(a){function b(a){var b="";a.f=a.f||"json";for(var c in a)if(a.hasOwnProperty(c)){var d,e=a[c],f=Object.prototype.toString.call(e);b.length&&(b+="&"),d="[object Array]"===f?"[object Object]"===Object.prototype.toString.call(e[0])?JSON.stringify(e):e.join(","):"[object Object]"===f?JSON.stringify(e):"[object Date]"===f?e.valueOf():e,b+=encodeURIComponent(c)+"="+encodeURIComponent(d)}return b}function c(a,b){var c=new XMLHttpRequest;return c.onerror=function(d){c.onreadystatechange=L.Util.falseFn,a.call(b,{error:{code:500,message:"XMLHttpRequest error"}},null)},c.onreadystatechange=function(){var d,e;if(4===c.readyState){try{d=JSON.parse(c.responseText)}catch(f){d=null,e={code:500,message:"Could not parse response as JSON. This could also be caused by a CORS or XMLHttpRequest error."}}!e&&d.error&&(e=d.error,d=null),c.onerror=L.Util.falseFn,a.call(b,e,d)}},c}var d=0;window._EsriLeafletCallbacks={},a.Request={request:function(d,e,f,g){var h=b(e),i=c(f,g),j=(d+"?"+h).length;if(2e3>=j&&L.esri.Support.CORS)i.open("GET",d+"?"+h),i.send(null);else{if(!(j>2e3&&L.esri.Support.CORS))return 2e3>=j&&!L.esri.Support.CORS?L.esri.Request.get.JSONP(d,e,f,g):void a.Util.warn("a request to "+d+" was longer then 2000 characters and this browser cannot make a cross-domain post request. Please use a proxy http://esri.github.io/esri-leaflet/api-reference/request.html");i.open("POST",d),i.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),i.send(h)}return i},post:{XMLHTTP:function(a,d,e,f){var g=c(e,f);return g.open("POST",a),g.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),g.send(b(d)),g}},get:{CORS:function(a,d,e,f){var g=c(e,f);return g.open("GET",a+"?"+b(d),!0),g.send(null),g},JSONP:function(a,c,e,f){var g="c"+d;c.callback="window._EsriLeafletCallbacks."+g;var h=L.DomUtil.create("script",null,document.body);return h.type="text/javascript",h.src=a+"?"+b(c),h.id=g,window._EsriLeafletCallbacks[g]=function(a){if(window._EsriLeafletCallbacks[g]!==!0){var b,c=Object.prototype.toString.call(a);"[object Object]"!==c&&"[object Array]"!==c&&(b={error:{code:500,message:"Expected array or object as JSONP response"}},a=null),!b&&a.error&&(b=a,a=null),e.call(f,b,a),window._EsriLeafletCallbacks[g]=!0}},d++,{id:g,url:h.src,abort:function(){window._EsriLeafletCallbacks._callback[g]({code:0,message:"Request aborted."})}}}}},a.get=a.Support.CORS?a.Request.get.CORS:a.Request.get.JSONP,a.post=a.Request.post.XMLHTTP,a.request=a.Request.request}(EsriLeaflet),EsriLeaflet.Services.Service=L.Class.extend({includes:L.Mixin.Events,options:{proxy:!1,useCors:EsriLeaflet.Support.CORS},initialize:function(a){a=a||{},this._requestQueue=[],this._authenticating=!1,L.Util.setOptions(this,a),this.options.url=EsriLeaflet.Util.cleanUrl(this.options.url)},get:function(a,b,c,d){return this._request("get",a,b,c,d)},post:function(a,b,c,d){return this._request("post",a,b,c,d)},request:function(a,b,c,d){return this._request("request",a,b,c,d)},metadata:function(a,b){return this._request("get","",{},a,b)},authenticate:function(a){return this._authenticating=!1,this.options.token=a,this._runQueue(),this},_request:function(a,b,c,d,e){this.fire("requeststart",{url:this.options.url+b,params:c,method:a});var f=this._createServiceCallback(a,b,c,d,e);if(this.options.token&&(c.token=this.options.token),this._authenticating)return void this._requestQueue.push([a,b,c,d,e]);var g=this.options.proxy?this.options.proxy+"?"+this.options.url+b:this.options.url+b;return"get"!==a&&"request"!==a||this.options.useCors?EsriLeaflet[a](g,c,f):EsriLeaflet.Request.get.JSONP(g,c,f)},_createServiceCallback:function(a,b,c,d,e){return L.Util.bind(function(f,g){!f||499!==f.code&&498!==f.code||(this._authenticating=!0,this._requestQueue.push([a,b,c,d,e]),this.fire("authenticationrequired",{authenticate:L.Util.bind(this.authenticate,this)}),f.authenticate=L.Util.bind(this.authenticate,this)),d.call(e,f,g),f?this.fire("requesterror",{url:this.options.url+b,params:c,message:f.message,code:f.code,method:a}):this.fire("requestsuccess",{url:this.options.url+b,params:c,response:g,method:a}),this.fire("requestend",{url:this.options.url+b,params:c,method:a})},this)},_runQueue:function(){for(var a=this._requestQueue.length-1;a>=0;a--){var b=this._requestQueue[a],c=b.shift();this[c].apply(this,b)}this._requestQueue=[]}}),EsriLeaflet.Services.service=function(a){return new EsriLeaflet.Services.Service(a)},EsriLeaflet.Services.ImageService=EsriLeaflet.Services.Service.extend({query:function(){return new EsriLeaflet.Tasks.Query(this)},identify:function(){return new EsriLeaflet.Tasks.IdentifyImage(this)}}),EsriLeaflet.Services.imageService=function(a){return new EsriLeaflet.Services.ImageService(a)},EsriLeaflet.Tasks.Task=L.Class.extend({options:{proxy:!1,useCors:EsriLeaflet.Support.CORS},generateSetter:function(a,b){return L.Util.bind(function(b){return this.params[a]=b,this},b)},initialize:function(a){if(a.request&&a.options?(this._service=a,L.Util.setOptions(this,a.options)):(L.Util.setOptions(this,a),this.options.url=L.esri.Util.cleanUrl(a.url)),this.params=L.Util.extend({},this.params||{}),this.setters)for(var b in this.setters){var c=this.setters[b];this[b]=this.generateSetter(c,this)}},token:function(a){return this._service?this._service.authenticate(a):this.params.token=a,this},request:function(a,b){return this._service?this._service.request(this.path,this.params,a,b):this._request("request",this.path,this.params,a,b)},_request:function(a,b,c,d,e){var f=this.options.proxy?this.options.proxy+"?"+this.options.url+b:this.options.url+b;return"get"!==a&&"request"!==a||this.options.useCors?EsriLeaflet[a](f,c,d,e):EsriLeaflet.Request.get.JSONP(f,c,d,e)}}),EsriLeaflet.Tasks.Query=EsriLeaflet.Tasks.Task.extend({setters:{offset:"offset",limit:"limit",fields:"outFields",precision:"geometryPrecision",featureIds:"objectIds",returnGeometry:"returnGeometry",token:"token"},path:"query",params:{returnGeometry:!0,where:"1=1",outSr:4326,outFields:"*"},within:function(a){return this._setGeometry(a),this.params.spatialRel="esriSpatialRelContains",this},intersects:function(a){return this._setGeometry(a),this.params.spatialRel="esriSpatialRelIntersects",this},contains:function(a){return this._setGeometry(a),this.params.spatialRel="esriSpatialRelWithin",this},overlaps:function(a){return this._setGeometry(a),this.params.spatialRel="esriSpatialRelOverlaps",this},nearby:function(a,b){return a=L.latLng(a),this.params.geometry=[a.lng,a.lat],this.params.geometryType="esriGeometryPoint",this.params.spatialRel="esriSpatialRelIntersects",this.params.units="esriSRUnit_Meter",this.params.distance=b,this.params.inSr=4326,this},where:function(a){return this.params.where=a,this},between:function(a,b){return this.params.time=[a.valueOf(),b.valueOf()],this},simplify:function(a,b){var c=Math.abs(a.getBounds().getWest()-a.getBounds().getEast());return this.params.maxAllowableOffset=c/a.getSize().y*b,this},orderBy:function(a,b){return b=b||"ASC",this.params.orderByFields=this.params.orderByFields?this.params.orderByFields+",":"",this.params.orderByFields+=[a,b].join(" "),this},run:function(a,b){return this._cleanParams(),EsriLeaflet.Util.isArcgisOnline(this.options.url)?(this.params.f="geojson",this.request(function(c,d){this._trapSQLerrors(c),a.call(b,c,d,d)},this)):this.request(function(c,d){this._trapSQLerrors(c),a.call(b,c,d&&EsriLeaflet.Util.responseToFeatureCollection(d),d)},this)},count:function(a,b){return this._cleanParams(),this.params.returnCountOnly=!0,this.request(function(b,c){a.call(this,b,c&&c.count,c)},b)},ids:function(a,b){return this._cleanParams(),this.params.returnIdsOnly=!0,this.request(function(b,c){a.call(this,b,c&&c.objectIds,c)},b)},bounds:function(a,b){return this._cleanParams(),this.params.returnExtentOnly=!0,this.request(function(c,d){a.call(b,c,d&&d.extent&&EsriLeaflet.Util.extentToBounds(d.extent),d)},b)},pixelSize:function(a){return a=L.point(a),this.params.pixelSize=[a.x,a.y],this},layer:function(a){return this.path=a+"/query",this},_trapSQLerrors:function(a){a&&"400"===a.code&&EsriLeaflet.Util.warn("one common syntax error in query requests is encasing string values in double quotes instead of single quotes")},_cleanParams:function(){delete this.params.returnIdsOnly,delete this.params.returnExtentOnly,delete this.params.returnCountOnly},_setGeometry:function(a){return this.params.inSr=4326,a instanceof L.LatLngBounds?(this.params.geometry=EsriLeaflet.Util.boundsToExtent(a),void(this.params.geometryType="esriGeometryEnvelope")):(a.getLatLng&&(a=a.getLatLng()),a instanceof L.LatLng&&(a={type:"Point",coordinates:[a.lng,a.lat]}),a instanceof L.GeoJSON&&(a=a.getLayers()[0].feature.geometry,this.params.geometry=EsriLeaflet.Util.geojsonToArcGIS(a),this.params.geometryType=EsriLeaflet.Util.geojsonTypeToArcGIS(a.type)),a.toGeoJSON&&(a=a.toGeoJSON()),"Feature"===a.type&&(a=a.geometry),"Point"===a.type||"LineString"===a.type||"Polygon"===a.type?(this.params.geometry=EsriLeaflet.Util.geojsonToArcGIS(a),void(this.params.geometryType=EsriLeaflet.Util.geojsonTypeToArcGIS(a.type))):void EsriLeaflet.Util.warn("invalid geometry passed to spatial query. Should be an L.LatLng, L.LatLngBounds or L.Marker or a GeoJSON Point Line or Polygon object"))}}),EsriLeaflet.Tasks.query=function(a){return new EsriLeaflet.Tasks.Query(a)},EsriLeaflet.Tasks.Identify=EsriLeaflet.Tasks.Task.extend({path:"identify",between:function(a,b){return this.params.time=[a.valueOf(),b.valueOf()],this}}),EsriLeaflet.Layers.RasterLayer=L.Class.extend({includes:L.Mixin.Events,options:{opacity:1,position:"front",f:"image"},onAdd:function(a){if(this._map=a,this._update=L.Util.limitExecByInterval(this._update,this.options.updateInterval,this),a.options.crs&&a.options.crs.code){var b=a.options.crs.code.split(":")[1];this.options.bboxSR=b,this.options.imageSR=b}a.on("moveend",this._update,this),this._currentImage&&this._currentImage._bounds.equals(this._map.getBounds())?a.addLayer(this._currentImage):this._currentImage&&(this._map.removeLayer(this._currentImage),this._currentImage=null),this._update(),this._popup&&(this._map.on("click",this._getPopupData,this),this._map.on("dblclick",this._resetPopupState,this))},bindPopup:function(a,b){return this._shouldRenderPopup=!1,this._lastClick=!1,this._popup=L.popup(b),this._popupFunction=a,this._map&&(this._map.on("click",this._getPopupData,this),this._map.on("dblclick",this._resetPopupState,this)),this},unbindPopup:function(){return this._map&&(this._map.closePopup(this._popup),this._map.off("click",this._getPopupData,this),this._map.off("dblclick",this._resetPopupState,this)),this._popup=!1,this},onRemove:function(a){this._currentImage&&this._map.removeLayer(this._currentImage),this._popup&&(this._map.off("click",this._getPopupData,this),this._map.off("dblclick",this._resetPopupState,this)),this._map.off("moveend",this._update,this),this._map=null},addTo:function(a){return a.addLayer(this),this},removeFrom:function(a){return a.removeLayer(this),this},bringToFront:function(){return this.options.position="front",this._currentImage&&this._currentImage.bringToFront(),this},bringToBack:function(){return this.options.position="back",this._currentImage&&this._currentImage.bringToBack(),this},getAttribution:function(){return this.options.attribution},getOpacity:function(){return this.options.opacity},setOpacity:function(a){return this.options.opacity=a,this._currentImage.setOpacity(a),this},getTimeRange:function(){return[this.options.from,this.options.to]},setTimeRange:function(a,b){return this.options.from=a,this.options.to=b,this._update(),this},metadata:function(a,b){return this._service.metadata(a,b),this},authenticate:function(a){return this._service.authenticate(a),this},_renderImage:function(a,b){if(this._map){var c=new L.ImageOverlay(a,b,{opacity:0}).addTo(this._map);c.once("load",function(a){var c=a.target,d=this._currentImage;c._bounds.equals(b)&&c._bounds.equals(this._map.getBounds())?(this._currentImage=c,"front"===this.options.position?this.bringToFront():this.bringToBack(),this._map&&this._currentImage._map?this._currentImage.setOpacity(this.options.opacity):this._currentImage._map.removeLayer(this._currentImage),d&&this._map&&this._map.removeLayer(d),d&&d._map&&d._map.removeLayer(d)):this._map.removeLayer(c),this.fire("load",{bounds:b})},this),this.fire("loading",{bounds:b})}},_update:function(){if(this._map){var a=this._map.getZoom(),b=this._map.getBounds();if(!this._animatingZoom&&!(this._map._panTransition&&this._map._panTransition._inProgress||a>this.options.maxZoom||ad;d++)b=a[d+1],c+=(b[0]-f[0])*(b[1]+f[1]),f=b;return c>=0}function f(a,b,c,d){var e=(d[0]-c[0])*(a[1]-c[1])-(d[1]-c[1])*(a[0]-c[0]),f=(b[0]-a[0])*(a[1]-c[1])-(b[1]-a[1])*(a[0]-c[0]),g=(d[1]-c[1])*(b[0]-a[0])-(d[0]-c[0])*(b[1]-a[1]);if(0!==g){var h=e/g,i=f/g;if(h>=0&&1>=h&&i>=0&&1>=i)return!0}return!1}function g(a,b){for(var c=0;c=0;b--)if(c=h[b][0],i(c,f)){h[b].push(f),o=!0;break}o||n.push(f)}for(;n.length;){f=n.pop();var p=!1;for(b=h.length-1;b>=0;b--)if(c=h[b][0],g(c,f)){h[b].push(f),p=!0;break}p||h.push([f.reverse()])}return 1===h.length?{type:"Polygon",coordinates:h[0]}:{type:"MultiPolygon",coordinates:h}}function k(a){var b=[],c=a.slice(0),f=d(c.shift().slice(0));if(f.length>=4){e(f)||f.reverse(),b.push(f);for(var g=0;g=4&&(e(h)&&h.reverse(),b.push(h))}}return b}function l(a){for(var b=[],c=0;c=0;e--){var f=d[e].slice(0);b.push(f)}return b}var m=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.msRequestAnimationFrame||function(a){return window.setTimeout(a,1e3/60)};a.Util.extentToBounds=function(a){var b=new L.LatLng(a.ymin,a.xmin),c=new L.LatLng(a.ymax,a.xmax);return new L.LatLngBounds(b,c)},a.Util.boundsToExtent=function(a){return a=L.latLngBounds(a),{xmin:a.getSouthWest().lng,ymin:a.getSouthWest().lat,xmax:a.getNorthEast().lng,ymax:a.getNorthEast().lat,spatialReference:{wkid:4326}}},a.Util.arcgisToGeojson=function(c,d){var e={};return"number"==typeof c.x&&"number"==typeof c.y&&(e.type="Point",e.coordinates=[c.x,c.y]),c.points&&(e.type="MultiPoint",e.coordinates=c.points.slice(0)),c.paths&&(1===c.paths.length?(e.type="LineString",e.coordinates=c.paths[0].slice(0)):(e.type="MultiLineString",e.coordinates=c.paths.slice(0))),c.rings&&(e=j(c.rings.slice(0))),(c.geometry||c.attributes)&&(e.type="Feature",e.geometry=c.geometry?a.Util.arcgisToGeojson(c.geometry):null,e.properties=c.attributes?b(c.attributes):null,c.attributes&&(e.id=c.attributes[d]||c.attributes.OBJECTID||c.attributes.FID)),e},a.Util.geojsonToArcGIS=function(c,d){d=d||"OBJECTID";var e,f={wkid:4326},g={};switch(c.type){case"Point":g.x=c.coordinates[0],g.y=c.coordinates[1],g.spatialReference=f;break;case"MultiPoint":g.points=c.coordinates.slice(0),g.spatialReference=f;break;case"LineString":g.paths=[c.coordinates.slice(0)],g.spatialReference=f;break;case"MultiLineString":g.paths=c.coordinates.slice(0),g.spatialReference=f;break;case"Polygon":g.rings=k(c.coordinates.slice(0)),g.spatialReference=f;break;case"MultiPolygon":g.rings=l(c.coordinates.slice(0)),g.spatialReference=f;break;case"Feature":c.geometry&&(g.geometry=a.Util.geojsonToArcGIS(c.geometry,d)),g.attributes=c.properties?b(c.properties):{},c.id&&(g.attributes[d]=c.id);break;case"FeatureCollection":for(g=[],e=0;e=0;h--)f.features.push(a.Util.arcgisToGeojson(g[h],d));return f},a.Util.cleanUrl=function(a){return a=a.replace(/^\s+|\s+$|\A\s+|\s+\z/g,""),"/"!==a[a.length-1]&&(a+="/"),a},a.Util.isArcgisOnline=function(a){return/\.arcgis\.com.*?FeatureServer/g.test(a)},a.Util.geojsonTypeToArcGIS=function(a){var b;switch(a){case"Point":b="esriGeometryPoint";break;case"MultiPoint":b="esriGeometryMultipoint";break;case"LineString":b="esriGeometryPolyline";break;case"MultiLineString":b="esriGeometryPolyline";break;case"Polygon":b="esriGeometryPolygon";break;case"MultiPolygon":b="esriGeometryPolygon"}return b},a.Util.requestAnimationFrame=L.Util.bind(m,window),a.Util.warn=function(a){console&&console.warn&&console.warn(a)}}(EsriLeaflet),function(a){function b(a){var b="";a.f=a.f||"json";for(var c in a)if(a.hasOwnProperty(c)){var d,e=a[c],f=Object.prototype.toString.call(e);b.length&&(b+="&"),d="[object Array]"===f?"[object Object]"===Object.prototype.toString.call(e[0])?JSON.stringify(e):e.join(","):"[object Object]"===f?JSON.stringify(e):"[object Date]"===f?e.valueOf():e,b+=encodeURIComponent(c)+"="+encodeURIComponent(d)}return b}function c(a,b){var c=new XMLHttpRequest;return c.onerror=function(d){c.onreadystatechange=L.Util.falseFn,a.call(b,{error:{code:500,message:"XMLHttpRequest error"}},null)},c.onreadystatechange=function(){var d,e;if(4===c.readyState){try{d=JSON.parse(c.responseText)}catch(f){d=null,e={code:500,message:"Could not parse response as JSON. This could also be caused by a CORS or XMLHttpRequest error."}}!e&&d.error&&(e=d.error,d=null),c.onerror=L.Util.falseFn,a.call(b,e,d)}},c}var d=0;window._EsriLeafletCallbacks={},a.Request={request:function(d,e,f,g){var h=b(e),i=c(f,g),j=(d+"?"+h).length;if(2e3>=j&&L.esri.Support.CORS)i.open("GET",d+"?"+h),i.send(null);else{if(!(j>2e3&&L.esri.Support.CORS))return 2e3>=j&&!L.esri.Support.CORS?L.esri.Request.get.JSONP(d,e,f,g):void a.Util.warn("a request to "+d+" was longer then 2000 characters and this browser cannot make a cross-domain post request. Please use a proxy http://esri.github.io/esri-leaflet/api-reference/request.html");i.open("POST",d),i.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),i.send(h)}return i},post:{XMLHTTP:function(a,d,e,f){var g=c(e,f);return g.open("POST",a),g.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),g.send(b(d)),g}},get:{CORS:function(a,d,e,f){var g=c(e,f);return g.open("GET",a+"?"+b(d),!0),g.send(null),g},JSONP:function(a,c,e,f){var g="c"+d;c.callback="window._EsriLeafletCallbacks."+g;var h=L.DomUtil.create("script",null,document.body);return h.type="text/javascript",h.src=a+"?"+b(c),h.id=g,window._EsriLeafletCallbacks[g]=function(a){if(window._EsriLeafletCallbacks[g]!==!0){var b,c=Object.prototype.toString.call(a);"[object Object]"!==c&&"[object Array]"!==c&&(b={error:{code:500,message:"Expected array or object as JSONP response"}},a=null),!b&&a.error&&(b=a,a=null),e.call(f,b,a),window._EsriLeafletCallbacks[g]=!0}},d++,{id:g,url:h.src,abort:function(){window._EsriLeafletCallbacks._callback[g]({code:0,message:"Request aborted."})}}}}},a.get=a.Support.CORS?a.Request.get.CORS:a.Request.get.JSONP,a.post=a.Request.post.XMLHTTP,a.request=a.Request.request}(EsriLeaflet),EsriLeaflet.Services.Service=L.Class.extend({includes:L.Mixin.Events,options:{proxy:!1,useCors:EsriLeaflet.Support.CORS},initialize:function(a){a=a||{},this._requestQueue=[],this._authenticating=!1,L.Util.setOptions(this,a),this.options.url=EsriLeaflet.Util.cleanUrl(this.options.url)},get:function(a,b,c,d){return this._request("get",a,b,c,d)},post:function(a,b,c,d){return this._request("post",a,b,c,d)},request:function(a,b,c,d){return this._request("request",a,b,c,d)},metadata:function(a,b){return this._request("get","",{},a,b)},authenticate:function(a){return this._authenticating=!1,this.options.token=a,this._runQueue(),this},_request:function(a,b,c,d,e){this.fire("requeststart",{url:this.options.url+b,params:c,method:a});var f=this._createServiceCallback(a,b,c,d,e);if(this.options.token&&(c.token=this.options.token),this._authenticating)return void this._requestQueue.push([a,b,c,d,e]);var g=this.options.proxy?this.options.proxy+"?"+this.options.url+b:this.options.url+b;return"get"!==a&&"request"!==a||this.options.useCors?EsriLeaflet[a](g,c,f):EsriLeaflet.Request.get.JSONP(g,c,f)},_createServiceCallback:function(a,b,c,d,e){return L.Util.bind(function(f,g){!f||499!==f.code&&498!==f.code||(this._authenticating=!0,this._requestQueue.push([a,b,c,d,e]),this.fire("authenticationrequired",{authenticate:L.Util.bind(this.authenticate,this)}),f.authenticate=L.Util.bind(this.authenticate,this)),d.call(e,f,g),f?this.fire("requesterror",{url:this.options.url+b,params:c,message:f.message,code:f.code,method:a}):this.fire("requestsuccess",{url:this.options.url+b,params:c,response:g,method:a}),this.fire("requestend",{url:this.options.url+b,params:c,method:a})},this)},_runQueue:function(){for(var a=this._requestQueue.length-1;a>=0;a--){var b=this._requestQueue[a],c=b.shift();this[c].apply(this,b)}this._requestQueue=[]}}),EsriLeaflet.Services.service=function(a){return new EsriLeaflet.Services.Service(a)},EsriLeaflet.Services.ImageService=EsriLeaflet.Services.Service.extend({query:function(){return new EsriLeaflet.Tasks.Query(this)},identify:function(){return new EsriLeaflet.Tasks.IdentifyImage(this)}}),EsriLeaflet.Services.imageService=function(a){return new EsriLeaflet.Services.ImageService(a)},EsriLeaflet.Tasks.Task=L.Class.extend({options:{proxy:!1,useCors:EsriLeaflet.Support.CORS},generateSetter:function(a,b){return L.Util.bind(function(b){return this.params[a]=b,this},b)},initialize:function(a){if(a.request&&a.options?(this._service=a,L.Util.setOptions(this,a.options)):(L.Util.setOptions(this,a),this.options.url=L.esri.Util.cleanUrl(a.url)),this.params=L.Util.extend({},this.params||{}),this.setters)for(var b in this.setters){var c=this.setters[b];this[b]=this.generateSetter(c,this)}},token:function(a){return this._service?this._service.authenticate(a):this.params.token=a,this},request:function(a,b){return this._service?this._service.request(this.path,this.params,a,b):this._request("request",this.path,this.params,a,b)},_request:function(a,b,c,d,e){var f=this.options.proxy?this.options.proxy+"?"+this.options.url+b:this.options.url+b;return"get"!==a&&"request"!==a||this.options.useCors?EsriLeaflet[a](f,c,d,e):EsriLeaflet.Request.get.JSONP(f,c,d,e)}}),EsriLeaflet.Tasks.Query=EsriLeaflet.Tasks.Task.extend({setters:{offset:"offset",limit:"limit",fields:"outFields",precision:"geometryPrecision",featureIds:"objectIds",returnGeometry:"returnGeometry",token:"token"},path:"query",params:{returnGeometry:!0,where:"1=1",outSr:4326,outFields:"*"},within:function(a){return this._setGeometry(a),this.params.spatialRel="esriSpatialRelContains",this},intersects:function(a){return this._setGeometry(a),this.params.spatialRel="esriSpatialRelIntersects",this},contains:function(a){return this._setGeometry(a),this.params.spatialRel="esriSpatialRelWithin",this},overlaps:function(a){return this._setGeometry(a),this.params.spatialRel="esriSpatialRelOverlaps",this},nearby:function(a,b){return a=L.latLng(a),this.params.geometry=[a.lng,a.lat],this.params.geometryType="esriGeometryPoint",this.params.spatialRel="esriSpatialRelIntersects",this.params.units="esriSRUnit_Meter",this.params.distance=b,this.params.inSr=4326,this},where:function(a){return this.params.where=a,this},between:function(a,b){return this.params.time=[a.valueOf(),b.valueOf()],this},simplify:function(a,b){var c=Math.abs(a.getBounds().getWest()-a.getBounds().getEast());return this.params.maxAllowableOffset=c/a.getSize().y*b,this},orderBy:function(a,b){return b=b||"ASC",this.params.orderByFields=this.params.orderByFields?this.params.orderByFields+",":"",this.params.orderByFields+=[a,b].join(" "),this},run:function(a,b){return this._cleanParams(),EsriLeaflet.Util.isArcgisOnline(this.options.url)?(this.params.f="geojson",this.request(function(c,d){this._trapSQLerrors(c),a.call(b,c,d,d)},this)):this.request(function(c,d){this._trapSQLerrors(c),a.call(b,c,d&&EsriLeaflet.Util.responseToFeatureCollection(d),d)},this)},count:function(a,b){return this._cleanParams(),this.params.returnCountOnly=!0,this.request(function(b,c){a.call(this,b,c&&c.count,c)},b)},ids:function(a,b){return this._cleanParams(),this.params.returnIdsOnly=!0,this.request(function(b,c){a.call(this,b,c&&c.objectIds,c)},b)},bounds:function(a,b){return this._cleanParams(),this.params.returnExtentOnly=!0,this.request(function(c,d){a.call(b,c,d&&d.extent&&EsriLeaflet.Util.extentToBounds(d.extent),d)},b)},pixelSize:function(a){return a=L.point(a),this.params.pixelSize=[a.x,a.y],this},layer:function(a){return this.path=a+"/query",this},_trapSQLerrors:function(a){a&&"400"===a.code&&EsriLeaflet.Util.warn("one common syntax error in query requests is encasing string values in double quotes instead of single quotes")},_cleanParams:function(){delete this.params.returnIdsOnly,delete this.params.returnExtentOnly,delete this.params.returnCountOnly},_setGeometry:function(a){return this.params.inSr=4326,a instanceof L.LatLngBounds?(this.params.geometry=EsriLeaflet.Util.boundsToExtent(a),void(this.params.geometryType="esriGeometryEnvelope")):(a.getLatLng&&(a=a.getLatLng()),a instanceof L.LatLng&&(a={type:"Point",coordinates:[a.lng,a.lat]}),a instanceof L.GeoJSON&&(a=a.getLayers()[0].feature.geometry,this.params.geometry=EsriLeaflet.Util.geojsonToArcGIS(a),this.params.geometryType=EsriLeaflet.Util.geojsonTypeToArcGIS(a.type)),a.toGeoJSON&&(a=a.toGeoJSON()),"Feature"===a.type&&(a=a.geometry),"Point"===a.type||"LineString"===a.type||"Polygon"===a.type?(this.params.geometry=EsriLeaflet.Util.geojsonToArcGIS(a),void(this.params.geometryType=EsriLeaflet.Util.geojsonTypeToArcGIS(a.type))):void EsriLeaflet.Util.warn("invalid geometry passed to spatial query. Should be an L.LatLng, L.LatLngBounds or L.Marker or a GeoJSON Point Line or Polygon object"))}}),EsriLeaflet.Tasks.query=function(a){return new EsriLeaflet.Tasks.Query(a)},EsriLeaflet.Tasks.Identify=EsriLeaflet.Tasks.Task.extend({path:"identify",between:function(a,b){return this.params.time=[a.valueOf(),b.valueOf()],this}}),EsriLeaflet.Layers.RasterLayer=L.Class.extend({includes:L.Mixin.Events,options:{opacity:1,position:"front",f:"image"},onAdd:function(a){if(this._map=a,this._update=L.Util.limitExecByInterval(this._update,this.options.updateInterval,this),a.options.crs&&a.options.crs.code){var b=a.options.crs.code.split(":")[1];this.options.bboxSR=b,this.options.imageSR=b}a.on("moveend",this._update,this),this._currentImage&&this._currentImage._bounds.equals(this._map.getBounds())?a.addLayer(this._currentImage):this._currentImage&&(this._map.removeLayer(this._currentImage),this._currentImage=null),this._update(),this._popup&&(this._map.on("click",this._getPopupData,this),this._map.on("dblclick",this._resetPopupState,this))},bindPopup:function(a,b){return this._shouldRenderPopup=!1,this._lastClick=!1,this._popup=L.popup(b),this._popupFunction=a,this._map&&(this._map.on("click",this._getPopupData,this),this._map.on("dblclick",this._resetPopupState,this)),this},unbindPopup:function(){return this._map&&(this._map.closePopup(this._popup),this._map.off("click",this._getPopupData,this),this._map.off("dblclick",this._resetPopupState,this)),this._popup=!1,this},onRemove:function(a){this._currentImage&&this._map.removeLayer(this._currentImage),this._popup&&(this._map.off("click",this._getPopupData,this),this._map.off("dblclick",this._resetPopupState,this)),this._map.off("moveend",this._update,this),this._map=null},addTo:function(a){return a.addLayer(this),this},removeFrom:function(a){return a.removeLayer(this),this},bringToFront:function(){return this.options.position="front",this._currentImage&&this._currentImage.bringToFront(),this},bringToBack:function(){return this.options.position="back",this._currentImage&&this._currentImage.bringToBack(),this},getAttribution:function(){return this.options.attribution},getOpacity:function(){return this.options.opacity},setOpacity:function(a){return this.options.opacity=a,this._currentImage.setOpacity(a),this},getTimeRange:function(){return[this.options.from,this.options.to]},setTimeRange:function(a,b){return this.options.from=a,this.options.to=b,this._update(),this},metadata:function(a,b){return this._service.metadata(a,b),this},authenticate:function(a){return this._service.authenticate(a),this},_renderImage:function(a,b){if(this._map){var c=new L.ImageOverlay(a,b,{opacity:0}).addTo(this._map);c.once("load",function(a){var c=a.target,d=this._currentImage;c._bounds.equals(b)&&c._bounds.equals(this._map.getBounds())?(this._currentImage=c,"front"===this.options.position?this.bringToFront():this.bringToBack(),this._map&&this._currentImage._map?this._currentImage.setOpacity(this.options.opacity):this._currentImage._map.removeLayer(this._currentImage),d&&this._map&&this._map.removeLayer(d),d&&d._map&&d._map.removeLayer(d)):this._map.removeLayer(c),this.fire("load",{bounds:b})},this),this.fire("loading",{bounds:b})}},_update:function(){if(this._map){var a=this._map.getZoom(),b=this._map.getBounds();if(!(this._animatingZoom||this._map._panTransition&&this._map._panTransition._inProgress)){if(a>this.options.maxZoom||a= 0);\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L504-L519\n function vertexIntersectsVertex(a1, a2, b1, b2) {\n var uaT = (b2[0] - b1[0]) * (a1[1] - b1[1]) - (b2[1] - b1[1]) * (a1[0] - b1[0]);\n var ubT = (a2[0] - a1[0]) * (a1[1] - b1[1]) - (a2[1] - a1[1]) * (a1[0] - b1[0]);\n var uB = (b2[1] - b1[1]) * (a2[0] - a1[0]) - (b2[0] - b1[0]) * (a2[1] - a1[1]);\n\n if ( uB !== 0 ) {\n var ua = uaT / uB;\n var ub = ubT / uB;\n\n if ( 0 <= ua && ua <= 1 && 0 <= ub && ub <= 1 ) {\n return true;\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L521-L531\n function arrayIntersectsArray(a, b) {\n for (var i = 0; i < a.length - 1; i++) {\n for (var j = 0; j < b.length - 1; j++) {\n if (vertexIntersectsVertex(a[i], a[i + 1], b[j], b[j + 1])) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L470-L480\n function coordinatesContainPoint(coordinates, point) {\n var contains = false;\n for(var i = -1, l = coordinates.length, j = l - 1; ++i < l; j = i) {\n if (((coordinates[i][1] <= point[1] && point[1] < coordinates[j][1]) ||\n (coordinates[j][1] <= point[1] && point[1] < coordinates[i][1])) &&\n (point[0] < (coordinates[j][0] - coordinates[i][0]) * (point[1] - coordinates[i][1]) / (coordinates[j][1] - coordinates[i][1]) + coordinates[i][0])) {\n contains = !contains;\n }\n }\n return contains;\n }\n\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L106-L113\n function coordinatesContainCoordinates(outer, inner){\n var intersects = arrayIntersectsArray(outer, inner);\n var contains = coordinatesContainPoint(outer, inner[0]);\n if(!intersects && contains){\n return true;\n }\n return false;\n }\n\n // do any polygons in this array contain any other polygons in this array?\n // used for checking for holes in arcgis rings\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L117-L172\n function convertRingsToGeoJSON(rings){\n var outerRings = [];\n var holes = [];\n var x; // iterator\n var outerRing; // current outer ring being evaluated\n var hole; // current hole being evaluated\n\n // for each ring\n for (var r = 0; r < rings.length; r++) {\n var ring = closeRing(rings[r].slice(0));\n if(ring.length < 4){\n continue;\n }\n // is this ring an outer ring? is it clockwise?\n if(ringIsClockwise(ring)){\n var polygon = [ ring ];\n outerRings.push(polygon); // push to outer rings\n } else {\n holes.push(ring); // counterclockwise push to holes\n }\n }\n\n var uncontainedHoles = [];\n\n // while there are holes left...\n while(holes.length){\n // pop a hole off out stack\n hole = holes.pop();\n\n // loop over all outer rings and see if they contain our hole.\n var contained = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(coordinatesContainCoordinates(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n contained = true;\n break;\n }\n }\n\n // ring is not contained in any outer ring\n // sometimes this happens https://github.com/Esri/esri-leaflet/issues/320\n if(!contained){\n uncontainedHoles.push(hole);\n }\n }\n\n // if we couldn't match any holes using contains we can try intersects...\n while(uncontainedHoles.length){\n // pop a hole off out stack\n hole = uncontainedHoles.pop();\n\n // loop over all outer rings and see if any intersect our hole.\n var intersects = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(arrayIntersectsArray(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n intersects = true;\n break;\n }\n }\n\n if(!intersects) {\n outerRings.push([hole.reverse()]);\n }\n }\n\n if(outerRings.length === 1){\n return {\n type: 'Polygon',\n coordinates: outerRings[0]\n };\n } else {\n return {\n type: 'MultiPolygon',\n coordinates: outerRings\n };\n }\n }\n\n // This function ensures that rings are oriented in the right directions\n // outer rings are clockwise, holes are counterclockwise\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function orientRings(poly){\n var output = [];\n var polygon = poly.slice(0);\n var outerRing = closeRing(polygon.shift().slice(0));\n if(outerRing.length >= 4){\n if(!ringIsClockwise(outerRing)){\n outerRing.reverse();\n }\n\n output.push(outerRing);\n\n for (var i = 0; i < polygon.length; i++) {\n var hole = closeRing(polygon[i].slice(0));\n if(hole.length >= 4){\n if(ringIsClockwise(hole)){\n hole.reverse();\n }\n output.push(hole);\n }\n }\n }\n\n return output;\n }\n\n // This function flattens holes in multipolygons to one array of polygons\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function flattenMultiPolygonRings(rings){\n var output = [];\n for (var i = 0; i < rings.length; i++) {\n var polygon = orientRings(rings[i]);\n for (var x = polygon.length - 1; x >= 0; x--) {\n var ring = polygon[x].slice(0);\n output.push(ring);\n }\n }\n return output;\n }\n\n // convert an extent (ArcGIS) to LatLngBounds (Leaflet)\n EsriLeaflet.Util.extentToBounds = function(extent){\n var sw = new L.LatLng(extent.ymin, extent.xmin);\n var ne = new L.LatLng(extent.ymax, extent.xmax);\n return new L.LatLngBounds(sw, ne);\n };\n\n // convert an LatLngBounds (Leaflet) to extent (ArcGIS)\n EsriLeaflet.Util.boundsToExtent = function(bounds) {\n bounds = L.latLngBounds(bounds);\n return {\n 'xmin': bounds.getSouthWest().lng,\n 'ymin': bounds.getSouthWest().lat,\n 'xmax': bounds.getNorthEast().lng,\n 'ymax': bounds.getNorthEast().lat,\n 'spatialReference': {\n 'wkid' : 4326\n }\n };\n };\n\n EsriLeaflet.Util.arcgisToGeojson = function (arcgis, idAttribute){\n var geojson = {};\n\n if(typeof arcgis.x === 'number' && typeof arcgis.y === 'number'){\n geojson.type = 'Point';\n geojson.coordinates = [arcgis.x, arcgis.y];\n }\n\n if(arcgis.points){\n geojson.type = 'MultiPoint';\n geojson.coordinates = arcgis.points.slice(0);\n }\n\n if(arcgis.paths) {\n if(arcgis.paths.length === 1){\n geojson.type = 'LineString';\n geojson.coordinates = arcgis.paths[0].slice(0);\n } else {\n geojson.type = 'MultiLineString';\n geojson.coordinates = arcgis.paths.slice(0);\n }\n }\n\n if(arcgis.rings) {\n geojson = convertRingsToGeoJSON(arcgis.rings.slice(0));\n }\n\n if(arcgis.geometry || arcgis.attributes) {\n geojson.type = 'Feature';\n geojson.geometry = (arcgis.geometry) ? EsriLeaflet.Util.arcgisToGeojson(arcgis.geometry) : null;\n geojson.properties = (arcgis.attributes) ? clone(arcgis.attributes) : null;\n if(arcgis.attributes) {\n geojson.id = arcgis.attributes[idAttribute] || arcgis.attributes.OBJECTID || arcgis.attributes.FID;\n }\n }\n\n return geojson;\n };\n\n // GeoJSON -> ArcGIS\n EsriLeaflet.Util.geojsonToArcGIS = function(geojson, idAttribute){\n idAttribute = idAttribute || 'OBJECTID';\n var spatialReference = { wkid: 4326 };\n var result = {};\n var i;\n\n switch(geojson.type){\n case 'Point':\n result.x = geojson.coordinates[0];\n result.y = geojson.coordinates[1];\n result.spatialReference = spatialReference;\n break;\n case 'MultiPoint':\n result.points = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'LineString':\n result.paths = [geojson.coordinates.slice(0)];\n result.spatialReference = spatialReference;\n break;\n case 'MultiLineString':\n result.paths = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'Polygon':\n result.rings = orientRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'MultiPolygon':\n result.rings = flattenMultiPolygonRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'Feature':\n if(geojson.geometry) {\n result.geometry = EsriLeaflet.Util.geojsonToArcGIS(geojson.geometry, idAttribute);\n }\n result.attributes = (geojson.properties) ? clone(geojson.properties) : {};\n if(geojson.id){\n result.attributes[idAttribute] = geojson.id;\n }\n break;\n case 'FeatureCollection':\n result = [];\n for (i = 0; i < geojson.features.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.features[i], idAttribute));\n }\n break;\n case 'GeometryCollection':\n result = [];\n for (i = 0; i < geojson.geometries.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.geometries[i], idAttribute));\n }\n break;\n }\n\n return result;\n };\n\n EsriLeaflet.Util.responseToFeatureCollection = function(response, idAttribute){\n var objectIdField;\n\n if(idAttribute){\n objectIdField = idAttribute;\n } else if(response.objectIdFieldName){\n objectIdField = response.objectIdFieldName;\n } else if(response.fields) {\n for (var j = 0; j <= response.fields.length - 1; j++) {\n if(response.fields[j].type === 'esriFieldTypeOID') {\n objectIdField = response.fields[j].name;\n break;\n }\n }\n } else {\n objectIdField = 'OBJECTID';\n }\n\n var featureCollection = {\n type: 'FeatureCollection',\n features: []\n };\n var features = response.features || response.results;\n if(features.length){\n for (var i = features.length - 1; i >= 0; i--) {\n featureCollection.features.push(EsriLeaflet.Util.arcgisToGeojson(features[i], objectIdField));\n }\n }\n\n return featureCollection;\n };\n\n // trim url whitespace and add a trailing slash if needed\n EsriLeaflet.Util.cleanUrl = function(url){\n //trim leading and trailing spaces, but not spaces inside the url\n url = url.replace(/^\\s+|\\s+$|\\A\\s+|\\s+\\z/g, '');\n\n //add a trailing slash to the url if the user omitted it\n if(url[url.length-1] !== '/'){\n url += '/';\n }\n\n return url;\n };\n\n EsriLeaflet.Util.isArcgisOnline = function(url){\n /* hosted feature services can emit geojson natively.\n our check for 'geojson' support will need to be revisted\n once the functionality makes its way to ArcGIS Server*/\n return (/\\.arcgis\\.com.*?FeatureServer/g).test(url);\n };\n\n EsriLeaflet.Util.geojsonTypeToArcGIS = function (geoJsonType) {\n var arcgisGeometryType;\n switch (geoJsonType) {\n case 'Point':\n arcgisGeometryType = 'esriGeometryPoint';\n break;\n case 'MultiPoint':\n arcgisGeometryType = 'esriGeometryMultipoint';\n break;\n case 'LineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'MultiLineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'Polygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n case 'MultiPolygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n }\n return arcgisGeometryType;\n };\n\n EsriLeaflet.Util.requestAnimationFrame = L.Util.bind(raf, window);\n\n EsriLeaflet.Util.warn = function (message) {\n if(console && console.warn) {\n console.warn(message);\n }\n };\n\n})(EsriLeaflet);","(function(EsriLeaflet){\n\n var callbacks = 0;\n\n window._EsriLeafletCallbacks = {};\n\n function serialize(params){\n var data = '';\n\n params.f = params.f || 'json';\n\n for (var key in params){\n if(params.hasOwnProperty(key)){\n var param = params[key];\n var type = Object.prototype.toString.call(param);\n var value;\n\n if(data.length){\n data += '&';\n }\n\n if (type === '[object Array]'){\n value = (Object.prototype.toString.call(param[0]) === '[object Object]') ? JSON.stringify(param) : param.join(',');\n } else if (type === '[object Object]') {\n value = JSON.stringify(param);\n } else if (type === '[object Date]'){\n value = param.valueOf();\n } else {\n value = param;\n }\n\n data += encodeURIComponent(key) + '=' + encodeURIComponent(value);\n }\n }\n\n return data;\n }\n\n function createRequest(callback, context){\n var httpRequest = new XMLHttpRequest();\n\n httpRequest.onerror = function(e) {\n httpRequest.onreadystatechange = L.Util.falseFn;\n\n callback.call(context, {\n error: {\n code: 500,\n message: 'XMLHttpRequest error'\n }\n }, null);\n };\n\n httpRequest.onreadystatechange = function(){\n var response;\n var error;\n\n if (httpRequest.readyState === 4) {\n try {\n response = JSON.parse(httpRequest.responseText);\n } catch(e) {\n response = null;\n error = {\n code: 500,\n message: 'Could not parse response as JSON. This could also be caused by a CORS or XMLHttpRequest error.'\n };\n }\n\n if (!error && response.error) {\n error = response.error;\n response = null;\n }\n\n httpRequest.onerror = L.Util.falseFn;\n\n callback.call(context, error, response);\n }\n };\n\n return httpRequest;\n }\n\n // AJAX handlers for CORS (modern browsers) or JSONP (older browsers)\n EsriLeaflet.Request = {\n request: function(url, params, callback, context){\n var paramString = serialize(params);\n var httpRequest = createRequest(callback, context);\n var requestLength = (url + '?' + paramString).length;\n\n // request is less then 2000 characters and the browser supports CORS, make GET request with XMLHttpRequest\n if(requestLength <= 2000 && L.esri.Support.CORS){\n httpRequest.open('GET', url + '?' + paramString);\n httpRequest.send(null);\n\n // request is less more then 2000 characters and the browser supports CORS, make POST request with XMLHttpRequest\n } else if (requestLength > 2000 && L.esri.Support.CORS){\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(paramString);\n\n // request is less more then 2000 characters and the browser does not support CORS, make a JSONP request\n } else if(requestLength <= 2000 && !L.esri.Support.CORS){\n return L.esri.Request.get.JSONP(url, params, callback, context);\n\n // request is longer then 2000 characters and the browser does not support CORS, log a warning\n } else {\n EsriLeaflet.Util.warn('a request to ' + url + ' was longer then 2000 characters and this browser cannot make a cross-domain post request. Please use a proxy http://esri.github.io/esri-leaflet/api-reference/request.html');\n return;\n }\n\n return httpRequest;\n },\n\n post: {\n XMLHTTP: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(serialize(params));\n\n return httpRequest;\n }\n },\n\n get: {\n CORS: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n\n httpRequest.open('GET', url + '?' + serialize(params), true);\n httpRequest.send(null);\n\n return httpRequest;\n },\n JSONP: function(url, params, callback, context){\n var callbackId = 'c' + callbacks;\n\n params.callback = 'window._EsriLeafletCallbacks.' + callbackId;\n\n var script = L.DomUtil.create('script', null, document.body);\n script.type = 'text/javascript';\n script.src = url + '?' + serialize(params);\n script.id = callbackId;\n\n window._EsriLeafletCallbacks[callbackId] = function(response){\n if(window._EsriLeafletCallbacks[callbackId] !== true){\n var error;\n var responseType = Object.prototype.toString.call(response);\n\n if(!(responseType === '[object Object]' || responseType === '[object Array]')){\n error = {\n error: {\n code: 500,\n message: 'Expected array or object as JSONP response'\n }\n };\n response = null;\n }\n\n if (!error && response.error) {\n error = response;\n response = null;\n }\n\n callback.call(context, error, response);\n window._EsriLeafletCallbacks[callbackId] = true;\n }\n };\n\n callbacks++;\n\n return {\n id: callbackId,\n url: script.src,\n abort: function(){\n window._EsriLeafletCallbacks._callback[callbackId]({\n code: 0,\n message: 'Request aborted.'\n });\n }\n };\n }\n }\n };\n\n // choose the correct AJAX handler depending on CORS support\n EsriLeaflet.get = (EsriLeaflet.Support.CORS) ? EsriLeaflet.Request.get.CORS : EsriLeaflet.Request.get.JSONP;\n\n // always use XMLHttpRequest for posts\n EsriLeaflet.post = EsriLeaflet.Request.post.XMLHTTP;\n\n // expose a common request method the uses GET\\POST based on request length\n EsriLeaflet.request = EsriLeaflet.Request.request;\n\n})(EsriLeaflet);","EsriLeaflet.Services.Service = L.Class.extend({\n\n includes: L.Mixin.Events,\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n initialize: function (options) {\n options = options || {};\n this._requestQueue = [];\n this._authenticating = false;\n L.Util.setOptions(this, options);\n this.options.url = EsriLeaflet.Util.cleanUrl(this.options.url);\n },\n\n get: function (path, params, callback, context) {\n return this._request('get', path, params, callback, context);\n },\n\n post: function (path, params, callback, context) {\n return this._request('post', path, params, callback, context);\n },\n\n request: function (path, params, callback, context) {\n return this._request('request', path, params, callback, context);\n },\n\n metadata: function (callback, context) {\n return this._request('get', '', {}, callback, context);\n },\n\n authenticate: function(token){\n this._authenticating = false;\n this.options.token = token;\n this._runQueue();\n return this;\n },\n\n _request: function(method, path, params, callback, context){\n this.fire('requeststart', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n\n var wrappedCallback = this._createServiceCallback(method, path, params, callback, context);\n\n if (this.options.token) {\n params.token = this.options.token;\n }\n\n if (this._authenticating) {\n this._requestQueue.push([method, path, params, callback, context]);\n return;\n } else {\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, wrappedCallback);\n } else {\n return EsriLeaflet[method](url, params, wrappedCallback);\n }\n }\n },\n\n _createServiceCallback: function(method, path, params, callback, context){\n return L.Util.bind(function(error, response){\n\n if (error && (error.code === 499 || error.code === 498)) {\n this._authenticating = true;\n\n this._requestQueue.push([method, path, params, callback, context]);\n\n // fire an event for users to handle and re-authenticate\n this.fire('authenticationrequired', {\n authenticate: L.Util.bind(this.authenticate, this)\n });\n\n // if the user has access to a callback they can handle the auth error\n error.authenticate = L.Util.bind(this.authenticate, this);\n }\n\n callback.call(context, error, response);\n\n if(error) {\n this.fire('requesterror', {\n url: this.options.url + path,\n params: params,\n message: error.message,\n code: error.code,\n method: method\n });\n } else {\n this.fire('requestsuccess', {\n url: this.options.url + path,\n params: params,\n response: response,\n method: method\n });\n }\n\n this.fire('requestend', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n }, this);\n },\n\n _runQueue: function(){\n for (var i = this._requestQueue.length - 1; i >= 0; i--) {\n var request = this._requestQueue[i];\n var method = request.shift();\n this[method].apply(this, request);\n }\n this._requestQueue = [];\n }\n\n});\n\nEsriLeaflet.Services.service = function(params){\n return new EsriLeaflet.Services.Service(params);\n};\n","EsriLeaflet.Services.ImageService = EsriLeaflet.Services.Service.extend({\n\n query: function () {\n return new EsriLeaflet.Tasks.Query(this);\n },\n\n identify: function() {\n return new EsriLeaflet.Tasks.IdentifyImage(this);\n }\n});\n\nEsriLeaflet.Services.imageService = function(params){\n return new EsriLeaflet.Services.ImageService(params);\n};","EsriLeaflet.Tasks.Task = L.Class.extend({\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n //Generate a method for each methodName:paramName in the setters for this task.\n generateSetter: function(param, context){\n return L.Util.bind(function(value){\n this.params[param] = value;\n return this;\n }, context);\n },\n\n initialize: function(endpoint){\n // endpoint can be either a url (and options) for an ArcGIS Rest Service or an instance of EsriLeaflet.Service\n if(endpoint.request && endpoint.options){\n this._service = endpoint;\n L.Util.setOptions(this, endpoint.options);\n } else {\n L.Util.setOptions(this, endpoint);\n this.options.url = L.esri.Util.cleanUrl(endpoint.url);\n }\n\n // clone default params into this object\n this.params = L.Util.extend({}, this.params || {});\n\n // generate setter methods based on the setters object implimented a child class\n if(this.setters){\n for (var setter in this.setters){\n var param = this.setters[setter];\n this[setter] = this.generateSetter(param, this);\n }\n }\n },\n\n token: function(token){\n if(this._service){\n this._service.authenticate(token);\n } else {\n this.params.token = token;\n }\n return this;\n },\n\n request: function(callback, context){\n if(this._service){\n return this._service.request(this.path, this.params, callback, context);\n } else {\n return this._request('request', this.path, this.params, callback, context);\n }\n },\n\n _request: function(method, path, params, callback, context){\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, callback, context);\n } else{\n return EsriLeaflet[method](url, params, callback, context);\n }\n }\n});","EsriLeaflet.Tasks.Query = EsriLeaflet.Tasks.Task.extend({\n setters: {\n 'offset': 'offset',\n 'limit': 'limit',\n 'fields': 'outFields',\n 'precision': 'geometryPrecision',\n 'featureIds': 'objectIds',\n 'returnGeometry': 'returnGeometry',\n 'token': 'token'\n },\n\n path: 'query',\n\n params: {\n returnGeometry: true,\n where: '1=1',\n outSr: 4326,\n outFields: '*'\n },\n\n within: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelContains'; // will make code read layer within geometry, to the api this will reads geometry contains layer\n return this;\n },\n\n intersects: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelIntersects';\n return this;\n },\n\n contains: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelWithin'; // will make code read layer contains geometry, to the api this will reads geometry within layer\n return this;\n },\n\n // crosses: function(geometry){\n // this._setGeometry(geometry);\n // this.params.spatialRel = 'esriSpatialRelCrosses';\n // return this;\n // },\n\n // touches: function(geometry){\n // this._setGeometry(geometry);\n // this.params.spatialRel = 'esriSpatialRelTouches';\n // return this;\n // },\n\n overlaps: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelOverlaps';\n return this;\n },\n\n // only valid for Feature Services running on ArcGIS Server 10.3 or ArcGIS Online\n nearby: function(latlng, radius){\n latlng = L.latLng(latlng);\n this.params.geometry = [latlng.lng, latlng.lat];\n this.params.geometryType = 'esriGeometryPoint';\n this.params.spatialRel = 'esriSpatialRelIntersects';\n this.params.units = 'esriSRUnit_Meter';\n this.params.distance = radius;\n this.params.inSr = 4326;\n return this;\n },\n\n where: function(string){\n // instead of converting double-quotes to single quotes, pass as is, and provide a more informative message if a 400 is encountered\n this.params.where = string;\n return this;\n },\n\n between: function(start, end){\n this.params.time = [start.valueOf(), end.valueOf()];\n return this;\n },\n\n simplify: function(map, factor){\n var mapWidth = Math.abs(map.getBounds().getWest() - map.getBounds().getEast());\n this.params.maxAllowableOffset = (mapWidth / map.getSize().y) * factor;\n return this;\n },\n\n orderBy: function(fieldName, order){\n order = order || 'ASC';\n this.params.orderByFields = (this.params.orderByFields) ? this.params.orderByFields + ',' : '';\n this.params.orderByFields += ([fieldName, order]).join(' ');\n return this;\n },\n\n run: function(callback, context){\n this._cleanParams();\n\n // if the service is hosted on arcgis online request geojson directly\n if(EsriLeaflet.Util.isArcgisOnline(this.options.url)){\n this.params.f = 'geojson';\n\n return this.request(function(error, response){\n this._trapSQLerrors(error);\n callback.call(context, error, response, response);\n }, this);\n\n // otherwise convert it in the callback then pass it on\n } else {\n return this.request(function(error, response){\n this._trapSQLerrors(error);\n callback.call(context, error, (response && EsriLeaflet.Util.responseToFeatureCollection(response)), response);\n }, this);\n }\n },\n\n count: function(callback, context){\n this._cleanParams();\n this.params.returnCountOnly = true;\n return this.request(function(error, response){\n callback.call(this, error, (response && response.count), response);\n }, context);\n },\n\n ids: function(callback, context){\n this._cleanParams();\n this.params.returnIdsOnly = true;\n return this.request(function(error, response){\n callback.call(this, error, (response && response.objectIds), response);\n }, context);\n },\n\n // only valid for Feature Services running on ArcGIS Server 10.3 or ArcGIS Online\n bounds: function(callback, context){\n this._cleanParams();\n this.params.returnExtentOnly = true;\n return this.request(function(error, response){\n callback.call(context, error, (response && response.extent && EsriLeaflet.Util.extentToBounds(response.extent)), response);\n }, context);\n },\n\n // only valid for image services\n pixelSize: function(point){\n point = L.point(point);\n this.params.pixelSize = [point.x,point.y];\n return this;\n },\n\n // only valid for map services\n layer: function(layer){\n this.path = layer + '/query';\n return this;\n },\n\n _trapSQLerrors: function(error){\n if (error){\n if (error.code === '400'){\n EsriLeaflet.Util.warn('one common syntax error in query requests is encasing string values in double quotes instead of single quotes');\n }\n }\n },\n\n _cleanParams: function(){\n delete this.params.returnIdsOnly;\n delete this.params.returnExtentOnly;\n delete this.params.returnCountOnly;\n },\n\n _setGeometry: function(geometry) {\n this.params.inSr = 4326;\n\n // convert bounds to extent and finish\n if ( geometry instanceof L.LatLngBounds ) {\n // set geometry + geometryType\n this.params.geometry = EsriLeaflet.Util.boundsToExtent(geometry);\n this.params.geometryType = 'esriGeometryEnvelope';\n return;\n }\n\n // convert L.Marker > L.LatLng\n if(geometry.getLatLng){\n geometry = geometry.getLatLng();\n }\n\n // convert L.LatLng to a geojson point and continue;\n if (geometry instanceof L.LatLng) {\n geometry = {\n type: 'Point',\n coordinates: [geometry.lng, geometry.lat]\n };\n }\n\n // handle L.GeoJSON, pull out the first geometry\n if ( geometry instanceof L.GeoJSON ) {\n //reassign geometry to the GeoJSON value (we are assuming that only one feature is present)\n geometry = geometry.getLayers()[0].feature.geometry;\n this.params.geometry = EsriLeaflet.Util.geojsonToArcGIS(geometry);\n this.params.geometryType = EsriLeaflet.Util.geojsonTypeToArcGIS(geometry.type);\n }\n\n // Handle L.Polyline and L.Polygon\n if (geometry.toGeoJSON) {\n geometry = geometry.toGeoJSON();\n }\n\n // handle GeoJSON feature by pulling out the geometry\n if ( geometry.type === 'Feature' ) {\n // get the geometry of the geojson feature\n geometry = geometry.geometry;\n }\n\n // confirm that our GeoJSON is a point, line or polygon\n if ( geometry.type === 'Point' || geometry.type === 'LineString' || geometry.type === 'Polygon') {\n this.params.geometry = EsriLeaflet.Util.geojsonToArcGIS(geometry);\n this.params.geometryType = EsriLeaflet.Util.geojsonTypeToArcGIS(geometry.type);\n return;\n }\n\n // warn the user if we havn't found a\n /* global console */\n EsriLeaflet.Util.warn('invalid geometry passed to spatial query. Should be an L.LatLng, L.LatLngBounds or L.Marker or a GeoJSON Point Line or Polygon object');\n\n return;\n }\n});\n\nEsriLeaflet.Tasks.query = function(params){\n return new EsriLeaflet.Tasks.Query(params);\n};","EsriLeaflet.Tasks.Identify = EsriLeaflet.Tasks.Task.extend({\n path: 'identify',\n\n between: function(start, end){\n this.params.time = [start.valueOf(), end.valueOf()];\n return this;\n }\n});\n","EsriLeaflet.Layers.RasterLayer = L.Class.extend({\n includes: L.Mixin.Events,\n\n options: {\n opacity: 1,\n position: 'front',\n f: 'image'\n },\n\n onAdd: function (map) {\n this._map = map;\n\n this._update = L.Util.limitExecByInterval(this._update, this.options.updateInterval, this);\n\n if (map.options.crs && map.options.crs.code) {\n var sr = map.options.crs.code.split(':')[1];\n this.options.bboxSR = sr;\n this.options.imageSR = sr;\n }\n\n map.on('moveend', this._update, this);\n\n // if we had an image loaded and it matches the\n // current bounds show the image otherwise remove it\n if(this._currentImage && this._currentImage._bounds.equals(this._map.getBounds())){\n map.addLayer(this._currentImage);\n } else if(this._currentImage) {\n this._map.removeLayer(this._currentImage);\n this._currentImage = null;\n }\n\n this._update();\n\n if(this._popup){\n this._map.on('click', this._getPopupData, this);\n this._map.on('dblclick', this._resetPopupState, this);\n }\n },\n\n bindPopup: function(fn, popupOptions){\n this._shouldRenderPopup = false;\n this._lastClick = false;\n this._popup = L.popup(popupOptions);\n this._popupFunction = fn;\n if(this._map){\n this._map.on('click', this._getPopupData, this);\n this._map.on('dblclick', this._resetPopupState, this);\n }\n return this;\n },\n\n unbindPopup: function(){\n if(this._map){\n this._map.closePopup(this._popup);\n this._map.off('click', this._getPopupData, this);\n this._map.off('dblclick', this._resetPopupState, this);\n }\n this._popup = false;\n return this;\n },\n\n onRemove: function (map) {\n if (this._currentImage) {\n this._map.removeLayer(this._currentImage);\n }\n\n if(this._popup){\n this._map.off('click', this._getPopupData, this);\n this._map.off('dblclick', this._resetPopupState, this);\n }\n\n this._map.off('moveend', this._update, this);\n this._map = null;\n },\n\n addTo: function(map){\n map.addLayer(this);\n return this;\n },\n\n removeFrom: function(map){\n map.removeLayer(this);\n return this;\n },\n\n bringToFront: function(){\n this.options.position = 'front';\n if(this._currentImage){\n this._currentImage.bringToFront();\n }\n return this;\n },\n\n bringToBack: function(){\n this.options.position = 'back';\n if(this._currentImage){\n this._currentImage.bringToBack();\n }\n return this;\n },\n\n getAttribution: function () {\n return this.options.attribution;\n },\n\n getOpacity: function(){\n return this.options.opacity;\n },\n\n setOpacity: function(opacity){\n this.options.opacity = opacity;\n this._currentImage.setOpacity(opacity);\n return this;\n },\n\n getTimeRange: function(){\n return [this.options.from, this.options.to];\n },\n\n setTimeRange: function(from, to){\n this.options.from = from;\n this.options.to = to;\n this._update();\n return this;\n },\n\n metadata: function(callback, context){\n this._service.metadata(callback, context);\n return this;\n },\n\n authenticate: function(token){\n this._service.authenticate(token);\n return this;\n },\n\n _renderImage: function(url, bounds){\n if(this._map){\n // create a new image overlay and add it to the map\n // to start loading the image\n // opacity is 0 while the image is loading\n var image = new L.ImageOverlay(url, bounds, {\n opacity: 0\n }).addTo(this._map);\n\n // once the image loads\n image.once('load', function(e){\n var newImage = e.target;\n var oldImage = this._currentImage;\n\n // if the bounds of this image matches the bounds that\n // _renderImage was called with and we have a map with the same bounds\n // hide the old image if there is one and set the opacity\n // of the new image otherwise remove the new image\n if(newImage._bounds.equals(bounds) && newImage._bounds.equals(this._map.getBounds())){\n this._currentImage = newImage;\n\n if(this.options.position === 'front'){\n this.bringToFront();\n } else {\n this.bringToBack();\n }\n\n if(this._map && this._currentImage._map){\n this._currentImage.setOpacity(this.options.opacity);\n } else {\n this._currentImage._map.removeLayer(this._currentImage);\n }\n\n if(oldImage && this._map) {\n this._map.removeLayer(oldImage);\n }\n\n if(oldImage && oldImage._map){\n oldImage._map.removeLayer(oldImage);\n }\n } else {\n this._map.removeLayer(newImage);\n }\n\n this.fire('load', {\n bounds: bounds\n });\n\n }, this);\n\n this.fire('loading', {\n bounds: bounds\n });\n }\n },\n\n _update: function () {\n if(!this._map){\n return;\n }\n\n var zoom = this._map.getZoom();\n var bounds = this._map.getBounds();\n\n if(this._animatingZoom){\n return;\n }\n\n if (this._map._panTransition && this._map._panTransition._inProgress) {\n return;\n }\n\n if (zoom > this.options.maxZoom || zoom < this.options.minZoom) {\n return;\n }\n var params = this._buildExportParams();\n\n this._requestExport(params, bounds);\n },\n\n // TODO: refactor these into raster layer\n _renderPopup: function(latlng, error, results, response){\n latlng = L.latLng(latlng);\n if(this._shouldRenderPopup && this._lastClick.equals(latlng)){\n //add the popup to the map where the mouse was clicked at\n var content = this._popupFunction(error, results, response);\n if (content) {\n this._popup.setLatLng(latlng).setContent(content).openOn(this._map);\n }\n }\n },\n\n _resetPopupState: function(e){\n this._shouldRenderPopup = false;\n this._lastClick = e.latlng;\n },\n\n // from https://github.com/Leaflet/Leaflet/blob/v0.7.2/src/layer/FeatureGroup.js\n // @TODO remove at Leaflet 0.8\n _propagateEvent: function (e) {\n e = L.extend({\n layer: e.target,\n target: this\n }, e);\n this.fire(e.type, e);\n }\n});\n","EsriLeaflet.Layers.ImageMapLayer = EsriLeaflet.Layers.RasterLayer.extend({\n\n options: {\n updateInterval: 150,\n format: 'jpgpng',\n transparent: true,\n f: 'json'\n },\n\n query: function(){\n return this._service.query();\n },\n\n identify: function(){\n return this._service.identify();\n },\n\n initialize: function (options) {\n options.url = EsriLeaflet.Util.cleanUrl(options.url);\n this._service = new EsriLeaflet.Services.ImageService(options);\n this._service.on('authenticationrequired requeststart requestend requesterror requestsuccess', this._propagateEvent, this);\n L.Util.setOptions(this, options);\n },\n\n setPixelType: function (pixelType) {\n this.options.pixelType = pixelType;\n this._update();\n return this;\n },\n\n getPixelType: function () {\n return this.options.pixelType;\n },\n\n setBandIds: function (bandIds) {\n if (L.Util.isArray(bandIds)) {\n this.options.bandIds = bandIds.join(',');\n } else {\n this.options.bandIds = bandIds.toString();\n }\n this._update();\n return this;\n },\n\n getBandIds: function () {\n return this.options.bandIds;\n },\n\n setNoData: function (noData, noDataInterpretation) {\n if (L.Util.isArray(noData)) {\n this.options.noData = noData.join(',');\n } else {\n this.options.noData = noData.toString();\n }\n if (noDataInterpretation) {\n this.options.noDataInterpretation = noDataInterpretation;\n }\n this._update();\n return this;\n },\n\n getNoData: function () {\n return this.options.noData;\n },\n\n getNoDataInterpretation: function () {\n return this.options.noDataInterpretation;\n },\n\n setRenderingRule: function(renderingRule) {\n this.options.renderingRule = renderingRule;\n this._update();\n },\n\n getRenderingRule: function() {\n return this.options.renderingRule;\n },\n\n setMosaicRule: function(mosaicRule) {\n this.options.mosaicRule = mosaicRule;\n this._update();\n },\n\n getMosaicRule: function() {\n return this.options.mosaicRule;\n },\n\n _getPopupData: function(e){\n var callback = L.Util.bind(function(error, results, response) {\n if(error) { return; } // we really can't do anything here but authenticate or requesterror will fire\n setTimeout(L.Util.bind(function(){\n this._renderPopup(e.latlng, error, results, response);\n }, this), 300);\n }, this);\n\n var identifyRequest = this.identify().at(e.latlng);\n\n // set mosaic rule for identify task if it is set for layer\n if (this.options.mosaicRule) {\n identifyRequest.setMosaicRule(this.options.mosaicRule);\n // @TODO: force return catalog items too?\n }\n\n // @TODO: set rendering rule? Not sure,\n // sometimes you want raw pixel values\n // if (this.options.renderingRule) {\n // identifyRequest.setRenderingRule(this.options.renderingRule);\n // }\n\n identifyRequest.run(callback);\n\n // set the flags to show the popup\n this._shouldRenderPopup = true;\n this._lastClick = e.latlng;\n },\n\n _buildExportParams: function () {\n var bounds = this._map.getBounds();\n var size = this._map.getSize();\n var ne = this._map.options.crs.project(bounds._northEast);\n var sw = this._map.options.crs.project(bounds._southWest);\n\n var params = {\n bbox: [sw.x, sw.y, ne.x, ne.y].join(','),\n size: size.x + ',' + size.y,\n format: this.options.format,\n transparent: this.options.transparent,\n bboxSR: this.options.bboxSR,\n imageSR: this.options.imageSR\n };\n\n if (this.options.from && this.options.to) {\n params.time = this.options.from.valueOf() + ',' + this.options.to.valueOf();\n }\n\n if (this.options.pixelType) {\n params.pixelType = this.options.pixelType;\n }\n\n if (this.options.interpolation) {\n params.interpolation = this.options.interpolation;\n }\n\n if (this.options.compressionQuality) {\n params.compressionQuality = this.options.compressionQuality;\n }\n\n if (this.options.bandIds) {\n params.bandIds = this.options.bandIds;\n }\n\n if (this.options.noData) {\n params.noData = this.options.noData;\n }\n\n if (this.options.noDataInterpretation) {\n params.noDataInterpretation = this.options.noDataInterpretation;\n }\n\n if (this._service.options.token) {\n params.token = this._service.options.token;\n }\n\n if(this.options.renderingRule) {\n params.renderingRule = JSON.stringify(this.options.renderingRule);\n }\n\n if(this.options.mosaicRule) {\n params.mosaicRule = JSON.stringify(this.options.mosaicRule);\n }\n\n return params;\n },\n\n _requestExport: function (params, bounds) {\n if (this.options.f === 'json') {\n this._service.request('exportImage', params, function(error, response){\n if(error) { return; } // we really can't do anything here but authenticate or requesterror will fire\n this._renderImage(response.href, bounds);\n }, this);\n } else {\n params.f = 'image';\n this._renderImage(this.options.url + 'exportImage' + L.Util.getParamString(params), bounds);\n }\n }\n});\n\nEsriLeaflet.ImageMapLayer = EsriLeaflet.Layers.ImageMapLayer;\n\nEsriLeaflet.Layers.imageMapLayer = function (options) {\n return new EsriLeaflet.Layers.ImageMapLayer(options);\n};\n\nEsriLeaflet.imageMapLayer = function (options) {\n return new EsriLeaflet.Layers.ImageMapLayer(options);\n};\n"]} \ No newline at end of file +{"version":3,"sources":["../../../src/EsriLeaflet.js","../../../src/Util.js","../../../src/Request.js","../../../src/Services/Service.js","../../../src/Services/ImageService.js","../../../src/Tasks/Task.js","../../../src/Tasks/Query.js","../../../src/Tasks/Identify.js","../../../src/Layers/RasterLayer.js","../../../src/Layers/ImageMapLayer.js"],"names":["EsriLeaflet","VERSION","Layers","Services","Controls","Tasks","Util","Support","CORS","window","XMLHttpRequest","pointerEvents","document","documentElement","style","L","esri","clone","obj","target","i","hasOwnProperty","pointsEqual","a","b","length","closeRing","coordinates","push","ringIsClockwise","ringToTest","pt2","total","rLength","pt1","vertexIntersectsVertex","a1","a2","b1","b2","uaT","ubT","uB","ua","ub","arrayIntersectsArray","j","coordinatesContainPoint","point","contains","l","coordinatesContainCoordinates","outer","inner","intersects","convertRingsToGeoJSON","rings","x","outerRing","hole","outerRings","holes","r","ring","slice","polygon","uncontainedHoles","pop","contained","reverse","type","orientRings","poly","output","shift","flattenMultiPolygonRings","raf","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","msRequestAnimationFrame","cb","setTimeout","extentToBounds","extent","sw","LatLng","ymin","xmin","ne","ymax","xmax","LatLngBounds","boundsToExtent","bounds","latLngBounds","getSouthWest","lng","lat","getNorthEast","spatialReference","wkid","arcgisToGeojson","arcgis","idAttribute","geojson","y","points","paths","geometry","attributes","properties","id","OBJECTID","FID","geojsonToArcGIS","result","features","geometries","responseToFeatureCollection","response","objectIdField","objectIdFieldName","fields","name","featureCollection","results","cleanUrl","url","replace","isArcgisOnline","test","geojsonTypeToArcGIS","geoJsonType","arcgisGeometryType","bind","warn","message","console","serialize","params","data","f","key","value","param","Object","prototype","toString","call","JSON","stringify","join","valueOf","encodeURIComponent","createRequest","callback","context","httpRequest","onerror","e","onreadystatechange","falseFn","error","code","readyState","parse","responseText","callbacks","_EsriLeafletCallbacks","Request","request","paramString","requestLength","open","send","get","JSONP","setRequestHeader","post","XMLHTTP","callbackId","script","DomUtil","create","body","src","responseType","abort","_callback","Service","Class","extend","includes","Mixin","Events","options","proxy","useCors","initialize","this","_requestQueue","_authenticating","setOptions","path","_request","metadata","authenticate","token","_runQueue","method","fire","wrappedCallback","_createServiceCallback","apply","service","ImageService","query","Query","identify","IdentifyImage","imageService","Task","generateSetter","endpoint","_service","setters","setter","offset","limit","precision","featureIds","returnGeometry","where","outSr","outFields","within","_setGeometry","spatialRel","overlaps","nearby","latlng","radius","latLng","geometryType","units","distance","inSr","string","between","start","end","time","simplify","map","factor","mapWidth","Math","abs","getBounds","getWest","getEast","maxAllowableOffset","getSize","orderBy","fieldName","order","orderByFields","run","_cleanParams","_trapSQLerrors","count","returnCountOnly","ids","returnIdsOnly","objectIds","returnExtentOnly","pixelSize","layer","getLatLng","GeoJSON","getLayers","feature","toGeoJSON","Identify","RasterLayer","opacity","position","onAdd","_map","_update","limitExecByInterval","updateInterval","crs","sr","split","bboxSR","imageSR","on","_currentImage","_bounds","equals","addLayer","removeLayer","_popup","_getPopupData","_resetPopupState","bindPopup","fn","popupOptions","_shouldRenderPopup","_lastClick","popup","_popupFunction","unbindPopup","closePopup","off","onRemove","addTo","removeFrom","bringToFront","bringToBack","getAttribution","attribution","getOpacity","setOpacity","getTimeRange","from","to","setTimeRange","_renderImage","image","ImageOverlay","once","newImage","oldImage","zoom","getZoom","_animatingZoom","_panTransition","_inProgress","maxZoom","minZoom","_buildExportParams","_requestExport","_renderPopup","content","setLatLng","setContent","openOn","_propagateEvent","ImageMapLayer","format","transparent","setPixelType","pixelType","getPixelType","setBandIds","bandIds","isArray","getBandIds","setNoData","noData","noDataInterpretation","getNoData","getNoDataInterpretation","setRenderingRule","renderingRule","getRenderingRule","setMosaicRule","mosaicRule","getMosaicRule","identifyRequest","at","size","project","_northEast","_southWest","bbox","interpolation","compressionQuality","href","getParamString","imageMapLayer"],"mappings":"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","file":"esri-leaflet-image-service.js","sourcesContent":["var EsriLeaflet = { //jshint ignore:line\n VERSION: '1.0.3',\n Layers: {},\n Services: {},\n Controls: {},\n Tasks: {},\n Util: {},\n Support: {\n CORS: !!(window.XMLHttpRequest && 'withCredentials' in new XMLHttpRequest()),\n pointerEvents: document.documentElement.style.pointerEvents === ''\n }\n};\n\nif(typeof window !== 'undefined' && window.L){\n window.L.esri = EsriLeaflet;\n}\n","(function(EsriLeaflet){\n\n // normalize request animation frame\n var raf = window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.msRequestAnimationFrame ||\n function(cb) { return window.setTimeout(cb, 1000 / 60); };\n\n // shallow object clone for feature properties and attributes\n // from http://jsperf.com/cloning-an-object/2\n function clone(obj) {\n var target = {};\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n target[i] = obj[i];\n }\n }\n return target;\n }\n\n // checks if 2 x,y points are equal\n function pointsEqual(a, b) {\n for (var i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n\n // checks if the first and last points of a ring are equal and closes the ring\n function closeRing(coordinates) {\n if (!pointsEqual(coordinates[0], coordinates[coordinates.length - 1])) {\n coordinates.push(coordinates[0]);\n }\n return coordinates;\n }\n\n // determine if polygon ring coordinates are clockwise. clockwise signifies outer ring, counter-clockwise an inner ring\n // or hole. this logic was found at http://stackoverflow.com/questions/1165647/how-to-determine-if-a-list-of-polygon-\n // points-are-in-clockwise-order\n function ringIsClockwise(ringToTest) {\n var total = 0,i = 0;\n var rLength = ringToTest.length;\n var pt1 = ringToTest[i];\n var pt2;\n for (i; i < rLength - 1; i++) {\n pt2 = ringToTest[i + 1];\n total += (pt2[0] - pt1[0]) * (pt2[1] + pt1[1]);\n pt1 = pt2;\n }\n return (total >= 0);\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L504-L519\n function vertexIntersectsVertex(a1, a2, b1, b2) {\n var uaT = (b2[0] - b1[0]) * (a1[1] - b1[1]) - (b2[1] - b1[1]) * (a1[0] - b1[0]);\n var ubT = (a2[0] - a1[0]) * (a1[1] - b1[1]) - (a2[1] - a1[1]) * (a1[0] - b1[0]);\n var uB = (b2[1] - b1[1]) * (a2[0] - a1[0]) - (b2[0] - b1[0]) * (a2[1] - a1[1]);\n\n if ( uB !== 0 ) {\n var ua = uaT / uB;\n var ub = ubT / uB;\n\n if ( 0 <= ua && ua <= 1 && 0 <= ub && ub <= 1 ) {\n return true;\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L521-L531\n function arrayIntersectsArray(a, b) {\n for (var i = 0; i < a.length - 1; i++) {\n for (var j = 0; j < b.length - 1; j++) {\n if (vertexIntersectsVertex(a[i], a[i + 1], b[j], b[j + 1])) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L470-L480\n function coordinatesContainPoint(coordinates, point) {\n var contains = false;\n for(var i = -1, l = coordinates.length, j = l - 1; ++i < l; j = i) {\n if (((coordinates[i][1] <= point[1] && point[1] < coordinates[j][1]) ||\n (coordinates[j][1] <= point[1] && point[1] < coordinates[i][1])) &&\n (point[0] < (coordinates[j][0] - coordinates[i][0]) * (point[1] - coordinates[i][1]) / (coordinates[j][1] - coordinates[i][1]) + coordinates[i][0])) {\n contains = !contains;\n }\n }\n return contains;\n }\n\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L106-L113\n function coordinatesContainCoordinates(outer, inner){\n var intersects = arrayIntersectsArray(outer, inner);\n var contains = coordinatesContainPoint(outer, inner[0]);\n if(!intersects && contains){\n return true;\n }\n return false;\n }\n\n // do any polygons in this array contain any other polygons in this array?\n // used for checking for holes in arcgis rings\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L117-L172\n function convertRingsToGeoJSON(rings){\n var outerRings = [];\n var holes = [];\n var x; // iterator\n var outerRing; // current outer ring being evaluated\n var hole; // current hole being evaluated\n\n // for each ring\n for (var r = 0; r < rings.length; r++) {\n var ring = closeRing(rings[r].slice(0));\n if(ring.length < 4){\n continue;\n }\n // is this ring an outer ring? is it clockwise?\n if(ringIsClockwise(ring)){\n var polygon = [ ring ];\n outerRings.push(polygon); // push to outer rings\n } else {\n holes.push(ring); // counterclockwise push to holes\n }\n }\n\n var uncontainedHoles = [];\n\n // while there are holes left...\n while(holes.length){\n // pop a hole off out stack\n hole = holes.pop();\n\n // loop over all outer rings and see if they contain our hole.\n var contained = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(coordinatesContainCoordinates(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n contained = true;\n break;\n }\n }\n\n // ring is not contained in any outer ring\n // sometimes this happens https://github.com/Esri/esri-leaflet/issues/320\n if(!contained){\n uncontainedHoles.push(hole);\n }\n }\n\n // if we couldn't match any holes using contains we can try intersects...\n while(uncontainedHoles.length){\n // pop a hole off out stack\n hole = uncontainedHoles.pop();\n\n // loop over all outer rings and see if any intersect our hole.\n var intersects = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(arrayIntersectsArray(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n intersects = true;\n break;\n }\n }\n\n if(!intersects) {\n outerRings.push([hole.reverse()]);\n }\n }\n\n if(outerRings.length === 1){\n return {\n type: 'Polygon',\n coordinates: outerRings[0]\n };\n } else {\n return {\n type: 'MultiPolygon',\n coordinates: outerRings\n };\n }\n }\n\n // This function ensures that rings are oriented in the right directions\n // outer rings are clockwise, holes are counterclockwise\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function orientRings(poly){\n var output = [];\n var polygon = poly.slice(0);\n var outerRing = closeRing(polygon.shift().slice(0));\n if(outerRing.length >= 4){\n if(!ringIsClockwise(outerRing)){\n outerRing.reverse();\n }\n\n output.push(outerRing);\n\n for (var i = 0; i < polygon.length; i++) {\n var hole = closeRing(polygon[i].slice(0));\n if(hole.length >= 4){\n if(ringIsClockwise(hole)){\n hole.reverse();\n }\n output.push(hole);\n }\n }\n }\n\n return output;\n }\n\n // This function flattens holes in multipolygons to one array of polygons\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function flattenMultiPolygonRings(rings){\n var output = [];\n for (var i = 0; i < rings.length; i++) {\n var polygon = orientRings(rings[i]);\n for (var x = polygon.length - 1; x >= 0; x--) {\n var ring = polygon[x].slice(0);\n output.push(ring);\n }\n }\n return output;\n }\n\n // convert an extent (ArcGIS) to LatLngBounds (Leaflet)\n EsriLeaflet.Util.extentToBounds = function(extent){\n var sw = new L.LatLng(extent.ymin, extent.xmin);\n var ne = new L.LatLng(extent.ymax, extent.xmax);\n return new L.LatLngBounds(sw, ne);\n };\n\n // convert an LatLngBounds (Leaflet) to extent (ArcGIS)\n EsriLeaflet.Util.boundsToExtent = function(bounds) {\n bounds = L.latLngBounds(bounds);\n return {\n 'xmin': bounds.getSouthWest().lng,\n 'ymin': bounds.getSouthWest().lat,\n 'xmax': bounds.getNorthEast().lng,\n 'ymax': bounds.getNorthEast().lat,\n 'spatialReference': {\n 'wkid' : 4326\n }\n };\n };\n\n EsriLeaflet.Util.arcgisToGeojson = function (arcgis, idAttribute){\n var geojson = {};\n\n if(typeof arcgis.x === 'number' && typeof arcgis.y === 'number'){\n geojson.type = 'Point';\n geojson.coordinates = [arcgis.x, arcgis.y];\n }\n\n if(arcgis.points){\n geojson.type = 'MultiPoint';\n geojson.coordinates = arcgis.points.slice(0);\n }\n\n if(arcgis.paths) {\n if(arcgis.paths.length === 1){\n geojson.type = 'LineString';\n geojson.coordinates = arcgis.paths[0].slice(0);\n } else {\n geojson.type = 'MultiLineString';\n geojson.coordinates = arcgis.paths.slice(0);\n }\n }\n\n if(arcgis.rings) {\n geojson = convertRingsToGeoJSON(arcgis.rings.slice(0));\n }\n\n if(arcgis.geometry || arcgis.attributes) {\n geojson.type = 'Feature';\n geojson.geometry = (arcgis.geometry) ? EsriLeaflet.Util.arcgisToGeojson(arcgis.geometry) : null;\n geojson.properties = (arcgis.attributes) ? clone(arcgis.attributes) : null;\n if(arcgis.attributes) {\n geojson.id = arcgis.attributes[idAttribute] || arcgis.attributes.OBJECTID || arcgis.attributes.FID;\n }\n }\n\n return geojson;\n };\n\n // GeoJSON -> ArcGIS\n EsriLeaflet.Util.geojsonToArcGIS = function(geojson, idAttribute){\n idAttribute = idAttribute || 'OBJECTID';\n var spatialReference = { wkid: 4326 };\n var result = {};\n var i;\n\n switch(geojson.type){\n case 'Point':\n result.x = geojson.coordinates[0];\n result.y = geojson.coordinates[1];\n result.spatialReference = spatialReference;\n break;\n case 'MultiPoint':\n result.points = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'LineString':\n result.paths = [geojson.coordinates.slice(0)];\n result.spatialReference = spatialReference;\n break;\n case 'MultiLineString':\n result.paths = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'Polygon':\n result.rings = orientRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'MultiPolygon':\n result.rings = flattenMultiPolygonRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'Feature':\n if(geojson.geometry) {\n result.geometry = EsriLeaflet.Util.geojsonToArcGIS(geojson.geometry, idAttribute);\n }\n result.attributes = (geojson.properties) ? clone(geojson.properties) : {};\n if(geojson.id){\n result.attributes[idAttribute] = geojson.id;\n }\n break;\n case 'FeatureCollection':\n result = [];\n for (i = 0; i < geojson.features.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.features[i], idAttribute));\n }\n break;\n case 'GeometryCollection':\n result = [];\n for (i = 0; i < geojson.geometries.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.geometries[i], idAttribute));\n }\n break;\n }\n\n return result;\n };\n\n EsriLeaflet.Util.responseToFeatureCollection = function(response, idAttribute){\n var objectIdField;\n\n if(idAttribute){\n objectIdField = idAttribute;\n } else if(response.objectIdFieldName){\n objectIdField = response.objectIdFieldName;\n } else if(response.fields) {\n for (var j = 0; j <= response.fields.length - 1; j++) {\n if(response.fields[j].type === 'esriFieldTypeOID') {\n objectIdField = response.fields[j].name;\n break;\n }\n }\n } else {\n objectIdField = 'OBJECTID';\n }\n\n var featureCollection = {\n type: 'FeatureCollection',\n features: []\n };\n var features = response.features || response.results;\n if(features.length){\n for (var i = features.length - 1; i >= 0; i--) {\n featureCollection.features.push(EsriLeaflet.Util.arcgisToGeojson(features[i], objectIdField));\n }\n }\n\n return featureCollection;\n };\n\n // trim url whitespace and add a trailing slash if needed\n EsriLeaflet.Util.cleanUrl = function(url){\n //trim leading and trailing spaces, but not spaces inside the url\n url = url.replace(/^\\s+|\\s+$|\\A\\s+|\\s+\\z/g, '');\n\n //add a trailing slash to the url if the user omitted it\n if(url[url.length-1] !== '/'){\n url += '/';\n }\n\n return url;\n };\n\n EsriLeaflet.Util.isArcgisOnline = function(url){\n /* hosted feature services can emit geojson natively.\n our check for 'geojson' support will need to be revisted\n once the functionality makes its way to ArcGIS Server*/\n return (/\\.arcgis\\.com.*?FeatureServer/g).test(url);\n };\n\n EsriLeaflet.Util.geojsonTypeToArcGIS = function (geoJsonType) {\n var arcgisGeometryType;\n switch (geoJsonType) {\n case 'Point':\n arcgisGeometryType = 'esriGeometryPoint';\n break;\n case 'MultiPoint':\n arcgisGeometryType = 'esriGeometryMultipoint';\n break;\n case 'LineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'MultiLineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'Polygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n case 'MultiPolygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n }\n return arcgisGeometryType;\n };\n\n EsriLeaflet.Util.requestAnimationFrame = L.Util.bind(raf, window);\n\n EsriLeaflet.Util.warn = function (message) {\n if(console && console.warn) {\n console.warn(message);\n }\n };\n\n})(EsriLeaflet);","(function(EsriLeaflet){\n\n var callbacks = 0;\n\n window._EsriLeafletCallbacks = {};\n\n function serialize(params){\n var data = '';\n\n params.f = params.f || 'json';\n\n for (var key in params){\n if(params.hasOwnProperty(key)){\n var param = params[key];\n var type = Object.prototype.toString.call(param);\n var value;\n\n if(data.length){\n data += '&';\n }\n\n if (type === '[object Array]'){\n value = (Object.prototype.toString.call(param[0]) === '[object Object]') ? JSON.stringify(param) : param.join(',');\n } else if (type === '[object Object]') {\n value = JSON.stringify(param);\n } else if (type === '[object Date]'){\n value = param.valueOf();\n } else {\n value = param;\n }\n\n data += encodeURIComponent(key) + '=' + encodeURIComponent(value);\n }\n }\n\n return data;\n }\n\n function createRequest(callback, context){\n var httpRequest = new XMLHttpRequest();\n\n httpRequest.onerror = function(e) {\n httpRequest.onreadystatechange = L.Util.falseFn;\n\n callback.call(context, {\n error: {\n code: 500,\n message: 'XMLHttpRequest error'\n }\n }, null);\n };\n\n httpRequest.onreadystatechange = function(){\n var response;\n var error;\n\n if (httpRequest.readyState === 4) {\n try {\n response = JSON.parse(httpRequest.responseText);\n } catch(e) {\n response = null;\n error = {\n code: 500,\n message: 'Could not parse response as JSON. This could also be caused by a CORS or XMLHttpRequest error.'\n };\n }\n\n if (!error && response.error) {\n error = response.error;\n response = null;\n }\n\n httpRequest.onerror = L.Util.falseFn;\n\n callback.call(context, error, response);\n }\n };\n\n return httpRequest;\n }\n\n // AJAX handlers for CORS (modern browsers) or JSONP (older browsers)\n EsriLeaflet.Request = {\n request: function(url, params, callback, context){\n var paramString = serialize(params);\n var httpRequest = createRequest(callback, context);\n var requestLength = (url + '?' + paramString).length;\n\n // request is less then 2000 characters and the browser supports CORS, make GET request with XMLHttpRequest\n if(requestLength <= 2000 && L.esri.Support.CORS){\n httpRequest.open('GET', url + '?' + paramString);\n httpRequest.send(null);\n\n // request is less more then 2000 characters and the browser supports CORS, make POST request with XMLHttpRequest\n } else if (requestLength > 2000 && L.esri.Support.CORS){\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(paramString);\n\n // request is less more then 2000 characters and the browser does not support CORS, make a JSONP request\n } else if(requestLength <= 2000 && !L.esri.Support.CORS){\n return L.esri.Request.get.JSONP(url, params, callback, context);\n\n // request is longer then 2000 characters and the browser does not support CORS, log a warning\n } else {\n EsriLeaflet.Util.warn('a request to ' + url + ' was longer then 2000 characters and this browser cannot make a cross-domain post request. Please use a proxy http://esri.github.io/esri-leaflet/api-reference/request.html');\n return;\n }\n\n return httpRequest;\n },\n\n post: {\n XMLHTTP: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(serialize(params));\n\n return httpRequest;\n }\n },\n\n get: {\n CORS: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n\n httpRequest.open('GET', url + '?' + serialize(params), true);\n httpRequest.send(null);\n\n return httpRequest;\n },\n JSONP: function(url, params, callback, context){\n var callbackId = 'c' + callbacks;\n\n params.callback = 'window._EsriLeafletCallbacks.' + callbackId;\n\n var script = L.DomUtil.create('script', null, document.body);\n script.type = 'text/javascript';\n script.src = url + '?' + serialize(params);\n script.id = callbackId;\n\n window._EsriLeafletCallbacks[callbackId] = function(response){\n if(window._EsriLeafletCallbacks[callbackId] !== true){\n var error;\n var responseType = Object.prototype.toString.call(response);\n\n if(!(responseType === '[object Object]' || responseType === '[object Array]')){\n error = {\n error: {\n code: 500,\n message: 'Expected array or object as JSONP response'\n }\n };\n response = null;\n }\n\n if (!error && response.error) {\n error = response;\n response = null;\n }\n\n callback.call(context, error, response);\n window._EsriLeafletCallbacks[callbackId] = true;\n }\n };\n\n callbacks++;\n\n return {\n id: callbackId,\n url: script.src,\n abort: function(){\n window._EsriLeafletCallbacks._callback[callbackId]({\n code: 0,\n message: 'Request aborted.'\n });\n }\n };\n }\n }\n };\n\n // choose the correct AJAX handler depending on CORS support\n EsriLeaflet.get = (EsriLeaflet.Support.CORS) ? EsriLeaflet.Request.get.CORS : EsriLeaflet.Request.get.JSONP;\n\n // always use XMLHttpRequest for posts\n EsriLeaflet.post = EsriLeaflet.Request.post.XMLHTTP;\n\n // expose a common request method the uses GET\\POST based on request length\n EsriLeaflet.request = EsriLeaflet.Request.request;\n\n})(EsriLeaflet);","EsriLeaflet.Services.Service = L.Class.extend({\n\n includes: L.Mixin.Events,\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n initialize: function (options) {\n options = options || {};\n this._requestQueue = [];\n this._authenticating = false;\n L.Util.setOptions(this, options);\n this.options.url = EsriLeaflet.Util.cleanUrl(this.options.url);\n },\n\n get: function (path, params, callback, context) {\n return this._request('get', path, params, callback, context);\n },\n\n post: function (path, params, callback, context) {\n return this._request('post', path, params, callback, context);\n },\n\n request: function (path, params, callback, context) {\n return this._request('request', path, params, callback, context);\n },\n\n metadata: function (callback, context) {\n return this._request('get', '', {}, callback, context);\n },\n\n authenticate: function(token){\n this._authenticating = false;\n this.options.token = token;\n this._runQueue();\n return this;\n },\n\n _request: function(method, path, params, callback, context){\n this.fire('requeststart', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n\n var wrappedCallback = this._createServiceCallback(method, path, params, callback, context);\n\n if (this.options.token) {\n params.token = this.options.token;\n }\n\n if (this._authenticating) {\n this._requestQueue.push([method, path, params, callback, context]);\n return;\n } else {\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, wrappedCallback);\n } else {\n return EsriLeaflet[method](url, params, wrappedCallback);\n }\n }\n },\n\n _createServiceCallback: function(method, path, params, callback, context){\n return L.Util.bind(function(error, response){\n\n if (error && (error.code === 499 || error.code === 498)) {\n this._authenticating = true;\n\n this._requestQueue.push([method, path, params, callback, context]);\n\n // fire an event for users to handle and re-authenticate\n this.fire('authenticationrequired', {\n authenticate: L.Util.bind(this.authenticate, this)\n });\n\n // if the user has access to a callback they can handle the auth error\n error.authenticate = L.Util.bind(this.authenticate, this);\n }\n\n callback.call(context, error, response);\n\n if(error) {\n this.fire('requesterror', {\n url: this.options.url + path,\n params: params,\n message: error.message,\n code: error.code,\n method: method\n });\n } else {\n this.fire('requestsuccess', {\n url: this.options.url + path,\n params: params,\n response: response,\n method: method\n });\n }\n\n this.fire('requestend', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n }, this);\n },\n\n _runQueue: function(){\n for (var i = this._requestQueue.length - 1; i >= 0; i--) {\n var request = this._requestQueue[i];\n var method = request.shift();\n this[method].apply(this, request);\n }\n this._requestQueue = [];\n }\n\n});\n\nEsriLeaflet.Services.service = function(params){\n return new EsriLeaflet.Services.Service(params);\n};\n","EsriLeaflet.Services.ImageService = EsriLeaflet.Services.Service.extend({\n\n query: function () {\n return new EsriLeaflet.Tasks.Query(this);\n },\n\n identify: function() {\n return new EsriLeaflet.Tasks.IdentifyImage(this);\n }\n});\n\nEsriLeaflet.Services.imageService = function(params){\n return new EsriLeaflet.Services.ImageService(params);\n};","EsriLeaflet.Tasks.Task = L.Class.extend({\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n //Generate a method for each methodName:paramName in the setters for this task.\n generateSetter: function(param, context){\n return L.Util.bind(function(value){\n this.params[param] = value;\n return this;\n }, context);\n },\n\n initialize: function(endpoint){\n // endpoint can be either a url (and options) for an ArcGIS Rest Service or an instance of EsriLeaflet.Service\n if(endpoint.request && endpoint.options){\n this._service = endpoint;\n L.Util.setOptions(this, endpoint.options);\n } else {\n L.Util.setOptions(this, endpoint);\n this.options.url = L.esri.Util.cleanUrl(endpoint.url);\n }\n\n // clone default params into this object\n this.params = L.Util.extend({}, this.params || {});\n\n // generate setter methods based on the setters object implimented a child class\n if(this.setters){\n for (var setter in this.setters){\n var param = this.setters[setter];\n this[setter] = this.generateSetter(param, this);\n }\n }\n },\n\n token: function(token){\n if(this._service){\n this._service.authenticate(token);\n } else {\n this.params.token = token;\n }\n return this;\n },\n\n request: function(callback, context){\n if(this._service){\n return this._service.request(this.path, this.params, callback, context);\n } else {\n return this._request('request', this.path, this.params, callback, context);\n }\n },\n\n _request: function(method, path, params, callback, context){\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, callback, context);\n } else{\n return EsriLeaflet[method](url, params, callback, context);\n }\n }\n});","EsriLeaflet.Tasks.Query = EsriLeaflet.Tasks.Task.extend({\n setters: {\n 'offset': 'offset',\n 'limit': 'limit',\n 'fields': 'outFields',\n 'precision': 'geometryPrecision',\n 'featureIds': 'objectIds',\n 'returnGeometry': 'returnGeometry',\n 'token': 'token'\n },\n\n path: 'query',\n\n params: {\n returnGeometry: true,\n where: '1=1',\n outSr: 4326,\n outFields: '*'\n },\n\n within: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelContains'; // will make code read layer within geometry, to the api this will reads geometry contains layer\n return this;\n },\n\n intersects: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelIntersects';\n return this;\n },\n\n contains: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelWithin'; // will make code read layer contains geometry, to the api this will reads geometry within layer\n return this;\n },\n\n // crosses: function(geometry){\n // this._setGeometry(geometry);\n // this.params.spatialRel = 'esriSpatialRelCrosses';\n // return this;\n // },\n\n // touches: function(geometry){\n // this._setGeometry(geometry);\n // this.params.spatialRel = 'esriSpatialRelTouches';\n // return this;\n // },\n\n overlaps: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelOverlaps';\n return this;\n },\n\n // only valid for Feature Services running on ArcGIS Server 10.3 or ArcGIS Online\n nearby: function(latlng, radius){\n latlng = L.latLng(latlng);\n this.params.geometry = [latlng.lng, latlng.lat];\n this.params.geometryType = 'esriGeometryPoint';\n this.params.spatialRel = 'esriSpatialRelIntersects';\n this.params.units = 'esriSRUnit_Meter';\n this.params.distance = radius;\n this.params.inSr = 4326;\n return this;\n },\n\n where: function(string){\n // instead of converting double-quotes to single quotes, pass as is, and provide a more informative message if a 400 is encountered\n this.params.where = string;\n return this;\n },\n\n between: function(start, end){\n this.params.time = [start.valueOf(), end.valueOf()];\n return this;\n },\n\n simplify: function(map, factor){\n var mapWidth = Math.abs(map.getBounds().getWest() - map.getBounds().getEast());\n this.params.maxAllowableOffset = (mapWidth / map.getSize().y) * factor;\n return this;\n },\n\n orderBy: function(fieldName, order){\n order = order || 'ASC';\n this.params.orderByFields = (this.params.orderByFields) ? this.params.orderByFields + ',' : '';\n this.params.orderByFields += ([fieldName, order]).join(' ');\n return this;\n },\n\n run: function(callback, context){\n this._cleanParams();\n\n // if the service is hosted on arcgis online request geojson directly\n if(EsriLeaflet.Util.isArcgisOnline(this.options.url)){\n this.params.f = 'geojson';\n\n return this.request(function(error, response){\n this._trapSQLerrors(error);\n callback.call(context, error, response, response);\n }, this);\n\n // otherwise convert it in the callback then pass it on\n } else {\n return this.request(function(error, response){\n this._trapSQLerrors(error);\n callback.call(context, error, (response && EsriLeaflet.Util.responseToFeatureCollection(response)), response);\n }, this);\n }\n },\n\n count: function(callback, context){\n this._cleanParams();\n this.params.returnCountOnly = true;\n return this.request(function(error, response){\n callback.call(this, error, (response && response.count), response);\n }, context);\n },\n\n ids: function(callback, context){\n this._cleanParams();\n this.params.returnIdsOnly = true;\n return this.request(function(error, response){\n callback.call(this, error, (response && response.objectIds), response);\n }, context);\n },\n\n // only valid for Feature Services running on ArcGIS Server 10.3 or ArcGIS Online\n bounds: function(callback, context){\n this._cleanParams();\n this.params.returnExtentOnly = true;\n return this.request(function(error, response){\n callback.call(context, error, (response && response.extent && EsriLeaflet.Util.extentToBounds(response.extent)), response);\n }, context);\n },\n\n // only valid for image services\n pixelSize: function(point){\n point = L.point(point);\n this.params.pixelSize = [point.x,point.y];\n return this;\n },\n\n // only valid for map services\n layer: function(layer){\n this.path = layer + '/query';\n return this;\n },\n\n _trapSQLerrors: function(error){\n if (error){\n if (error.code === '400'){\n EsriLeaflet.Util.warn('one common syntax error in query requests is encasing string values in double quotes instead of single quotes');\n }\n }\n },\n\n _cleanParams: function(){\n delete this.params.returnIdsOnly;\n delete this.params.returnExtentOnly;\n delete this.params.returnCountOnly;\n },\n\n _setGeometry: function(geometry) {\n this.params.inSr = 4326;\n\n // convert bounds to extent and finish\n if ( geometry instanceof L.LatLngBounds ) {\n // set geometry + geometryType\n this.params.geometry = EsriLeaflet.Util.boundsToExtent(geometry);\n this.params.geometryType = 'esriGeometryEnvelope';\n return;\n }\n\n // convert L.Marker > L.LatLng\n if(geometry.getLatLng){\n geometry = geometry.getLatLng();\n }\n\n // convert L.LatLng to a geojson point and continue;\n if (geometry instanceof L.LatLng) {\n geometry = {\n type: 'Point',\n coordinates: [geometry.lng, geometry.lat]\n };\n }\n\n // handle L.GeoJSON, pull out the first geometry\n if ( geometry instanceof L.GeoJSON ) {\n //reassign geometry to the GeoJSON value (we are assuming that only one feature is present)\n geometry = geometry.getLayers()[0].feature.geometry;\n this.params.geometry = EsriLeaflet.Util.geojsonToArcGIS(geometry);\n this.params.geometryType = EsriLeaflet.Util.geojsonTypeToArcGIS(geometry.type);\n }\n\n // Handle L.Polyline and L.Polygon\n if (geometry.toGeoJSON) {\n geometry = geometry.toGeoJSON();\n }\n\n // handle GeoJSON feature by pulling out the geometry\n if ( geometry.type === 'Feature' ) {\n // get the geometry of the geojson feature\n geometry = geometry.geometry;\n }\n\n // confirm that our GeoJSON is a point, line or polygon\n if ( geometry.type === 'Point' || geometry.type === 'LineString' || geometry.type === 'Polygon') {\n this.params.geometry = EsriLeaflet.Util.geojsonToArcGIS(geometry);\n this.params.geometryType = EsriLeaflet.Util.geojsonTypeToArcGIS(geometry.type);\n return;\n }\n\n // warn the user if we havn't found a\n /* global console */\n EsriLeaflet.Util.warn('invalid geometry passed to spatial query. Should be an L.LatLng, L.LatLngBounds or L.Marker or a GeoJSON Point Line or Polygon object');\n\n return;\n }\n});\n\nEsriLeaflet.Tasks.query = function(params){\n return new EsriLeaflet.Tasks.Query(params);\n};","EsriLeaflet.Tasks.Identify = EsriLeaflet.Tasks.Task.extend({\n path: 'identify',\n\n between: function(start, end){\n this.params.time = [start.valueOf(), end.valueOf()];\n return this;\n }\n});\n","EsriLeaflet.Layers.RasterLayer = L.Class.extend({\n includes: L.Mixin.Events,\n\n options: {\n opacity: 1,\n position: 'front',\n f: 'image'\n },\n\n onAdd: function (map) {\n this._map = map;\n\n this._update = L.Util.limitExecByInterval(this._update, this.options.updateInterval, this);\n\n if (map.options.crs && map.options.crs.code) {\n var sr = map.options.crs.code.split(':')[1];\n this.options.bboxSR = sr;\n this.options.imageSR = sr;\n }\n\n map.on('moveend', this._update, this);\n\n // if we had an image loaded and it matches the\n // current bounds show the image otherwise remove it\n if(this._currentImage && this._currentImage._bounds.equals(this._map.getBounds())){\n map.addLayer(this._currentImage);\n } else if(this._currentImage) {\n this._map.removeLayer(this._currentImage);\n this._currentImage = null;\n }\n\n this._update();\n\n if(this._popup){\n this._map.on('click', this._getPopupData, this);\n this._map.on('dblclick', this._resetPopupState, this);\n }\n },\n\n bindPopup: function(fn, popupOptions){\n this._shouldRenderPopup = false;\n this._lastClick = false;\n this._popup = L.popup(popupOptions);\n this._popupFunction = fn;\n if(this._map){\n this._map.on('click', this._getPopupData, this);\n this._map.on('dblclick', this._resetPopupState, this);\n }\n return this;\n },\n\n unbindPopup: function(){\n if(this._map){\n this._map.closePopup(this._popup);\n this._map.off('click', this._getPopupData, this);\n this._map.off('dblclick', this._resetPopupState, this);\n }\n this._popup = false;\n return this;\n },\n\n onRemove: function (map) {\n if (this._currentImage) {\n this._map.removeLayer(this._currentImage);\n }\n\n if(this._popup){\n this._map.off('click', this._getPopupData, this);\n this._map.off('dblclick', this._resetPopupState, this);\n }\n\n this._map.off('moveend', this._update, this);\n this._map = null;\n },\n\n addTo: function(map){\n map.addLayer(this);\n return this;\n },\n\n removeFrom: function(map){\n map.removeLayer(this);\n return this;\n },\n\n bringToFront: function(){\n this.options.position = 'front';\n if(this._currentImage){\n this._currentImage.bringToFront();\n }\n return this;\n },\n\n bringToBack: function(){\n this.options.position = 'back';\n if(this._currentImage){\n this._currentImage.bringToBack();\n }\n return this;\n },\n\n getAttribution: function () {\n return this.options.attribution;\n },\n\n getOpacity: function(){\n return this.options.opacity;\n },\n\n setOpacity: function(opacity){\n this.options.opacity = opacity;\n this._currentImage.setOpacity(opacity);\n return this;\n },\n\n getTimeRange: function(){\n return [this.options.from, this.options.to];\n },\n\n setTimeRange: function(from, to){\n this.options.from = from;\n this.options.to = to;\n this._update();\n return this;\n },\n\n metadata: function(callback, context){\n this._service.metadata(callback, context);\n return this;\n },\n\n authenticate: function(token){\n this._service.authenticate(token);\n return this;\n },\n\n _renderImage: function(url, bounds){\n if(this._map){\n // create a new image overlay and add it to the map\n // to start loading the image\n // opacity is 0 while the image is loading\n var image = new L.ImageOverlay(url, bounds, {\n opacity: 0\n }).addTo(this._map);\n\n // once the image loads\n image.once('load', function(e){\n var newImage = e.target;\n var oldImage = this._currentImage;\n\n // if the bounds of this image matches the bounds that\n // _renderImage was called with and we have a map with the same bounds\n // hide the old image if there is one and set the opacity\n // of the new image otherwise remove the new image\n if(newImage._bounds.equals(bounds) && newImage._bounds.equals(this._map.getBounds())){\n this._currentImage = newImage;\n\n if(this.options.position === 'front'){\n this.bringToFront();\n } else {\n this.bringToBack();\n }\n\n if(this._map && this._currentImage._map){\n this._currentImage.setOpacity(this.options.opacity);\n } else {\n this._currentImage._map.removeLayer(this._currentImage);\n }\n\n if(oldImage && this._map) {\n this._map.removeLayer(oldImage);\n }\n\n if(oldImage && oldImage._map){\n oldImage._map.removeLayer(oldImage);\n }\n } else {\n this._map.removeLayer(newImage);\n }\n\n this.fire('load', {\n bounds: bounds\n });\n\n }, this);\n\n this.fire('loading', {\n bounds: bounds\n });\n }\n },\n\n _update: function () {\n if(!this._map){\n return;\n }\n\n var zoom = this._map.getZoom();\n var bounds = this._map.getBounds();\n\n if(this._animatingZoom){\n return;\n }\n\n if (this._map._panTransition && this._map._panTransition._inProgress) {\n return;\n }\n\n if (zoom > this.options.maxZoom || zoom < this.options.minZoom) {\n if (this._currentImage) {\n this._currentImage._map.removeLayer(this._currentImage);\n }\n return;\n }\n var params = this._buildExportParams();\n\n this._requestExport(params, bounds);\n },\n\n // TODO: refactor these into raster layer\n _renderPopup: function(latlng, error, results, response){\n latlng = L.latLng(latlng);\n if(this._shouldRenderPopup && this._lastClick.equals(latlng)){\n //add the popup to the map where the mouse was clicked at\n var content = this._popupFunction(error, results, response);\n if (content) {\n this._popup.setLatLng(latlng).setContent(content).openOn(this._map);\n }\n }\n },\n\n _resetPopupState: function(e){\n this._shouldRenderPopup = false;\n this._lastClick = e.latlng;\n },\n\n // from https://github.com/Leaflet/Leaflet/blob/v0.7.2/src/layer/FeatureGroup.js\n // @TODO remove at Leaflet 0.8\n _propagateEvent: function (e) {\n e = L.extend({\n layer: e.target,\n target: this\n }, e);\n this.fire(e.type, e);\n }\n});\n","EsriLeaflet.Layers.ImageMapLayer = EsriLeaflet.Layers.RasterLayer.extend({\n\n options: {\n updateInterval: 150,\n format: 'jpgpng',\n transparent: true,\n f: 'json'\n },\n\n query: function(){\n return this._service.query();\n },\n\n identify: function(){\n return this._service.identify();\n },\n\n initialize: function (options) {\n options.url = EsriLeaflet.Util.cleanUrl(options.url);\n this._service = new EsriLeaflet.Services.ImageService(options);\n this._service.on('authenticationrequired requeststart requestend requesterror requestsuccess', this._propagateEvent, this);\n L.Util.setOptions(this, options);\n },\n\n setPixelType: function (pixelType) {\n this.options.pixelType = pixelType;\n this._update();\n return this;\n },\n\n getPixelType: function () {\n return this.options.pixelType;\n },\n\n setBandIds: function (bandIds) {\n if (L.Util.isArray(bandIds)) {\n this.options.bandIds = bandIds.join(',');\n } else {\n this.options.bandIds = bandIds.toString();\n }\n this._update();\n return this;\n },\n\n getBandIds: function () {\n return this.options.bandIds;\n },\n\n setNoData: function (noData, noDataInterpretation) {\n if (L.Util.isArray(noData)) {\n this.options.noData = noData.join(',');\n } else {\n this.options.noData = noData.toString();\n }\n if (noDataInterpretation) {\n this.options.noDataInterpretation = noDataInterpretation;\n }\n this._update();\n return this;\n },\n\n getNoData: function () {\n return this.options.noData;\n },\n\n getNoDataInterpretation: function () {\n return this.options.noDataInterpretation;\n },\n\n setRenderingRule: function(renderingRule) {\n this.options.renderingRule = renderingRule;\n this._update();\n },\n\n getRenderingRule: function() {\n return this.options.renderingRule;\n },\n\n setMosaicRule: function(mosaicRule) {\n this.options.mosaicRule = mosaicRule;\n this._update();\n },\n\n getMosaicRule: function() {\n return this.options.mosaicRule;\n },\n\n _getPopupData: function(e){\n var callback = L.Util.bind(function(error, results, response) {\n if(error) { return; } // we really can't do anything here but authenticate or requesterror will fire\n setTimeout(L.Util.bind(function(){\n this._renderPopup(e.latlng, error, results, response);\n }, this), 300);\n }, this);\n\n var identifyRequest = this.identify().at(e.latlng);\n\n // set mosaic rule for identify task if it is set for layer\n if (this.options.mosaicRule) {\n identifyRequest.setMosaicRule(this.options.mosaicRule);\n // @TODO: force return catalog items too?\n }\n\n // @TODO: set rendering rule? Not sure,\n // sometimes you want raw pixel values\n // if (this.options.renderingRule) {\n // identifyRequest.setRenderingRule(this.options.renderingRule);\n // }\n\n identifyRequest.run(callback);\n\n // set the flags to show the popup\n this._shouldRenderPopup = true;\n this._lastClick = e.latlng;\n },\n\n _buildExportParams: function () {\n var bounds = this._map.getBounds();\n var size = this._map.getSize();\n var ne = this._map.options.crs.project(bounds._northEast);\n var sw = this._map.options.crs.project(bounds._southWest);\n\n var params = {\n bbox: [sw.x, sw.y, ne.x, ne.y].join(','),\n size: size.x + ',' + size.y,\n format: this.options.format,\n transparent: this.options.transparent,\n bboxSR: this.options.bboxSR,\n imageSR: this.options.imageSR\n };\n\n if (this.options.from && this.options.to) {\n params.time = this.options.from.valueOf() + ',' + this.options.to.valueOf();\n }\n\n if (this.options.pixelType) {\n params.pixelType = this.options.pixelType;\n }\n\n if (this.options.interpolation) {\n params.interpolation = this.options.interpolation;\n }\n\n if (this.options.compressionQuality) {\n params.compressionQuality = this.options.compressionQuality;\n }\n\n if (this.options.bandIds) {\n params.bandIds = this.options.bandIds;\n }\n\n if (this.options.noData) {\n params.noData = this.options.noData;\n }\n\n if (this.options.noDataInterpretation) {\n params.noDataInterpretation = this.options.noDataInterpretation;\n }\n\n if (this._service.options.token) {\n params.token = this._service.options.token;\n }\n\n if(this.options.renderingRule) {\n params.renderingRule = JSON.stringify(this.options.renderingRule);\n }\n\n if(this.options.mosaicRule) {\n params.mosaicRule = JSON.stringify(this.options.mosaicRule);\n }\n\n return params;\n },\n\n _requestExport: function (params, bounds) {\n if (this.options.f === 'json') {\n this._service.request('exportImage', params, function(error, response){\n if(error) { return; } // we really can't do anything here but authenticate or requesterror will fire\n this._renderImage(response.href, bounds);\n }, this);\n } else {\n params.f = 'image';\n this._renderImage(this.options.url + 'exportImage' + L.Util.getParamString(params), bounds);\n }\n }\n});\n\nEsriLeaflet.ImageMapLayer = EsriLeaflet.Layers.ImageMapLayer;\n\nEsriLeaflet.Layers.imageMapLayer = function (options) {\n return new EsriLeaflet.Layers.ImageMapLayer(options);\n};\n\nEsriLeaflet.imageMapLayer = function (options) {\n return new EsriLeaflet.Layers.ImageMapLayer(options);\n};\n"]} \ No newline at end of file diff --git a/dist/builds/map-service/esri-leaflet-map-service-src.js b/dist/builds/map-service/esri-leaflet-map-service-src.js index d52e12893..c7aafbe0c 100644 --- a/dist/builds/map-service/esri-leaflet-map-service-src.js +++ b/dist/builds/map-service/esri-leaflet-map-service-src.js @@ -1,5 +1,5 @@ -/*! esri-leaflet - v1.0.2 - 2015-12-31 -* Copyright (c) 2015 Environmental Systems Research Institute, Inc. +/*! esri-leaflet - v1.0.3 - 2016-02-22 +* Copyright (c) 2016 Environmental Systems Research Institute, Inc. * Apache License*/ (function (factory) { //define an AMD module that relies on 'leaflet' @@ -17,7 +17,7 @@ } }(function (L) { var EsriLeaflet = { //jshint ignore:line - VERSION: '1.0.2', + VERSION: '1.0.3', Layers: {}, Services: {}, Controls: {}, @@ -1447,6 +1447,9 @@ EsriLeaflet.Layers.RasterLayer = L.Class.extend({ } if (zoom > this.options.maxZoom || zoom < this.options.minZoom) { + if (this._currentImage) { + this._currentImage._map.removeLayer(this._currentImage); + } return; } var params = this._buildExportParams(); diff --git a/dist/builds/map-service/esri-leaflet-map-service-src.js.map b/dist/builds/map-service/esri-leaflet-map-service-src.js.map index ad014ba24..c30ad267b 100644 --- a/dist/builds/map-service/esri-leaflet-map-service-src.js.map +++ b/dist/builds/map-service/esri-leaflet-map-service-src.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../../src/EsriLeaflet.js","../../../src/Util.js","../../../src/Request.js","../../../src/Services/Service.js","../../../src/Services/MapService.js","../../../src/Tasks/Task.js","../../../src/Tasks/Identify.js","../../../src/Tasks/IdentifyFeatures.js","../../../src/Tasks/Query.js","../../../src/Tasks/Find.js","../../../src/Layers/RasterLayer.js","../../../src/Layers/DynamicMapLayer.js","../../../src/Layers/TiledMapLayer.js"],"names":[],"mappings":"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","file":"esri-leaflet-map-service-src.js","sourcesContent":["var EsriLeaflet = { //jshint ignore:line\n VERSION: '1.0.2',\n Layers: {},\n Services: {},\n Controls: {},\n Tasks: {},\n Util: {},\n Support: {\n CORS: !!(window.XMLHttpRequest && 'withCredentials' in new XMLHttpRequest()),\n pointerEvents: document.documentElement.style.pointerEvents === ''\n }\n};\n\nif(typeof window !== 'undefined' && window.L){\n window.L.esri = EsriLeaflet;\n}\n","(function(EsriLeaflet){\n\n // normalize request animation frame\n var raf = window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.msRequestAnimationFrame ||\n function(cb) { return window.setTimeout(cb, 1000 / 60); };\n\n // shallow object clone for feature properties and attributes\n // from http://jsperf.com/cloning-an-object/2\n function clone(obj) {\n var target = {};\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n target[i] = obj[i];\n }\n }\n return target;\n }\n\n // checks if 2 x,y points are equal\n function pointsEqual(a, b) {\n for (var i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n\n // checks if the first and last points of a ring are equal and closes the ring\n function closeRing(coordinates) {\n if (!pointsEqual(coordinates[0], coordinates[coordinates.length - 1])) {\n coordinates.push(coordinates[0]);\n }\n return coordinates;\n }\n\n // determine if polygon ring coordinates are clockwise. clockwise signifies outer ring, counter-clockwise an inner ring\n // or hole. this logic was found at http://stackoverflow.com/questions/1165647/how-to-determine-if-a-list-of-polygon-\n // points-are-in-clockwise-order\n function ringIsClockwise(ringToTest) {\n var total = 0,i = 0;\n var rLength = ringToTest.length;\n var pt1 = ringToTest[i];\n var pt2;\n for (i; i < rLength - 1; i++) {\n pt2 = ringToTest[i + 1];\n total += (pt2[0] - pt1[0]) * (pt2[1] + pt1[1]);\n pt1 = pt2;\n }\n return (total >= 0);\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L504-L519\n function vertexIntersectsVertex(a1, a2, b1, b2) {\n var uaT = (b2[0] - b1[0]) * (a1[1] - b1[1]) - (b2[1] - b1[1]) * (a1[0] - b1[0]);\n var ubT = (a2[0] - a1[0]) * (a1[1] - b1[1]) - (a2[1] - a1[1]) * (a1[0] - b1[0]);\n var uB = (b2[1] - b1[1]) * (a2[0] - a1[0]) - (b2[0] - b1[0]) * (a2[1] - a1[1]);\n\n if ( uB !== 0 ) {\n var ua = uaT / uB;\n var ub = ubT / uB;\n\n if ( 0 <= ua && ua <= 1 && 0 <= ub && ub <= 1 ) {\n return true;\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L521-L531\n function arrayIntersectsArray(a, b) {\n for (var i = 0; i < a.length - 1; i++) {\n for (var j = 0; j < b.length - 1; j++) {\n if (vertexIntersectsVertex(a[i], a[i + 1], b[j], b[j + 1])) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L470-L480\n function coordinatesContainPoint(coordinates, point) {\n var contains = false;\n for(var i = -1, l = coordinates.length, j = l - 1; ++i < l; j = i) {\n if (((coordinates[i][1] <= point[1] && point[1] < coordinates[j][1]) ||\n (coordinates[j][1] <= point[1] && point[1] < coordinates[i][1])) &&\n (point[0] < (coordinates[j][0] - coordinates[i][0]) * (point[1] - coordinates[i][1]) / (coordinates[j][1] - coordinates[i][1]) + coordinates[i][0])) {\n contains = !contains;\n }\n }\n return contains;\n }\n\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L106-L113\n function coordinatesContainCoordinates(outer, inner){\n var intersects = arrayIntersectsArray(outer, inner);\n var contains = coordinatesContainPoint(outer, inner[0]);\n if(!intersects && contains){\n return true;\n }\n return false;\n }\n\n // do any polygons in this array contain any other polygons in this array?\n // used for checking for holes in arcgis rings\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L117-L172\n function convertRingsToGeoJSON(rings){\n var outerRings = [];\n var holes = [];\n var x; // iterator\n var outerRing; // current outer ring being evaluated\n var hole; // current hole being evaluated\n\n // for each ring\n for (var r = 0; r < rings.length; r++) {\n var ring = closeRing(rings[r].slice(0));\n if(ring.length < 4){\n continue;\n }\n // is this ring an outer ring? is it clockwise?\n if(ringIsClockwise(ring)){\n var polygon = [ ring ];\n outerRings.push(polygon); // push to outer rings\n } else {\n holes.push(ring); // counterclockwise push to holes\n }\n }\n\n var uncontainedHoles = [];\n\n // while there are holes left...\n while(holes.length){\n // pop a hole off out stack\n hole = holes.pop();\n\n // loop over all outer rings and see if they contain our hole.\n var contained = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(coordinatesContainCoordinates(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n contained = true;\n break;\n }\n }\n\n // ring is not contained in any outer ring\n // sometimes this happens https://github.com/Esri/esri-leaflet/issues/320\n if(!contained){\n uncontainedHoles.push(hole);\n }\n }\n\n // if we couldn't match any holes using contains we can try intersects...\n while(uncontainedHoles.length){\n // pop a hole off out stack\n hole = uncontainedHoles.pop();\n\n // loop over all outer rings and see if any intersect our hole.\n var intersects = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(arrayIntersectsArray(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n intersects = true;\n break;\n }\n }\n\n if(!intersects) {\n outerRings.push([hole.reverse()]);\n }\n }\n\n if(outerRings.length === 1){\n return {\n type: 'Polygon',\n coordinates: outerRings[0]\n };\n } else {\n return {\n type: 'MultiPolygon',\n coordinates: outerRings\n };\n }\n }\n\n // This function ensures that rings are oriented in the right directions\n // outer rings are clockwise, holes are counterclockwise\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function orientRings(poly){\n var output = [];\n var polygon = poly.slice(0);\n var outerRing = closeRing(polygon.shift().slice(0));\n if(outerRing.length >= 4){\n if(!ringIsClockwise(outerRing)){\n outerRing.reverse();\n }\n\n output.push(outerRing);\n\n for (var i = 0; i < polygon.length; i++) {\n var hole = closeRing(polygon[i].slice(0));\n if(hole.length >= 4){\n if(ringIsClockwise(hole)){\n hole.reverse();\n }\n output.push(hole);\n }\n }\n }\n\n return output;\n }\n\n // This function flattens holes in multipolygons to one array of polygons\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function flattenMultiPolygonRings(rings){\n var output = [];\n for (var i = 0; i < rings.length; i++) {\n var polygon = orientRings(rings[i]);\n for (var x = polygon.length - 1; x >= 0; x--) {\n var ring = polygon[x].slice(0);\n output.push(ring);\n }\n }\n return output;\n }\n\n // convert an extent (ArcGIS) to LatLngBounds (Leaflet)\n EsriLeaflet.Util.extentToBounds = function(extent){\n var sw = new L.LatLng(extent.ymin, extent.xmin);\n var ne = new L.LatLng(extent.ymax, extent.xmax);\n return new L.LatLngBounds(sw, ne);\n };\n\n // convert an LatLngBounds (Leaflet) to extent (ArcGIS)\n EsriLeaflet.Util.boundsToExtent = function(bounds) {\n bounds = L.latLngBounds(bounds);\n return {\n 'xmin': bounds.getSouthWest().lng,\n 'ymin': bounds.getSouthWest().lat,\n 'xmax': bounds.getNorthEast().lng,\n 'ymax': bounds.getNorthEast().lat,\n 'spatialReference': {\n 'wkid' : 4326\n }\n };\n };\n\n EsriLeaflet.Util.arcgisToGeojson = function (arcgis, idAttribute){\n var geojson = {};\n\n if(typeof arcgis.x === 'number' && typeof arcgis.y === 'number'){\n geojson.type = 'Point';\n geojson.coordinates = [arcgis.x, arcgis.y];\n }\n\n if(arcgis.points){\n geojson.type = 'MultiPoint';\n geojson.coordinates = arcgis.points.slice(0);\n }\n\n if(arcgis.paths) {\n if(arcgis.paths.length === 1){\n geojson.type = 'LineString';\n geojson.coordinates = arcgis.paths[0].slice(0);\n } else {\n geojson.type = 'MultiLineString';\n geojson.coordinates = arcgis.paths.slice(0);\n }\n }\n\n if(arcgis.rings) {\n geojson = convertRingsToGeoJSON(arcgis.rings.slice(0));\n }\n\n if(arcgis.geometry || arcgis.attributes) {\n geojson.type = 'Feature';\n geojson.geometry = (arcgis.geometry) ? EsriLeaflet.Util.arcgisToGeojson(arcgis.geometry) : null;\n geojson.properties = (arcgis.attributes) ? clone(arcgis.attributes) : null;\n if(arcgis.attributes) {\n geojson.id = arcgis.attributes[idAttribute] || arcgis.attributes.OBJECTID || arcgis.attributes.FID;\n }\n }\n\n return geojson;\n };\n\n // GeoJSON -> ArcGIS\n EsriLeaflet.Util.geojsonToArcGIS = function(geojson, idAttribute){\n idAttribute = idAttribute || 'OBJECTID';\n var spatialReference = { wkid: 4326 };\n var result = {};\n var i;\n\n switch(geojson.type){\n case 'Point':\n result.x = geojson.coordinates[0];\n result.y = geojson.coordinates[1];\n result.spatialReference = spatialReference;\n break;\n case 'MultiPoint':\n result.points = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'LineString':\n result.paths = [geojson.coordinates.slice(0)];\n result.spatialReference = spatialReference;\n break;\n case 'MultiLineString':\n result.paths = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'Polygon':\n result.rings = orientRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'MultiPolygon':\n result.rings = flattenMultiPolygonRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'Feature':\n if(geojson.geometry) {\n result.geometry = EsriLeaflet.Util.geojsonToArcGIS(geojson.geometry, idAttribute);\n }\n result.attributes = (geojson.properties) ? clone(geojson.properties) : {};\n if(geojson.id){\n result.attributes[idAttribute] = geojson.id;\n }\n break;\n case 'FeatureCollection':\n result = [];\n for (i = 0; i < geojson.features.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.features[i], idAttribute));\n }\n break;\n case 'GeometryCollection':\n result = [];\n for (i = 0; i < geojson.geometries.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.geometries[i], idAttribute));\n }\n break;\n }\n\n return result;\n };\n\n EsriLeaflet.Util.responseToFeatureCollection = function(response, idAttribute){\n var objectIdField;\n\n if(idAttribute){\n objectIdField = idAttribute;\n } else if(response.objectIdFieldName){\n objectIdField = response.objectIdFieldName;\n } else if(response.fields) {\n for (var j = 0; j <= response.fields.length - 1; j++) {\n if(response.fields[j].type === 'esriFieldTypeOID') {\n objectIdField = response.fields[j].name;\n break;\n }\n }\n } else {\n objectIdField = 'OBJECTID';\n }\n\n var featureCollection = {\n type: 'FeatureCollection',\n features: []\n };\n var features = response.features || response.results;\n if(features.length){\n for (var i = features.length - 1; i >= 0; i--) {\n featureCollection.features.push(EsriLeaflet.Util.arcgisToGeojson(features[i], objectIdField));\n }\n }\n\n return featureCollection;\n };\n\n // trim url whitespace and add a trailing slash if needed\n EsriLeaflet.Util.cleanUrl = function(url){\n //trim leading and trailing spaces, but not spaces inside the url\n url = url.replace(/^\\s+|\\s+$|\\A\\s+|\\s+\\z/g, '');\n\n //add a trailing slash to the url if the user omitted it\n if(url[url.length-1] !== '/'){\n url += '/';\n }\n\n return url;\n };\n\n EsriLeaflet.Util.isArcgisOnline = function(url){\n /* hosted feature services can emit geojson natively.\n our check for 'geojson' support will need to be revisted\n once the functionality makes its way to ArcGIS Server*/\n return (/\\.arcgis\\.com.*?FeatureServer/g).test(url);\n };\n\n EsriLeaflet.Util.geojsonTypeToArcGIS = function (geoJsonType) {\n var arcgisGeometryType;\n switch (geoJsonType) {\n case 'Point':\n arcgisGeometryType = 'esriGeometryPoint';\n break;\n case 'MultiPoint':\n arcgisGeometryType = 'esriGeometryMultipoint';\n break;\n case 'LineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'MultiLineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'Polygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n case 'MultiPolygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n }\n return arcgisGeometryType;\n };\n\n EsriLeaflet.Util.requestAnimationFrame = L.Util.bind(raf, window);\n\n EsriLeaflet.Util.warn = function (message) {\n if(console && console.warn) {\n console.warn(message);\n }\n };\n\n})(EsriLeaflet);","(function(EsriLeaflet){\n\n var callbacks = 0;\n\n window._EsriLeafletCallbacks = {};\n\n function serialize(params){\n var data = '';\n\n params.f = params.f || 'json';\n\n for (var key in params){\n if(params.hasOwnProperty(key)){\n var param = params[key];\n var type = Object.prototype.toString.call(param);\n var value;\n\n if(data.length){\n data += '&';\n }\n\n if (type === '[object Array]'){\n value = (Object.prototype.toString.call(param[0]) === '[object Object]') ? JSON.stringify(param) : param.join(',');\n } else if (type === '[object Object]') {\n value = JSON.stringify(param);\n } else if (type === '[object Date]'){\n value = param.valueOf();\n } else {\n value = param;\n }\n\n data += encodeURIComponent(key) + '=' + encodeURIComponent(value);\n }\n }\n\n return data;\n }\n\n function createRequest(callback, context){\n var httpRequest = new XMLHttpRequest();\n\n httpRequest.onerror = function(e) {\n httpRequest.onreadystatechange = L.Util.falseFn;\n\n callback.call(context, {\n error: {\n code: 500,\n message: 'XMLHttpRequest error'\n }\n }, null);\n };\n\n httpRequest.onreadystatechange = function(){\n var response;\n var error;\n\n if (httpRequest.readyState === 4) {\n try {\n response = JSON.parse(httpRequest.responseText);\n } catch(e) {\n response = null;\n error = {\n code: 500,\n message: 'Could not parse response as JSON. This could also be caused by a CORS or XMLHttpRequest error.'\n };\n }\n\n if (!error && response.error) {\n error = response.error;\n response = null;\n }\n\n httpRequest.onerror = L.Util.falseFn;\n\n callback.call(context, error, response);\n }\n };\n\n return httpRequest;\n }\n\n // AJAX handlers for CORS (modern browsers) or JSONP (older browsers)\n EsriLeaflet.Request = {\n request: function(url, params, callback, context){\n var paramString = serialize(params);\n var httpRequest = createRequest(callback, context);\n var requestLength = (url + '?' + paramString).length;\n\n // request is less then 2000 characters and the browser supports CORS, make GET request with XMLHttpRequest\n if(requestLength <= 2000 && L.esri.Support.CORS){\n httpRequest.open('GET', url + '?' + paramString);\n httpRequest.send(null);\n\n // request is less more then 2000 characters and the browser supports CORS, make POST request with XMLHttpRequest\n } else if (requestLength > 2000 && L.esri.Support.CORS){\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(paramString);\n\n // request is less more then 2000 characters and the browser does not support CORS, make a JSONP request\n } else if(requestLength <= 2000 && !L.esri.Support.CORS){\n return L.esri.Request.get.JSONP(url, params, callback, context);\n\n // request is longer then 2000 characters and the browser does not support CORS, log a warning\n } else {\n EsriLeaflet.Util.warn('a request to ' + url + ' was longer then 2000 characters and this browser cannot make a cross-domain post request. Please use a proxy http://esri.github.io/esri-leaflet/api-reference/request.html');\n return;\n }\n\n return httpRequest;\n },\n\n post: {\n XMLHTTP: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(serialize(params));\n\n return httpRequest;\n }\n },\n\n get: {\n CORS: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n\n httpRequest.open('GET', url + '?' + serialize(params), true);\n httpRequest.send(null);\n\n return httpRequest;\n },\n JSONP: function(url, params, callback, context){\n var callbackId = 'c' + callbacks;\n\n params.callback = 'window._EsriLeafletCallbacks.' + callbackId;\n\n var script = L.DomUtil.create('script', null, document.body);\n script.type = 'text/javascript';\n script.src = url + '?' + serialize(params);\n script.id = callbackId;\n\n window._EsriLeafletCallbacks[callbackId] = function(response){\n if(window._EsriLeafletCallbacks[callbackId] !== true){\n var error;\n var responseType = Object.prototype.toString.call(response);\n\n if(!(responseType === '[object Object]' || responseType === '[object Array]')){\n error = {\n error: {\n code: 500,\n message: 'Expected array or object as JSONP response'\n }\n };\n response = null;\n }\n\n if (!error && response.error) {\n error = response;\n response = null;\n }\n\n callback.call(context, error, response);\n window._EsriLeafletCallbacks[callbackId] = true;\n }\n };\n\n callbacks++;\n\n return {\n id: callbackId,\n url: script.src,\n abort: function(){\n window._EsriLeafletCallbacks._callback[callbackId]({\n code: 0,\n message: 'Request aborted.'\n });\n }\n };\n }\n }\n };\n\n // choose the correct AJAX handler depending on CORS support\n EsriLeaflet.get = (EsriLeaflet.Support.CORS) ? EsriLeaflet.Request.get.CORS : EsriLeaflet.Request.get.JSONP;\n\n // always use XMLHttpRequest for posts\n EsriLeaflet.post = EsriLeaflet.Request.post.XMLHTTP;\n\n // expose a common request method the uses GET\\POST based on request length\n EsriLeaflet.request = EsriLeaflet.Request.request;\n\n})(EsriLeaflet);","EsriLeaflet.Services.Service = L.Class.extend({\n\n includes: L.Mixin.Events,\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n initialize: function (options) {\n options = options || {};\n this._requestQueue = [];\n this._authenticating = false;\n L.Util.setOptions(this, options);\n this.options.url = EsriLeaflet.Util.cleanUrl(this.options.url);\n },\n\n get: function (path, params, callback, context) {\n return this._request('get', path, params, callback, context);\n },\n\n post: function (path, params, callback, context) {\n return this._request('post', path, params, callback, context);\n },\n\n request: function (path, params, callback, context) {\n return this._request('request', path, params, callback, context);\n },\n\n metadata: function (callback, context) {\n return this._request('get', '', {}, callback, context);\n },\n\n authenticate: function(token){\n this._authenticating = false;\n this.options.token = token;\n this._runQueue();\n return this;\n },\n\n _request: function(method, path, params, callback, context){\n this.fire('requeststart', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n\n var wrappedCallback = this._createServiceCallback(method, path, params, callback, context);\n\n if (this.options.token) {\n params.token = this.options.token;\n }\n\n if (this._authenticating) {\n this._requestQueue.push([method, path, params, callback, context]);\n return;\n } else {\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, wrappedCallback);\n } else {\n return EsriLeaflet[method](url, params, wrappedCallback);\n }\n }\n },\n\n _createServiceCallback: function(method, path, params, callback, context){\n return L.Util.bind(function(error, response){\n\n if (error && (error.code === 499 || error.code === 498)) {\n this._authenticating = true;\n\n this._requestQueue.push([method, path, params, callback, context]);\n\n // fire an event for users to handle and re-authenticate\n this.fire('authenticationrequired', {\n authenticate: L.Util.bind(this.authenticate, this)\n });\n\n // if the user has access to a callback they can handle the auth error\n error.authenticate = L.Util.bind(this.authenticate, this);\n }\n\n callback.call(context, error, response);\n\n if(error) {\n this.fire('requesterror', {\n url: this.options.url + path,\n params: params,\n message: error.message,\n code: error.code,\n method: method\n });\n } else {\n this.fire('requestsuccess', {\n url: this.options.url + path,\n params: params,\n response: response,\n method: method\n });\n }\n\n this.fire('requestend', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n }, this);\n },\n\n _runQueue: function(){\n for (var i = this._requestQueue.length - 1; i >= 0; i--) {\n var request = this._requestQueue[i];\n var method = request.shift();\n this[method].apply(this, request);\n }\n this._requestQueue = [];\n }\n\n});\n\nEsriLeaflet.Services.service = function(params){\n return new EsriLeaflet.Services.Service(params);\n};\n","EsriLeaflet.Services.MapService = EsriLeaflet.Services.Service.extend({\n\n identify: function () {\n return new EsriLeaflet.Tasks.identifyFeatures(this);\n },\n\n find: function () {\n return new EsriLeaflet.Tasks.Find(this);\n },\n\n query: function () {\n return new EsriLeaflet.Tasks.Query(this);\n }\n\n});\n\nEsriLeaflet.Services.mapService = function(params){\n return new EsriLeaflet.Services.MapService(params);\n};","EsriLeaflet.Tasks.Task = L.Class.extend({\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n //Generate a method for each methodName:paramName in the setters for this task.\n generateSetter: function(param, context){\n return L.Util.bind(function(value){\n this.params[param] = value;\n return this;\n }, context);\n },\n\n initialize: function(endpoint){\n // endpoint can be either a url (and options) for an ArcGIS Rest Service or an instance of EsriLeaflet.Service\n if(endpoint.request && endpoint.options){\n this._service = endpoint;\n L.Util.setOptions(this, endpoint.options);\n } else {\n L.Util.setOptions(this, endpoint);\n this.options.url = L.esri.Util.cleanUrl(endpoint.url);\n }\n\n // clone default params into this object\n this.params = L.Util.extend({}, this.params || {});\n\n // generate setter methods based on the setters object implimented a child class\n if(this.setters){\n for (var setter in this.setters){\n var param = this.setters[setter];\n this[setter] = this.generateSetter(param, this);\n }\n }\n },\n\n token: function(token){\n if(this._service){\n this._service.authenticate(token);\n } else {\n this.params.token = token;\n }\n return this;\n },\n\n request: function(callback, context){\n if(this._service){\n return this._service.request(this.path, this.params, callback, context);\n } else {\n return this._request('request', this.path, this.params, callback, context);\n }\n },\n\n _request: function(method, path, params, callback, context){\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, callback, context);\n } else{\n return EsriLeaflet[method](url, params, callback, context);\n }\n }\n});","EsriLeaflet.Tasks.Identify = EsriLeaflet.Tasks.Task.extend({\n path: 'identify',\n\n between: function(start, end){\n this.params.time = [start.valueOf(), end.valueOf()];\n return this;\n }\n});\n","EsriLeaflet.Tasks.IdentifyFeatures = EsriLeaflet.Tasks.Identify.extend({\n setters: {\n 'layers': 'layers',\n 'precision': 'geometryPrecision',\n 'tolerance': 'tolerance',\n 'returnGeometry': 'returnGeometry'\n },\n\n params: {\n sr: 4326,\n layers: 'all',\n tolerance: 3,\n returnGeometry: true\n },\n\n on: function(map){\n var extent = EsriLeaflet.Util.boundsToExtent(map.getBounds());\n var size = map.getSize();\n this.params.imageDisplay = [size.x, size.y, 96];\n this.params.mapExtent = [extent.xmin, extent.ymin, extent.xmax, extent.ymax];\n return this;\n },\n\n at: function(latlng){\n latlng = L.latLng(latlng);\n this.params.geometry = [latlng.lng, latlng.lat];\n this.params.geometryType = 'esriGeometryPoint';\n return this;\n },\n\n layerDef: function (id, where){\n this.params.layerDefs = (this.params.layerDefs) ? this.params.layerDefs + ';' : '';\n this.params.layerDefs += ([id, where]).join(':');\n return this;\n },\n\n simplify: function(map, factor){\n var mapWidth = Math.abs(map.getBounds().getWest() - map.getBounds().getEast());\n this.params.maxAllowableOffset = (mapWidth / map.getSize().y) * (1 - factor);\n return this;\n },\n\n run: function (callback, context){\n return this.request(function(error, response){\n // immediately invoke with an error\n if(error) {\n callback.call(context, error, undefined, response);\n return;\n\n // ok no error lets just assume we have features...\n } else {\n var featureCollection = EsriLeaflet.Util.responseToFeatureCollection(response);\n response.results = response.results.reverse();\n for (var i = 0; i < featureCollection.features.length; i++) {\n var feature = featureCollection.features[i];\n feature.layerId = response.results[i].layerId;\n }\n callback.call(context, undefined, featureCollection, response);\n }\n });\n }\n});\n\nEsriLeaflet.Tasks.identifyFeatures = function(params){\n return new EsriLeaflet.Tasks.IdentifyFeatures(params);\n};","EsriLeaflet.Tasks.Query = EsriLeaflet.Tasks.Task.extend({\n setters: {\n 'offset': 'offset',\n 'limit': 'limit',\n 'fields': 'outFields',\n 'precision': 'geometryPrecision',\n 'featureIds': 'objectIds',\n 'returnGeometry': 'returnGeometry',\n 'token': 'token'\n },\n\n path: 'query',\n\n params: {\n returnGeometry: true,\n where: '1=1',\n outSr: 4326,\n outFields: '*'\n },\n\n within: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelContains'; // will make code read layer within geometry, to the api this will reads geometry contains layer\n return this;\n },\n\n intersects: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelIntersects';\n return this;\n },\n\n contains: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelWithin'; // will make code read layer contains geometry, to the api this will reads geometry within layer\n return this;\n },\n\n // crosses: function(geometry){\n // this._setGeometry(geometry);\n // this.params.spatialRel = 'esriSpatialRelCrosses';\n // return this;\n // },\n\n // touches: function(geometry){\n // this._setGeometry(geometry);\n // this.params.spatialRel = 'esriSpatialRelTouches';\n // return this;\n // },\n\n overlaps: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelOverlaps';\n return this;\n },\n\n // only valid for Feature Services running on ArcGIS Server 10.3 or ArcGIS Online\n nearby: function(latlng, radius){\n latlng = L.latLng(latlng);\n this.params.geometry = [latlng.lng, latlng.lat];\n this.params.geometryType = 'esriGeometryPoint';\n this.params.spatialRel = 'esriSpatialRelIntersects';\n this.params.units = 'esriSRUnit_Meter';\n this.params.distance = radius;\n this.params.inSr = 4326;\n return this;\n },\n\n where: function(string){\n // instead of converting double-quotes to single quotes, pass as is, and provide a more informative message if a 400 is encountered\n this.params.where = string;\n return this;\n },\n\n between: function(start, end){\n this.params.time = [start.valueOf(), end.valueOf()];\n return this;\n },\n\n simplify: function(map, factor){\n var mapWidth = Math.abs(map.getBounds().getWest() - map.getBounds().getEast());\n this.params.maxAllowableOffset = (mapWidth / map.getSize().y) * factor;\n return this;\n },\n\n orderBy: function(fieldName, order){\n order = order || 'ASC';\n this.params.orderByFields = (this.params.orderByFields) ? this.params.orderByFields + ',' : '';\n this.params.orderByFields += ([fieldName, order]).join(' ');\n return this;\n },\n\n run: function(callback, context){\n this._cleanParams();\n\n // if the service is hosted on arcgis online request geojson directly\n if(EsriLeaflet.Util.isArcgisOnline(this.options.url)){\n this.params.f = 'geojson';\n\n return this.request(function(error, response){\n this._trapSQLerrors(error);\n callback.call(context, error, response, response);\n }, this);\n\n // otherwise convert it in the callback then pass it on\n } else {\n return this.request(function(error, response){\n this._trapSQLerrors(error);\n callback.call(context, error, (response && EsriLeaflet.Util.responseToFeatureCollection(response)), response);\n }, this);\n }\n },\n\n count: function(callback, context){\n this._cleanParams();\n this.params.returnCountOnly = true;\n return this.request(function(error, response){\n callback.call(this, error, (response && response.count), response);\n }, context);\n },\n\n ids: function(callback, context){\n this._cleanParams();\n this.params.returnIdsOnly = true;\n return this.request(function(error, response){\n callback.call(this, error, (response && response.objectIds), response);\n }, context);\n },\n\n // only valid for Feature Services running on ArcGIS Server 10.3 or ArcGIS Online\n bounds: function(callback, context){\n this._cleanParams();\n this.params.returnExtentOnly = true;\n return this.request(function(error, response){\n callback.call(context, error, (response && response.extent && EsriLeaflet.Util.extentToBounds(response.extent)), response);\n }, context);\n },\n\n // only valid for image services\n pixelSize: function(point){\n point = L.point(point);\n this.params.pixelSize = [point.x,point.y];\n return this;\n },\n\n // only valid for map services\n layer: function(layer){\n this.path = layer + '/query';\n return this;\n },\n\n _trapSQLerrors: function(error){\n if (error){\n if (error.code === '400'){\n EsriLeaflet.Util.warn('one common syntax error in query requests is encasing string values in double quotes instead of single quotes');\n }\n }\n },\n\n _cleanParams: function(){\n delete this.params.returnIdsOnly;\n delete this.params.returnExtentOnly;\n delete this.params.returnCountOnly;\n },\n\n _setGeometry: function(geometry) {\n this.params.inSr = 4326;\n\n // convert bounds to extent and finish\n if ( geometry instanceof L.LatLngBounds ) {\n // set geometry + geometryType\n this.params.geometry = EsriLeaflet.Util.boundsToExtent(geometry);\n this.params.geometryType = 'esriGeometryEnvelope';\n return;\n }\n\n // convert L.Marker > L.LatLng\n if(geometry.getLatLng){\n geometry = geometry.getLatLng();\n }\n\n // convert L.LatLng to a geojson point and continue;\n if (geometry instanceof L.LatLng) {\n geometry = {\n type: 'Point',\n coordinates: [geometry.lng, geometry.lat]\n };\n }\n\n // handle L.GeoJSON, pull out the first geometry\n if ( geometry instanceof L.GeoJSON ) {\n //reassign geometry to the GeoJSON value (we are assuming that only one feature is present)\n geometry = geometry.getLayers()[0].feature.geometry;\n this.params.geometry = EsriLeaflet.Util.geojsonToArcGIS(geometry);\n this.params.geometryType = EsriLeaflet.Util.geojsonTypeToArcGIS(geometry.type);\n }\n\n // Handle L.Polyline and L.Polygon\n if (geometry.toGeoJSON) {\n geometry = geometry.toGeoJSON();\n }\n\n // handle GeoJSON feature by pulling out the geometry\n if ( geometry.type === 'Feature' ) {\n // get the geometry of the geojson feature\n geometry = geometry.geometry;\n }\n\n // confirm that our GeoJSON is a point, line or polygon\n if ( geometry.type === 'Point' || geometry.type === 'LineString' || geometry.type === 'Polygon') {\n this.params.geometry = EsriLeaflet.Util.geojsonToArcGIS(geometry);\n this.params.geometryType = EsriLeaflet.Util.geojsonTypeToArcGIS(geometry.type);\n return;\n }\n\n // warn the user if we havn't found a\n /* global console */\n EsriLeaflet.Util.warn('invalid geometry passed to spatial query. Should be an L.LatLng, L.LatLngBounds or L.Marker or a GeoJSON Point Line or Polygon object');\n\n return;\n }\n});\n\nEsriLeaflet.Tasks.query = function(params){\n return new EsriLeaflet.Tasks.Query(params);\n};","EsriLeaflet.Tasks.Find = EsriLeaflet.Tasks.Task.extend({\n setters: {\n // method name > param name\n 'contains': 'contains',\n 'text': 'searchText',\n 'fields': 'searchFields', // denote an array or single string\n 'spatialReference': 'sr',\n 'sr': 'sr',\n 'layers': 'layers',\n 'returnGeometry': 'returnGeometry',\n 'maxAllowableOffset': 'maxAllowableOffset',\n 'precision': 'geometryPrecision',\n 'dynamicLayers': 'dynamicLayers',\n 'returnZ' : 'returnZ',\n 'returnM' : 'returnM',\n 'gdbVersion' : 'gdbVersion',\n 'token' : 'token'\n },\n\n path: 'find',\n\n params: {\n sr: 4326,\n contains: true,\n returnGeometry: true,\n returnZ: true,\n returnM: false\n },\n\n layerDefs: function (id, where) {\n this.params.layerDefs = (this.params.layerDefs) ? this.params.layerDefs + ';' : '';\n this.params.layerDefs += ([id, where]).join(':');\n return this;\n },\n\n simplify: function(map, factor){\n var mapWidth = Math.abs(map.getBounds().getWest() - map.getBounds().getEast());\n this.params.maxAllowableOffset = (mapWidth / map.getSize().y) * factor;\n return this;\n },\n\n run: function (callback, context) {\n return this.request(function(error, response){\n callback.call(context, error, (response && EsriLeaflet.Util.responseToFeatureCollection(response)), response);\n }, context);\n }\n});\n\nEsriLeaflet.Tasks.find = function (params) {\n return new EsriLeaflet.Tasks.Find(params);\n};","EsriLeaflet.Layers.RasterLayer = L.Class.extend({\n includes: L.Mixin.Events,\n\n options: {\n opacity: 1,\n position: 'front',\n f: 'image'\n },\n\n onAdd: function (map) {\n this._map = map;\n\n this._update = L.Util.limitExecByInterval(this._update, this.options.updateInterval, this);\n\n if (map.options.crs && map.options.crs.code) {\n var sr = map.options.crs.code.split(':')[1];\n this.options.bboxSR = sr;\n this.options.imageSR = sr;\n }\n\n map.on('moveend', this._update, this);\n\n // if we had an image loaded and it matches the\n // current bounds show the image otherwise remove it\n if(this._currentImage && this._currentImage._bounds.equals(this._map.getBounds())){\n map.addLayer(this._currentImage);\n } else if(this._currentImage) {\n this._map.removeLayer(this._currentImage);\n this._currentImage = null;\n }\n\n this._update();\n\n if(this._popup){\n this._map.on('click', this._getPopupData, this);\n this._map.on('dblclick', this._resetPopupState, this);\n }\n },\n\n bindPopup: function(fn, popupOptions){\n this._shouldRenderPopup = false;\n this._lastClick = false;\n this._popup = L.popup(popupOptions);\n this._popupFunction = fn;\n if(this._map){\n this._map.on('click', this._getPopupData, this);\n this._map.on('dblclick', this._resetPopupState, this);\n }\n return this;\n },\n\n unbindPopup: function(){\n if(this._map){\n this._map.closePopup(this._popup);\n this._map.off('click', this._getPopupData, this);\n this._map.off('dblclick', this._resetPopupState, this);\n }\n this._popup = false;\n return this;\n },\n\n onRemove: function (map) {\n if (this._currentImage) {\n this._map.removeLayer(this._currentImage);\n }\n\n if(this._popup){\n this._map.off('click', this._getPopupData, this);\n this._map.off('dblclick', this._resetPopupState, this);\n }\n\n this._map.off('moveend', this._update, this);\n this._map = null;\n },\n\n addTo: function(map){\n map.addLayer(this);\n return this;\n },\n\n removeFrom: function(map){\n map.removeLayer(this);\n return this;\n },\n\n bringToFront: function(){\n this.options.position = 'front';\n if(this._currentImage){\n this._currentImage.bringToFront();\n }\n return this;\n },\n\n bringToBack: function(){\n this.options.position = 'back';\n if(this._currentImage){\n this._currentImage.bringToBack();\n }\n return this;\n },\n\n getAttribution: function () {\n return this.options.attribution;\n },\n\n getOpacity: function(){\n return this.options.opacity;\n },\n\n setOpacity: function(opacity){\n this.options.opacity = opacity;\n this._currentImage.setOpacity(opacity);\n return this;\n },\n\n getTimeRange: function(){\n return [this.options.from, this.options.to];\n },\n\n setTimeRange: function(from, to){\n this.options.from = from;\n this.options.to = to;\n this._update();\n return this;\n },\n\n metadata: function(callback, context){\n this._service.metadata(callback, context);\n return this;\n },\n\n authenticate: function(token){\n this._service.authenticate(token);\n return this;\n },\n\n _renderImage: function(url, bounds){\n if(this._map){\n // create a new image overlay and add it to the map\n // to start loading the image\n // opacity is 0 while the image is loading\n var image = new L.ImageOverlay(url, bounds, {\n opacity: 0\n }).addTo(this._map);\n\n // once the image loads\n image.once('load', function(e){\n var newImage = e.target;\n var oldImage = this._currentImage;\n\n // if the bounds of this image matches the bounds that\n // _renderImage was called with and we have a map with the same bounds\n // hide the old image if there is one and set the opacity\n // of the new image otherwise remove the new image\n if(newImage._bounds.equals(bounds) && newImage._bounds.equals(this._map.getBounds())){\n this._currentImage = newImage;\n\n if(this.options.position === 'front'){\n this.bringToFront();\n } else {\n this.bringToBack();\n }\n\n if(this._map && this._currentImage._map){\n this._currentImage.setOpacity(this.options.opacity);\n } else {\n this._currentImage._map.removeLayer(this._currentImage);\n }\n\n if(oldImage && this._map) {\n this._map.removeLayer(oldImage);\n }\n\n if(oldImage && oldImage._map){\n oldImage._map.removeLayer(oldImage);\n }\n } else {\n this._map.removeLayer(newImage);\n }\n\n this.fire('load', {\n bounds: bounds\n });\n\n }, this);\n\n this.fire('loading', {\n bounds: bounds\n });\n }\n },\n\n _update: function () {\n if(!this._map){\n return;\n }\n\n var zoom = this._map.getZoom();\n var bounds = this._map.getBounds();\n\n if(this._animatingZoom){\n return;\n }\n\n if (this._map._panTransition && this._map._panTransition._inProgress) {\n return;\n }\n\n if (zoom > this.options.maxZoom || zoom < this.options.minZoom) {\n return;\n }\n var params = this._buildExportParams();\n\n this._requestExport(params, bounds);\n },\n\n // TODO: refactor these into raster layer\n _renderPopup: function(latlng, error, results, response){\n latlng = L.latLng(latlng);\n if(this._shouldRenderPopup && this._lastClick.equals(latlng)){\n //add the popup to the map where the mouse was clicked at\n var content = this._popupFunction(error, results, response);\n if (content) {\n this._popup.setLatLng(latlng).setContent(content).openOn(this._map);\n }\n }\n },\n\n _resetPopupState: function(e){\n this._shouldRenderPopup = false;\n this._lastClick = e.latlng;\n },\n\n // from https://github.com/Leaflet/Leaflet/blob/v0.7.2/src/layer/FeatureGroup.js\n // @TODO remove at Leaflet 0.8\n _propagateEvent: function (e) {\n e = L.extend({\n layer: e.target,\n target: this\n }, e);\n this.fire(e.type, e);\n }\n});\n","EsriLeaflet.Layers.DynamicMapLayer = EsriLeaflet.Layers.RasterLayer.extend({\n\n options: {\n updateInterval: 150,\n layers: false,\n layerDefs: false,\n timeOptions: false,\n format: 'png24',\n transparent: true,\n f: 'json'\n },\n\n initialize: function (options) {\n options.url = EsriLeaflet.Util.cleanUrl(options.url);\n this._service = new EsriLeaflet.Services.MapService(options);\n this._service.on('authenticationrequired requeststart requestend requesterror requestsuccess', this._propagateEvent, this);\n if ((options.proxy || options.token) && options.f !== 'json'){\n options.f = 'json';\n }\n L.Util.setOptions(this, options);\n },\n\n getDynamicLayers: function(){\n return this.options.dynamicLayers;\n },\n\n setDynamicLayers: function(dynamicLayers){\n this.options.dynamicLayers = dynamicLayers;\n this._update();\n return this;\n },\n\n getLayers: function(){\n return this.options.layers;\n },\n\n setLayers: function(layers){\n this.options.layers = layers;\n this._update();\n return this;\n },\n\n getLayerDefs: function(){\n return this.options.layerDefs;\n },\n\n setLayerDefs: function(layerDefs){\n this.options.layerDefs = layerDefs;\n this._update();\n return this;\n },\n\n getTimeOptions: function(){\n return this.options.timeOptions;\n },\n\n setTimeOptions: function(timeOptions){\n this.options.timeOptions = timeOptions;\n this._update();\n return this;\n },\n\n query: function(){\n return this._service.query();\n },\n\n identify: function(){\n return this._service.identify();\n },\n\n find: function(){\n return this._service.find();\n },\n\n _getPopupData: function(e){\n var callback = L.Util.bind(function(error, featureCollection, response) {\n if(error) { return; } // we really can't do anything here but authenticate or requesterror will fire\n setTimeout(L.Util.bind(function(){\n this._renderPopup(e.latlng, error, featureCollection, response);\n }, this), 300);\n }, this);\n\n var identifyRequest = this.identify().on(this._map).at(e.latlng);\n\n if(this.options.layers){\n identifyRequest.layers('visible:' + this.options.layers.join(','));\n } else {\n identifyRequest.layers('visible');\n }\n\n identifyRequest.run(callback);\n\n // set the flags to show the popup\n this._shouldRenderPopup = true;\n this._lastClick = e.latlng;\n },\n\n _buildExportParams: function () {\n var bounds = this._map.getBounds();\n var size = this._map.getSize();\n var ne = this._map.options.crs.project(bounds._northEast);\n var sw = this._map.options.crs.project(bounds._southWest);\n\n //ensure that we don't ask ArcGIS Server for a taller image than we have actual map displaying\n var top = this._map.latLngToLayerPoint(bounds._northEast);\n var bottom = this._map.latLngToLayerPoint(bounds._southWest);\n\n if (top.y > 0 || bottom.y < size.y){\n size.y = bottom.y - top.y;\n }\n\n var params = {\n bbox: [sw.x, sw.y, ne.x, ne.y].join(','),\n size: size.x + ',' + size.y,\n dpi: 96,\n format: this.options.format,\n transparent: this.options.transparent,\n bboxSR: this.options.bboxSR,\n imageSR: this.options.imageSR\n };\n\n if(this.options.dynamicLayers){\n params.dynamicLayers = this.options.dynamicLayers;\n }\n\n if(this.options.layers){\n params.layers = 'show:' + this.options.layers.join(',');\n }\n\n if(this.options.layerDefs){\n params.layerDefs = JSON.stringify(this.options.layerDefs);\n }\n\n if(this.options.timeOptions){\n params.timeOptions = JSON.stringify(this.options.timeOptions);\n }\n\n if(this.options.from && this.options.to){\n params.time = this.options.from.valueOf() + ',' + this.options.to.valueOf();\n }\n\n if(this._service.options.token) {\n params.token = this._service.options.token;\n }\n\n return params;\n },\n\n _requestExport: function (params, bounds) {\n if(this.options.f === 'json'){\n this._service.request('export', params, function(error, response){\n if(error) { return; } // we really can't do anything here but authenticate or requesterror will fire\n this._renderImage(response.href, bounds);\n }, this);\n } else {\n params.f = 'image';\n this._renderImage(this.options.url + 'export' + L.Util.getParamString(params), bounds);\n }\n }\n});\n\nEsriLeaflet.DynamicMapLayer = EsriLeaflet.Layers.DynamicMapLayer;\n\nEsriLeaflet.Layers.dynamicMapLayer = function(options){\n return new EsriLeaflet.Layers.DynamicMapLayer(options);\n};\n\nEsriLeaflet.dynamicMapLayer = function(options){\n return new EsriLeaflet.Layers.DynamicMapLayer(options);\n};\n","EsriLeaflet.Layers.TiledMapLayer = L.TileLayer.extend({\n options: {\n zoomOffsetAllowance: 0.1,\n correctZoomLevels: true\n },\n\n statics: {\n MercatorZoomLevels: {\n '0':156543.03392799999,\n '1':78271.516963999893,\n '2':39135.758482000099,\n '3':19567.879240999901,\n '4':9783.9396204999593,\n '5':4891.9698102499797,\n '6':2445.9849051249898,\n '7':1222.9924525624899,\n '8':611.49622628138002,\n '9':305.74811314055802,\n '10':152.874056570411,\n '11':76.437028285073197,\n '12':38.218514142536598,\n '13':19.109257071268299,\n '14':9.5546285356341496,\n '15':4.7773142679493699,\n '16':2.38865713397468,\n '17':1.1943285668550501,\n '18':0.59716428355981699,\n '19':0.29858214164761698,\n '20':0.14929107082381,\n '21':0.07464553541191,\n '22':0.0373227677059525,\n '23':0.0186613838529763\n }\n },\n\n initialize: function(options){\n options.url = EsriLeaflet.Util.cleanUrl(options.url);\n options = L.Util.setOptions(this, options);\n\n // set the urls\n //this.url = L.esri.Util.cleanUrl(url);\n this.tileUrl = L.esri.Util.cleanUrl(options.url) + 'tile/{z}/{y}/{x}';\n this._service = new L.esri.Services.MapService(options);\n this._service.on('authenticationrequired requeststart requestend requesterror requestsuccess', this._propagateEvent, this);\n\n //if this is looking at the AGO tiles subdomain insert the subdomain placeholder\n if(this.tileUrl.match('://tiles.arcgisonline.com')){\n this.tileUrl = this.tileUrl.replace('://tiles.arcgisonline.com', '://tiles{s}.arcgisonline.com');\n options.subdomains = ['1', '2', '3', '4'];\n }\n\n if(this.options.token) {\n this.tileUrl += ('?token=' + this.options.token);\n }\n\n // init layer by calling TileLayers initialize method\n L.TileLayer.prototype.initialize.call(this, this.tileUrl, options);\n },\n\n getTileUrl: function (tilePoint) {\n return L.Util.template(this.tileUrl, L.extend({\n s: this._getSubdomain(tilePoint),\n z: this._lodMap[tilePoint.z] || tilePoint.z, // try lod map first, then just defualt to zoom level\n x: tilePoint.x,\n y: tilePoint.y\n }, this.options));\n },\n\n onAdd: function(map){\n if (!this._lodMap && this.options.correctZoomLevels) {\n this._lodMap = {}; // make sure we always have an lod map even if its empty\n this.metadata(function(error, metadata) {\n if(!error) {\n var sr = metadata.spatialReference.latestWkid || metadata.spatialReference.wkid;\n\n if (sr === 102100 || sr === 3857) {\n //create the zoom level data\n var arcgisLODs = metadata.tileInfo.lods;\n var correctResolutions = EsriLeaflet.Layers.TiledMapLayer.MercatorZoomLevels;\n\n for(var i = 0; i < arcgisLODs.length; i++) {\n var arcgisLOD = arcgisLODs[i];\n for(var ci in correctResolutions) {\n var correctRes = correctResolutions[ci];\n\n if(this._withinPercentage(arcgisLOD.resolution, correctRes, this.options.zoomOffsetAllowance)) {\n this._lodMap[ci] = arcgisLOD.level;\n break;\n }\n }\n }\n } else {\n EsriLeaflet.Util.warn('L.esri.TiledMapLayer is using a non-mercator spatial reference. Support may be available through Proj4Leaflet http://esri.github.io/esri-leaflet/examples/non-mercator-projection.html');\n }\n }\n\n L.TileLayer.prototype.onAdd.call(this, map);\n }, this);\n } else {\n L.TileLayer.prototype.onAdd.call(this, map);\n }\n },\n\n metadata: function(callback, context){\n this._service.metadata(callback, context);\n return this;\n },\n\n identify: function(){\n return this._service.identify();\n },\n\n authenticate: function(token){\n var tokenQs = '?token=' + token;\n this.tileUrl = (this.options.token) ? this.tileUrl.replace(/\\?token=(.+)/g, tokenQs) : this.tileUrl + tokenQs;\n this.options.token = token;\n this._service.authenticate(token);\n return this;\n },\n\n // from https://github.com/Leaflet/Leaflet/blob/v0.7.2/src/layer/FeatureGroup.js\n // @TODO remove at Leaflet 0.8\n _propagateEvent: function (e) {\n e = L.extend({\n layer: e.target,\n target: this\n }, e);\n this.fire(e.type, e);\n },\n\n _withinPercentage: function (a, b, percentage) {\n var diff = Math.abs((a/b) - 1);\n return diff < percentage;\n }\n});\n\nL.esri.TiledMapLayer = L.esri.Layers.tiledMapLayer;\n\nL.esri.Layers.tiledMapLayer = function(options){\n return new L.esri.Layers.TiledMapLayer(options);\n};\n\nL.esri.tiledMapLayer = function(options){\n return new L.esri.Layers.TiledMapLayer(options);\n};\n"]} \ No newline at end of file +{"version":3,"sources":["../../../src/EsriLeaflet.js","../../../src/Util.js","../../../src/Request.js","../../../src/Services/Service.js","../../../src/Services/MapService.js","../../../src/Tasks/Task.js","../../../src/Tasks/Identify.js","../../../src/Tasks/IdentifyFeatures.js","../../../src/Tasks/Query.js","../../../src/Tasks/Find.js","../../../src/Layers/RasterLayer.js","../../../src/Layers/DynamicMapLayer.js","../../../src/Layers/TiledMapLayer.js"],"names":[],"mappings":"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","file":"esri-leaflet-map-service-src.js","sourcesContent":["var EsriLeaflet = { //jshint ignore:line\n VERSION: '1.0.3',\n Layers: {},\n Services: {},\n Controls: {},\n Tasks: {},\n Util: {},\n Support: {\n CORS: !!(window.XMLHttpRequest && 'withCredentials' in new XMLHttpRequest()),\n pointerEvents: document.documentElement.style.pointerEvents === ''\n }\n};\n\nif(typeof window !== 'undefined' && window.L){\n window.L.esri = EsriLeaflet;\n}\n","(function(EsriLeaflet){\n\n // normalize request animation frame\n var raf = window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.msRequestAnimationFrame ||\n function(cb) { return window.setTimeout(cb, 1000 / 60); };\n\n // shallow object clone for feature properties and attributes\n // from http://jsperf.com/cloning-an-object/2\n function clone(obj) {\n var target = {};\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n target[i] = obj[i];\n }\n }\n return target;\n }\n\n // checks if 2 x,y points are equal\n function pointsEqual(a, b) {\n for (var i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n\n // checks if the first and last points of a ring are equal and closes the ring\n function closeRing(coordinates) {\n if (!pointsEqual(coordinates[0], coordinates[coordinates.length - 1])) {\n coordinates.push(coordinates[0]);\n }\n return coordinates;\n }\n\n // determine if polygon ring coordinates are clockwise. clockwise signifies outer ring, counter-clockwise an inner ring\n // or hole. this logic was found at http://stackoverflow.com/questions/1165647/how-to-determine-if-a-list-of-polygon-\n // points-are-in-clockwise-order\n function ringIsClockwise(ringToTest) {\n var total = 0,i = 0;\n var rLength = ringToTest.length;\n var pt1 = ringToTest[i];\n var pt2;\n for (i; i < rLength - 1; i++) {\n pt2 = ringToTest[i + 1];\n total += (pt2[0] - pt1[0]) * (pt2[1] + pt1[1]);\n pt1 = pt2;\n }\n return (total >= 0);\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L504-L519\n function vertexIntersectsVertex(a1, a2, b1, b2) {\n var uaT = (b2[0] - b1[0]) * (a1[1] - b1[1]) - (b2[1] - b1[1]) * (a1[0] - b1[0]);\n var ubT = (a2[0] - a1[0]) * (a1[1] - b1[1]) - (a2[1] - a1[1]) * (a1[0] - b1[0]);\n var uB = (b2[1] - b1[1]) * (a2[0] - a1[0]) - (b2[0] - b1[0]) * (a2[1] - a1[1]);\n\n if ( uB !== 0 ) {\n var ua = uaT / uB;\n var ub = ubT / uB;\n\n if ( 0 <= ua && ua <= 1 && 0 <= ub && ub <= 1 ) {\n return true;\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L521-L531\n function arrayIntersectsArray(a, b) {\n for (var i = 0; i < a.length - 1; i++) {\n for (var j = 0; j < b.length - 1; j++) {\n if (vertexIntersectsVertex(a[i], a[i + 1], b[j], b[j + 1])) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L470-L480\n function coordinatesContainPoint(coordinates, point) {\n var contains = false;\n for(var i = -1, l = coordinates.length, j = l - 1; ++i < l; j = i) {\n if (((coordinates[i][1] <= point[1] && point[1] < coordinates[j][1]) ||\n (coordinates[j][1] <= point[1] && point[1] < coordinates[i][1])) &&\n (point[0] < (coordinates[j][0] - coordinates[i][0]) * (point[1] - coordinates[i][1]) / (coordinates[j][1] - coordinates[i][1]) + coordinates[i][0])) {\n contains = !contains;\n }\n }\n return contains;\n }\n\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L106-L113\n function coordinatesContainCoordinates(outer, inner){\n var intersects = arrayIntersectsArray(outer, inner);\n var contains = coordinatesContainPoint(outer, inner[0]);\n if(!intersects && contains){\n return true;\n }\n return false;\n }\n\n // do any polygons in this array contain any other polygons in this array?\n // used for checking for holes in arcgis rings\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L117-L172\n function convertRingsToGeoJSON(rings){\n var outerRings = [];\n var holes = [];\n var x; // iterator\n var outerRing; // current outer ring being evaluated\n var hole; // current hole being evaluated\n\n // for each ring\n for (var r = 0; r < rings.length; r++) {\n var ring = closeRing(rings[r].slice(0));\n if(ring.length < 4){\n continue;\n }\n // is this ring an outer ring? is it clockwise?\n if(ringIsClockwise(ring)){\n var polygon = [ ring ];\n outerRings.push(polygon); // push to outer rings\n } else {\n holes.push(ring); // counterclockwise push to holes\n }\n }\n\n var uncontainedHoles = [];\n\n // while there are holes left...\n while(holes.length){\n // pop a hole off out stack\n hole = holes.pop();\n\n // loop over all outer rings and see if they contain our hole.\n var contained = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(coordinatesContainCoordinates(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n contained = true;\n break;\n }\n }\n\n // ring is not contained in any outer ring\n // sometimes this happens https://github.com/Esri/esri-leaflet/issues/320\n if(!contained){\n uncontainedHoles.push(hole);\n }\n }\n\n // if we couldn't match any holes using contains we can try intersects...\n while(uncontainedHoles.length){\n // pop a hole off out stack\n hole = uncontainedHoles.pop();\n\n // loop over all outer rings and see if any intersect our hole.\n var intersects = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(arrayIntersectsArray(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n intersects = true;\n break;\n }\n }\n\n if(!intersects) {\n outerRings.push([hole.reverse()]);\n }\n }\n\n if(outerRings.length === 1){\n return {\n type: 'Polygon',\n coordinates: outerRings[0]\n };\n } else {\n return {\n type: 'MultiPolygon',\n coordinates: outerRings\n };\n }\n }\n\n // This function ensures that rings are oriented in the right directions\n // outer rings are clockwise, holes are counterclockwise\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function orientRings(poly){\n var output = [];\n var polygon = poly.slice(0);\n var outerRing = closeRing(polygon.shift().slice(0));\n if(outerRing.length >= 4){\n if(!ringIsClockwise(outerRing)){\n outerRing.reverse();\n }\n\n output.push(outerRing);\n\n for (var i = 0; i < polygon.length; i++) {\n var hole = closeRing(polygon[i].slice(0));\n if(hole.length >= 4){\n if(ringIsClockwise(hole)){\n hole.reverse();\n }\n output.push(hole);\n }\n }\n }\n\n return output;\n }\n\n // This function flattens holes in multipolygons to one array of polygons\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function flattenMultiPolygonRings(rings){\n var output = [];\n for (var i = 0; i < rings.length; i++) {\n var polygon = orientRings(rings[i]);\n for (var x = polygon.length - 1; x >= 0; x--) {\n var ring = polygon[x].slice(0);\n output.push(ring);\n }\n }\n return output;\n }\n\n // convert an extent (ArcGIS) to LatLngBounds (Leaflet)\n EsriLeaflet.Util.extentToBounds = function(extent){\n var sw = new L.LatLng(extent.ymin, extent.xmin);\n var ne = new L.LatLng(extent.ymax, extent.xmax);\n return new L.LatLngBounds(sw, ne);\n };\n\n // convert an LatLngBounds (Leaflet) to extent (ArcGIS)\n EsriLeaflet.Util.boundsToExtent = function(bounds) {\n bounds = L.latLngBounds(bounds);\n return {\n 'xmin': bounds.getSouthWest().lng,\n 'ymin': bounds.getSouthWest().lat,\n 'xmax': bounds.getNorthEast().lng,\n 'ymax': bounds.getNorthEast().lat,\n 'spatialReference': {\n 'wkid' : 4326\n }\n };\n };\n\n EsriLeaflet.Util.arcgisToGeojson = function (arcgis, idAttribute){\n var geojson = {};\n\n if(typeof arcgis.x === 'number' && typeof arcgis.y === 'number'){\n geojson.type = 'Point';\n geojson.coordinates = [arcgis.x, arcgis.y];\n }\n\n if(arcgis.points){\n geojson.type = 'MultiPoint';\n geojson.coordinates = arcgis.points.slice(0);\n }\n\n if(arcgis.paths) {\n if(arcgis.paths.length === 1){\n geojson.type = 'LineString';\n geojson.coordinates = arcgis.paths[0].slice(0);\n } else {\n geojson.type = 'MultiLineString';\n geojson.coordinates = arcgis.paths.slice(0);\n }\n }\n\n if(arcgis.rings) {\n geojson = convertRingsToGeoJSON(arcgis.rings.slice(0));\n }\n\n if(arcgis.geometry || arcgis.attributes) {\n geojson.type = 'Feature';\n geojson.geometry = (arcgis.geometry) ? EsriLeaflet.Util.arcgisToGeojson(arcgis.geometry) : null;\n geojson.properties = (arcgis.attributes) ? clone(arcgis.attributes) : null;\n if(arcgis.attributes) {\n geojson.id = arcgis.attributes[idAttribute] || arcgis.attributes.OBJECTID || arcgis.attributes.FID;\n }\n }\n\n return geojson;\n };\n\n // GeoJSON -> ArcGIS\n EsriLeaflet.Util.geojsonToArcGIS = function(geojson, idAttribute){\n idAttribute = idAttribute || 'OBJECTID';\n var spatialReference = { wkid: 4326 };\n var result = {};\n var i;\n\n switch(geojson.type){\n case 'Point':\n result.x = geojson.coordinates[0];\n result.y = geojson.coordinates[1];\n result.spatialReference = spatialReference;\n break;\n case 'MultiPoint':\n result.points = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'LineString':\n result.paths = [geojson.coordinates.slice(0)];\n result.spatialReference = spatialReference;\n break;\n case 'MultiLineString':\n result.paths = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'Polygon':\n result.rings = orientRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'MultiPolygon':\n result.rings = flattenMultiPolygonRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'Feature':\n if(geojson.geometry) {\n result.geometry = EsriLeaflet.Util.geojsonToArcGIS(geojson.geometry, idAttribute);\n }\n result.attributes = (geojson.properties) ? clone(geojson.properties) : {};\n if(geojson.id){\n result.attributes[idAttribute] = geojson.id;\n }\n break;\n case 'FeatureCollection':\n result = [];\n for (i = 0; i < geojson.features.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.features[i], idAttribute));\n }\n break;\n case 'GeometryCollection':\n result = [];\n for (i = 0; i < geojson.geometries.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.geometries[i], idAttribute));\n }\n break;\n }\n\n return result;\n };\n\n EsriLeaflet.Util.responseToFeatureCollection = function(response, idAttribute){\n var objectIdField;\n\n if(idAttribute){\n objectIdField = idAttribute;\n } else if(response.objectIdFieldName){\n objectIdField = response.objectIdFieldName;\n } else if(response.fields) {\n for (var j = 0; j <= response.fields.length - 1; j++) {\n if(response.fields[j].type === 'esriFieldTypeOID') {\n objectIdField = response.fields[j].name;\n break;\n }\n }\n } else {\n objectIdField = 'OBJECTID';\n }\n\n var featureCollection = {\n type: 'FeatureCollection',\n features: []\n };\n var features = response.features || response.results;\n if(features.length){\n for (var i = features.length - 1; i >= 0; i--) {\n featureCollection.features.push(EsriLeaflet.Util.arcgisToGeojson(features[i], objectIdField));\n }\n }\n\n return featureCollection;\n };\n\n // trim url whitespace and add a trailing slash if needed\n EsriLeaflet.Util.cleanUrl = function(url){\n //trim leading and trailing spaces, but not spaces inside the url\n url = url.replace(/^\\s+|\\s+$|\\A\\s+|\\s+\\z/g, '');\n\n //add a trailing slash to the url if the user omitted it\n if(url[url.length-1] !== '/'){\n url += '/';\n }\n\n return url;\n };\n\n EsriLeaflet.Util.isArcgisOnline = function(url){\n /* hosted feature services can emit geojson natively.\n our check for 'geojson' support will need to be revisted\n once the functionality makes its way to ArcGIS Server*/\n return (/\\.arcgis\\.com.*?FeatureServer/g).test(url);\n };\n\n EsriLeaflet.Util.geojsonTypeToArcGIS = function (geoJsonType) {\n var arcgisGeometryType;\n switch (geoJsonType) {\n case 'Point':\n arcgisGeometryType = 'esriGeometryPoint';\n break;\n case 'MultiPoint':\n arcgisGeometryType = 'esriGeometryMultipoint';\n break;\n case 'LineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'MultiLineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'Polygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n case 'MultiPolygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n }\n return arcgisGeometryType;\n };\n\n EsriLeaflet.Util.requestAnimationFrame = L.Util.bind(raf, window);\n\n EsriLeaflet.Util.warn = function (message) {\n if(console && console.warn) {\n console.warn(message);\n }\n };\n\n})(EsriLeaflet);","(function(EsriLeaflet){\n\n var callbacks = 0;\n\n window._EsriLeafletCallbacks = {};\n\n function serialize(params){\n var data = '';\n\n params.f = params.f || 'json';\n\n for (var key in params){\n if(params.hasOwnProperty(key)){\n var param = params[key];\n var type = Object.prototype.toString.call(param);\n var value;\n\n if(data.length){\n data += '&';\n }\n\n if (type === '[object Array]'){\n value = (Object.prototype.toString.call(param[0]) === '[object Object]') ? JSON.stringify(param) : param.join(',');\n } else if (type === '[object Object]') {\n value = JSON.stringify(param);\n } else if (type === '[object Date]'){\n value = param.valueOf();\n } else {\n value = param;\n }\n\n data += encodeURIComponent(key) + '=' + encodeURIComponent(value);\n }\n }\n\n return data;\n }\n\n function createRequest(callback, context){\n var httpRequest = new XMLHttpRequest();\n\n httpRequest.onerror = function(e) {\n httpRequest.onreadystatechange = L.Util.falseFn;\n\n callback.call(context, {\n error: {\n code: 500,\n message: 'XMLHttpRequest error'\n }\n }, null);\n };\n\n httpRequest.onreadystatechange = function(){\n var response;\n var error;\n\n if (httpRequest.readyState === 4) {\n try {\n response = JSON.parse(httpRequest.responseText);\n } catch(e) {\n response = null;\n error = {\n code: 500,\n message: 'Could not parse response as JSON. This could also be caused by a CORS or XMLHttpRequest error.'\n };\n }\n\n if (!error && response.error) {\n error = response.error;\n response = null;\n }\n\n httpRequest.onerror = L.Util.falseFn;\n\n callback.call(context, error, response);\n }\n };\n\n return httpRequest;\n }\n\n // AJAX handlers for CORS (modern browsers) or JSONP (older browsers)\n EsriLeaflet.Request = {\n request: function(url, params, callback, context){\n var paramString = serialize(params);\n var httpRequest = createRequest(callback, context);\n var requestLength = (url + '?' + paramString).length;\n\n // request is less then 2000 characters and the browser supports CORS, make GET request with XMLHttpRequest\n if(requestLength <= 2000 && L.esri.Support.CORS){\n httpRequest.open('GET', url + '?' + paramString);\n httpRequest.send(null);\n\n // request is less more then 2000 characters and the browser supports CORS, make POST request with XMLHttpRequest\n } else if (requestLength > 2000 && L.esri.Support.CORS){\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(paramString);\n\n // request is less more then 2000 characters and the browser does not support CORS, make a JSONP request\n } else if(requestLength <= 2000 && !L.esri.Support.CORS){\n return L.esri.Request.get.JSONP(url, params, callback, context);\n\n // request is longer then 2000 characters and the browser does not support CORS, log a warning\n } else {\n EsriLeaflet.Util.warn('a request to ' + url + ' was longer then 2000 characters and this browser cannot make a cross-domain post request. Please use a proxy http://esri.github.io/esri-leaflet/api-reference/request.html');\n return;\n }\n\n return httpRequest;\n },\n\n post: {\n XMLHTTP: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(serialize(params));\n\n return httpRequest;\n }\n },\n\n get: {\n CORS: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n\n httpRequest.open('GET', url + '?' + serialize(params), true);\n httpRequest.send(null);\n\n return httpRequest;\n },\n JSONP: function(url, params, callback, context){\n var callbackId = 'c' + callbacks;\n\n params.callback = 'window._EsriLeafletCallbacks.' + callbackId;\n\n var script = L.DomUtil.create('script', null, document.body);\n script.type = 'text/javascript';\n script.src = url + '?' + serialize(params);\n script.id = callbackId;\n\n window._EsriLeafletCallbacks[callbackId] = function(response){\n if(window._EsriLeafletCallbacks[callbackId] !== true){\n var error;\n var responseType = Object.prototype.toString.call(response);\n\n if(!(responseType === '[object Object]' || responseType === '[object Array]')){\n error = {\n error: {\n code: 500,\n message: 'Expected array or object as JSONP response'\n }\n };\n response = null;\n }\n\n if (!error && response.error) {\n error = response;\n response = null;\n }\n\n callback.call(context, error, response);\n window._EsriLeafletCallbacks[callbackId] = true;\n }\n };\n\n callbacks++;\n\n return {\n id: callbackId,\n url: script.src,\n abort: function(){\n window._EsriLeafletCallbacks._callback[callbackId]({\n code: 0,\n message: 'Request aborted.'\n });\n }\n };\n }\n }\n };\n\n // choose the correct AJAX handler depending on CORS support\n EsriLeaflet.get = (EsriLeaflet.Support.CORS) ? EsriLeaflet.Request.get.CORS : EsriLeaflet.Request.get.JSONP;\n\n // always use XMLHttpRequest for posts\n EsriLeaflet.post = EsriLeaflet.Request.post.XMLHTTP;\n\n // expose a common request method the uses GET\\POST based on request length\n EsriLeaflet.request = EsriLeaflet.Request.request;\n\n})(EsriLeaflet);","EsriLeaflet.Services.Service = L.Class.extend({\n\n includes: L.Mixin.Events,\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n initialize: function (options) {\n options = options || {};\n this._requestQueue = [];\n this._authenticating = false;\n L.Util.setOptions(this, options);\n this.options.url = EsriLeaflet.Util.cleanUrl(this.options.url);\n },\n\n get: function (path, params, callback, context) {\n return this._request('get', path, params, callback, context);\n },\n\n post: function (path, params, callback, context) {\n return this._request('post', path, params, callback, context);\n },\n\n request: function (path, params, callback, context) {\n return this._request('request', path, params, callback, context);\n },\n\n metadata: function (callback, context) {\n return this._request('get', '', {}, callback, context);\n },\n\n authenticate: function(token){\n this._authenticating = false;\n this.options.token = token;\n this._runQueue();\n return this;\n },\n\n _request: function(method, path, params, callback, context){\n this.fire('requeststart', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n\n var wrappedCallback = this._createServiceCallback(method, path, params, callback, context);\n\n if (this.options.token) {\n params.token = this.options.token;\n }\n\n if (this._authenticating) {\n this._requestQueue.push([method, path, params, callback, context]);\n return;\n } else {\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, wrappedCallback);\n } else {\n return EsriLeaflet[method](url, params, wrappedCallback);\n }\n }\n },\n\n _createServiceCallback: function(method, path, params, callback, context){\n return L.Util.bind(function(error, response){\n\n if (error && (error.code === 499 || error.code === 498)) {\n this._authenticating = true;\n\n this._requestQueue.push([method, path, params, callback, context]);\n\n // fire an event for users to handle and re-authenticate\n this.fire('authenticationrequired', {\n authenticate: L.Util.bind(this.authenticate, this)\n });\n\n // if the user has access to a callback they can handle the auth error\n error.authenticate = L.Util.bind(this.authenticate, this);\n }\n\n callback.call(context, error, response);\n\n if(error) {\n this.fire('requesterror', {\n url: this.options.url + path,\n params: params,\n message: error.message,\n code: error.code,\n method: method\n });\n } else {\n this.fire('requestsuccess', {\n url: this.options.url + path,\n params: params,\n response: response,\n method: method\n });\n }\n\n this.fire('requestend', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n }, this);\n },\n\n _runQueue: function(){\n for (var i = this._requestQueue.length - 1; i >= 0; i--) {\n var request = this._requestQueue[i];\n var method = request.shift();\n this[method].apply(this, request);\n }\n this._requestQueue = [];\n }\n\n});\n\nEsriLeaflet.Services.service = function(params){\n return new EsriLeaflet.Services.Service(params);\n};\n","EsriLeaflet.Services.MapService = EsriLeaflet.Services.Service.extend({\n\n identify: function () {\n return new EsriLeaflet.Tasks.identifyFeatures(this);\n },\n\n find: function () {\n return new EsriLeaflet.Tasks.Find(this);\n },\n\n query: function () {\n return new EsriLeaflet.Tasks.Query(this);\n }\n\n});\n\nEsriLeaflet.Services.mapService = function(params){\n return new EsriLeaflet.Services.MapService(params);\n};","EsriLeaflet.Tasks.Task = L.Class.extend({\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n //Generate a method for each methodName:paramName in the setters for this task.\n generateSetter: function(param, context){\n return L.Util.bind(function(value){\n this.params[param] = value;\n return this;\n }, context);\n },\n\n initialize: function(endpoint){\n // endpoint can be either a url (and options) for an ArcGIS Rest Service or an instance of EsriLeaflet.Service\n if(endpoint.request && endpoint.options){\n this._service = endpoint;\n L.Util.setOptions(this, endpoint.options);\n } else {\n L.Util.setOptions(this, endpoint);\n this.options.url = L.esri.Util.cleanUrl(endpoint.url);\n }\n\n // clone default params into this object\n this.params = L.Util.extend({}, this.params || {});\n\n // generate setter methods based on the setters object implimented a child class\n if(this.setters){\n for (var setter in this.setters){\n var param = this.setters[setter];\n this[setter] = this.generateSetter(param, this);\n }\n }\n },\n\n token: function(token){\n if(this._service){\n this._service.authenticate(token);\n } else {\n this.params.token = token;\n }\n return this;\n },\n\n request: function(callback, context){\n if(this._service){\n return this._service.request(this.path, this.params, callback, context);\n } else {\n return this._request('request', this.path, this.params, callback, context);\n }\n },\n\n _request: function(method, path, params, callback, context){\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, callback, context);\n } else{\n return EsriLeaflet[method](url, params, callback, context);\n }\n }\n});","EsriLeaflet.Tasks.Identify = EsriLeaflet.Tasks.Task.extend({\n path: 'identify',\n\n between: function(start, end){\n this.params.time = [start.valueOf(), end.valueOf()];\n return this;\n }\n});\n","EsriLeaflet.Tasks.IdentifyFeatures = EsriLeaflet.Tasks.Identify.extend({\n setters: {\n 'layers': 'layers',\n 'precision': 'geometryPrecision',\n 'tolerance': 'tolerance',\n 'returnGeometry': 'returnGeometry'\n },\n\n params: {\n sr: 4326,\n layers: 'all',\n tolerance: 3,\n returnGeometry: true\n },\n\n on: function(map){\n var extent = EsriLeaflet.Util.boundsToExtent(map.getBounds());\n var size = map.getSize();\n this.params.imageDisplay = [size.x, size.y, 96];\n this.params.mapExtent = [extent.xmin, extent.ymin, extent.xmax, extent.ymax];\n return this;\n },\n\n at: function(latlng){\n latlng = L.latLng(latlng);\n this.params.geometry = [latlng.lng, latlng.lat];\n this.params.geometryType = 'esriGeometryPoint';\n return this;\n },\n\n layerDef: function (id, where){\n this.params.layerDefs = (this.params.layerDefs) ? this.params.layerDefs + ';' : '';\n this.params.layerDefs += ([id, where]).join(':');\n return this;\n },\n\n simplify: function(map, factor){\n var mapWidth = Math.abs(map.getBounds().getWest() - map.getBounds().getEast());\n this.params.maxAllowableOffset = (mapWidth / map.getSize().y) * (1 - factor);\n return this;\n },\n\n run: function (callback, context){\n return this.request(function(error, response){\n // immediately invoke with an error\n if(error) {\n callback.call(context, error, undefined, response);\n return;\n\n // ok no error lets just assume we have features...\n } else {\n var featureCollection = EsriLeaflet.Util.responseToFeatureCollection(response);\n response.results = response.results.reverse();\n for (var i = 0; i < featureCollection.features.length; i++) {\n var feature = featureCollection.features[i];\n feature.layerId = response.results[i].layerId;\n }\n callback.call(context, undefined, featureCollection, response);\n }\n });\n }\n});\n\nEsriLeaflet.Tasks.identifyFeatures = function(params){\n return new EsriLeaflet.Tasks.IdentifyFeatures(params);\n};","EsriLeaflet.Tasks.Query = EsriLeaflet.Tasks.Task.extend({\n setters: {\n 'offset': 'offset',\n 'limit': 'limit',\n 'fields': 'outFields',\n 'precision': 'geometryPrecision',\n 'featureIds': 'objectIds',\n 'returnGeometry': 'returnGeometry',\n 'token': 'token'\n },\n\n path: 'query',\n\n params: {\n returnGeometry: true,\n where: '1=1',\n outSr: 4326,\n outFields: '*'\n },\n\n within: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelContains'; // will make code read layer within geometry, to the api this will reads geometry contains layer\n return this;\n },\n\n intersects: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelIntersects';\n return this;\n },\n\n contains: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelWithin'; // will make code read layer contains geometry, to the api this will reads geometry within layer\n return this;\n },\n\n // crosses: function(geometry){\n // this._setGeometry(geometry);\n // this.params.spatialRel = 'esriSpatialRelCrosses';\n // return this;\n // },\n\n // touches: function(geometry){\n // this._setGeometry(geometry);\n // this.params.spatialRel = 'esriSpatialRelTouches';\n // return this;\n // },\n\n overlaps: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelOverlaps';\n return this;\n },\n\n // only valid for Feature Services running on ArcGIS Server 10.3 or ArcGIS Online\n nearby: function(latlng, radius){\n latlng = L.latLng(latlng);\n this.params.geometry = [latlng.lng, latlng.lat];\n this.params.geometryType = 'esriGeometryPoint';\n this.params.spatialRel = 'esriSpatialRelIntersects';\n this.params.units = 'esriSRUnit_Meter';\n this.params.distance = radius;\n this.params.inSr = 4326;\n return this;\n },\n\n where: function(string){\n // instead of converting double-quotes to single quotes, pass as is, and provide a more informative message if a 400 is encountered\n this.params.where = string;\n return this;\n },\n\n between: function(start, end){\n this.params.time = [start.valueOf(), end.valueOf()];\n return this;\n },\n\n simplify: function(map, factor){\n var mapWidth = Math.abs(map.getBounds().getWest() - map.getBounds().getEast());\n this.params.maxAllowableOffset = (mapWidth / map.getSize().y) * factor;\n return this;\n },\n\n orderBy: function(fieldName, order){\n order = order || 'ASC';\n this.params.orderByFields = (this.params.orderByFields) ? this.params.orderByFields + ',' : '';\n this.params.orderByFields += ([fieldName, order]).join(' ');\n return this;\n },\n\n run: function(callback, context){\n this._cleanParams();\n\n // if the service is hosted on arcgis online request geojson directly\n if(EsriLeaflet.Util.isArcgisOnline(this.options.url)){\n this.params.f = 'geojson';\n\n return this.request(function(error, response){\n this._trapSQLerrors(error);\n callback.call(context, error, response, response);\n }, this);\n\n // otherwise convert it in the callback then pass it on\n } else {\n return this.request(function(error, response){\n this._trapSQLerrors(error);\n callback.call(context, error, (response && EsriLeaflet.Util.responseToFeatureCollection(response)), response);\n }, this);\n }\n },\n\n count: function(callback, context){\n this._cleanParams();\n this.params.returnCountOnly = true;\n return this.request(function(error, response){\n callback.call(this, error, (response && response.count), response);\n }, context);\n },\n\n ids: function(callback, context){\n this._cleanParams();\n this.params.returnIdsOnly = true;\n return this.request(function(error, response){\n callback.call(this, error, (response && response.objectIds), response);\n }, context);\n },\n\n // only valid for Feature Services running on ArcGIS Server 10.3 or ArcGIS Online\n bounds: function(callback, context){\n this._cleanParams();\n this.params.returnExtentOnly = true;\n return this.request(function(error, response){\n callback.call(context, error, (response && response.extent && EsriLeaflet.Util.extentToBounds(response.extent)), response);\n }, context);\n },\n\n // only valid for image services\n pixelSize: function(point){\n point = L.point(point);\n this.params.pixelSize = [point.x,point.y];\n return this;\n },\n\n // only valid for map services\n layer: function(layer){\n this.path = layer + '/query';\n return this;\n },\n\n _trapSQLerrors: function(error){\n if (error){\n if (error.code === '400'){\n EsriLeaflet.Util.warn('one common syntax error in query requests is encasing string values in double quotes instead of single quotes');\n }\n }\n },\n\n _cleanParams: function(){\n delete this.params.returnIdsOnly;\n delete this.params.returnExtentOnly;\n delete this.params.returnCountOnly;\n },\n\n _setGeometry: function(geometry) {\n this.params.inSr = 4326;\n\n // convert bounds to extent and finish\n if ( geometry instanceof L.LatLngBounds ) {\n // set geometry + geometryType\n this.params.geometry = EsriLeaflet.Util.boundsToExtent(geometry);\n this.params.geometryType = 'esriGeometryEnvelope';\n return;\n }\n\n // convert L.Marker > L.LatLng\n if(geometry.getLatLng){\n geometry = geometry.getLatLng();\n }\n\n // convert L.LatLng to a geojson point and continue;\n if (geometry instanceof L.LatLng) {\n geometry = {\n type: 'Point',\n coordinates: [geometry.lng, geometry.lat]\n };\n }\n\n // handle L.GeoJSON, pull out the first geometry\n if ( geometry instanceof L.GeoJSON ) {\n //reassign geometry to the GeoJSON value (we are assuming that only one feature is present)\n geometry = geometry.getLayers()[0].feature.geometry;\n this.params.geometry = EsriLeaflet.Util.geojsonToArcGIS(geometry);\n this.params.geometryType = EsriLeaflet.Util.geojsonTypeToArcGIS(geometry.type);\n }\n\n // Handle L.Polyline and L.Polygon\n if (geometry.toGeoJSON) {\n geometry = geometry.toGeoJSON();\n }\n\n // handle GeoJSON feature by pulling out the geometry\n if ( geometry.type === 'Feature' ) {\n // get the geometry of the geojson feature\n geometry = geometry.geometry;\n }\n\n // confirm that our GeoJSON is a point, line or polygon\n if ( geometry.type === 'Point' || geometry.type === 'LineString' || geometry.type === 'Polygon') {\n this.params.geometry = EsriLeaflet.Util.geojsonToArcGIS(geometry);\n this.params.geometryType = EsriLeaflet.Util.geojsonTypeToArcGIS(geometry.type);\n return;\n }\n\n // warn the user if we havn't found a\n /* global console */\n EsriLeaflet.Util.warn('invalid geometry passed to spatial query. Should be an L.LatLng, L.LatLngBounds or L.Marker or a GeoJSON Point Line or Polygon object');\n\n return;\n }\n});\n\nEsriLeaflet.Tasks.query = function(params){\n return new EsriLeaflet.Tasks.Query(params);\n};","EsriLeaflet.Tasks.Find = EsriLeaflet.Tasks.Task.extend({\n setters: {\n // method name > param name\n 'contains': 'contains',\n 'text': 'searchText',\n 'fields': 'searchFields', // denote an array or single string\n 'spatialReference': 'sr',\n 'sr': 'sr',\n 'layers': 'layers',\n 'returnGeometry': 'returnGeometry',\n 'maxAllowableOffset': 'maxAllowableOffset',\n 'precision': 'geometryPrecision',\n 'dynamicLayers': 'dynamicLayers',\n 'returnZ' : 'returnZ',\n 'returnM' : 'returnM',\n 'gdbVersion' : 'gdbVersion',\n 'token' : 'token'\n },\n\n path: 'find',\n\n params: {\n sr: 4326,\n contains: true,\n returnGeometry: true,\n returnZ: true,\n returnM: false\n },\n\n layerDefs: function (id, where) {\n this.params.layerDefs = (this.params.layerDefs) ? this.params.layerDefs + ';' : '';\n this.params.layerDefs += ([id, where]).join(':');\n return this;\n },\n\n simplify: function(map, factor){\n var mapWidth = Math.abs(map.getBounds().getWest() - map.getBounds().getEast());\n this.params.maxAllowableOffset = (mapWidth / map.getSize().y) * factor;\n return this;\n },\n\n run: function (callback, context) {\n return this.request(function(error, response){\n callback.call(context, error, (response && EsriLeaflet.Util.responseToFeatureCollection(response)), response);\n }, context);\n }\n});\n\nEsriLeaflet.Tasks.find = function (params) {\n return new EsriLeaflet.Tasks.Find(params);\n};","EsriLeaflet.Layers.RasterLayer = L.Class.extend({\n includes: L.Mixin.Events,\n\n options: {\n opacity: 1,\n position: 'front',\n f: 'image'\n },\n\n onAdd: function (map) {\n this._map = map;\n\n this._update = L.Util.limitExecByInterval(this._update, this.options.updateInterval, this);\n\n if (map.options.crs && map.options.crs.code) {\n var sr = map.options.crs.code.split(':')[1];\n this.options.bboxSR = sr;\n this.options.imageSR = sr;\n }\n\n map.on('moveend', this._update, this);\n\n // if we had an image loaded and it matches the\n // current bounds show the image otherwise remove it\n if(this._currentImage && this._currentImage._bounds.equals(this._map.getBounds())){\n map.addLayer(this._currentImage);\n } else if(this._currentImage) {\n this._map.removeLayer(this._currentImage);\n this._currentImage = null;\n }\n\n this._update();\n\n if(this._popup){\n this._map.on('click', this._getPopupData, this);\n this._map.on('dblclick', this._resetPopupState, this);\n }\n },\n\n bindPopup: function(fn, popupOptions){\n this._shouldRenderPopup = false;\n this._lastClick = false;\n this._popup = L.popup(popupOptions);\n this._popupFunction = fn;\n if(this._map){\n this._map.on('click', this._getPopupData, this);\n this._map.on('dblclick', this._resetPopupState, this);\n }\n return this;\n },\n\n unbindPopup: function(){\n if(this._map){\n this._map.closePopup(this._popup);\n this._map.off('click', this._getPopupData, this);\n this._map.off('dblclick', this._resetPopupState, this);\n }\n this._popup = false;\n return this;\n },\n\n onRemove: function (map) {\n if (this._currentImage) {\n this._map.removeLayer(this._currentImage);\n }\n\n if(this._popup){\n this._map.off('click', this._getPopupData, this);\n this._map.off('dblclick', this._resetPopupState, this);\n }\n\n this._map.off('moveend', this._update, this);\n this._map = null;\n },\n\n addTo: function(map){\n map.addLayer(this);\n return this;\n },\n\n removeFrom: function(map){\n map.removeLayer(this);\n return this;\n },\n\n bringToFront: function(){\n this.options.position = 'front';\n if(this._currentImage){\n this._currentImage.bringToFront();\n }\n return this;\n },\n\n bringToBack: function(){\n this.options.position = 'back';\n if(this._currentImage){\n this._currentImage.bringToBack();\n }\n return this;\n },\n\n getAttribution: function () {\n return this.options.attribution;\n },\n\n getOpacity: function(){\n return this.options.opacity;\n },\n\n setOpacity: function(opacity){\n this.options.opacity = opacity;\n this._currentImage.setOpacity(opacity);\n return this;\n },\n\n getTimeRange: function(){\n return [this.options.from, this.options.to];\n },\n\n setTimeRange: function(from, to){\n this.options.from = from;\n this.options.to = to;\n this._update();\n return this;\n },\n\n metadata: function(callback, context){\n this._service.metadata(callback, context);\n return this;\n },\n\n authenticate: function(token){\n this._service.authenticate(token);\n return this;\n },\n\n _renderImage: function(url, bounds){\n if(this._map){\n // create a new image overlay and add it to the map\n // to start loading the image\n // opacity is 0 while the image is loading\n var image = new L.ImageOverlay(url, bounds, {\n opacity: 0\n }).addTo(this._map);\n\n // once the image loads\n image.once('load', function(e){\n var newImage = e.target;\n var oldImage = this._currentImage;\n\n // if the bounds of this image matches the bounds that\n // _renderImage was called with and we have a map with the same bounds\n // hide the old image if there is one and set the opacity\n // of the new image otherwise remove the new image\n if(newImage._bounds.equals(bounds) && newImage._bounds.equals(this._map.getBounds())){\n this._currentImage = newImage;\n\n if(this.options.position === 'front'){\n this.bringToFront();\n } else {\n this.bringToBack();\n }\n\n if(this._map && this._currentImage._map){\n this._currentImage.setOpacity(this.options.opacity);\n } else {\n this._currentImage._map.removeLayer(this._currentImage);\n }\n\n if(oldImage && this._map) {\n this._map.removeLayer(oldImage);\n }\n\n if(oldImage && oldImage._map){\n oldImage._map.removeLayer(oldImage);\n }\n } else {\n this._map.removeLayer(newImage);\n }\n\n this.fire('load', {\n bounds: bounds\n });\n\n }, this);\n\n this.fire('loading', {\n bounds: bounds\n });\n }\n },\n\n _update: function () {\n if(!this._map){\n return;\n }\n\n var zoom = this._map.getZoom();\n var bounds = this._map.getBounds();\n\n if(this._animatingZoom){\n return;\n }\n\n if (this._map._panTransition && this._map._panTransition._inProgress) {\n return;\n }\n\n if (zoom > this.options.maxZoom || zoom < this.options.minZoom) {\n if (this._currentImage) {\n this._currentImage._map.removeLayer(this._currentImage);\n }\n return;\n }\n var params = this._buildExportParams();\n\n this._requestExport(params, bounds);\n },\n\n // TODO: refactor these into raster layer\n _renderPopup: function(latlng, error, results, response){\n latlng = L.latLng(latlng);\n if(this._shouldRenderPopup && this._lastClick.equals(latlng)){\n //add the popup to the map where the mouse was clicked at\n var content = this._popupFunction(error, results, response);\n if (content) {\n this._popup.setLatLng(latlng).setContent(content).openOn(this._map);\n }\n }\n },\n\n _resetPopupState: function(e){\n this._shouldRenderPopup = false;\n this._lastClick = e.latlng;\n },\n\n // from https://github.com/Leaflet/Leaflet/blob/v0.7.2/src/layer/FeatureGroup.js\n // @TODO remove at Leaflet 0.8\n _propagateEvent: function (e) {\n e = L.extend({\n layer: e.target,\n target: this\n }, e);\n this.fire(e.type, e);\n }\n});\n","EsriLeaflet.Layers.DynamicMapLayer = EsriLeaflet.Layers.RasterLayer.extend({\n\n options: {\n updateInterval: 150,\n layers: false,\n layerDefs: false,\n timeOptions: false,\n format: 'png24',\n transparent: true,\n f: 'json'\n },\n\n initialize: function (options) {\n options.url = EsriLeaflet.Util.cleanUrl(options.url);\n this._service = new EsriLeaflet.Services.MapService(options);\n this._service.on('authenticationrequired requeststart requestend requesterror requestsuccess', this._propagateEvent, this);\n if ((options.proxy || options.token) && options.f !== 'json'){\n options.f = 'json';\n }\n L.Util.setOptions(this, options);\n },\n\n getDynamicLayers: function(){\n return this.options.dynamicLayers;\n },\n\n setDynamicLayers: function(dynamicLayers){\n this.options.dynamicLayers = dynamicLayers;\n this._update();\n return this;\n },\n\n getLayers: function(){\n return this.options.layers;\n },\n\n setLayers: function(layers){\n this.options.layers = layers;\n this._update();\n return this;\n },\n\n getLayerDefs: function(){\n return this.options.layerDefs;\n },\n\n setLayerDefs: function(layerDefs){\n this.options.layerDefs = layerDefs;\n this._update();\n return this;\n },\n\n getTimeOptions: function(){\n return this.options.timeOptions;\n },\n\n setTimeOptions: function(timeOptions){\n this.options.timeOptions = timeOptions;\n this._update();\n return this;\n },\n\n query: function(){\n return this._service.query();\n },\n\n identify: function(){\n return this._service.identify();\n },\n\n find: function(){\n return this._service.find();\n },\n\n _getPopupData: function(e){\n var callback = L.Util.bind(function(error, featureCollection, response) {\n if(error) { return; } // we really can't do anything here but authenticate or requesterror will fire\n setTimeout(L.Util.bind(function(){\n this._renderPopup(e.latlng, error, featureCollection, response);\n }, this), 300);\n }, this);\n\n var identifyRequest = this.identify().on(this._map).at(e.latlng);\n\n if(this.options.layers){\n identifyRequest.layers('visible:' + this.options.layers.join(','));\n } else {\n identifyRequest.layers('visible');\n }\n\n identifyRequest.run(callback);\n\n // set the flags to show the popup\n this._shouldRenderPopup = true;\n this._lastClick = e.latlng;\n },\n\n _buildExportParams: function () {\n var bounds = this._map.getBounds();\n var size = this._map.getSize();\n var ne = this._map.options.crs.project(bounds._northEast);\n var sw = this._map.options.crs.project(bounds._southWest);\n\n //ensure that we don't ask ArcGIS Server for a taller image than we have actual map displaying\n var top = this._map.latLngToLayerPoint(bounds._northEast);\n var bottom = this._map.latLngToLayerPoint(bounds._southWest);\n\n if (top.y > 0 || bottom.y < size.y){\n size.y = bottom.y - top.y;\n }\n\n var params = {\n bbox: [sw.x, sw.y, ne.x, ne.y].join(','),\n size: size.x + ',' + size.y,\n dpi: 96,\n format: this.options.format,\n transparent: this.options.transparent,\n bboxSR: this.options.bboxSR,\n imageSR: this.options.imageSR\n };\n\n if(this.options.dynamicLayers){\n params.dynamicLayers = this.options.dynamicLayers;\n }\n\n if(this.options.layers){\n params.layers = 'show:' + this.options.layers.join(',');\n }\n\n if(this.options.layerDefs){\n params.layerDefs = JSON.stringify(this.options.layerDefs);\n }\n\n if(this.options.timeOptions){\n params.timeOptions = JSON.stringify(this.options.timeOptions);\n }\n\n if(this.options.from && this.options.to){\n params.time = this.options.from.valueOf() + ',' + this.options.to.valueOf();\n }\n\n if(this._service.options.token) {\n params.token = this._service.options.token;\n }\n\n return params;\n },\n\n _requestExport: function (params, bounds) {\n if(this.options.f === 'json'){\n this._service.request('export', params, function(error, response){\n if(error) { return; } // we really can't do anything here but authenticate or requesterror will fire\n this._renderImage(response.href, bounds);\n }, this);\n } else {\n params.f = 'image';\n this._renderImage(this.options.url + 'export' + L.Util.getParamString(params), bounds);\n }\n }\n});\n\nEsriLeaflet.DynamicMapLayer = EsriLeaflet.Layers.DynamicMapLayer;\n\nEsriLeaflet.Layers.dynamicMapLayer = function(options){\n return new EsriLeaflet.Layers.DynamicMapLayer(options);\n};\n\nEsriLeaflet.dynamicMapLayer = function(options){\n return new EsriLeaflet.Layers.DynamicMapLayer(options);\n};\n","EsriLeaflet.Layers.TiledMapLayer = L.TileLayer.extend({\n options: {\n zoomOffsetAllowance: 0.1,\n correctZoomLevels: true\n },\n\n statics: {\n MercatorZoomLevels: {\n '0':156543.03392799999,\n '1':78271.516963999893,\n '2':39135.758482000099,\n '3':19567.879240999901,\n '4':9783.9396204999593,\n '5':4891.9698102499797,\n '6':2445.9849051249898,\n '7':1222.9924525624899,\n '8':611.49622628138002,\n '9':305.74811314055802,\n '10':152.874056570411,\n '11':76.437028285073197,\n '12':38.218514142536598,\n '13':19.109257071268299,\n '14':9.5546285356341496,\n '15':4.7773142679493699,\n '16':2.38865713397468,\n '17':1.1943285668550501,\n '18':0.59716428355981699,\n '19':0.29858214164761698,\n '20':0.14929107082381,\n '21':0.07464553541191,\n '22':0.0373227677059525,\n '23':0.0186613838529763\n }\n },\n\n initialize: function(options){\n options.url = EsriLeaflet.Util.cleanUrl(options.url);\n options = L.Util.setOptions(this, options);\n\n // set the urls\n //this.url = L.esri.Util.cleanUrl(url);\n this.tileUrl = L.esri.Util.cleanUrl(options.url) + 'tile/{z}/{y}/{x}';\n this._service = new L.esri.Services.MapService(options);\n this._service.on('authenticationrequired requeststart requestend requesterror requestsuccess', this._propagateEvent, this);\n\n //if this is looking at the AGO tiles subdomain insert the subdomain placeholder\n if(this.tileUrl.match('://tiles.arcgisonline.com')){\n this.tileUrl = this.tileUrl.replace('://tiles.arcgisonline.com', '://tiles{s}.arcgisonline.com');\n options.subdomains = ['1', '2', '3', '4'];\n }\n\n if(this.options.token) {\n this.tileUrl += ('?token=' + this.options.token);\n }\n\n // init layer by calling TileLayers initialize method\n L.TileLayer.prototype.initialize.call(this, this.tileUrl, options);\n },\n\n getTileUrl: function (tilePoint) {\n return L.Util.template(this.tileUrl, L.extend({\n s: this._getSubdomain(tilePoint),\n z: this._lodMap[tilePoint.z] || tilePoint.z, // try lod map first, then just defualt to zoom level\n x: tilePoint.x,\n y: tilePoint.y\n }, this.options));\n },\n\n onAdd: function(map){\n if (!this._lodMap && this.options.correctZoomLevels) {\n this._lodMap = {}; // make sure we always have an lod map even if its empty\n this.metadata(function(error, metadata) {\n if(!error) {\n var sr = metadata.spatialReference.latestWkid || metadata.spatialReference.wkid;\n\n if (sr === 102100 || sr === 3857) {\n //create the zoom level data\n var arcgisLODs = metadata.tileInfo.lods;\n var correctResolutions = EsriLeaflet.Layers.TiledMapLayer.MercatorZoomLevels;\n\n for(var i = 0; i < arcgisLODs.length; i++) {\n var arcgisLOD = arcgisLODs[i];\n for(var ci in correctResolutions) {\n var correctRes = correctResolutions[ci];\n\n if(this._withinPercentage(arcgisLOD.resolution, correctRes, this.options.zoomOffsetAllowance)) {\n this._lodMap[ci] = arcgisLOD.level;\n break;\n }\n }\n }\n } else {\n EsriLeaflet.Util.warn('L.esri.TiledMapLayer is using a non-mercator spatial reference. Support may be available through Proj4Leaflet http://esri.github.io/esri-leaflet/examples/non-mercator-projection.html');\n }\n }\n\n L.TileLayer.prototype.onAdd.call(this, map);\n }, this);\n } else {\n L.TileLayer.prototype.onAdd.call(this, map);\n }\n },\n\n metadata: function(callback, context){\n this._service.metadata(callback, context);\n return this;\n },\n\n identify: function(){\n return this._service.identify();\n },\n\n authenticate: function(token){\n var tokenQs = '?token=' + token;\n this.tileUrl = (this.options.token) ? this.tileUrl.replace(/\\?token=(.+)/g, tokenQs) : this.tileUrl + tokenQs;\n this.options.token = token;\n this._service.authenticate(token);\n return this;\n },\n\n // from https://github.com/Leaflet/Leaflet/blob/v0.7.2/src/layer/FeatureGroup.js\n // @TODO remove at Leaflet 0.8\n _propagateEvent: function (e) {\n e = L.extend({\n layer: e.target,\n target: this\n }, e);\n this.fire(e.type, e);\n },\n\n _withinPercentage: function (a, b, percentage) {\n var diff = Math.abs((a/b) - 1);\n return diff < percentage;\n }\n});\n\nL.esri.TiledMapLayer = L.esri.Layers.tiledMapLayer;\n\nL.esri.Layers.tiledMapLayer = function(options){\n return new L.esri.Layers.TiledMapLayer(options);\n};\n\nL.esri.tiledMapLayer = function(options){\n return new L.esri.Layers.TiledMapLayer(options);\n};\n"]} \ No newline at end of file diff --git a/dist/builds/map-service/esri-leaflet-map-service.js b/dist/builds/map-service/esri-leaflet-map-service.js index 40dc152a2..96b503df4 100644 --- a/dist/builds/map-service/esri-leaflet-map-service.js +++ b/dist/builds/map-service/esri-leaflet-map-service.js @@ -1,5 +1,5 @@ -/*! esri-leaflet - v1.0.2 - 2015-12-31 -* Copyright (c) 2015 Environmental Systems Research Institute, Inc. +/*! esri-leaflet - v1.0.3 - 2016-02-22 +* Copyright (c) 2016 Environmental Systems Research Institute, Inc. * Apache License*/ (function (factory) { //define an AMD module that relies on 'leaflet' @@ -17,7 +17,7 @@ } }(function (L) { -var EsriLeaflet={VERSION:"1.0.2",Layers:{},Services:{},Controls:{},Tasks:{},Util:{},Support:{CORS:!!(window.XMLHttpRequest&&"withCredentials"in new XMLHttpRequest),pointerEvents:""===document.documentElement.style.pointerEvents}};"undefined"!=typeof window&&window.L&&(window.L.esri=EsriLeaflet),function(a){function b(a){var b={};for(var c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);return b}function c(a,b){for(var c=0;cd;d++)b=a[d+1],c+=(b[0]-f[0])*(b[1]+f[1]),f=b;return c>=0}function f(a,b,c,d){var e=(d[0]-c[0])*(a[1]-c[1])-(d[1]-c[1])*(a[0]-c[0]),f=(b[0]-a[0])*(a[1]-c[1])-(b[1]-a[1])*(a[0]-c[0]),g=(d[1]-c[1])*(b[0]-a[0])-(d[0]-c[0])*(b[1]-a[1]);if(0!==g){var h=e/g,i=f/g;if(h>=0&&1>=h&&i>=0&&1>=i)return!0}return!1}function g(a,b){for(var c=0;c=0;b--)if(c=h[b][0],i(c,f)){h[b].push(f),o=!0;break}o||n.push(f)}for(;n.length;){f=n.pop();var p=!1;for(b=h.length-1;b>=0;b--)if(c=h[b][0],g(c,f)){h[b].push(f),p=!0;break}p||h.push([f.reverse()])}return 1===h.length?{type:"Polygon",coordinates:h[0]}:{type:"MultiPolygon",coordinates:h}}function k(a){var b=[],c=a.slice(0),f=d(c.shift().slice(0));if(f.length>=4){e(f)||f.reverse(),b.push(f);for(var g=0;g=4&&(e(h)&&h.reverse(),b.push(h))}}return b}function l(a){for(var b=[],c=0;c=0;e--){var f=d[e].slice(0);b.push(f)}return b}var m=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.msRequestAnimationFrame||function(a){return window.setTimeout(a,1e3/60)};a.Util.extentToBounds=function(a){var b=new L.LatLng(a.ymin,a.xmin),c=new L.LatLng(a.ymax,a.xmax);return new L.LatLngBounds(b,c)},a.Util.boundsToExtent=function(a){return a=L.latLngBounds(a),{xmin:a.getSouthWest().lng,ymin:a.getSouthWest().lat,xmax:a.getNorthEast().lng,ymax:a.getNorthEast().lat,spatialReference:{wkid:4326}}},a.Util.arcgisToGeojson=function(c,d){var e={};return"number"==typeof c.x&&"number"==typeof c.y&&(e.type="Point",e.coordinates=[c.x,c.y]),c.points&&(e.type="MultiPoint",e.coordinates=c.points.slice(0)),c.paths&&(1===c.paths.length?(e.type="LineString",e.coordinates=c.paths[0].slice(0)):(e.type="MultiLineString",e.coordinates=c.paths.slice(0))),c.rings&&(e=j(c.rings.slice(0))),(c.geometry||c.attributes)&&(e.type="Feature",e.geometry=c.geometry?a.Util.arcgisToGeojson(c.geometry):null,e.properties=c.attributes?b(c.attributes):null,c.attributes&&(e.id=c.attributes[d]||c.attributes.OBJECTID||c.attributes.FID)),e},a.Util.geojsonToArcGIS=function(c,d){d=d||"OBJECTID";var e,f={wkid:4326},g={};switch(c.type){case"Point":g.x=c.coordinates[0],g.y=c.coordinates[1],g.spatialReference=f;break;case"MultiPoint":g.points=c.coordinates.slice(0),g.spatialReference=f;break;case"LineString":g.paths=[c.coordinates.slice(0)],g.spatialReference=f;break;case"MultiLineString":g.paths=c.coordinates.slice(0),g.spatialReference=f;break;case"Polygon":g.rings=k(c.coordinates.slice(0)),g.spatialReference=f;break;case"MultiPolygon":g.rings=l(c.coordinates.slice(0)),g.spatialReference=f;break;case"Feature":c.geometry&&(g.geometry=a.Util.geojsonToArcGIS(c.geometry,d)),g.attributes=c.properties?b(c.properties):{},c.id&&(g.attributes[d]=c.id);break;case"FeatureCollection":for(g=[],e=0;e=0;h--)f.features.push(a.Util.arcgisToGeojson(g[h],d));return f},a.Util.cleanUrl=function(a){return a=a.replace(/^\s+|\s+$|\A\s+|\s+\z/g,""),"/"!==a[a.length-1]&&(a+="/"),a},a.Util.isArcgisOnline=function(a){return/\.arcgis\.com.*?FeatureServer/g.test(a)},a.Util.geojsonTypeToArcGIS=function(a){var b;switch(a){case"Point":b="esriGeometryPoint";break;case"MultiPoint":b="esriGeometryMultipoint";break;case"LineString":b="esriGeometryPolyline";break;case"MultiLineString":b="esriGeometryPolyline";break;case"Polygon":b="esriGeometryPolygon";break;case"MultiPolygon":b="esriGeometryPolygon"}return b},a.Util.requestAnimationFrame=L.Util.bind(m,window),a.Util.warn=function(a){console&&console.warn&&console.warn(a)}}(EsriLeaflet),function(a){function b(a){var b="";a.f=a.f||"json";for(var c in a)if(a.hasOwnProperty(c)){var d,e=a[c],f=Object.prototype.toString.call(e);b.length&&(b+="&"),d="[object Array]"===f?"[object Object]"===Object.prototype.toString.call(e[0])?JSON.stringify(e):e.join(","):"[object Object]"===f?JSON.stringify(e):"[object Date]"===f?e.valueOf():e,b+=encodeURIComponent(c)+"="+encodeURIComponent(d)}return b}function c(a,b){var c=new XMLHttpRequest;return c.onerror=function(d){c.onreadystatechange=L.Util.falseFn,a.call(b,{error:{code:500,message:"XMLHttpRequest error"}},null)},c.onreadystatechange=function(){var d,e;if(4===c.readyState){try{d=JSON.parse(c.responseText)}catch(f){d=null,e={code:500,message:"Could not parse response as JSON. This could also be caused by a CORS or XMLHttpRequest error."}}!e&&d.error&&(e=d.error,d=null),c.onerror=L.Util.falseFn,a.call(b,e,d)}},c}var d=0;window._EsriLeafletCallbacks={},a.Request={request:function(d,e,f,g){var h=b(e),i=c(f,g),j=(d+"?"+h).length;if(2e3>=j&&L.esri.Support.CORS)i.open("GET",d+"?"+h),i.send(null);else{if(!(j>2e3&&L.esri.Support.CORS))return 2e3>=j&&!L.esri.Support.CORS?L.esri.Request.get.JSONP(d,e,f,g):void a.Util.warn("a request to "+d+" was longer then 2000 characters and this browser cannot make a cross-domain post request. Please use a proxy http://esri.github.io/esri-leaflet/api-reference/request.html");i.open("POST",d),i.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),i.send(h)}return i},post:{XMLHTTP:function(a,d,e,f){var g=c(e,f);return g.open("POST",a),g.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),g.send(b(d)),g}},get:{CORS:function(a,d,e,f){var g=c(e,f);return g.open("GET",a+"?"+b(d),!0),g.send(null),g},JSONP:function(a,c,e,f){var g="c"+d;c.callback="window._EsriLeafletCallbacks."+g;var h=L.DomUtil.create("script",null,document.body);return h.type="text/javascript",h.src=a+"?"+b(c),h.id=g,window._EsriLeafletCallbacks[g]=function(a){if(window._EsriLeafletCallbacks[g]!==!0){var b,c=Object.prototype.toString.call(a);"[object Object]"!==c&&"[object Array]"!==c&&(b={error:{code:500,message:"Expected array or object as JSONP response"}},a=null),!b&&a.error&&(b=a,a=null),e.call(f,b,a),window._EsriLeafletCallbacks[g]=!0}},d++,{id:g,url:h.src,abort:function(){window._EsriLeafletCallbacks._callback[g]({code:0,message:"Request aborted."})}}}}},a.get=a.Support.CORS?a.Request.get.CORS:a.Request.get.JSONP,a.post=a.Request.post.XMLHTTP,a.request=a.Request.request}(EsriLeaflet),EsriLeaflet.Services.Service=L.Class.extend({includes:L.Mixin.Events,options:{proxy:!1,useCors:EsriLeaflet.Support.CORS},initialize:function(a){a=a||{},this._requestQueue=[],this._authenticating=!1,L.Util.setOptions(this,a),this.options.url=EsriLeaflet.Util.cleanUrl(this.options.url)},get:function(a,b,c,d){return this._request("get",a,b,c,d)},post:function(a,b,c,d){return this._request("post",a,b,c,d)},request:function(a,b,c,d){return this._request("request",a,b,c,d)},metadata:function(a,b){return this._request("get","",{},a,b)},authenticate:function(a){return this._authenticating=!1,this.options.token=a,this._runQueue(),this},_request:function(a,b,c,d,e){this.fire("requeststart",{url:this.options.url+b,params:c,method:a});var f=this._createServiceCallback(a,b,c,d,e);if(this.options.token&&(c.token=this.options.token),this._authenticating)return void this._requestQueue.push([a,b,c,d,e]);var g=this.options.proxy?this.options.proxy+"?"+this.options.url+b:this.options.url+b;return"get"!==a&&"request"!==a||this.options.useCors?EsriLeaflet[a](g,c,f):EsriLeaflet.Request.get.JSONP(g,c,f)},_createServiceCallback:function(a,b,c,d,e){return L.Util.bind(function(f,g){!f||499!==f.code&&498!==f.code||(this._authenticating=!0,this._requestQueue.push([a,b,c,d,e]),this.fire("authenticationrequired",{authenticate:L.Util.bind(this.authenticate,this)}),f.authenticate=L.Util.bind(this.authenticate,this)),d.call(e,f,g),f?this.fire("requesterror",{url:this.options.url+b,params:c,message:f.message,code:f.code,method:a}):this.fire("requestsuccess",{url:this.options.url+b,params:c,response:g,method:a}),this.fire("requestend",{url:this.options.url+b,params:c,method:a})},this)},_runQueue:function(){for(var a=this._requestQueue.length-1;a>=0;a--){var b=this._requestQueue[a],c=b.shift();this[c].apply(this,b)}this._requestQueue=[]}}),EsriLeaflet.Services.service=function(a){return new EsriLeaflet.Services.Service(a)},EsriLeaflet.Services.MapService=EsriLeaflet.Services.Service.extend({identify:function(){return new EsriLeaflet.Tasks.identifyFeatures(this)},find:function(){return new EsriLeaflet.Tasks.Find(this)},query:function(){return new EsriLeaflet.Tasks.Query(this)}}),EsriLeaflet.Services.mapService=function(a){return new EsriLeaflet.Services.MapService(a)},EsriLeaflet.Tasks.Task=L.Class.extend({options:{proxy:!1,useCors:EsriLeaflet.Support.CORS},generateSetter:function(a,b){return L.Util.bind(function(b){return this.params[a]=b,this},b)},initialize:function(a){if(a.request&&a.options?(this._service=a,L.Util.setOptions(this,a.options)):(L.Util.setOptions(this,a),this.options.url=L.esri.Util.cleanUrl(a.url)),this.params=L.Util.extend({},this.params||{}),this.setters)for(var b in this.setters){var c=this.setters[b];this[b]=this.generateSetter(c,this)}},token:function(a){return this._service?this._service.authenticate(a):this.params.token=a,this},request:function(a,b){return this._service?this._service.request(this.path,this.params,a,b):this._request("request",this.path,this.params,a,b)},_request:function(a,b,c,d,e){var f=this.options.proxy?this.options.proxy+"?"+this.options.url+b:this.options.url+b;return"get"!==a&&"request"!==a||this.options.useCors?EsriLeaflet[a](f,c,d,e):EsriLeaflet.Request.get.JSONP(f,c,d,e)}}),EsriLeaflet.Tasks.Identify=EsriLeaflet.Tasks.Task.extend({path:"identify",between:function(a,b){return this.params.time=[a.valueOf(),b.valueOf()],this}}),EsriLeaflet.Tasks.IdentifyFeatures=EsriLeaflet.Tasks.Identify.extend({setters:{layers:"layers",precision:"geometryPrecision",tolerance:"tolerance",returnGeometry:"returnGeometry"},params:{sr:4326,layers:"all",tolerance:3,returnGeometry:!0},on:function(a){var b=EsriLeaflet.Util.boundsToExtent(a.getBounds()),c=a.getSize();return this.params.imageDisplay=[c.x,c.y,96],this.params.mapExtent=[b.xmin,b.ymin,b.xmax,b.ymax],this},at:function(a){return a=L.latLng(a),this.params.geometry=[a.lng,a.lat],this.params.geometryType="esriGeometryPoint",this},layerDef:function(a,b){return this.params.layerDefs=this.params.layerDefs?this.params.layerDefs+";":"",this.params.layerDefs+=[a,b].join(":"),this},simplify:function(a,b){var c=Math.abs(a.getBounds().getWest()-a.getBounds().getEast());return this.params.maxAllowableOffset=c/a.getSize().y*(1-b),this},run:function(a,b){return this.request(function(c,d){if(c)return void a.call(b,c,void 0,d);var e=EsriLeaflet.Util.responseToFeatureCollection(d);d.results=d.results.reverse();for(var f=0;fthis.options.maxZoom||a0||f.yd}}),L.esri.TiledMapLayer=L.esri.Layers.tiledMapLayer,L.esri.Layers.tiledMapLayer=function(a){return new L.esri.Layers.TiledMapLayer(a)},L.esri.tiledMapLayer=function(a){return new L.esri.Layers.TiledMapLayer(a)}; +var EsriLeaflet={VERSION:"1.0.3",Layers:{},Services:{},Controls:{},Tasks:{},Util:{},Support:{CORS:!!(window.XMLHttpRequest&&"withCredentials"in new XMLHttpRequest),pointerEvents:""===document.documentElement.style.pointerEvents}};"undefined"!=typeof window&&window.L&&(window.L.esri=EsriLeaflet),function(a){function b(a){var b={};for(var c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);return b}function c(a,b){for(var c=0;cd;d++)b=a[d+1],c+=(b[0]-f[0])*(b[1]+f[1]),f=b;return c>=0}function f(a,b,c,d){var e=(d[0]-c[0])*(a[1]-c[1])-(d[1]-c[1])*(a[0]-c[0]),f=(b[0]-a[0])*(a[1]-c[1])-(b[1]-a[1])*(a[0]-c[0]),g=(d[1]-c[1])*(b[0]-a[0])-(d[0]-c[0])*(b[1]-a[1]);if(0!==g){var h=e/g,i=f/g;if(h>=0&&1>=h&&i>=0&&1>=i)return!0}return!1}function g(a,b){for(var c=0;c=0;b--)if(c=h[b][0],i(c,f)){h[b].push(f),o=!0;break}o||n.push(f)}for(;n.length;){f=n.pop();var p=!1;for(b=h.length-1;b>=0;b--)if(c=h[b][0],g(c,f)){h[b].push(f),p=!0;break}p||h.push([f.reverse()])}return 1===h.length?{type:"Polygon",coordinates:h[0]}:{type:"MultiPolygon",coordinates:h}}function k(a){var b=[],c=a.slice(0),f=d(c.shift().slice(0));if(f.length>=4){e(f)||f.reverse(),b.push(f);for(var g=0;g=4&&(e(h)&&h.reverse(),b.push(h))}}return b}function l(a){for(var b=[],c=0;c=0;e--){var f=d[e].slice(0);b.push(f)}return b}var m=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.msRequestAnimationFrame||function(a){return window.setTimeout(a,1e3/60)};a.Util.extentToBounds=function(a){var b=new L.LatLng(a.ymin,a.xmin),c=new L.LatLng(a.ymax,a.xmax);return new L.LatLngBounds(b,c)},a.Util.boundsToExtent=function(a){return a=L.latLngBounds(a),{xmin:a.getSouthWest().lng,ymin:a.getSouthWest().lat,xmax:a.getNorthEast().lng,ymax:a.getNorthEast().lat,spatialReference:{wkid:4326}}},a.Util.arcgisToGeojson=function(c,d){var e={};return"number"==typeof c.x&&"number"==typeof c.y&&(e.type="Point",e.coordinates=[c.x,c.y]),c.points&&(e.type="MultiPoint",e.coordinates=c.points.slice(0)),c.paths&&(1===c.paths.length?(e.type="LineString",e.coordinates=c.paths[0].slice(0)):(e.type="MultiLineString",e.coordinates=c.paths.slice(0))),c.rings&&(e=j(c.rings.slice(0))),(c.geometry||c.attributes)&&(e.type="Feature",e.geometry=c.geometry?a.Util.arcgisToGeojson(c.geometry):null,e.properties=c.attributes?b(c.attributes):null,c.attributes&&(e.id=c.attributes[d]||c.attributes.OBJECTID||c.attributes.FID)),e},a.Util.geojsonToArcGIS=function(c,d){d=d||"OBJECTID";var e,f={wkid:4326},g={};switch(c.type){case"Point":g.x=c.coordinates[0],g.y=c.coordinates[1],g.spatialReference=f;break;case"MultiPoint":g.points=c.coordinates.slice(0),g.spatialReference=f;break;case"LineString":g.paths=[c.coordinates.slice(0)],g.spatialReference=f;break;case"MultiLineString":g.paths=c.coordinates.slice(0),g.spatialReference=f;break;case"Polygon":g.rings=k(c.coordinates.slice(0)),g.spatialReference=f;break;case"MultiPolygon":g.rings=l(c.coordinates.slice(0)),g.spatialReference=f;break;case"Feature":c.geometry&&(g.geometry=a.Util.geojsonToArcGIS(c.geometry,d)),g.attributes=c.properties?b(c.properties):{},c.id&&(g.attributes[d]=c.id);break;case"FeatureCollection":for(g=[],e=0;e=0;h--)f.features.push(a.Util.arcgisToGeojson(g[h],d));return f},a.Util.cleanUrl=function(a){return a=a.replace(/^\s+|\s+$|\A\s+|\s+\z/g,""),"/"!==a[a.length-1]&&(a+="/"),a},a.Util.isArcgisOnline=function(a){return/\.arcgis\.com.*?FeatureServer/g.test(a)},a.Util.geojsonTypeToArcGIS=function(a){var b;switch(a){case"Point":b="esriGeometryPoint";break;case"MultiPoint":b="esriGeometryMultipoint";break;case"LineString":b="esriGeometryPolyline";break;case"MultiLineString":b="esriGeometryPolyline";break;case"Polygon":b="esriGeometryPolygon";break;case"MultiPolygon":b="esriGeometryPolygon"}return b},a.Util.requestAnimationFrame=L.Util.bind(m,window),a.Util.warn=function(a){console&&console.warn&&console.warn(a)}}(EsriLeaflet),function(a){function b(a){var b="";a.f=a.f||"json";for(var c in a)if(a.hasOwnProperty(c)){var d,e=a[c],f=Object.prototype.toString.call(e);b.length&&(b+="&"),d="[object Array]"===f?"[object Object]"===Object.prototype.toString.call(e[0])?JSON.stringify(e):e.join(","):"[object Object]"===f?JSON.stringify(e):"[object Date]"===f?e.valueOf():e,b+=encodeURIComponent(c)+"="+encodeURIComponent(d)}return b}function c(a,b){var c=new XMLHttpRequest;return c.onerror=function(d){c.onreadystatechange=L.Util.falseFn,a.call(b,{error:{code:500,message:"XMLHttpRequest error"}},null)},c.onreadystatechange=function(){var d,e;if(4===c.readyState){try{d=JSON.parse(c.responseText)}catch(f){d=null,e={code:500,message:"Could not parse response as JSON. This could also be caused by a CORS or XMLHttpRequest error."}}!e&&d.error&&(e=d.error,d=null),c.onerror=L.Util.falseFn,a.call(b,e,d)}},c}var d=0;window._EsriLeafletCallbacks={},a.Request={request:function(d,e,f,g){var h=b(e),i=c(f,g),j=(d+"?"+h).length;if(2e3>=j&&L.esri.Support.CORS)i.open("GET",d+"?"+h),i.send(null);else{if(!(j>2e3&&L.esri.Support.CORS))return 2e3>=j&&!L.esri.Support.CORS?L.esri.Request.get.JSONP(d,e,f,g):void a.Util.warn("a request to "+d+" was longer then 2000 characters and this browser cannot make a cross-domain post request. Please use a proxy http://esri.github.io/esri-leaflet/api-reference/request.html");i.open("POST",d),i.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),i.send(h)}return i},post:{XMLHTTP:function(a,d,e,f){var g=c(e,f);return g.open("POST",a),g.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),g.send(b(d)),g}},get:{CORS:function(a,d,e,f){var g=c(e,f);return g.open("GET",a+"?"+b(d),!0),g.send(null),g},JSONP:function(a,c,e,f){var g="c"+d;c.callback="window._EsriLeafletCallbacks."+g;var h=L.DomUtil.create("script",null,document.body);return h.type="text/javascript",h.src=a+"?"+b(c),h.id=g,window._EsriLeafletCallbacks[g]=function(a){if(window._EsriLeafletCallbacks[g]!==!0){var b,c=Object.prototype.toString.call(a);"[object Object]"!==c&&"[object Array]"!==c&&(b={error:{code:500,message:"Expected array or object as JSONP response"}},a=null),!b&&a.error&&(b=a,a=null),e.call(f,b,a),window._EsriLeafletCallbacks[g]=!0}},d++,{id:g,url:h.src,abort:function(){window._EsriLeafletCallbacks._callback[g]({code:0,message:"Request aborted."})}}}}},a.get=a.Support.CORS?a.Request.get.CORS:a.Request.get.JSONP,a.post=a.Request.post.XMLHTTP,a.request=a.Request.request}(EsriLeaflet),EsriLeaflet.Services.Service=L.Class.extend({includes:L.Mixin.Events,options:{proxy:!1,useCors:EsriLeaflet.Support.CORS},initialize:function(a){a=a||{},this._requestQueue=[],this._authenticating=!1,L.Util.setOptions(this,a),this.options.url=EsriLeaflet.Util.cleanUrl(this.options.url)},get:function(a,b,c,d){return this._request("get",a,b,c,d)},post:function(a,b,c,d){return this._request("post",a,b,c,d)},request:function(a,b,c,d){return this._request("request",a,b,c,d)},metadata:function(a,b){return this._request("get","",{},a,b)},authenticate:function(a){return this._authenticating=!1,this.options.token=a,this._runQueue(),this},_request:function(a,b,c,d,e){this.fire("requeststart",{url:this.options.url+b,params:c,method:a});var f=this._createServiceCallback(a,b,c,d,e);if(this.options.token&&(c.token=this.options.token),this._authenticating)return void this._requestQueue.push([a,b,c,d,e]);var g=this.options.proxy?this.options.proxy+"?"+this.options.url+b:this.options.url+b;return"get"!==a&&"request"!==a||this.options.useCors?EsriLeaflet[a](g,c,f):EsriLeaflet.Request.get.JSONP(g,c,f)},_createServiceCallback:function(a,b,c,d,e){return L.Util.bind(function(f,g){!f||499!==f.code&&498!==f.code||(this._authenticating=!0,this._requestQueue.push([a,b,c,d,e]),this.fire("authenticationrequired",{authenticate:L.Util.bind(this.authenticate,this)}),f.authenticate=L.Util.bind(this.authenticate,this)),d.call(e,f,g),f?this.fire("requesterror",{url:this.options.url+b,params:c,message:f.message,code:f.code,method:a}):this.fire("requestsuccess",{url:this.options.url+b,params:c,response:g,method:a}),this.fire("requestend",{url:this.options.url+b,params:c,method:a})},this)},_runQueue:function(){for(var a=this._requestQueue.length-1;a>=0;a--){var b=this._requestQueue[a],c=b.shift();this[c].apply(this,b)}this._requestQueue=[]}}),EsriLeaflet.Services.service=function(a){return new EsriLeaflet.Services.Service(a)},EsriLeaflet.Services.MapService=EsriLeaflet.Services.Service.extend({identify:function(){return new EsriLeaflet.Tasks.identifyFeatures(this)},find:function(){return new EsriLeaflet.Tasks.Find(this)},query:function(){return new EsriLeaflet.Tasks.Query(this)}}),EsriLeaflet.Services.mapService=function(a){return new EsriLeaflet.Services.MapService(a)},EsriLeaflet.Tasks.Task=L.Class.extend({options:{proxy:!1,useCors:EsriLeaflet.Support.CORS},generateSetter:function(a,b){return L.Util.bind(function(b){return this.params[a]=b,this},b)},initialize:function(a){if(a.request&&a.options?(this._service=a,L.Util.setOptions(this,a.options)):(L.Util.setOptions(this,a),this.options.url=L.esri.Util.cleanUrl(a.url)),this.params=L.Util.extend({},this.params||{}),this.setters)for(var b in this.setters){var c=this.setters[b];this[b]=this.generateSetter(c,this)}},token:function(a){return this._service?this._service.authenticate(a):this.params.token=a,this},request:function(a,b){return this._service?this._service.request(this.path,this.params,a,b):this._request("request",this.path,this.params,a,b)},_request:function(a,b,c,d,e){var f=this.options.proxy?this.options.proxy+"?"+this.options.url+b:this.options.url+b;return"get"!==a&&"request"!==a||this.options.useCors?EsriLeaflet[a](f,c,d,e):EsriLeaflet.Request.get.JSONP(f,c,d,e)}}),EsriLeaflet.Tasks.Identify=EsriLeaflet.Tasks.Task.extend({path:"identify",between:function(a,b){return this.params.time=[a.valueOf(),b.valueOf()],this}}),EsriLeaflet.Tasks.IdentifyFeatures=EsriLeaflet.Tasks.Identify.extend({setters:{layers:"layers",precision:"geometryPrecision",tolerance:"tolerance",returnGeometry:"returnGeometry"},params:{sr:4326,layers:"all",tolerance:3,returnGeometry:!0},on:function(a){var b=EsriLeaflet.Util.boundsToExtent(a.getBounds()),c=a.getSize();return this.params.imageDisplay=[c.x,c.y,96],this.params.mapExtent=[b.xmin,b.ymin,b.xmax,b.ymax],this},at:function(a){return a=L.latLng(a),this.params.geometry=[a.lng,a.lat],this.params.geometryType="esriGeometryPoint",this},layerDef:function(a,b){return this.params.layerDefs=this.params.layerDefs?this.params.layerDefs+";":"",this.params.layerDefs+=[a,b].join(":"),this},simplify:function(a,b){var c=Math.abs(a.getBounds().getWest()-a.getBounds().getEast());return this.params.maxAllowableOffset=c/a.getSize().y*(1-b),this},run:function(a,b){return this.request(function(c,d){if(c)return void a.call(b,c,void 0,d);var e=EsriLeaflet.Util.responseToFeatureCollection(d);d.results=d.results.reverse();for(var f=0;fthis.options.maxZoom||a0||f.yd}}),L.esri.TiledMapLayer=L.esri.Layers.tiledMapLayer,L.esri.Layers.tiledMapLayer=function(a){return new L.esri.Layers.TiledMapLayer(a)},L.esri.tiledMapLayer=function(a){return new L.esri.Layers.TiledMapLayer(a)}; //# sourceMappingURL=esri-leaflet-map-service.js.map return EsriLeaflet; diff --git a/dist/builds/map-service/esri-leaflet-map-service.js.map b/dist/builds/map-service/esri-leaflet-map-service.js.map index 487399417..6b90683f8 100644 --- a/dist/builds/map-service/esri-leaflet-map-service.js.map +++ b/dist/builds/map-service/esri-leaflet-map-service.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../../src/EsriLeaflet.js","../../../src/Util.js","../../../src/Request.js","../../../src/Services/Service.js","../../../src/Services/MapService.js","../../../src/Tasks/Task.js","../../../src/Tasks/Identify.js","../../../src/Tasks/IdentifyFeatures.js","../../../src/Tasks/Query.js","../../../src/Tasks/Find.js","../../../src/Layers/RasterLayer.js","../../../src/Layers/DynamicMapLayer.js","../../../src/Layers/TiledMapLayer.js"],"names":["EsriLeaflet","VERSION","Layers","Services","Controls","Tasks","Util","Support","CORS","window","XMLHttpRequest","pointerEvents","document","documentElement","style","L","esri","clone","obj","target","i","hasOwnProperty","pointsEqual","a","b","length","closeRing","coordinates","push","ringIsClockwise","ringToTest","pt2","total","rLength","pt1","vertexIntersectsVertex","a1","a2","b1","b2","uaT","ubT","uB","ua","ub","arrayIntersectsArray","j","coordinatesContainPoint","point","contains","l","coordinatesContainCoordinates","outer","inner","intersects","convertRingsToGeoJSON","rings","x","outerRing","hole","outerRings","holes","r","ring","slice","polygon","uncontainedHoles","pop","contained","reverse","type","orientRings","poly","output","shift","flattenMultiPolygonRings","raf","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","msRequestAnimationFrame","cb","setTimeout","extentToBounds","extent","sw","LatLng","ymin","xmin","ne","ymax","xmax","LatLngBounds","boundsToExtent","bounds","latLngBounds","getSouthWest","lng","lat","getNorthEast","spatialReference","wkid","arcgisToGeojson","arcgis","idAttribute","geojson","y","points","paths","geometry","attributes","properties","id","OBJECTID","FID","geojsonToArcGIS","result","features","geometries","responseToFeatureCollection","response","objectIdField","objectIdFieldName","fields","name","featureCollection","results","cleanUrl","url","replace","isArcgisOnline","test","geojsonTypeToArcGIS","geoJsonType","arcgisGeometryType","bind","warn","message","console","serialize","params","data","f","key","value","param","Object","prototype","toString","call","JSON","stringify","join","valueOf","encodeURIComponent","createRequest","callback","context","httpRequest","onerror","e","onreadystatechange","falseFn","error","code","readyState","parse","responseText","callbacks","_EsriLeafletCallbacks","Request","request","paramString","requestLength","open","send","get","JSONP","setRequestHeader","post","XMLHTTP","callbackId","script","DomUtil","create","body","src","responseType","abort","_callback","Service","Class","extend","includes","Mixin","Events","options","proxy","useCors","initialize","this","_requestQueue","_authenticating","setOptions","path","_request","metadata","authenticate","token","_runQueue","method","fire","wrappedCallback","_createServiceCallback","apply","service","MapService","identify","identifyFeatures","find","Find","query","Query","mapService","Task","generateSetter","endpoint","_service","setters","setter","Identify","between","start","end","time","IdentifyFeatures","layers","precision","tolerance","returnGeometry","sr","on","map","getBounds","size","getSize","imageDisplay","mapExtent","at","latlng","latLng","geometryType","layerDef","where","layerDefs","simplify","factor","mapWidth","Math","abs","getWest","getEast","maxAllowableOffset","run","undefined","feature","layerId","offset","limit","featureIds","outSr","outFields","within","_setGeometry","spatialRel","overlaps","nearby","radius","units","distance","inSr","string","orderBy","fieldName","order","orderByFields","_cleanParams","_trapSQLerrors","count","returnCountOnly","ids","returnIdsOnly","objectIds","returnExtentOnly","pixelSize","layer","getLatLng","GeoJSON","getLayers","toGeoJSON","text","dynamicLayers","returnZ","returnM","gdbVersion","RasterLayer","opacity","position","onAdd","_map","_update","limitExecByInterval","updateInterval","crs","split","bboxSR","imageSR","_currentImage","_bounds","equals","addLayer","removeLayer","_popup","_getPopupData","_resetPopupState","bindPopup","fn","popupOptions","_shouldRenderPopup","_lastClick","popup","_popupFunction","unbindPopup","closePopup","off","onRemove","addTo","removeFrom","bringToFront","bringToBack","getAttribution","attribution","getOpacity","setOpacity","getTimeRange","from","to","setTimeRange","_renderImage","image","ImageOverlay","once","newImage","oldImage","zoom","getZoom","_animatingZoom","_panTransition","_inProgress","maxZoom","minZoom","_buildExportParams","_requestExport","_renderPopup","content","setLatLng","setContent","openOn","_propagateEvent","DynamicMapLayer","timeOptions","format","transparent","getDynamicLayers","setDynamicLayers","setLayers","getLayerDefs","setLayerDefs","getTimeOptions","setTimeOptions","identifyRequest","project","_northEast","_southWest","top","latLngToLayerPoint","bottom","bbox","dpi","href","getParamString","dynamicMapLayer","TiledMapLayer","TileLayer","zoomOffsetAllowance","correctZoomLevels","statics","MercatorZoomLevels","0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","tileUrl","match","subdomains","getTileUrl","tilePoint","template","s","_getSubdomain","z","_lodMap","latestWkid","arcgisLODs","tileInfo","lods","correctResolutions","arcgisLOD","ci","correctRes","_withinPercentage","resolution","level","tokenQs","percentage","diff","tiledMapLayer"],"mappings":"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","file":"esri-leaflet-map-service.js","sourcesContent":["var EsriLeaflet = { //jshint ignore:line\n VERSION: '1.0.2',\n Layers: {},\n Services: {},\n Controls: {},\n Tasks: {},\n Util: {},\n Support: {\n CORS: !!(window.XMLHttpRequest && 'withCredentials' in new XMLHttpRequest()),\n pointerEvents: document.documentElement.style.pointerEvents === ''\n }\n};\n\nif(typeof window !== 'undefined' && window.L){\n window.L.esri = EsriLeaflet;\n}\n","(function(EsriLeaflet){\n\n // normalize request animation frame\n var raf = window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.msRequestAnimationFrame ||\n function(cb) { return window.setTimeout(cb, 1000 / 60); };\n\n // shallow object clone for feature properties and attributes\n // from http://jsperf.com/cloning-an-object/2\n function clone(obj) {\n var target = {};\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n target[i] = obj[i];\n }\n }\n return target;\n }\n\n // checks if 2 x,y points are equal\n function pointsEqual(a, b) {\n for (var i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n\n // checks if the first and last points of a ring are equal and closes the ring\n function closeRing(coordinates) {\n if (!pointsEqual(coordinates[0], coordinates[coordinates.length - 1])) {\n coordinates.push(coordinates[0]);\n }\n return coordinates;\n }\n\n // determine if polygon ring coordinates are clockwise. clockwise signifies outer ring, counter-clockwise an inner ring\n // or hole. this logic was found at http://stackoverflow.com/questions/1165647/how-to-determine-if-a-list-of-polygon-\n // points-are-in-clockwise-order\n function ringIsClockwise(ringToTest) {\n var total = 0,i = 0;\n var rLength = ringToTest.length;\n var pt1 = ringToTest[i];\n var pt2;\n for (i; i < rLength - 1; i++) {\n pt2 = ringToTest[i + 1];\n total += (pt2[0] - pt1[0]) * (pt2[1] + pt1[1]);\n pt1 = pt2;\n }\n return (total >= 0);\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L504-L519\n function vertexIntersectsVertex(a1, a2, b1, b2) {\n var uaT = (b2[0] - b1[0]) * (a1[1] - b1[1]) - (b2[1] - b1[1]) * (a1[0] - b1[0]);\n var ubT = (a2[0] - a1[0]) * (a1[1] - b1[1]) - (a2[1] - a1[1]) * (a1[0] - b1[0]);\n var uB = (b2[1] - b1[1]) * (a2[0] - a1[0]) - (b2[0] - b1[0]) * (a2[1] - a1[1]);\n\n if ( uB !== 0 ) {\n var ua = uaT / uB;\n var ub = ubT / uB;\n\n if ( 0 <= ua && ua <= 1 && 0 <= ub && ub <= 1 ) {\n return true;\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L521-L531\n function arrayIntersectsArray(a, b) {\n for (var i = 0; i < a.length - 1; i++) {\n for (var j = 0; j < b.length - 1; j++) {\n if (vertexIntersectsVertex(a[i], a[i + 1], b[j], b[j + 1])) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L470-L480\n function coordinatesContainPoint(coordinates, point) {\n var contains = false;\n for(var i = -1, l = coordinates.length, j = l - 1; ++i < l; j = i) {\n if (((coordinates[i][1] <= point[1] && point[1] < coordinates[j][1]) ||\n (coordinates[j][1] <= point[1] && point[1] < coordinates[i][1])) &&\n (point[0] < (coordinates[j][0] - coordinates[i][0]) * (point[1] - coordinates[i][1]) / (coordinates[j][1] - coordinates[i][1]) + coordinates[i][0])) {\n contains = !contains;\n }\n }\n return contains;\n }\n\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L106-L113\n function coordinatesContainCoordinates(outer, inner){\n var intersects = arrayIntersectsArray(outer, inner);\n var contains = coordinatesContainPoint(outer, inner[0]);\n if(!intersects && contains){\n return true;\n }\n return false;\n }\n\n // do any polygons in this array contain any other polygons in this array?\n // used for checking for holes in arcgis rings\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L117-L172\n function convertRingsToGeoJSON(rings){\n var outerRings = [];\n var holes = [];\n var x; // iterator\n var outerRing; // current outer ring being evaluated\n var hole; // current hole being evaluated\n\n // for each ring\n for (var r = 0; r < rings.length; r++) {\n var ring = closeRing(rings[r].slice(0));\n if(ring.length < 4){\n continue;\n }\n // is this ring an outer ring? is it clockwise?\n if(ringIsClockwise(ring)){\n var polygon = [ ring ];\n outerRings.push(polygon); // push to outer rings\n } else {\n holes.push(ring); // counterclockwise push to holes\n }\n }\n\n var uncontainedHoles = [];\n\n // while there are holes left...\n while(holes.length){\n // pop a hole off out stack\n hole = holes.pop();\n\n // loop over all outer rings and see if they contain our hole.\n var contained = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(coordinatesContainCoordinates(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n contained = true;\n break;\n }\n }\n\n // ring is not contained in any outer ring\n // sometimes this happens https://github.com/Esri/esri-leaflet/issues/320\n if(!contained){\n uncontainedHoles.push(hole);\n }\n }\n\n // if we couldn't match any holes using contains we can try intersects...\n while(uncontainedHoles.length){\n // pop a hole off out stack\n hole = uncontainedHoles.pop();\n\n // loop over all outer rings and see if any intersect our hole.\n var intersects = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(arrayIntersectsArray(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n intersects = true;\n break;\n }\n }\n\n if(!intersects) {\n outerRings.push([hole.reverse()]);\n }\n }\n\n if(outerRings.length === 1){\n return {\n type: 'Polygon',\n coordinates: outerRings[0]\n };\n } else {\n return {\n type: 'MultiPolygon',\n coordinates: outerRings\n };\n }\n }\n\n // This function ensures that rings are oriented in the right directions\n // outer rings are clockwise, holes are counterclockwise\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function orientRings(poly){\n var output = [];\n var polygon = poly.slice(0);\n var outerRing = closeRing(polygon.shift().slice(0));\n if(outerRing.length >= 4){\n if(!ringIsClockwise(outerRing)){\n outerRing.reverse();\n }\n\n output.push(outerRing);\n\n for (var i = 0; i < polygon.length; i++) {\n var hole = closeRing(polygon[i].slice(0));\n if(hole.length >= 4){\n if(ringIsClockwise(hole)){\n hole.reverse();\n }\n output.push(hole);\n }\n }\n }\n\n return output;\n }\n\n // This function flattens holes in multipolygons to one array of polygons\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function flattenMultiPolygonRings(rings){\n var output = [];\n for (var i = 0; i < rings.length; i++) {\n var polygon = orientRings(rings[i]);\n for (var x = polygon.length - 1; x >= 0; x--) {\n var ring = polygon[x].slice(0);\n output.push(ring);\n }\n }\n return output;\n }\n\n // convert an extent (ArcGIS) to LatLngBounds (Leaflet)\n EsriLeaflet.Util.extentToBounds = function(extent){\n var sw = new L.LatLng(extent.ymin, extent.xmin);\n var ne = new L.LatLng(extent.ymax, extent.xmax);\n return new L.LatLngBounds(sw, ne);\n };\n\n // convert an LatLngBounds (Leaflet) to extent (ArcGIS)\n EsriLeaflet.Util.boundsToExtent = function(bounds) {\n bounds = L.latLngBounds(bounds);\n return {\n 'xmin': bounds.getSouthWest().lng,\n 'ymin': bounds.getSouthWest().lat,\n 'xmax': bounds.getNorthEast().lng,\n 'ymax': bounds.getNorthEast().lat,\n 'spatialReference': {\n 'wkid' : 4326\n }\n };\n };\n\n EsriLeaflet.Util.arcgisToGeojson = function (arcgis, idAttribute){\n var geojson = {};\n\n if(typeof arcgis.x === 'number' && typeof arcgis.y === 'number'){\n geojson.type = 'Point';\n geojson.coordinates = [arcgis.x, arcgis.y];\n }\n\n if(arcgis.points){\n geojson.type = 'MultiPoint';\n geojson.coordinates = arcgis.points.slice(0);\n }\n\n if(arcgis.paths) {\n if(arcgis.paths.length === 1){\n geojson.type = 'LineString';\n geojson.coordinates = arcgis.paths[0].slice(0);\n } else {\n geojson.type = 'MultiLineString';\n geojson.coordinates = arcgis.paths.slice(0);\n }\n }\n\n if(arcgis.rings) {\n geojson = convertRingsToGeoJSON(arcgis.rings.slice(0));\n }\n\n if(arcgis.geometry || arcgis.attributes) {\n geojson.type = 'Feature';\n geojson.geometry = (arcgis.geometry) ? EsriLeaflet.Util.arcgisToGeojson(arcgis.geometry) : null;\n geojson.properties = (arcgis.attributes) ? clone(arcgis.attributes) : null;\n if(arcgis.attributes) {\n geojson.id = arcgis.attributes[idAttribute] || arcgis.attributes.OBJECTID || arcgis.attributes.FID;\n }\n }\n\n return geojson;\n };\n\n // GeoJSON -> ArcGIS\n EsriLeaflet.Util.geojsonToArcGIS = function(geojson, idAttribute){\n idAttribute = idAttribute || 'OBJECTID';\n var spatialReference = { wkid: 4326 };\n var result = {};\n var i;\n\n switch(geojson.type){\n case 'Point':\n result.x = geojson.coordinates[0];\n result.y = geojson.coordinates[1];\n result.spatialReference = spatialReference;\n break;\n case 'MultiPoint':\n result.points = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'LineString':\n result.paths = [geojson.coordinates.slice(0)];\n result.spatialReference = spatialReference;\n break;\n case 'MultiLineString':\n result.paths = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'Polygon':\n result.rings = orientRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'MultiPolygon':\n result.rings = flattenMultiPolygonRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'Feature':\n if(geojson.geometry) {\n result.geometry = EsriLeaflet.Util.geojsonToArcGIS(geojson.geometry, idAttribute);\n }\n result.attributes = (geojson.properties) ? clone(geojson.properties) : {};\n if(geojson.id){\n result.attributes[idAttribute] = geojson.id;\n }\n break;\n case 'FeatureCollection':\n result = [];\n for (i = 0; i < geojson.features.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.features[i], idAttribute));\n }\n break;\n case 'GeometryCollection':\n result = [];\n for (i = 0; i < geojson.geometries.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.geometries[i], idAttribute));\n }\n break;\n }\n\n return result;\n };\n\n EsriLeaflet.Util.responseToFeatureCollection = function(response, idAttribute){\n var objectIdField;\n\n if(idAttribute){\n objectIdField = idAttribute;\n } else if(response.objectIdFieldName){\n objectIdField = response.objectIdFieldName;\n } else if(response.fields) {\n for (var j = 0; j <= response.fields.length - 1; j++) {\n if(response.fields[j].type === 'esriFieldTypeOID') {\n objectIdField = response.fields[j].name;\n break;\n }\n }\n } else {\n objectIdField = 'OBJECTID';\n }\n\n var featureCollection = {\n type: 'FeatureCollection',\n features: []\n };\n var features = response.features || response.results;\n if(features.length){\n for (var i = features.length - 1; i >= 0; i--) {\n featureCollection.features.push(EsriLeaflet.Util.arcgisToGeojson(features[i], objectIdField));\n }\n }\n\n return featureCollection;\n };\n\n // trim url whitespace and add a trailing slash if needed\n EsriLeaflet.Util.cleanUrl = function(url){\n //trim leading and trailing spaces, but not spaces inside the url\n url = url.replace(/^\\s+|\\s+$|\\A\\s+|\\s+\\z/g, '');\n\n //add a trailing slash to the url if the user omitted it\n if(url[url.length-1] !== '/'){\n url += '/';\n }\n\n return url;\n };\n\n EsriLeaflet.Util.isArcgisOnline = function(url){\n /* hosted feature services can emit geojson natively.\n our check for 'geojson' support will need to be revisted\n once the functionality makes its way to ArcGIS Server*/\n return (/\\.arcgis\\.com.*?FeatureServer/g).test(url);\n };\n\n EsriLeaflet.Util.geojsonTypeToArcGIS = function (geoJsonType) {\n var arcgisGeometryType;\n switch (geoJsonType) {\n case 'Point':\n arcgisGeometryType = 'esriGeometryPoint';\n break;\n case 'MultiPoint':\n arcgisGeometryType = 'esriGeometryMultipoint';\n break;\n case 'LineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'MultiLineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'Polygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n case 'MultiPolygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n }\n return arcgisGeometryType;\n };\n\n EsriLeaflet.Util.requestAnimationFrame = L.Util.bind(raf, window);\n\n EsriLeaflet.Util.warn = function (message) {\n if(console && console.warn) {\n console.warn(message);\n }\n };\n\n})(EsriLeaflet);","(function(EsriLeaflet){\n\n var callbacks = 0;\n\n window._EsriLeafletCallbacks = {};\n\n function serialize(params){\n var data = '';\n\n params.f = params.f || 'json';\n\n for (var key in params){\n if(params.hasOwnProperty(key)){\n var param = params[key];\n var type = Object.prototype.toString.call(param);\n var value;\n\n if(data.length){\n data += '&';\n }\n\n if (type === '[object Array]'){\n value = (Object.prototype.toString.call(param[0]) === '[object Object]') ? JSON.stringify(param) : param.join(',');\n } else if (type === '[object Object]') {\n value = JSON.stringify(param);\n } else if (type === '[object Date]'){\n value = param.valueOf();\n } else {\n value = param;\n }\n\n data += encodeURIComponent(key) + '=' + encodeURIComponent(value);\n }\n }\n\n return data;\n }\n\n function createRequest(callback, context){\n var httpRequest = new XMLHttpRequest();\n\n httpRequest.onerror = function(e) {\n httpRequest.onreadystatechange = L.Util.falseFn;\n\n callback.call(context, {\n error: {\n code: 500,\n message: 'XMLHttpRequest error'\n }\n }, null);\n };\n\n httpRequest.onreadystatechange = function(){\n var response;\n var error;\n\n if (httpRequest.readyState === 4) {\n try {\n response = JSON.parse(httpRequest.responseText);\n } catch(e) {\n response = null;\n error = {\n code: 500,\n message: 'Could not parse response as JSON. This could also be caused by a CORS or XMLHttpRequest error.'\n };\n }\n\n if (!error && response.error) {\n error = response.error;\n response = null;\n }\n\n httpRequest.onerror = L.Util.falseFn;\n\n callback.call(context, error, response);\n }\n };\n\n return httpRequest;\n }\n\n // AJAX handlers for CORS (modern browsers) or JSONP (older browsers)\n EsriLeaflet.Request = {\n request: function(url, params, callback, context){\n var paramString = serialize(params);\n var httpRequest = createRequest(callback, context);\n var requestLength = (url + '?' + paramString).length;\n\n // request is less then 2000 characters and the browser supports CORS, make GET request with XMLHttpRequest\n if(requestLength <= 2000 && L.esri.Support.CORS){\n httpRequest.open('GET', url + '?' + paramString);\n httpRequest.send(null);\n\n // request is less more then 2000 characters and the browser supports CORS, make POST request with XMLHttpRequest\n } else if (requestLength > 2000 && L.esri.Support.CORS){\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(paramString);\n\n // request is less more then 2000 characters and the browser does not support CORS, make a JSONP request\n } else if(requestLength <= 2000 && !L.esri.Support.CORS){\n return L.esri.Request.get.JSONP(url, params, callback, context);\n\n // request is longer then 2000 characters and the browser does not support CORS, log a warning\n } else {\n EsriLeaflet.Util.warn('a request to ' + url + ' was longer then 2000 characters and this browser cannot make a cross-domain post request. Please use a proxy http://esri.github.io/esri-leaflet/api-reference/request.html');\n return;\n }\n\n return httpRequest;\n },\n\n post: {\n XMLHTTP: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(serialize(params));\n\n return httpRequest;\n }\n },\n\n get: {\n CORS: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n\n httpRequest.open('GET', url + '?' + serialize(params), true);\n httpRequest.send(null);\n\n return httpRequest;\n },\n JSONP: function(url, params, callback, context){\n var callbackId = 'c' + callbacks;\n\n params.callback = 'window._EsriLeafletCallbacks.' + callbackId;\n\n var script = L.DomUtil.create('script', null, document.body);\n script.type = 'text/javascript';\n script.src = url + '?' + serialize(params);\n script.id = callbackId;\n\n window._EsriLeafletCallbacks[callbackId] = function(response){\n if(window._EsriLeafletCallbacks[callbackId] !== true){\n var error;\n var responseType = Object.prototype.toString.call(response);\n\n if(!(responseType === '[object Object]' || responseType === '[object Array]')){\n error = {\n error: {\n code: 500,\n message: 'Expected array or object as JSONP response'\n }\n };\n response = null;\n }\n\n if (!error && response.error) {\n error = response;\n response = null;\n }\n\n callback.call(context, error, response);\n window._EsriLeafletCallbacks[callbackId] = true;\n }\n };\n\n callbacks++;\n\n return {\n id: callbackId,\n url: script.src,\n abort: function(){\n window._EsriLeafletCallbacks._callback[callbackId]({\n code: 0,\n message: 'Request aborted.'\n });\n }\n };\n }\n }\n };\n\n // choose the correct AJAX handler depending on CORS support\n EsriLeaflet.get = (EsriLeaflet.Support.CORS) ? EsriLeaflet.Request.get.CORS : EsriLeaflet.Request.get.JSONP;\n\n // always use XMLHttpRequest for posts\n EsriLeaflet.post = EsriLeaflet.Request.post.XMLHTTP;\n\n // expose a common request method the uses GET\\POST based on request length\n EsriLeaflet.request = EsriLeaflet.Request.request;\n\n})(EsriLeaflet);","EsriLeaflet.Services.Service = L.Class.extend({\n\n includes: L.Mixin.Events,\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n initialize: function (options) {\n options = options || {};\n this._requestQueue = [];\n this._authenticating = false;\n L.Util.setOptions(this, options);\n this.options.url = EsriLeaflet.Util.cleanUrl(this.options.url);\n },\n\n get: function (path, params, callback, context) {\n return this._request('get', path, params, callback, context);\n },\n\n post: function (path, params, callback, context) {\n return this._request('post', path, params, callback, context);\n },\n\n request: function (path, params, callback, context) {\n return this._request('request', path, params, callback, context);\n },\n\n metadata: function (callback, context) {\n return this._request('get', '', {}, callback, context);\n },\n\n authenticate: function(token){\n this._authenticating = false;\n this.options.token = token;\n this._runQueue();\n return this;\n },\n\n _request: function(method, path, params, callback, context){\n this.fire('requeststart', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n\n var wrappedCallback = this._createServiceCallback(method, path, params, callback, context);\n\n if (this.options.token) {\n params.token = this.options.token;\n }\n\n if (this._authenticating) {\n this._requestQueue.push([method, path, params, callback, context]);\n return;\n } else {\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, wrappedCallback);\n } else {\n return EsriLeaflet[method](url, params, wrappedCallback);\n }\n }\n },\n\n _createServiceCallback: function(method, path, params, callback, context){\n return L.Util.bind(function(error, response){\n\n if (error && (error.code === 499 || error.code === 498)) {\n this._authenticating = true;\n\n this._requestQueue.push([method, path, params, callback, context]);\n\n // fire an event for users to handle and re-authenticate\n this.fire('authenticationrequired', {\n authenticate: L.Util.bind(this.authenticate, this)\n });\n\n // if the user has access to a callback they can handle the auth error\n error.authenticate = L.Util.bind(this.authenticate, this);\n }\n\n callback.call(context, error, response);\n\n if(error) {\n this.fire('requesterror', {\n url: this.options.url + path,\n params: params,\n message: error.message,\n code: error.code,\n method: method\n });\n } else {\n this.fire('requestsuccess', {\n url: this.options.url + path,\n params: params,\n response: response,\n method: method\n });\n }\n\n this.fire('requestend', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n }, this);\n },\n\n _runQueue: function(){\n for (var i = this._requestQueue.length - 1; i >= 0; i--) {\n var request = this._requestQueue[i];\n var method = request.shift();\n this[method].apply(this, request);\n }\n this._requestQueue = [];\n }\n\n});\n\nEsriLeaflet.Services.service = function(params){\n return new EsriLeaflet.Services.Service(params);\n};\n","EsriLeaflet.Services.MapService = EsriLeaflet.Services.Service.extend({\n\n identify: function () {\n return new EsriLeaflet.Tasks.identifyFeatures(this);\n },\n\n find: function () {\n return new EsriLeaflet.Tasks.Find(this);\n },\n\n query: function () {\n return new EsriLeaflet.Tasks.Query(this);\n }\n\n});\n\nEsriLeaflet.Services.mapService = function(params){\n return new EsriLeaflet.Services.MapService(params);\n};","EsriLeaflet.Tasks.Task = L.Class.extend({\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n //Generate a method for each methodName:paramName in the setters for this task.\n generateSetter: function(param, context){\n return L.Util.bind(function(value){\n this.params[param] = value;\n return this;\n }, context);\n },\n\n initialize: function(endpoint){\n // endpoint can be either a url (and options) for an ArcGIS Rest Service or an instance of EsriLeaflet.Service\n if(endpoint.request && endpoint.options){\n this._service = endpoint;\n L.Util.setOptions(this, endpoint.options);\n } else {\n L.Util.setOptions(this, endpoint);\n this.options.url = L.esri.Util.cleanUrl(endpoint.url);\n }\n\n // clone default params into this object\n this.params = L.Util.extend({}, this.params || {});\n\n // generate setter methods based on the setters object implimented a child class\n if(this.setters){\n for (var setter in this.setters){\n var param = this.setters[setter];\n this[setter] = this.generateSetter(param, this);\n }\n }\n },\n\n token: function(token){\n if(this._service){\n this._service.authenticate(token);\n } else {\n this.params.token = token;\n }\n return this;\n },\n\n request: function(callback, context){\n if(this._service){\n return this._service.request(this.path, this.params, callback, context);\n } else {\n return this._request('request', this.path, this.params, callback, context);\n }\n },\n\n _request: function(method, path, params, callback, context){\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, callback, context);\n } else{\n return EsriLeaflet[method](url, params, callback, context);\n }\n }\n});","EsriLeaflet.Tasks.Identify = EsriLeaflet.Tasks.Task.extend({\n path: 'identify',\n\n between: function(start, end){\n this.params.time = [start.valueOf(), end.valueOf()];\n return this;\n }\n});\n","EsriLeaflet.Tasks.IdentifyFeatures = EsriLeaflet.Tasks.Identify.extend({\n setters: {\n 'layers': 'layers',\n 'precision': 'geometryPrecision',\n 'tolerance': 'tolerance',\n 'returnGeometry': 'returnGeometry'\n },\n\n params: {\n sr: 4326,\n layers: 'all',\n tolerance: 3,\n returnGeometry: true\n },\n\n on: function(map){\n var extent = EsriLeaflet.Util.boundsToExtent(map.getBounds());\n var size = map.getSize();\n this.params.imageDisplay = [size.x, size.y, 96];\n this.params.mapExtent = [extent.xmin, extent.ymin, extent.xmax, extent.ymax];\n return this;\n },\n\n at: function(latlng){\n latlng = L.latLng(latlng);\n this.params.geometry = [latlng.lng, latlng.lat];\n this.params.geometryType = 'esriGeometryPoint';\n return this;\n },\n\n layerDef: function (id, where){\n this.params.layerDefs = (this.params.layerDefs) ? this.params.layerDefs + ';' : '';\n this.params.layerDefs += ([id, where]).join(':');\n return this;\n },\n\n simplify: function(map, factor){\n var mapWidth = Math.abs(map.getBounds().getWest() - map.getBounds().getEast());\n this.params.maxAllowableOffset = (mapWidth / map.getSize().y) * (1 - factor);\n return this;\n },\n\n run: function (callback, context){\n return this.request(function(error, response){\n // immediately invoke with an error\n if(error) {\n callback.call(context, error, undefined, response);\n return;\n\n // ok no error lets just assume we have features...\n } else {\n var featureCollection = EsriLeaflet.Util.responseToFeatureCollection(response);\n response.results = response.results.reverse();\n for (var i = 0; i < featureCollection.features.length; i++) {\n var feature = featureCollection.features[i];\n feature.layerId = response.results[i].layerId;\n }\n callback.call(context, undefined, featureCollection, response);\n }\n });\n }\n});\n\nEsriLeaflet.Tasks.identifyFeatures = function(params){\n return new EsriLeaflet.Tasks.IdentifyFeatures(params);\n};","EsriLeaflet.Tasks.Query = EsriLeaflet.Tasks.Task.extend({\n setters: {\n 'offset': 'offset',\n 'limit': 'limit',\n 'fields': 'outFields',\n 'precision': 'geometryPrecision',\n 'featureIds': 'objectIds',\n 'returnGeometry': 'returnGeometry',\n 'token': 'token'\n },\n\n path: 'query',\n\n params: {\n returnGeometry: true,\n where: '1=1',\n outSr: 4326,\n outFields: '*'\n },\n\n within: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelContains'; // will make code read layer within geometry, to the api this will reads geometry contains layer\n return this;\n },\n\n intersects: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelIntersects';\n return this;\n },\n\n contains: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelWithin'; // will make code read layer contains geometry, to the api this will reads geometry within layer\n return this;\n },\n\n // crosses: function(geometry){\n // this._setGeometry(geometry);\n // this.params.spatialRel = 'esriSpatialRelCrosses';\n // return this;\n // },\n\n // touches: function(geometry){\n // this._setGeometry(geometry);\n // this.params.spatialRel = 'esriSpatialRelTouches';\n // return this;\n // },\n\n overlaps: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelOverlaps';\n return this;\n },\n\n // only valid for Feature Services running on ArcGIS Server 10.3 or ArcGIS Online\n nearby: function(latlng, radius){\n latlng = L.latLng(latlng);\n this.params.geometry = [latlng.lng, latlng.lat];\n this.params.geometryType = 'esriGeometryPoint';\n this.params.spatialRel = 'esriSpatialRelIntersects';\n this.params.units = 'esriSRUnit_Meter';\n this.params.distance = radius;\n this.params.inSr = 4326;\n return this;\n },\n\n where: function(string){\n // instead of converting double-quotes to single quotes, pass as is, and provide a more informative message if a 400 is encountered\n this.params.where = string;\n return this;\n },\n\n between: function(start, end){\n this.params.time = [start.valueOf(), end.valueOf()];\n return this;\n },\n\n simplify: function(map, factor){\n var mapWidth = Math.abs(map.getBounds().getWest() - map.getBounds().getEast());\n this.params.maxAllowableOffset = (mapWidth / map.getSize().y) * factor;\n return this;\n },\n\n orderBy: function(fieldName, order){\n order = order || 'ASC';\n this.params.orderByFields = (this.params.orderByFields) ? this.params.orderByFields + ',' : '';\n this.params.orderByFields += ([fieldName, order]).join(' ');\n return this;\n },\n\n run: function(callback, context){\n this._cleanParams();\n\n // if the service is hosted on arcgis online request geojson directly\n if(EsriLeaflet.Util.isArcgisOnline(this.options.url)){\n this.params.f = 'geojson';\n\n return this.request(function(error, response){\n this._trapSQLerrors(error);\n callback.call(context, error, response, response);\n }, this);\n\n // otherwise convert it in the callback then pass it on\n } else {\n return this.request(function(error, response){\n this._trapSQLerrors(error);\n callback.call(context, error, (response && EsriLeaflet.Util.responseToFeatureCollection(response)), response);\n }, this);\n }\n },\n\n count: function(callback, context){\n this._cleanParams();\n this.params.returnCountOnly = true;\n return this.request(function(error, response){\n callback.call(this, error, (response && response.count), response);\n }, context);\n },\n\n ids: function(callback, context){\n this._cleanParams();\n this.params.returnIdsOnly = true;\n return this.request(function(error, response){\n callback.call(this, error, (response && response.objectIds), response);\n }, context);\n },\n\n // only valid for Feature Services running on ArcGIS Server 10.3 or ArcGIS Online\n bounds: function(callback, context){\n this._cleanParams();\n this.params.returnExtentOnly = true;\n return this.request(function(error, response){\n callback.call(context, error, (response && response.extent && EsriLeaflet.Util.extentToBounds(response.extent)), response);\n }, context);\n },\n\n // only valid for image services\n pixelSize: function(point){\n point = L.point(point);\n this.params.pixelSize = [point.x,point.y];\n return this;\n },\n\n // only valid for map services\n layer: function(layer){\n this.path = layer + '/query';\n return this;\n },\n\n _trapSQLerrors: function(error){\n if (error){\n if (error.code === '400'){\n EsriLeaflet.Util.warn('one common syntax error in query requests is encasing string values in double quotes instead of single quotes');\n }\n }\n },\n\n _cleanParams: function(){\n delete this.params.returnIdsOnly;\n delete this.params.returnExtentOnly;\n delete this.params.returnCountOnly;\n },\n\n _setGeometry: function(geometry) {\n this.params.inSr = 4326;\n\n // convert bounds to extent and finish\n if ( geometry instanceof L.LatLngBounds ) {\n // set geometry + geometryType\n this.params.geometry = EsriLeaflet.Util.boundsToExtent(geometry);\n this.params.geometryType = 'esriGeometryEnvelope';\n return;\n }\n\n // convert L.Marker > L.LatLng\n if(geometry.getLatLng){\n geometry = geometry.getLatLng();\n }\n\n // convert L.LatLng to a geojson point and continue;\n if (geometry instanceof L.LatLng) {\n geometry = {\n type: 'Point',\n coordinates: [geometry.lng, geometry.lat]\n };\n }\n\n // handle L.GeoJSON, pull out the first geometry\n if ( geometry instanceof L.GeoJSON ) {\n //reassign geometry to the GeoJSON value (we are assuming that only one feature is present)\n geometry = geometry.getLayers()[0].feature.geometry;\n this.params.geometry = EsriLeaflet.Util.geojsonToArcGIS(geometry);\n this.params.geometryType = EsriLeaflet.Util.geojsonTypeToArcGIS(geometry.type);\n }\n\n // Handle L.Polyline and L.Polygon\n if (geometry.toGeoJSON) {\n geometry = geometry.toGeoJSON();\n }\n\n // handle GeoJSON feature by pulling out the geometry\n if ( geometry.type === 'Feature' ) {\n // get the geometry of the geojson feature\n geometry = geometry.geometry;\n }\n\n // confirm that our GeoJSON is a point, line or polygon\n if ( geometry.type === 'Point' || geometry.type === 'LineString' || geometry.type === 'Polygon') {\n this.params.geometry = EsriLeaflet.Util.geojsonToArcGIS(geometry);\n this.params.geometryType = EsriLeaflet.Util.geojsonTypeToArcGIS(geometry.type);\n return;\n }\n\n // warn the user if we havn't found a\n /* global console */\n EsriLeaflet.Util.warn('invalid geometry passed to spatial query. Should be an L.LatLng, L.LatLngBounds or L.Marker or a GeoJSON Point Line or Polygon object');\n\n return;\n }\n});\n\nEsriLeaflet.Tasks.query = function(params){\n return new EsriLeaflet.Tasks.Query(params);\n};","EsriLeaflet.Tasks.Find = EsriLeaflet.Tasks.Task.extend({\n setters: {\n // method name > param name\n 'contains': 'contains',\n 'text': 'searchText',\n 'fields': 'searchFields', // denote an array or single string\n 'spatialReference': 'sr',\n 'sr': 'sr',\n 'layers': 'layers',\n 'returnGeometry': 'returnGeometry',\n 'maxAllowableOffset': 'maxAllowableOffset',\n 'precision': 'geometryPrecision',\n 'dynamicLayers': 'dynamicLayers',\n 'returnZ' : 'returnZ',\n 'returnM' : 'returnM',\n 'gdbVersion' : 'gdbVersion',\n 'token' : 'token'\n },\n\n path: 'find',\n\n params: {\n sr: 4326,\n contains: true,\n returnGeometry: true,\n returnZ: true,\n returnM: false\n },\n\n layerDefs: function (id, where) {\n this.params.layerDefs = (this.params.layerDefs) ? this.params.layerDefs + ';' : '';\n this.params.layerDefs += ([id, where]).join(':');\n return this;\n },\n\n simplify: function(map, factor){\n var mapWidth = Math.abs(map.getBounds().getWest() - map.getBounds().getEast());\n this.params.maxAllowableOffset = (mapWidth / map.getSize().y) * factor;\n return this;\n },\n\n run: function (callback, context) {\n return this.request(function(error, response){\n callback.call(context, error, (response && EsriLeaflet.Util.responseToFeatureCollection(response)), response);\n }, context);\n }\n});\n\nEsriLeaflet.Tasks.find = function (params) {\n return new EsriLeaflet.Tasks.Find(params);\n};","EsriLeaflet.Layers.RasterLayer = L.Class.extend({\n includes: L.Mixin.Events,\n\n options: {\n opacity: 1,\n position: 'front',\n f: 'image'\n },\n\n onAdd: function (map) {\n this._map = map;\n\n this._update = L.Util.limitExecByInterval(this._update, this.options.updateInterval, this);\n\n if (map.options.crs && map.options.crs.code) {\n var sr = map.options.crs.code.split(':')[1];\n this.options.bboxSR = sr;\n this.options.imageSR = sr;\n }\n\n map.on('moveend', this._update, this);\n\n // if we had an image loaded and it matches the\n // current bounds show the image otherwise remove it\n if(this._currentImage && this._currentImage._bounds.equals(this._map.getBounds())){\n map.addLayer(this._currentImage);\n } else if(this._currentImage) {\n this._map.removeLayer(this._currentImage);\n this._currentImage = null;\n }\n\n this._update();\n\n if(this._popup){\n this._map.on('click', this._getPopupData, this);\n this._map.on('dblclick', this._resetPopupState, this);\n }\n },\n\n bindPopup: function(fn, popupOptions){\n this._shouldRenderPopup = false;\n this._lastClick = false;\n this._popup = L.popup(popupOptions);\n this._popupFunction = fn;\n if(this._map){\n this._map.on('click', this._getPopupData, this);\n this._map.on('dblclick', this._resetPopupState, this);\n }\n return this;\n },\n\n unbindPopup: function(){\n if(this._map){\n this._map.closePopup(this._popup);\n this._map.off('click', this._getPopupData, this);\n this._map.off('dblclick', this._resetPopupState, this);\n }\n this._popup = false;\n return this;\n },\n\n onRemove: function (map) {\n if (this._currentImage) {\n this._map.removeLayer(this._currentImage);\n }\n\n if(this._popup){\n this._map.off('click', this._getPopupData, this);\n this._map.off('dblclick', this._resetPopupState, this);\n }\n\n this._map.off('moveend', this._update, this);\n this._map = null;\n },\n\n addTo: function(map){\n map.addLayer(this);\n return this;\n },\n\n removeFrom: function(map){\n map.removeLayer(this);\n return this;\n },\n\n bringToFront: function(){\n this.options.position = 'front';\n if(this._currentImage){\n this._currentImage.bringToFront();\n }\n return this;\n },\n\n bringToBack: function(){\n this.options.position = 'back';\n if(this._currentImage){\n this._currentImage.bringToBack();\n }\n return this;\n },\n\n getAttribution: function () {\n return this.options.attribution;\n },\n\n getOpacity: function(){\n return this.options.opacity;\n },\n\n setOpacity: function(opacity){\n this.options.opacity = opacity;\n this._currentImage.setOpacity(opacity);\n return this;\n },\n\n getTimeRange: function(){\n return [this.options.from, this.options.to];\n },\n\n setTimeRange: function(from, to){\n this.options.from = from;\n this.options.to = to;\n this._update();\n return this;\n },\n\n metadata: function(callback, context){\n this._service.metadata(callback, context);\n return this;\n },\n\n authenticate: function(token){\n this._service.authenticate(token);\n return this;\n },\n\n _renderImage: function(url, bounds){\n if(this._map){\n // create a new image overlay and add it to the map\n // to start loading the image\n // opacity is 0 while the image is loading\n var image = new L.ImageOverlay(url, bounds, {\n opacity: 0\n }).addTo(this._map);\n\n // once the image loads\n image.once('load', function(e){\n var newImage = e.target;\n var oldImage = this._currentImage;\n\n // if the bounds of this image matches the bounds that\n // _renderImage was called with and we have a map with the same bounds\n // hide the old image if there is one and set the opacity\n // of the new image otherwise remove the new image\n if(newImage._bounds.equals(bounds) && newImage._bounds.equals(this._map.getBounds())){\n this._currentImage = newImage;\n\n if(this.options.position === 'front'){\n this.bringToFront();\n } else {\n this.bringToBack();\n }\n\n if(this._map && this._currentImage._map){\n this._currentImage.setOpacity(this.options.opacity);\n } else {\n this._currentImage._map.removeLayer(this._currentImage);\n }\n\n if(oldImage && this._map) {\n this._map.removeLayer(oldImage);\n }\n\n if(oldImage && oldImage._map){\n oldImage._map.removeLayer(oldImage);\n }\n } else {\n this._map.removeLayer(newImage);\n }\n\n this.fire('load', {\n bounds: bounds\n });\n\n }, this);\n\n this.fire('loading', {\n bounds: bounds\n });\n }\n },\n\n _update: function () {\n if(!this._map){\n return;\n }\n\n var zoom = this._map.getZoom();\n var bounds = this._map.getBounds();\n\n if(this._animatingZoom){\n return;\n }\n\n if (this._map._panTransition && this._map._panTransition._inProgress) {\n return;\n }\n\n if (zoom > this.options.maxZoom || zoom < this.options.minZoom) {\n return;\n }\n var params = this._buildExportParams();\n\n this._requestExport(params, bounds);\n },\n\n // TODO: refactor these into raster layer\n _renderPopup: function(latlng, error, results, response){\n latlng = L.latLng(latlng);\n if(this._shouldRenderPopup && this._lastClick.equals(latlng)){\n //add the popup to the map where the mouse was clicked at\n var content = this._popupFunction(error, results, response);\n if (content) {\n this._popup.setLatLng(latlng).setContent(content).openOn(this._map);\n }\n }\n },\n\n _resetPopupState: function(e){\n this._shouldRenderPopup = false;\n this._lastClick = e.latlng;\n },\n\n // from https://github.com/Leaflet/Leaflet/blob/v0.7.2/src/layer/FeatureGroup.js\n // @TODO remove at Leaflet 0.8\n _propagateEvent: function (e) {\n e = L.extend({\n layer: e.target,\n target: this\n }, e);\n this.fire(e.type, e);\n }\n});\n","EsriLeaflet.Layers.DynamicMapLayer = EsriLeaflet.Layers.RasterLayer.extend({\n\n options: {\n updateInterval: 150,\n layers: false,\n layerDefs: false,\n timeOptions: false,\n format: 'png24',\n transparent: true,\n f: 'json'\n },\n\n initialize: function (options) {\n options.url = EsriLeaflet.Util.cleanUrl(options.url);\n this._service = new EsriLeaflet.Services.MapService(options);\n this._service.on('authenticationrequired requeststart requestend requesterror requestsuccess', this._propagateEvent, this);\n if ((options.proxy || options.token) && options.f !== 'json'){\n options.f = 'json';\n }\n L.Util.setOptions(this, options);\n },\n\n getDynamicLayers: function(){\n return this.options.dynamicLayers;\n },\n\n setDynamicLayers: function(dynamicLayers){\n this.options.dynamicLayers = dynamicLayers;\n this._update();\n return this;\n },\n\n getLayers: function(){\n return this.options.layers;\n },\n\n setLayers: function(layers){\n this.options.layers = layers;\n this._update();\n return this;\n },\n\n getLayerDefs: function(){\n return this.options.layerDefs;\n },\n\n setLayerDefs: function(layerDefs){\n this.options.layerDefs = layerDefs;\n this._update();\n return this;\n },\n\n getTimeOptions: function(){\n return this.options.timeOptions;\n },\n\n setTimeOptions: function(timeOptions){\n this.options.timeOptions = timeOptions;\n this._update();\n return this;\n },\n\n query: function(){\n return this._service.query();\n },\n\n identify: function(){\n return this._service.identify();\n },\n\n find: function(){\n return this._service.find();\n },\n\n _getPopupData: function(e){\n var callback = L.Util.bind(function(error, featureCollection, response) {\n if(error) { return; } // we really can't do anything here but authenticate or requesterror will fire\n setTimeout(L.Util.bind(function(){\n this._renderPopup(e.latlng, error, featureCollection, response);\n }, this), 300);\n }, this);\n\n var identifyRequest = this.identify().on(this._map).at(e.latlng);\n\n if(this.options.layers){\n identifyRequest.layers('visible:' + this.options.layers.join(','));\n } else {\n identifyRequest.layers('visible');\n }\n\n identifyRequest.run(callback);\n\n // set the flags to show the popup\n this._shouldRenderPopup = true;\n this._lastClick = e.latlng;\n },\n\n _buildExportParams: function () {\n var bounds = this._map.getBounds();\n var size = this._map.getSize();\n var ne = this._map.options.crs.project(bounds._northEast);\n var sw = this._map.options.crs.project(bounds._southWest);\n\n //ensure that we don't ask ArcGIS Server for a taller image than we have actual map displaying\n var top = this._map.latLngToLayerPoint(bounds._northEast);\n var bottom = this._map.latLngToLayerPoint(bounds._southWest);\n\n if (top.y > 0 || bottom.y < size.y){\n size.y = bottom.y - top.y;\n }\n\n var params = {\n bbox: [sw.x, sw.y, ne.x, ne.y].join(','),\n size: size.x + ',' + size.y,\n dpi: 96,\n format: this.options.format,\n transparent: this.options.transparent,\n bboxSR: this.options.bboxSR,\n imageSR: this.options.imageSR\n };\n\n if(this.options.dynamicLayers){\n params.dynamicLayers = this.options.dynamicLayers;\n }\n\n if(this.options.layers){\n params.layers = 'show:' + this.options.layers.join(',');\n }\n\n if(this.options.layerDefs){\n params.layerDefs = JSON.stringify(this.options.layerDefs);\n }\n\n if(this.options.timeOptions){\n params.timeOptions = JSON.stringify(this.options.timeOptions);\n }\n\n if(this.options.from && this.options.to){\n params.time = this.options.from.valueOf() + ',' + this.options.to.valueOf();\n }\n\n if(this._service.options.token) {\n params.token = this._service.options.token;\n }\n\n return params;\n },\n\n _requestExport: function (params, bounds) {\n if(this.options.f === 'json'){\n this._service.request('export', params, function(error, response){\n if(error) { return; } // we really can't do anything here but authenticate or requesterror will fire\n this._renderImage(response.href, bounds);\n }, this);\n } else {\n params.f = 'image';\n this._renderImage(this.options.url + 'export' + L.Util.getParamString(params), bounds);\n }\n }\n});\n\nEsriLeaflet.DynamicMapLayer = EsriLeaflet.Layers.DynamicMapLayer;\n\nEsriLeaflet.Layers.dynamicMapLayer = function(options){\n return new EsriLeaflet.Layers.DynamicMapLayer(options);\n};\n\nEsriLeaflet.dynamicMapLayer = function(options){\n return new EsriLeaflet.Layers.DynamicMapLayer(options);\n};\n","EsriLeaflet.Layers.TiledMapLayer = L.TileLayer.extend({\n options: {\n zoomOffsetAllowance: 0.1,\n correctZoomLevels: true\n },\n\n statics: {\n MercatorZoomLevels: {\n '0':156543.03392799999,\n '1':78271.516963999893,\n '2':39135.758482000099,\n '3':19567.879240999901,\n '4':9783.9396204999593,\n '5':4891.9698102499797,\n '6':2445.9849051249898,\n '7':1222.9924525624899,\n '8':611.49622628138002,\n '9':305.74811314055802,\n '10':152.874056570411,\n '11':76.437028285073197,\n '12':38.218514142536598,\n '13':19.109257071268299,\n '14':9.5546285356341496,\n '15':4.7773142679493699,\n '16':2.38865713397468,\n '17':1.1943285668550501,\n '18':0.59716428355981699,\n '19':0.29858214164761698,\n '20':0.14929107082381,\n '21':0.07464553541191,\n '22':0.0373227677059525,\n '23':0.0186613838529763\n }\n },\n\n initialize: function(options){\n options.url = EsriLeaflet.Util.cleanUrl(options.url);\n options = L.Util.setOptions(this, options);\n\n // set the urls\n //this.url = L.esri.Util.cleanUrl(url);\n this.tileUrl = L.esri.Util.cleanUrl(options.url) + 'tile/{z}/{y}/{x}';\n this._service = new L.esri.Services.MapService(options);\n this._service.on('authenticationrequired requeststart requestend requesterror requestsuccess', this._propagateEvent, this);\n\n //if this is looking at the AGO tiles subdomain insert the subdomain placeholder\n if(this.tileUrl.match('://tiles.arcgisonline.com')){\n this.tileUrl = this.tileUrl.replace('://tiles.arcgisonline.com', '://tiles{s}.arcgisonline.com');\n options.subdomains = ['1', '2', '3', '4'];\n }\n\n if(this.options.token) {\n this.tileUrl += ('?token=' + this.options.token);\n }\n\n // init layer by calling TileLayers initialize method\n L.TileLayer.prototype.initialize.call(this, this.tileUrl, options);\n },\n\n getTileUrl: function (tilePoint) {\n return L.Util.template(this.tileUrl, L.extend({\n s: this._getSubdomain(tilePoint),\n z: this._lodMap[tilePoint.z] || tilePoint.z, // try lod map first, then just defualt to zoom level\n x: tilePoint.x,\n y: tilePoint.y\n }, this.options));\n },\n\n onAdd: function(map){\n if (!this._lodMap && this.options.correctZoomLevels) {\n this._lodMap = {}; // make sure we always have an lod map even if its empty\n this.metadata(function(error, metadata) {\n if(!error) {\n var sr = metadata.spatialReference.latestWkid || metadata.spatialReference.wkid;\n\n if (sr === 102100 || sr === 3857) {\n //create the zoom level data\n var arcgisLODs = metadata.tileInfo.lods;\n var correctResolutions = EsriLeaflet.Layers.TiledMapLayer.MercatorZoomLevels;\n\n for(var i = 0; i < arcgisLODs.length; i++) {\n var arcgisLOD = arcgisLODs[i];\n for(var ci in correctResolutions) {\n var correctRes = correctResolutions[ci];\n\n if(this._withinPercentage(arcgisLOD.resolution, correctRes, this.options.zoomOffsetAllowance)) {\n this._lodMap[ci] = arcgisLOD.level;\n break;\n }\n }\n }\n } else {\n EsriLeaflet.Util.warn('L.esri.TiledMapLayer is using a non-mercator spatial reference. Support may be available through Proj4Leaflet http://esri.github.io/esri-leaflet/examples/non-mercator-projection.html');\n }\n }\n\n L.TileLayer.prototype.onAdd.call(this, map);\n }, this);\n } else {\n L.TileLayer.prototype.onAdd.call(this, map);\n }\n },\n\n metadata: function(callback, context){\n this._service.metadata(callback, context);\n return this;\n },\n\n identify: function(){\n return this._service.identify();\n },\n\n authenticate: function(token){\n var tokenQs = '?token=' + token;\n this.tileUrl = (this.options.token) ? this.tileUrl.replace(/\\?token=(.+)/g, tokenQs) : this.tileUrl + tokenQs;\n this.options.token = token;\n this._service.authenticate(token);\n return this;\n },\n\n // from https://github.com/Leaflet/Leaflet/blob/v0.7.2/src/layer/FeatureGroup.js\n // @TODO remove at Leaflet 0.8\n _propagateEvent: function (e) {\n e = L.extend({\n layer: e.target,\n target: this\n }, e);\n this.fire(e.type, e);\n },\n\n _withinPercentage: function (a, b, percentage) {\n var diff = Math.abs((a/b) - 1);\n return diff < percentage;\n }\n});\n\nL.esri.TiledMapLayer = L.esri.Layers.tiledMapLayer;\n\nL.esri.Layers.tiledMapLayer = function(options){\n return new L.esri.Layers.TiledMapLayer(options);\n};\n\nL.esri.tiledMapLayer = function(options){\n return new L.esri.Layers.TiledMapLayer(options);\n};\n"]} \ No newline at end of file +{"version":3,"sources":["../../../src/EsriLeaflet.js","../../../src/Util.js","../../../src/Request.js","../../../src/Services/Service.js","../../../src/Services/MapService.js","../../../src/Tasks/Task.js","../../../src/Tasks/Identify.js","../../../src/Tasks/IdentifyFeatures.js","../../../src/Tasks/Query.js","../../../src/Tasks/Find.js","../../../src/Layers/RasterLayer.js","../../../src/Layers/DynamicMapLayer.js","../../../src/Layers/TiledMapLayer.js"],"names":["EsriLeaflet","VERSION","Layers","Services","Controls","Tasks","Util","Support","CORS","window","XMLHttpRequest","pointerEvents","document","documentElement","style","L","esri","clone","obj","target","i","hasOwnProperty","pointsEqual","a","b","length","closeRing","coordinates","push","ringIsClockwise","ringToTest","pt2","total","rLength","pt1","vertexIntersectsVertex","a1","a2","b1","b2","uaT","ubT","uB","ua","ub","arrayIntersectsArray","j","coordinatesContainPoint","point","contains","l","coordinatesContainCoordinates","outer","inner","intersects","convertRingsToGeoJSON","rings","x","outerRing","hole","outerRings","holes","r","ring","slice","polygon","uncontainedHoles","pop","contained","reverse","type","orientRings","poly","output","shift","flattenMultiPolygonRings","raf","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","msRequestAnimationFrame","cb","setTimeout","extentToBounds","extent","sw","LatLng","ymin","xmin","ne","ymax","xmax","LatLngBounds","boundsToExtent","bounds","latLngBounds","getSouthWest","lng","lat","getNorthEast","spatialReference","wkid","arcgisToGeojson","arcgis","idAttribute","geojson","y","points","paths","geometry","attributes","properties","id","OBJECTID","FID","geojsonToArcGIS","result","features","geometries","responseToFeatureCollection","response","objectIdField","objectIdFieldName","fields","name","featureCollection","results","cleanUrl","url","replace","isArcgisOnline","test","geojsonTypeToArcGIS","geoJsonType","arcgisGeometryType","bind","warn","message","console","serialize","params","data","f","key","value","param","Object","prototype","toString","call","JSON","stringify","join","valueOf","encodeURIComponent","createRequest","callback","context","httpRequest","onerror","e","onreadystatechange","falseFn","error","code","readyState","parse","responseText","callbacks","_EsriLeafletCallbacks","Request","request","paramString","requestLength","open","send","get","JSONP","setRequestHeader","post","XMLHTTP","callbackId","script","DomUtil","create","body","src","responseType","abort","_callback","Service","Class","extend","includes","Mixin","Events","options","proxy","useCors","initialize","this","_requestQueue","_authenticating","setOptions","path","_request","metadata","authenticate","token","_runQueue","method","fire","wrappedCallback","_createServiceCallback","apply","service","MapService","identify","identifyFeatures","find","Find","query","Query","mapService","Task","generateSetter","endpoint","_service","setters","setter","Identify","between","start","end","time","IdentifyFeatures","layers","precision","tolerance","returnGeometry","sr","on","map","getBounds","size","getSize","imageDisplay","mapExtent","at","latlng","latLng","geometryType","layerDef","where","layerDefs","simplify","factor","mapWidth","Math","abs","getWest","getEast","maxAllowableOffset","run","undefined","feature","layerId","offset","limit","featureIds","outSr","outFields","within","_setGeometry","spatialRel","overlaps","nearby","radius","units","distance","inSr","string","orderBy","fieldName","order","orderByFields","_cleanParams","_trapSQLerrors","count","returnCountOnly","ids","returnIdsOnly","objectIds","returnExtentOnly","pixelSize","layer","getLatLng","GeoJSON","getLayers","toGeoJSON","text","dynamicLayers","returnZ","returnM","gdbVersion","RasterLayer","opacity","position","onAdd","_map","_update","limitExecByInterval","updateInterval","crs","split","bboxSR","imageSR","_currentImage","_bounds","equals","addLayer","removeLayer","_popup","_getPopupData","_resetPopupState","bindPopup","fn","popupOptions","_shouldRenderPopup","_lastClick","popup","_popupFunction","unbindPopup","closePopup","off","onRemove","addTo","removeFrom","bringToFront","bringToBack","getAttribution","attribution","getOpacity","setOpacity","getTimeRange","from","to","setTimeRange","_renderImage","image","ImageOverlay","once","newImage","oldImage","zoom","getZoom","_animatingZoom","_panTransition","_inProgress","maxZoom","minZoom","_buildExportParams","_requestExport","_renderPopup","content","setLatLng","setContent","openOn","_propagateEvent","DynamicMapLayer","timeOptions","format","transparent","getDynamicLayers","setDynamicLayers","setLayers","getLayerDefs","setLayerDefs","getTimeOptions","setTimeOptions","identifyRequest","project","_northEast","_southWest","top","latLngToLayerPoint","bottom","bbox","dpi","href","getParamString","dynamicMapLayer","TiledMapLayer","TileLayer","zoomOffsetAllowance","correctZoomLevels","statics","MercatorZoomLevels","0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","tileUrl","match","subdomains","getTileUrl","tilePoint","template","s","_getSubdomain","z","_lodMap","latestWkid","arcgisLODs","tileInfo","lods","correctResolutions","arcgisLOD","ci","correctRes","_withinPercentage","resolution","level","tokenQs","percentage","diff","tiledMapLayer"],"mappings":"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","file":"esri-leaflet-map-service.js","sourcesContent":["var EsriLeaflet = { //jshint ignore:line\n VERSION: '1.0.3',\n Layers: {},\n Services: {},\n Controls: {},\n Tasks: {},\n Util: {},\n Support: {\n CORS: !!(window.XMLHttpRequest && 'withCredentials' in new XMLHttpRequest()),\n pointerEvents: document.documentElement.style.pointerEvents === ''\n }\n};\n\nif(typeof window !== 'undefined' && window.L){\n window.L.esri = EsriLeaflet;\n}\n","(function(EsriLeaflet){\n\n // normalize request animation frame\n var raf = window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.msRequestAnimationFrame ||\n function(cb) { return window.setTimeout(cb, 1000 / 60); };\n\n // shallow object clone for feature properties and attributes\n // from http://jsperf.com/cloning-an-object/2\n function clone(obj) {\n var target = {};\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n target[i] = obj[i];\n }\n }\n return target;\n }\n\n // checks if 2 x,y points are equal\n function pointsEqual(a, b) {\n for (var i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n\n // checks if the first and last points of a ring are equal and closes the ring\n function closeRing(coordinates) {\n if (!pointsEqual(coordinates[0], coordinates[coordinates.length - 1])) {\n coordinates.push(coordinates[0]);\n }\n return coordinates;\n }\n\n // determine if polygon ring coordinates are clockwise. clockwise signifies outer ring, counter-clockwise an inner ring\n // or hole. this logic was found at http://stackoverflow.com/questions/1165647/how-to-determine-if-a-list-of-polygon-\n // points-are-in-clockwise-order\n function ringIsClockwise(ringToTest) {\n var total = 0,i = 0;\n var rLength = ringToTest.length;\n var pt1 = ringToTest[i];\n var pt2;\n for (i; i < rLength - 1; i++) {\n pt2 = ringToTest[i + 1];\n total += (pt2[0] - pt1[0]) * (pt2[1] + pt1[1]);\n pt1 = pt2;\n }\n return (total >= 0);\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L504-L519\n function vertexIntersectsVertex(a1, a2, b1, b2) {\n var uaT = (b2[0] - b1[0]) * (a1[1] - b1[1]) - (b2[1] - b1[1]) * (a1[0] - b1[0]);\n var ubT = (a2[0] - a1[0]) * (a1[1] - b1[1]) - (a2[1] - a1[1]) * (a1[0] - b1[0]);\n var uB = (b2[1] - b1[1]) * (a2[0] - a1[0]) - (b2[0] - b1[0]) * (a2[1] - a1[1]);\n\n if ( uB !== 0 ) {\n var ua = uaT / uB;\n var ub = ubT / uB;\n\n if ( 0 <= ua && ua <= 1 && 0 <= ub && ub <= 1 ) {\n return true;\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L521-L531\n function arrayIntersectsArray(a, b) {\n for (var i = 0; i < a.length - 1; i++) {\n for (var j = 0; j < b.length - 1; j++) {\n if (vertexIntersectsVertex(a[i], a[i + 1], b[j], b[j + 1])) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L470-L480\n function coordinatesContainPoint(coordinates, point) {\n var contains = false;\n for(var i = -1, l = coordinates.length, j = l - 1; ++i < l; j = i) {\n if (((coordinates[i][1] <= point[1] && point[1] < coordinates[j][1]) ||\n (coordinates[j][1] <= point[1] && point[1] < coordinates[i][1])) &&\n (point[0] < (coordinates[j][0] - coordinates[i][0]) * (point[1] - coordinates[i][1]) / (coordinates[j][1] - coordinates[i][1]) + coordinates[i][0])) {\n contains = !contains;\n }\n }\n return contains;\n }\n\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L106-L113\n function coordinatesContainCoordinates(outer, inner){\n var intersects = arrayIntersectsArray(outer, inner);\n var contains = coordinatesContainPoint(outer, inner[0]);\n if(!intersects && contains){\n return true;\n }\n return false;\n }\n\n // do any polygons in this array contain any other polygons in this array?\n // used for checking for holes in arcgis rings\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L117-L172\n function convertRingsToGeoJSON(rings){\n var outerRings = [];\n var holes = [];\n var x; // iterator\n var outerRing; // current outer ring being evaluated\n var hole; // current hole being evaluated\n\n // for each ring\n for (var r = 0; r < rings.length; r++) {\n var ring = closeRing(rings[r].slice(0));\n if(ring.length < 4){\n continue;\n }\n // is this ring an outer ring? is it clockwise?\n if(ringIsClockwise(ring)){\n var polygon = [ ring ];\n outerRings.push(polygon); // push to outer rings\n } else {\n holes.push(ring); // counterclockwise push to holes\n }\n }\n\n var uncontainedHoles = [];\n\n // while there are holes left...\n while(holes.length){\n // pop a hole off out stack\n hole = holes.pop();\n\n // loop over all outer rings and see if they contain our hole.\n var contained = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(coordinatesContainCoordinates(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n contained = true;\n break;\n }\n }\n\n // ring is not contained in any outer ring\n // sometimes this happens https://github.com/Esri/esri-leaflet/issues/320\n if(!contained){\n uncontainedHoles.push(hole);\n }\n }\n\n // if we couldn't match any holes using contains we can try intersects...\n while(uncontainedHoles.length){\n // pop a hole off out stack\n hole = uncontainedHoles.pop();\n\n // loop over all outer rings and see if any intersect our hole.\n var intersects = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(arrayIntersectsArray(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n intersects = true;\n break;\n }\n }\n\n if(!intersects) {\n outerRings.push([hole.reverse()]);\n }\n }\n\n if(outerRings.length === 1){\n return {\n type: 'Polygon',\n coordinates: outerRings[0]\n };\n } else {\n return {\n type: 'MultiPolygon',\n coordinates: outerRings\n };\n }\n }\n\n // This function ensures that rings are oriented in the right directions\n // outer rings are clockwise, holes are counterclockwise\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function orientRings(poly){\n var output = [];\n var polygon = poly.slice(0);\n var outerRing = closeRing(polygon.shift().slice(0));\n if(outerRing.length >= 4){\n if(!ringIsClockwise(outerRing)){\n outerRing.reverse();\n }\n\n output.push(outerRing);\n\n for (var i = 0; i < polygon.length; i++) {\n var hole = closeRing(polygon[i].slice(0));\n if(hole.length >= 4){\n if(ringIsClockwise(hole)){\n hole.reverse();\n }\n output.push(hole);\n }\n }\n }\n\n return output;\n }\n\n // This function flattens holes in multipolygons to one array of polygons\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function flattenMultiPolygonRings(rings){\n var output = [];\n for (var i = 0; i < rings.length; i++) {\n var polygon = orientRings(rings[i]);\n for (var x = polygon.length - 1; x >= 0; x--) {\n var ring = polygon[x].slice(0);\n output.push(ring);\n }\n }\n return output;\n }\n\n // convert an extent (ArcGIS) to LatLngBounds (Leaflet)\n EsriLeaflet.Util.extentToBounds = function(extent){\n var sw = new L.LatLng(extent.ymin, extent.xmin);\n var ne = new L.LatLng(extent.ymax, extent.xmax);\n return new L.LatLngBounds(sw, ne);\n };\n\n // convert an LatLngBounds (Leaflet) to extent (ArcGIS)\n EsriLeaflet.Util.boundsToExtent = function(bounds) {\n bounds = L.latLngBounds(bounds);\n return {\n 'xmin': bounds.getSouthWest().lng,\n 'ymin': bounds.getSouthWest().lat,\n 'xmax': bounds.getNorthEast().lng,\n 'ymax': bounds.getNorthEast().lat,\n 'spatialReference': {\n 'wkid' : 4326\n }\n };\n };\n\n EsriLeaflet.Util.arcgisToGeojson = function (arcgis, idAttribute){\n var geojson = {};\n\n if(typeof arcgis.x === 'number' && typeof arcgis.y === 'number'){\n geojson.type = 'Point';\n geojson.coordinates = [arcgis.x, arcgis.y];\n }\n\n if(arcgis.points){\n geojson.type = 'MultiPoint';\n geojson.coordinates = arcgis.points.slice(0);\n }\n\n if(arcgis.paths) {\n if(arcgis.paths.length === 1){\n geojson.type = 'LineString';\n geojson.coordinates = arcgis.paths[0].slice(0);\n } else {\n geojson.type = 'MultiLineString';\n geojson.coordinates = arcgis.paths.slice(0);\n }\n }\n\n if(arcgis.rings) {\n geojson = convertRingsToGeoJSON(arcgis.rings.slice(0));\n }\n\n if(arcgis.geometry || arcgis.attributes) {\n geojson.type = 'Feature';\n geojson.geometry = (arcgis.geometry) ? EsriLeaflet.Util.arcgisToGeojson(arcgis.geometry) : null;\n geojson.properties = (arcgis.attributes) ? clone(arcgis.attributes) : null;\n if(arcgis.attributes) {\n geojson.id = arcgis.attributes[idAttribute] || arcgis.attributes.OBJECTID || arcgis.attributes.FID;\n }\n }\n\n return geojson;\n };\n\n // GeoJSON -> ArcGIS\n EsriLeaflet.Util.geojsonToArcGIS = function(geojson, idAttribute){\n idAttribute = idAttribute || 'OBJECTID';\n var spatialReference = { wkid: 4326 };\n var result = {};\n var i;\n\n switch(geojson.type){\n case 'Point':\n result.x = geojson.coordinates[0];\n result.y = geojson.coordinates[1];\n result.spatialReference = spatialReference;\n break;\n case 'MultiPoint':\n result.points = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'LineString':\n result.paths = [geojson.coordinates.slice(0)];\n result.spatialReference = spatialReference;\n break;\n case 'MultiLineString':\n result.paths = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'Polygon':\n result.rings = orientRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'MultiPolygon':\n result.rings = flattenMultiPolygonRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'Feature':\n if(geojson.geometry) {\n result.geometry = EsriLeaflet.Util.geojsonToArcGIS(geojson.geometry, idAttribute);\n }\n result.attributes = (geojson.properties) ? clone(geojson.properties) : {};\n if(geojson.id){\n result.attributes[idAttribute] = geojson.id;\n }\n break;\n case 'FeatureCollection':\n result = [];\n for (i = 0; i < geojson.features.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.features[i], idAttribute));\n }\n break;\n case 'GeometryCollection':\n result = [];\n for (i = 0; i < geojson.geometries.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.geometries[i], idAttribute));\n }\n break;\n }\n\n return result;\n };\n\n EsriLeaflet.Util.responseToFeatureCollection = function(response, idAttribute){\n var objectIdField;\n\n if(idAttribute){\n objectIdField = idAttribute;\n } else if(response.objectIdFieldName){\n objectIdField = response.objectIdFieldName;\n } else if(response.fields) {\n for (var j = 0; j <= response.fields.length - 1; j++) {\n if(response.fields[j].type === 'esriFieldTypeOID') {\n objectIdField = response.fields[j].name;\n break;\n }\n }\n } else {\n objectIdField = 'OBJECTID';\n }\n\n var featureCollection = {\n type: 'FeatureCollection',\n features: []\n };\n var features = response.features || response.results;\n if(features.length){\n for (var i = features.length - 1; i >= 0; i--) {\n featureCollection.features.push(EsriLeaflet.Util.arcgisToGeojson(features[i], objectIdField));\n }\n }\n\n return featureCollection;\n };\n\n // trim url whitespace and add a trailing slash if needed\n EsriLeaflet.Util.cleanUrl = function(url){\n //trim leading and trailing spaces, but not spaces inside the url\n url = url.replace(/^\\s+|\\s+$|\\A\\s+|\\s+\\z/g, '');\n\n //add a trailing slash to the url if the user omitted it\n if(url[url.length-1] !== '/'){\n url += '/';\n }\n\n return url;\n };\n\n EsriLeaflet.Util.isArcgisOnline = function(url){\n /* hosted feature services can emit geojson natively.\n our check for 'geojson' support will need to be revisted\n once the functionality makes its way to ArcGIS Server*/\n return (/\\.arcgis\\.com.*?FeatureServer/g).test(url);\n };\n\n EsriLeaflet.Util.geojsonTypeToArcGIS = function (geoJsonType) {\n var arcgisGeometryType;\n switch (geoJsonType) {\n case 'Point':\n arcgisGeometryType = 'esriGeometryPoint';\n break;\n case 'MultiPoint':\n arcgisGeometryType = 'esriGeometryMultipoint';\n break;\n case 'LineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'MultiLineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'Polygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n case 'MultiPolygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n }\n return arcgisGeometryType;\n };\n\n EsriLeaflet.Util.requestAnimationFrame = L.Util.bind(raf, window);\n\n EsriLeaflet.Util.warn = function (message) {\n if(console && console.warn) {\n console.warn(message);\n }\n };\n\n})(EsriLeaflet);","(function(EsriLeaflet){\n\n var callbacks = 0;\n\n window._EsriLeafletCallbacks = {};\n\n function serialize(params){\n var data = '';\n\n params.f = params.f || 'json';\n\n for (var key in params){\n if(params.hasOwnProperty(key)){\n var param = params[key];\n var type = Object.prototype.toString.call(param);\n var value;\n\n if(data.length){\n data += '&';\n }\n\n if (type === '[object Array]'){\n value = (Object.prototype.toString.call(param[0]) === '[object Object]') ? JSON.stringify(param) : param.join(',');\n } else if (type === '[object Object]') {\n value = JSON.stringify(param);\n } else if (type === '[object Date]'){\n value = param.valueOf();\n } else {\n value = param;\n }\n\n data += encodeURIComponent(key) + '=' + encodeURIComponent(value);\n }\n }\n\n return data;\n }\n\n function createRequest(callback, context){\n var httpRequest = new XMLHttpRequest();\n\n httpRequest.onerror = function(e) {\n httpRequest.onreadystatechange = L.Util.falseFn;\n\n callback.call(context, {\n error: {\n code: 500,\n message: 'XMLHttpRequest error'\n }\n }, null);\n };\n\n httpRequest.onreadystatechange = function(){\n var response;\n var error;\n\n if (httpRequest.readyState === 4) {\n try {\n response = JSON.parse(httpRequest.responseText);\n } catch(e) {\n response = null;\n error = {\n code: 500,\n message: 'Could not parse response as JSON. This could also be caused by a CORS or XMLHttpRequest error.'\n };\n }\n\n if (!error && response.error) {\n error = response.error;\n response = null;\n }\n\n httpRequest.onerror = L.Util.falseFn;\n\n callback.call(context, error, response);\n }\n };\n\n return httpRequest;\n }\n\n // AJAX handlers for CORS (modern browsers) or JSONP (older browsers)\n EsriLeaflet.Request = {\n request: function(url, params, callback, context){\n var paramString = serialize(params);\n var httpRequest = createRequest(callback, context);\n var requestLength = (url + '?' + paramString).length;\n\n // request is less then 2000 characters and the browser supports CORS, make GET request with XMLHttpRequest\n if(requestLength <= 2000 && L.esri.Support.CORS){\n httpRequest.open('GET', url + '?' + paramString);\n httpRequest.send(null);\n\n // request is less more then 2000 characters and the browser supports CORS, make POST request with XMLHttpRequest\n } else if (requestLength > 2000 && L.esri.Support.CORS){\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(paramString);\n\n // request is less more then 2000 characters and the browser does not support CORS, make a JSONP request\n } else if(requestLength <= 2000 && !L.esri.Support.CORS){\n return L.esri.Request.get.JSONP(url, params, callback, context);\n\n // request is longer then 2000 characters and the browser does not support CORS, log a warning\n } else {\n EsriLeaflet.Util.warn('a request to ' + url + ' was longer then 2000 characters and this browser cannot make a cross-domain post request. Please use a proxy http://esri.github.io/esri-leaflet/api-reference/request.html');\n return;\n }\n\n return httpRequest;\n },\n\n post: {\n XMLHTTP: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(serialize(params));\n\n return httpRequest;\n }\n },\n\n get: {\n CORS: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n\n httpRequest.open('GET', url + '?' + serialize(params), true);\n httpRequest.send(null);\n\n return httpRequest;\n },\n JSONP: function(url, params, callback, context){\n var callbackId = 'c' + callbacks;\n\n params.callback = 'window._EsriLeafletCallbacks.' + callbackId;\n\n var script = L.DomUtil.create('script', null, document.body);\n script.type = 'text/javascript';\n script.src = url + '?' + serialize(params);\n script.id = callbackId;\n\n window._EsriLeafletCallbacks[callbackId] = function(response){\n if(window._EsriLeafletCallbacks[callbackId] !== true){\n var error;\n var responseType = Object.prototype.toString.call(response);\n\n if(!(responseType === '[object Object]' || responseType === '[object Array]')){\n error = {\n error: {\n code: 500,\n message: 'Expected array or object as JSONP response'\n }\n };\n response = null;\n }\n\n if (!error && response.error) {\n error = response;\n response = null;\n }\n\n callback.call(context, error, response);\n window._EsriLeafletCallbacks[callbackId] = true;\n }\n };\n\n callbacks++;\n\n return {\n id: callbackId,\n url: script.src,\n abort: function(){\n window._EsriLeafletCallbacks._callback[callbackId]({\n code: 0,\n message: 'Request aborted.'\n });\n }\n };\n }\n }\n };\n\n // choose the correct AJAX handler depending on CORS support\n EsriLeaflet.get = (EsriLeaflet.Support.CORS) ? EsriLeaflet.Request.get.CORS : EsriLeaflet.Request.get.JSONP;\n\n // always use XMLHttpRequest for posts\n EsriLeaflet.post = EsriLeaflet.Request.post.XMLHTTP;\n\n // expose a common request method the uses GET\\POST based on request length\n EsriLeaflet.request = EsriLeaflet.Request.request;\n\n})(EsriLeaflet);","EsriLeaflet.Services.Service = L.Class.extend({\n\n includes: L.Mixin.Events,\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n initialize: function (options) {\n options = options || {};\n this._requestQueue = [];\n this._authenticating = false;\n L.Util.setOptions(this, options);\n this.options.url = EsriLeaflet.Util.cleanUrl(this.options.url);\n },\n\n get: function (path, params, callback, context) {\n return this._request('get', path, params, callback, context);\n },\n\n post: function (path, params, callback, context) {\n return this._request('post', path, params, callback, context);\n },\n\n request: function (path, params, callback, context) {\n return this._request('request', path, params, callback, context);\n },\n\n metadata: function (callback, context) {\n return this._request('get', '', {}, callback, context);\n },\n\n authenticate: function(token){\n this._authenticating = false;\n this.options.token = token;\n this._runQueue();\n return this;\n },\n\n _request: function(method, path, params, callback, context){\n this.fire('requeststart', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n\n var wrappedCallback = this._createServiceCallback(method, path, params, callback, context);\n\n if (this.options.token) {\n params.token = this.options.token;\n }\n\n if (this._authenticating) {\n this._requestQueue.push([method, path, params, callback, context]);\n return;\n } else {\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, wrappedCallback);\n } else {\n return EsriLeaflet[method](url, params, wrappedCallback);\n }\n }\n },\n\n _createServiceCallback: function(method, path, params, callback, context){\n return L.Util.bind(function(error, response){\n\n if (error && (error.code === 499 || error.code === 498)) {\n this._authenticating = true;\n\n this._requestQueue.push([method, path, params, callback, context]);\n\n // fire an event for users to handle and re-authenticate\n this.fire('authenticationrequired', {\n authenticate: L.Util.bind(this.authenticate, this)\n });\n\n // if the user has access to a callback they can handle the auth error\n error.authenticate = L.Util.bind(this.authenticate, this);\n }\n\n callback.call(context, error, response);\n\n if(error) {\n this.fire('requesterror', {\n url: this.options.url + path,\n params: params,\n message: error.message,\n code: error.code,\n method: method\n });\n } else {\n this.fire('requestsuccess', {\n url: this.options.url + path,\n params: params,\n response: response,\n method: method\n });\n }\n\n this.fire('requestend', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n }, this);\n },\n\n _runQueue: function(){\n for (var i = this._requestQueue.length - 1; i >= 0; i--) {\n var request = this._requestQueue[i];\n var method = request.shift();\n this[method].apply(this, request);\n }\n this._requestQueue = [];\n }\n\n});\n\nEsriLeaflet.Services.service = function(params){\n return new EsriLeaflet.Services.Service(params);\n};\n","EsriLeaflet.Services.MapService = EsriLeaflet.Services.Service.extend({\n\n identify: function () {\n return new EsriLeaflet.Tasks.identifyFeatures(this);\n },\n\n find: function () {\n return new EsriLeaflet.Tasks.Find(this);\n },\n\n query: function () {\n return new EsriLeaflet.Tasks.Query(this);\n }\n\n});\n\nEsriLeaflet.Services.mapService = function(params){\n return new EsriLeaflet.Services.MapService(params);\n};","EsriLeaflet.Tasks.Task = L.Class.extend({\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n //Generate a method for each methodName:paramName in the setters for this task.\n generateSetter: function(param, context){\n return L.Util.bind(function(value){\n this.params[param] = value;\n return this;\n }, context);\n },\n\n initialize: function(endpoint){\n // endpoint can be either a url (and options) for an ArcGIS Rest Service or an instance of EsriLeaflet.Service\n if(endpoint.request && endpoint.options){\n this._service = endpoint;\n L.Util.setOptions(this, endpoint.options);\n } else {\n L.Util.setOptions(this, endpoint);\n this.options.url = L.esri.Util.cleanUrl(endpoint.url);\n }\n\n // clone default params into this object\n this.params = L.Util.extend({}, this.params || {});\n\n // generate setter methods based on the setters object implimented a child class\n if(this.setters){\n for (var setter in this.setters){\n var param = this.setters[setter];\n this[setter] = this.generateSetter(param, this);\n }\n }\n },\n\n token: function(token){\n if(this._service){\n this._service.authenticate(token);\n } else {\n this.params.token = token;\n }\n return this;\n },\n\n request: function(callback, context){\n if(this._service){\n return this._service.request(this.path, this.params, callback, context);\n } else {\n return this._request('request', this.path, this.params, callback, context);\n }\n },\n\n _request: function(method, path, params, callback, context){\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, callback, context);\n } else{\n return EsriLeaflet[method](url, params, callback, context);\n }\n }\n});","EsriLeaflet.Tasks.Identify = EsriLeaflet.Tasks.Task.extend({\n path: 'identify',\n\n between: function(start, end){\n this.params.time = [start.valueOf(), end.valueOf()];\n return this;\n }\n});\n","EsriLeaflet.Tasks.IdentifyFeatures = EsriLeaflet.Tasks.Identify.extend({\n setters: {\n 'layers': 'layers',\n 'precision': 'geometryPrecision',\n 'tolerance': 'tolerance',\n 'returnGeometry': 'returnGeometry'\n },\n\n params: {\n sr: 4326,\n layers: 'all',\n tolerance: 3,\n returnGeometry: true\n },\n\n on: function(map){\n var extent = EsriLeaflet.Util.boundsToExtent(map.getBounds());\n var size = map.getSize();\n this.params.imageDisplay = [size.x, size.y, 96];\n this.params.mapExtent = [extent.xmin, extent.ymin, extent.xmax, extent.ymax];\n return this;\n },\n\n at: function(latlng){\n latlng = L.latLng(latlng);\n this.params.geometry = [latlng.lng, latlng.lat];\n this.params.geometryType = 'esriGeometryPoint';\n return this;\n },\n\n layerDef: function (id, where){\n this.params.layerDefs = (this.params.layerDefs) ? this.params.layerDefs + ';' : '';\n this.params.layerDefs += ([id, where]).join(':');\n return this;\n },\n\n simplify: function(map, factor){\n var mapWidth = Math.abs(map.getBounds().getWest() - map.getBounds().getEast());\n this.params.maxAllowableOffset = (mapWidth / map.getSize().y) * (1 - factor);\n return this;\n },\n\n run: function (callback, context){\n return this.request(function(error, response){\n // immediately invoke with an error\n if(error) {\n callback.call(context, error, undefined, response);\n return;\n\n // ok no error lets just assume we have features...\n } else {\n var featureCollection = EsriLeaflet.Util.responseToFeatureCollection(response);\n response.results = response.results.reverse();\n for (var i = 0; i < featureCollection.features.length; i++) {\n var feature = featureCollection.features[i];\n feature.layerId = response.results[i].layerId;\n }\n callback.call(context, undefined, featureCollection, response);\n }\n });\n }\n});\n\nEsriLeaflet.Tasks.identifyFeatures = function(params){\n return new EsriLeaflet.Tasks.IdentifyFeatures(params);\n};","EsriLeaflet.Tasks.Query = EsriLeaflet.Tasks.Task.extend({\n setters: {\n 'offset': 'offset',\n 'limit': 'limit',\n 'fields': 'outFields',\n 'precision': 'geometryPrecision',\n 'featureIds': 'objectIds',\n 'returnGeometry': 'returnGeometry',\n 'token': 'token'\n },\n\n path: 'query',\n\n params: {\n returnGeometry: true,\n where: '1=1',\n outSr: 4326,\n outFields: '*'\n },\n\n within: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelContains'; // will make code read layer within geometry, to the api this will reads geometry contains layer\n return this;\n },\n\n intersects: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelIntersects';\n return this;\n },\n\n contains: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelWithin'; // will make code read layer contains geometry, to the api this will reads geometry within layer\n return this;\n },\n\n // crosses: function(geometry){\n // this._setGeometry(geometry);\n // this.params.spatialRel = 'esriSpatialRelCrosses';\n // return this;\n // },\n\n // touches: function(geometry){\n // this._setGeometry(geometry);\n // this.params.spatialRel = 'esriSpatialRelTouches';\n // return this;\n // },\n\n overlaps: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelOverlaps';\n return this;\n },\n\n // only valid for Feature Services running on ArcGIS Server 10.3 or ArcGIS Online\n nearby: function(latlng, radius){\n latlng = L.latLng(latlng);\n this.params.geometry = [latlng.lng, latlng.lat];\n this.params.geometryType = 'esriGeometryPoint';\n this.params.spatialRel = 'esriSpatialRelIntersects';\n this.params.units = 'esriSRUnit_Meter';\n this.params.distance = radius;\n this.params.inSr = 4326;\n return this;\n },\n\n where: function(string){\n // instead of converting double-quotes to single quotes, pass as is, and provide a more informative message if a 400 is encountered\n this.params.where = string;\n return this;\n },\n\n between: function(start, end){\n this.params.time = [start.valueOf(), end.valueOf()];\n return this;\n },\n\n simplify: function(map, factor){\n var mapWidth = Math.abs(map.getBounds().getWest() - map.getBounds().getEast());\n this.params.maxAllowableOffset = (mapWidth / map.getSize().y) * factor;\n return this;\n },\n\n orderBy: function(fieldName, order){\n order = order || 'ASC';\n this.params.orderByFields = (this.params.orderByFields) ? this.params.orderByFields + ',' : '';\n this.params.orderByFields += ([fieldName, order]).join(' ');\n return this;\n },\n\n run: function(callback, context){\n this._cleanParams();\n\n // if the service is hosted on arcgis online request geojson directly\n if(EsriLeaflet.Util.isArcgisOnline(this.options.url)){\n this.params.f = 'geojson';\n\n return this.request(function(error, response){\n this._trapSQLerrors(error);\n callback.call(context, error, response, response);\n }, this);\n\n // otherwise convert it in the callback then pass it on\n } else {\n return this.request(function(error, response){\n this._trapSQLerrors(error);\n callback.call(context, error, (response && EsriLeaflet.Util.responseToFeatureCollection(response)), response);\n }, this);\n }\n },\n\n count: function(callback, context){\n this._cleanParams();\n this.params.returnCountOnly = true;\n return this.request(function(error, response){\n callback.call(this, error, (response && response.count), response);\n }, context);\n },\n\n ids: function(callback, context){\n this._cleanParams();\n this.params.returnIdsOnly = true;\n return this.request(function(error, response){\n callback.call(this, error, (response && response.objectIds), response);\n }, context);\n },\n\n // only valid for Feature Services running on ArcGIS Server 10.3 or ArcGIS Online\n bounds: function(callback, context){\n this._cleanParams();\n this.params.returnExtentOnly = true;\n return this.request(function(error, response){\n callback.call(context, error, (response && response.extent && EsriLeaflet.Util.extentToBounds(response.extent)), response);\n }, context);\n },\n\n // only valid for image services\n pixelSize: function(point){\n point = L.point(point);\n this.params.pixelSize = [point.x,point.y];\n return this;\n },\n\n // only valid for map services\n layer: function(layer){\n this.path = layer + '/query';\n return this;\n },\n\n _trapSQLerrors: function(error){\n if (error){\n if (error.code === '400'){\n EsriLeaflet.Util.warn('one common syntax error in query requests is encasing string values in double quotes instead of single quotes');\n }\n }\n },\n\n _cleanParams: function(){\n delete this.params.returnIdsOnly;\n delete this.params.returnExtentOnly;\n delete this.params.returnCountOnly;\n },\n\n _setGeometry: function(geometry) {\n this.params.inSr = 4326;\n\n // convert bounds to extent and finish\n if ( geometry instanceof L.LatLngBounds ) {\n // set geometry + geometryType\n this.params.geometry = EsriLeaflet.Util.boundsToExtent(geometry);\n this.params.geometryType = 'esriGeometryEnvelope';\n return;\n }\n\n // convert L.Marker > L.LatLng\n if(geometry.getLatLng){\n geometry = geometry.getLatLng();\n }\n\n // convert L.LatLng to a geojson point and continue;\n if (geometry instanceof L.LatLng) {\n geometry = {\n type: 'Point',\n coordinates: [geometry.lng, geometry.lat]\n };\n }\n\n // handle L.GeoJSON, pull out the first geometry\n if ( geometry instanceof L.GeoJSON ) {\n //reassign geometry to the GeoJSON value (we are assuming that only one feature is present)\n geometry = geometry.getLayers()[0].feature.geometry;\n this.params.geometry = EsriLeaflet.Util.geojsonToArcGIS(geometry);\n this.params.geometryType = EsriLeaflet.Util.geojsonTypeToArcGIS(geometry.type);\n }\n\n // Handle L.Polyline and L.Polygon\n if (geometry.toGeoJSON) {\n geometry = geometry.toGeoJSON();\n }\n\n // handle GeoJSON feature by pulling out the geometry\n if ( geometry.type === 'Feature' ) {\n // get the geometry of the geojson feature\n geometry = geometry.geometry;\n }\n\n // confirm that our GeoJSON is a point, line or polygon\n if ( geometry.type === 'Point' || geometry.type === 'LineString' || geometry.type === 'Polygon') {\n this.params.geometry = EsriLeaflet.Util.geojsonToArcGIS(geometry);\n this.params.geometryType = EsriLeaflet.Util.geojsonTypeToArcGIS(geometry.type);\n return;\n }\n\n // warn the user if we havn't found a\n /* global console */\n EsriLeaflet.Util.warn('invalid geometry passed to spatial query. Should be an L.LatLng, L.LatLngBounds or L.Marker or a GeoJSON Point Line or Polygon object');\n\n return;\n }\n});\n\nEsriLeaflet.Tasks.query = function(params){\n return new EsriLeaflet.Tasks.Query(params);\n};","EsriLeaflet.Tasks.Find = EsriLeaflet.Tasks.Task.extend({\n setters: {\n // method name > param name\n 'contains': 'contains',\n 'text': 'searchText',\n 'fields': 'searchFields', // denote an array or single string\n 'spatialReference': 'sr',\n 'sr': 'sr',\n 'layers': 'layers',\n 'returnGeometry': 'returnGeometry',\n 'maxAllowableOffset': 'maxAllowableOffset',\n 'precision': 'geometryPrecision',\n 'dynamicLayers': 'dynamicLayers',\n 'returnZ' : 'returnZ',\n 'returnM' : 'returnM',\n 'gdbVersion' : 'gdbVersion',\n 'token' : 'token'\n },\n\n path: 'find',\n\n params: {\n sr: 4326,\n contains: true,\n returnGeometry: true,\n returnZ: true,\n returnM: false\n },\n\n layerDefs: function (id, where) {\n this.params.layerDefs = (this.params.layerDefs) ? this.params.layerDefs + ';' : '';\n this.params.layerDefs += ([id, where]).join(':');\n return this;\n },\n\n simplify: function(map, factor){\n var mapWidth = Math.abs(map.getBounds().getWest() - map.getBounds().getEast());\n this.params.maxAllowableOffset = (mapWidth / map.getSize().y) * factor;\n return this;\n },\n\n run: function (callback, context) {\n return this.request(function(error, response){\n callback.call(context, error, (response && EsriLeaflet.Util.responseToFeatureCollection(response)), response);\n }, context);\n }\n});\n\nEsriLeaflet.Tasks.find = function (params) {\n return new EsriLeaflet.Tasks.Find(params);\n};","EsriLeaflet.Layers.RasterLayer = L.Class.extend({\n includes: L.Mixin.Events,\n\n options: {\n opacity: 1,\n position: 'front',\n f: 'image'\n },\n\n onAdd: function (map) {\n this._map = map;\n\n this._update = L.Util.limitExecByInterval(this._update, this.options.updateInterval, this);\n\n if (map.options.crs && map.options.crs.code) {\n var sr = map.options.crs.code.split(':')[1];\n this.options.bboxSR = sr;\n this.options.imageSR = sr;\n }\n\n map.on('moveend', this._update, this);\n\n // if we had an image loaded and it matches the\n // current bounds show the image otherwise remove it\n if(this._currentImage && this._currentImage._bounds.equals(this._map.getBounds())){\n map.addLayer(this._currentImage);\n } else if(this._currentImage) {\n this._map.removeLayer(this._currentImage);\n this._currentImage = null;\n }\n\n this._update();\n\n if(this._popup){\n this._map.on('click', this._getPopupData, this);\n this._map.on('dblclick', this._resetPopupState, this);\n }\n },\n\n bindPopup: function(fn, popupOptions){\n this._shouldRenderPopup = false;\n this._lastClick = false;\n this._popup = L.popup(popupOptions);\n this._popupFunction = fn;\n if(this._map){\n this._map.on('click', this._getPopupData, this);\n this._map.on('dblclick', this._resetPopupState, this);\n }\n return this;\n },\n\n unbindPopup: function(){\n if(this._map){\n this._map.closePopup(this._popup);\n this._map.off('click', this._getPopupData, this);\n this._map.off('dblclick', this._resetPopupState, this);\n }\n this._popup = false;\n return this;\n },\n\n onRemove: function (map) {\n if (this._currentImage) {\n this._map.removeLayer(this._currentImage);\n }\n\n if(this._popup){\n this._map.off('click', this._getPopupData, this);\n this._map.off('dblclick', this._resetPopupState, this);\n }\n\n this._map.off('moveend', this._update, this);\n this._map = null;\n },\n\n addTo: function(map){\n map.addLayer(this);\n return this;\n },\n\n removeFrom: function(map){\n map.removeLayer(this);\n return this;\n },\n\n bringToFront: function(){\n this.options.position = 'front';\n if(this._currentImage){\n this._currentImage.bringToFront();\n }\n return this;\n },\n\n bringToBack: function(){\n this.options.position = 'back';\n if(this._currentImage){\n this._currentImage.bringToBack();\n }\n return this;\n },\n\n getAttribution: function () {\n return this.options.attribution;\n },\n\n getOpacity: function(){\n return this.options.opacity;\n },\n\n setOpacity: function(opacity){\n this.options.opacity = opacity;\n this._currentImage.setOpacity(opacity);\n return this;\n },\n\n getTimeRange: function(){\n return [this.options.from, this.options.to];\n },\n\n setTimeRange: function(from, to){\n this.options.from = from;\n this.options.to = to;\n this._update();\n return this;\n },\n\n metadata: function(callback, context){\n this._service.metadata(callback, context);\n return this;\n },\n\n authenticate: function(token){\n this._service.authenticate(token);\n return this;\n },\n\n _renderImage: function(url, bounds){\n if(this._map){\n // create a new image overlay and add it to the map\n // to start loading the image\n // opacity is 0 while the image is loading\n var image = new L.ImageOverlay(url, bounds, {\n opacity: 0\n }).addTo(this._map);\n\n // once the image loads\n image.once('load', function(e){\n var newImage = e.target;\n var oldImage = this._currentImage;\n\n // if the bounds of this image matches the bounds that\n // _renderImage was called with and we have a map with the same bounds\n // hide the old image if there is one and set the opacity\n // of the new image otherwise remove the new image\n if(newImage._bounds.equals(bounds) && newImage._bounds.equals(this._map.getBounds())){\n this._currentImage = newImage;\n\n if(this.options.position === 'front'){\n this.bringToFront();\n } else {\n this.bringToBack();\n }\n\n if(this._map && this._currentImage._map){\n this._currentImage.setOpacity(this.options.opacity);\n } else {\n this._currentImage._map.removeLayer(this._currentImage);\n }\n\n if(oldImage && this._map) {\n this._map.removeLayer(oldImage);\n }\n\n if(oldImage && oldImage._map){\n oldImage._map.removeLayer(oldImage);\n }\n } else {\n this._map.removeLayer(newImage);\n }\n\n this.fire('load', {\n bounds: bounds\n });\n\n }, this);\n\n this.fire('loading', {\n bounds: bounds\n });\n }\n },\n\n _update: function () {\n if(!this._map){\n return;\n }\n\n var zoom = this._map.getZoom();\n var bounds = this._map.getBounds();\n\n if(this._animatingZoom){\n return;\n }\n\n if (this._map._panTransition && this._map._panTransition._inProgress) {\n return;\n }\n\n if (zoom > this.options.maxZoom || zoom < this.options.minZoom) {\n if (this._currentImage) {\n this._currentImage._map.removeLayer(this._currentImage);\n }\n return;\n }\n var params = this._buildExportParams();\n\n this._requestExport(params, bounds);\n },\n\n // TODO: refactor these into raster layer\n _renderPopup: function(latlng, error, results, response){\n latlng = L.latLng(latlng);\n if(this._shouldRenderPopup && this._lastClick.equals(latlng)){\n //add the popup to the map where the mouse was clicked at\n var content = this._popupFunction(error, results, response);\n if (content) {\n this._popup.setLatLng(latlng).setContent(content).openOn(this._map);\n }\n }\n },\n\n _resetPopupState: function(e){\n this._shouldRenderPopup = false;\n this._lastClick = e.latlng;\n },\n\n // from https://github.com/Leaflet/Leaflet/blob/v0.7.2/src/layer/FeatureGroup.js\n // @TODO remove at Leaflet 0.8\n _propagateEvent: function (e) {\n e = L.extend({\n layer: e.target,\n target: this\n }, e);\n this.fire(e.type, e);\n }\n});\n","EsriLeaflet.Layers.DynamicMapLayer = EsriLeaflet.Layers.RasterLayer.extend({\n\n options: {\n updateInterval: 150,\n layers: false,\n layerDefs: false,\n timeOptions: false,\n format: 'png24',\n transparent: true,\n f: 'json'\n },\n\n initialize: function (options) {\n options.url = EsriLeaflet.Util.cleanUrl(options.url);\n this._service = new EsriLeaflet.Services.MapService(options);\n this._service.on('authenticationrequired requeststart requestend requesterror requestsuccess', this._propagateEvent, this);\n if ((options.proxy || options.token) && options.f !== 'json'){\n options.f = 'json';\n }\n L.Util.setOptions(this, options);\n },\n\n getDynamicLayers: function(){\n return this.options.dynamicLayers;\n },\n\n setDynamicLayers: function(dynamicLayers){\n this.options.dynamicLayers = dynamicLayers;\n this._update();\n return this;\n },\n\n getLayers: function(){\n return this.options.layers;\n },\n\n setLayers: function(layers){\n this.options.layers = layers;\n this._update();\n return this;\n },\n\n getLayerDefs: function(){\n return this.options.layerDefs;\n },\n\n setLayerDefs: function(layerDefs){\n this.options.layerDefs = layerDefs;\n this._update();\n return this;\n },\n\n getTimeOptions: function(){\n return this.options.timeOptions;\n },\n\n setTimeOptions: function(timeOptions){\n this.options.timeOptions = timeOptions;\n this._update();\n return this;\n },\n\n query: function(){\n return this._service.query();\n },\n\n identify: function(){\n return this._service.identify();\n },\n\n find: function(){\n return this._service.find();\n },\n\n _getPopupData: function(e){\n var callback = L.Util.bind(function(error, featureCollection, response) {\n if(error) { return; } // we really can't do anything here but authenticate or requesterror will fire\n setTimeout(L.Util.bind(function(){\n this._renderPopup(e.latlng, error, featureCollection, response);\n }, this), 300);\n }, this);\n\n var identifyRequest = this.identify().on(this._map).at(e.latlng);\n\n if(this.options.layers){\n identifyRequest.layers('visible:' + this.options.layers.join(','));\n } else {\n identifyRequest.layers('visible');\n }\n\n identifyRequest.run(callback);\n\n // set the flags to show the popup\n this._shouldRenderPopup = true;\n this._lastClick = e.latlng;\n },\n\n _buildExportParams: function () {\n var bounds = this._map.getBounds();\n var size = this._map.getSize();\n var ne = this._map.options.crs.project(bounds._northEast);\n var sw = this._map.options.crs.project(bounds._southWest);\n\n //ensure that we don't ask ArcGIS Server for a taller image than we have actual map displaying\n var top = this._map.latLngToLayerPoint(bounds._northEast);\n var bottom = this._map.latLngToLayerPoint(bounds._southWest);\n\n if (top.y > 0 || bottom.y < size.y){\n size.y = bottom.y - top.y;\n }\n\n var params = {\n bbox: [sw.x, sw.y, ne.x, ne.y].join(','),\n size: size.x + ',' + size.y,\n dpi: 96,\n format: this.options.format,\n transparent: this.options.transparent,\n bboxSR: this.options.bboxSR,\n imageSR: this.options.imageSR\n };\n\n if(this.options.dynamicLayers){\n params.dynamicLayers = this.options.dynamicLayers;\n }\n\n if(this.options.layers){\n params.layers = 'show:' + this.options.layers.join(',');\n }\n\n if(this.options.layerDefs){\n params.layerDefs = JSON.stringify(this.options.layerDefs);\n }\n\n if(this.options.timeOptions){\n params.timeOptions = JSON.stringify(this.options.timeOptions);\n }\n\n if(this.options.from && this.options.to){\n params.time = this.options.from.valueOf() + ',' + this.options.to.valueOf();\n }\n\n if(this._service.options.token) {\n params.token = this._service.options.token;\n }\n\n return params;\n },\n\n _requestExport: function (params, bounds) {\n if(this.options.f === 'json'){\n this._service.request('export', params, function(error, response){\n if(error) { return; } // we really can't do anything here but authenticate or requesterror will fire\n this._renderImage(response.href, bounds);\n }, this);\n } else {\n params.f = 'image';\n this._renderImage(this.options.url + 'export' + L.Util.getParamString(params), bounds);\n }\n }\n});\n\nEsriLeaflet.DynamicMapLayer = EsriLeaflet.Layers.DynamicMapLayer;\n\nEsriLeaflet.Layers.dynamicMapLayer = function(options){\n return new EsriLeaflet.Layers.DynamicMapLayer(options);\n};\n\nEsriLeaflet.dynamicMapLayer = function(options){\n return new EsriLeaflet.Layers.DynamicMapLayer(options);\n};\n","EsriLeaflet.Layers.TiledMapLayer = L.TileLayer.extend({\n options: {\n zoomOffsetAllowance: 0.1,\n correctZoomLevels: true\n },\n\n statics: {\n MercatorZoomLevels: {\n '0':156543.03392799999,\n '1':78271.516963999893,\n '2':39135.758482000099,\n '3':19567.879240999901,\n '4':9783.9396204999593,\n '5':4891.9698102499797,\n '6':2445.9849051249898,\n '7':1222.9924525624899,\n '8':611.49622628138002,\n '9':305.74811314055802,\n '10':152.874056570411,\n '11':76.437028285073197,\n '12':38.218514142536598,\n '13':19.109257071268299,\n '14':9.5546285356341496,\n '15':4.7773142679493699,\n '16':2.38865713397468,\n '17':1.1943285668550501,\n '18':0.59716428355981699,\n '19':0.29858214164761698,\n '20':0.14929107082381,\n '21':0.07464553541191,\n '22':0.0373227677059525,\n '23':0.0186613838529763\n }\n },\n\n initialize: function(options){\n options.url = EsriLeaflet.Util.cleanUrl(options.url);\n options = L.Util.setOptions(this, options);\n\n // set the urls\n //this.url = L.esri.Util.cleanUrl(url);\n this.tileUrl = L.esri.Util.cleanUrl(options.url) + 'tile/{z}/{y}/{x}';\n this._service = new L.esri.Services.MapService(options);\n this._service.on('authenticationrequired requeststart requestend requesterror requestsuccess', this._propagateEvent, this);\n\n //if this is looking at the AGO tiles subdomain insert the subdomain placeholder\n if(this.tileUrl.match('://tiles.arcgisonline.com')){\n this.tileUrl = this.tileUrl.replace('://tiles.arcgisonline.com', '://tiles{s}.arcgisonline.com');\n options.subdomains = ['1', '2', '3', '4'];\n }\n\n if(this.options.token) {\n this.tileUrl += ('?token=' + this.options.token);\n }\n\n // init layer by calling TileLayers initialize method\n L.TileLayer.prototype.initialize.call(this, this.tileUrl, options);\n },\n\n getTileUrl: function (tilePoint) {\n return L.Util.template(this.tileUrl, L.extend({\n s: this._getSubdomain(tilePoint),\n z: this._lodMap[tilePoint.z] || tilePoint.z, // try lod map first, then just defualt to zoom level\n x: tilePoint.x,\n y: tilePoint.y\n }, this.options));\n },\n\n onAdd: function(map){\n if (!this._lodMap && this.options.correctZoomLevels) {\n this._lodMap = {}; // make sure we always have an lod map even if its empty\n this.metadata(function(error, metadata) {\n if(!error) {\n var sr = metadata.spatialReference.latestWkid || metadata.spatialReference.wkid;\n\n if (sr === 102100 || sr === 3857) {\n //create the zoom level data\n var arcgisLODs = metadata.tileInfo.lods;\n var correctResolutions = EsriLeaflet.Layers.TiledMapLayer.MercatorZoomLevels;\n\n for(var i = 0; i < arcgisLODs.length; i++) {\n var arcgisLOD = arcgisLODs[i];\n for(var ci in correctResolutions) {\n var correctRes = correctResolutions[ci];\n\n if(this._withinPercentage(arcgisLOD.resolution, correctRes, this.options.zoomOffsetAllowance)) {\n this._lodMap[ci] = arcgisLOD.level;\n break;\n }\n }\n }\n } else {\n EsriLeaflet.Util.warn('L.esri.TiledMapLayer is using a non-mercator spatial reference. Support may be available through Proj4Leaflet http://esri.github.io/esri-leaflet/examples/non-mercator-projection.html');\n }\n }\n\n L.TileLayer.prototype.onAdd.call(this, map);\n }, this);\n } else {\n L.TileLayer.prototype.onAdd.call(this, map);\n }\n },\n\n metadata: function(callback, context){\n this._service.metadata(callback, context);\n return this;\n },\n\n identify: function(){\n return this._service.identify();\n },\n\n authenticate: function(token){\n var tokenQs = '?token=' + token;\n this.tileUrl = (this.options.token) ? this.tileUrl.replace(/\\?token=(.+)/g, tokenQs) : this.tileUrl + tokenQs;\n this.options.token = token;\n this._service.authenticate(token);\n return this;\n },\n\n // from https://github.com/Leaflet/Leaflet/blob/v0.7.2/src/layer/FeatureGroup.js\n // @TODO remove at Leaflet 0.8\n _propagateEvent: function (e) {\n e = L.extend({\n layer: e.target,\n target: this\n }, e);\n this.fire(e.type, e);\n },\n\n _withinPercentage: function (a, b, percentage) {\n var diff = Math.abs((a/b) - 1);\n return diff < percentage;\n }\n});\n\nL.esri.TiledMapLayer = L.esri.Layers.tiledMapLayer;\n\nL.esri.Layers.tiledMapLayer = function(options){\n return new L.esri.Layers.TiledMapLayer(options);\n};\n\nL.esri.tiledMapLayer = function(options){\n return new L.esri.Layers.TiledMapLayer(options);\n};\n"]} \ No newline at end of file diff --git a/dist/esri-leaflet-src.js b/dist/esri-leaflet-src.js index 3e6d2e711..faa1f3218 100644 --- a/dist/esri-leaflet-src.js +++ b/dist/esri-leaflet-src.js @@ -1,5 +1,5 @@ -/*! esri-leaflet - v1.0.2 - 2015-12-31 -* Copyright (c) 2015 Environmental Systems Research Institute, Inc. +/*! esri-leaflet - v1.0.3 - 2016-02-22 +* Copyright (c) 2016 Environmental Systems Research Institute, Inc. * Apache License*/ (function (factory) { //define an AMD module that relies on 'leaflet' @@ -17,7 +17,7 @@ } }(function (L) { var EsriLeaflet = { //jshint ignore:line - VERSION: '1.0.2', + VERSION: '1.0.3', Layers: {}, Services: {}, Controls: {}, @@ -1934,6 +1934,9 @@ EsriLeaflet.Layers.RasterLayer = L.Class.extend({ } if (zoom > this.options.maxZoom || zoom < this.options.minZoom) { + if (this._currentImage) { + this._currentImage._map.removeLayer(this._currentImage); + } return; } var params = this._buildExportParams(); diff --git a/dist/esri-leaflet-src.js.map b/dist/esri-leaflet-src.js.map index 1596f102b..2c5499456 100644 --- a/dist/esri-leaflet-src.js.map +++ b/dist/esri-leaflet-src.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/EsriLeaflet.js","../src/Util.js","../src/Request.js","../src/Services/Service.js","../src/Services/FeatureLayerService.js","../src/Services/MapService.js","../src/Services/ImageService.js","../src/Tasks/Task.js","../src/Tasks/Query.js","../src/Tasks/Find.js","../src/Tasks/Identify.js","../src/Tasks/IdentifyImage.js","../src/Tasks/IdentifyFeatures.js","../src/Layers/BasemapLayer.js","../src/Layers/RasterLayer.js","../src/Layers/DynamicMapLayer.js","../src/Layers/ImageMapLayer.js","../src/Layers/TiledMapLayer.js","../src/Layers/FeatureLayer/FeatureGrid.js","../src/Layers/FeatureLayer/FeatureManager.js","../src/Layers/FeatureLayer/FeatureLayer.js","../src/Controls/Logo.js"],"names":[],"mappings":"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","file":"esri-leaflet-src.js","sourcesContent":["var EsriLeaflet = { //jshint ignore:line\n VERSION: '1.0.2',\n Layers: {},\n Services: {},\n Controls: {},\n Tasks: {},\n Util: {},\n Support: {\n CORS: !!(window.XMLHttpRequest && 'withCredentials' in new XMLHttpRequest()),\n pointerEvents: document.documentElement.style.pointerEvents === ''\n }\n};\n\nif(typeof window !== 'undefined' && window.L){\n window.L.esri = EsriLeaflet;\n}\n","(function(EsriLeaflet){\n\n // normalize request animation frame\n var raf = window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.msRequestAnimationFrame ||\n function(cb) { return window.setTimeout(cb, 1000 / 60); };\n\n // shallow object clone for feature properties and attributes\n // from http://jsperf.com/cloning-an-object/2\n function clone(obj) {\n var target = {};\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n target[i] = obj[i];\n }\n }\n return target;\n }\n\n // checks if 2 x,y points are equal\n function pointsEqual(a, b) {\n for (var i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n\n // checks if the first and last points of a ring are equal and closes the ring\n function closeRing(coordinates) {\n if (!pointsEqual(coordinates[0], coordinates[coordinates.length - 1])) {\n coordinates.push(coordinates[0]);\n }\n return coordinates;\n }\n\n // determine if polygon ring coordinates are clockwise. clockwise signifies outer ring, counter-clockwise an inner ring\n // or hole. this logic was found at http://stackoverflow.com/questions/1165647/how-to-determine-if-a-list-of-polygon-\n // points-are-in-clockwise-order\n function ringIsClockwise(ringToTest) {\n var total = 0,i = 0;\n var rLength = ringToTest.length;\n var pt1 = ringToTest[i];\n var pt2;\n for (i; i < rLength - 1; i++) {\n pt2 = ringToTest[i + 1];\n total += (pt2[0] - pt1[0]) * (pt2[1] + pt1[1]);\n pt1 = pt2;\n }\n return (total >= 0);\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L504-L519\n function vertexIntersectsVertex(a1, a2, b1, b2) {\n var uaT = (b2[0] - b1[0]) * (a1[1] - b1[1]) - (b2[1] - b1[1]) * (a1[0] - b1[0]);\n var ubT = (a2[0] - a1[0]) * (a1[1] - b1[1]) - (a2[1] - a1[1]) * (a1[0] - b1[0]);\n var uB = (b2[1] - b1[1]) * (a2[0] - a1[0]) - (b2[0] - b1[0]) * (a2[1] - a1[1]);\n\n if ( uB !== 0 ) {\n var ua = uaT / uB;\n var ub = ubT / uB;\n\n if ( 0 <= ua && ua <= 1 && 0 <= ub && ub <= 1 ) {\n return true;\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L521-L531\n function arrayIntersectsArray(a, b) {\n for (var i = 0; i < a.length - 1; i++) {\n for (var j = 0; j < b.length - 1; j++) {\n if (vertexIntersectsVertex(a[i], a[i + 1], b[j], b[j + 1])) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L470-L480\n function coordinatesContainPoint(coordinates, point) {\n var contains = false;\n for(var i = -1, l = coordinates.length, j = l - 1; ++i < l; j = i) {\n if (((coordinates[i][1] <= point[1] && point[1] < coordinates[j][1]) ||\n (coordinates[j][1] <= point[1] && point[1] < coordinates[i][1])) &&\n (point[0] < (coordinates[j][0] - coordinates[i][0]) * (point[1] - coordinates[i][1]) / (coordinates[j][1] - coordinates[i][1]) + coordinates[i][0])) {\n contains = !contains;\n }\n }\n return contains;\n }\n\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L106-L113\n function coordinatesContainCoordinates(outer, inner){\n var intersects = arrayIntersectsArray(outer, inner);\n var contains = coordinatesContainPoint(outer, inner[0]);\n if(!intersects && contains){\n return true;\n }\n return false;\n }\n\n // do any polygons in this array contain any other polygons in this array?\n // used for checking for holes in arcgis rings\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L117-L172\n function convertRingsToGeoJSON(rings){\n var outerRings = [];\n var holes = [];\n var x; // iterator\n var outerRing; // current outer ring being evaluated\n var hole; // current hole being evaluated\n\n // for each ring\n for (var r = 0; r < rings.length; r++) {\n var ring = closeRing(rings[r].slice(0));\n if(ring.length < 4){\n continue;\n }\n // is this ring an outer ring? is it clockwise?\n if(ringIsClockwise(ring)){\n var polygon = [ ring ];\n outerRings.push(polygon); // push to outer rings\n } else {\n holes.push(ring); // counterclockwise push to holes\n }\n }\n\n var uncontainedHoles = [];\n\n // while there are holes left...\n while(holes.length){\n // pop a hole off out stack\n hole = holes.pop();\n\n // loop over all outer rings and see if they contain our hole.\n var contained = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(coordinatesContainCoordinates(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n contained = true;\n break;\n }\n }\n\n // ring is not contained in any outer ring\n // sometimes this happens https://github.com/Esri/esri-leaflet/issues/320\n if(!contained){\n uncontainedHoles.push(hole);\n }\n }\n\n // if we couldn't match any holes using contains we can try intersects...\n while(uncontainedHoles.length){\n // pop a hole off out stack\n hole = uncontainedHoles.pop();\n\n // loop over all outer rings and see if any intersect our hole.\n var intersects = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(arrayIntersectsArray(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n intersects = true;\n break;\n }\n }\n\n if(!intersects) {\n outerRings.push([hole.reverse()]);\n }\n }\n\n if(outerRings.length === 1){\n return {\n type: 'Polygon',\n coordinates: outerRings[0]\n };\n } else {\n return {\n type: 'MultiPolygon',\n coordinates: outerRings\n };\n }\n }\n\n // This function ensures that rings are oriented in the right directions\n // outer rings are clockwise, holes are counterclockwise\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function orientRings(poly){\n var output = [];\n var polygon = poly.slice(0);\n var outerRing = closeRing(polygon.shift().slice(0));\n if(outerRing.length >= 4){\n if(!ringIsClockwise(outerRing)){\n outerRing.reverse();\n }\n\n output.push(outerRing);\n\n for (var i = 0; i < polygon.length; i++) {\n var hole = closeRing(polygon[i].slice(0));\n if(hole.length >= 4){\n if(ringIsClockwise(hole)){\n hole.reverse();\n }\n output.push(hole);\n }\n }\n }\n\n return output;\n }\n\n // This function flattens holes in multipolygons to one array of polygons\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function flattenMultiPolygonRings(rings){\n var output = [];\n for (var i = 0; i < rings.length; i++) {\n var polygon = orientRings(rings[i]);\n for (var x = polygon.length - 1; x >= 0; x--) {\n var ring = polygon[x].slice(0);\n output.push(ring);\n }\n }\n return output;\n }\n\n // convert an extent (ArcGIS) to LatLngBounds (Leaflet)\n EsriLeaflet.Util.extentToBounds = function(extent){\n var sw = new L.LatLng(extent.ymin, extent.xmin);\n var ne = new L.LatLng(extent.ymax, extent.xmax);\n return new L.LatLngBounds(sw, ne);\n };\n\n // convert an LatLngBounds (Leaflet) to extent (ArcGIS)\n EsriLeaflet.Util.boundsToExtent = function(bounds) {\n bounds = L.latLngBounds(bounds);\n return {\n 'xmin': bounds.getSouthWest().lng,\n 'ymin': bounds.getSouthWest().lat,\n 'xmax': bounds.getNorthEast().lng,\n 'ymax': bounds.getNorthEast().lat,\n 'spatialReference': {\n 'wkid' : 4326\n }\n };\n };\n\n EsriLeaflet.Util.arcgisToGeojson = function (arcgis, idAttribute){\n var geojson = {};\n\n if(typeof arcgis.x === 'number' && typeof arcgis.y === 'number'){\n geojson.type = 'Point';\n geojson.coordinates = [arcgis.x, arcgis.y];\n }\n\n if(arcgis.points){\n geojson.type = 'MultiPoint';\n geojson.coordinates = arcgis.points.slice(0);\n }\n\n if(arcgis.paths) {\n if(arcgis.paths.length === 1){\n geojson.type = 'LineString';\n geojson.coordinates = arcgis.paths[0].slice(0);\n } else {\n geojson.type = 'MultiLineString';\n geojson.coordinates = arcgis.paths.slice(0);\n }\n }\n\n if(arcgis.rings) {\n geojson = convertRingsToGeoJSON(arcgis.rings.slice(0));\n }\n\n if(arcgis.geometry || arcgis.attributes) {\n geojson.type = 'Feature';\n geojson.geometry = (arcgis.geometry) ? EsriLeaflet.Util.arcgisToGeojson(arcgis.geometry) : null;\n geojson.properties = (arcgis.attributes) ? clone(arcgis.attributes) : null;\n if(arcgis.attributes) {\n geojson.id = arcgis.attributes[idAttribute] || arcgis.attributes.OBJECTID || arcgis.attributes.FID;\n }\n }\n\n return geojson;\n };\n\n // GeoJSON -> ArcGIS\n EsriLeaflet.Util.geojsonToArcGIS = function(geojson, idAttribute){\n idAttribute = idAttribute || 'OBJECTID';\n var spatialReference = { wkid: 4326 };\n var result = {};\n var i;\n\n switch(geojson.type){\n case 'Point':\n result.x = geojson.coordinates[0];\n result.y = geojson.coordinates[1];\n result.spatialReference = spatialReference;\n break;\n case 'MultiPoint':\n result.points = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'LineString':\n result.paths = [geojson.coordinates.slice(0)];\n result.spatialReference = spatialReference;\n break;\n case 'MultiLineString':\n result.paths = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'Polygon':\n result.rings = orientRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'MultiPolygon':\n result.rings = flattenMultiPolygonRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'Feature':\n if(geojson.geometry) {\n result.geometry = EsriLeaflet.Util.geojsonToArcGIS(geojson.geometry, idAttribute);\n }\n result.attributes = (geojson.properties) ? clone(geojson.properties) : {};\n if(geojson.id){\n result.attributes[idAttribute] = geojson.id;\n }\n break;\n case 'FeatureCollection':\n result = [];\n for (i = 0; i < geojson.features.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.features[i], idAttribute));\n }\n break;\n case 'GeometryCollection':\n result = [];\n for (i = 0; i < geojson.geometries.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.geometries[i], idAttribute));\n }\n break;\n }\n\n return result;\n };\n\n EsriLeaflet.Util.responseToFeatureCollection = function(response, idAttribute){\n var objectIdField;\n\n if(idAttribute){\n objectIdField = idAttribute;\n } else if(response.objectIdFieldName){\n objectIdField = response.objectIdFieldName;\n } else if(response.fields) {\n for (var j = 0; j <= response.fields.length - 1; j++) {\n if(response.fields[j].type === 'esriFieldTypeOID') {\n objectIdField = response.fields[j].name;\n break;\n }\n }\n } else {\n objectIdField = 'OBJECTID';\n }\n\n var featureCollection = {\n type: 'FeatureCollection',\n features: []\n };\n var features = response.features || response.results;\n if(features.length){\n for (var i = features.length - 1; i >= 0; i--) {\n featureCollection.features.push(EsriLeaflet.Util.arcgisToGeojson(features[i], objectIdField));\n }\n }\n\n return featureCollection;\n };\n\n // trim url whitespace and add a trailing slash if needed\n EsriLeaflet.Util.cleanUrl = function(url){\n //trim leading and trailing spaces, but not spaces inside the url\n url = url.replace(/^\\s+|\\s+$|\\A\\s+|\\s+\\z/g, '');\n\n //add a trailing slash to the url if the user omitted it\n if(url[url.length-1] !== '/'){\n url += '/';\n }\n\n return url;\n };\n\n EsriLeaflet.Util.isArcgisOnline = function(url){\n /* hosted feature services can emit geojson natively.\n our check for 'geojson' support will need to be revisted\n once the functionality makes its way to ArcGIS Server*/\n return (/\\.arcgis\\.com.*?FeatureServer/g).test(url);\n };\n\n EsriLeaflet.Util.geojsonTypeToArcGIS = function (geoJsonType) {\n var arcgisGeometryType;\n switch (geoJsonType) {\n case 'Point':\n arcgisGeometryType = 'esriGeometryPoint';\n break;\n case 'MultiPoint':\n arcgisGeometryType = 'esriGeometryMultipoint';\n break;\n case 'LineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'MultiLineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'Polygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n case 'MultiPolygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n }\n return arcgisGeometryType;\n };\n\n EsriLeaflet.Util.requestAnimationFrame = L.Util.bind(raf, window);\n\n EsriLeaflet.Util.warn = function (message) {\n if(console && console.warn) {\n console.warn(message);\n }\n };\n\n})(EsriLeaflet);","(function(EsriLeaflet){\n\n var callbacks = 0;\n\n window._EsriLeafletCallbacks = {};\n\n function serialize(params){\n var data = '';\n\n params.f = params.f || 'json';\n\n for (var key in params){\n if(params.hasOwnProperty(key)){\n var param = params[key];\n var type = Object.prototype.toString.call(param);\n var value;\n\n if(data.length){\n data += '&';\n }\n\n if (type === '[object Array]'){\n value = (Object.prototype.toString.call(param[0]) === '[object Object]') ? JSON.stringify(param) : param.join(',');\n } else if (type === '[object Object]') {\n value = JSON.stringify(param);\n } else if (type === '[object Date]'){\n value = param.valueOf();\n } else {\n value = param;\n }\n\n data += encodeURIComponent(key) + '=' + encodeURIComponent(value);\n }\n }\n\n return data;\n }\n\n function createRequest(callback, context){\n var httpRequest = new XMLHttpRequest();\n\n httpRequest.onerror = function(e) {\n httpRequest.onreadystatechange = L.Util.falseFn;\n\n callback.call(context, {\n error: {\n code: 500,\n message: 'XMLHttpRequest error'\n }\n }, null);\n };\n\n httpRequest.onreadystatechange = function(){\n var response;\n var error;\n\n if (httpRequest.readyState === 4) {\n try {\n response = JSON.parse(httpRequest.responseText);\n } catch(e) {\n response = null;\n error = {\n code: 500,\n message: 'Could not parse response as JSON. This could also be caused by a CORS or XMLHttpRequest error.'\n };\n }\n\n if (!error && response.error) {\n error = response.error;\n response = null;\n }\n\n httpRequest.onerror = L.Util.falseFn;\n\n callback.call(context, error, response);\n }\n };\n\n return httpRequest;\n }\n\n // AJAX handlers for CORS (modern browsers) or JSONP (older browsers)\n EsriLeaflet.Request = {\n request: function(url, params, callback, context){\n var paramString = serialize(params);\n var httpRequest = createRequest(callback, context);\n var requestLength = (url + '?' + paramString).length;\n\n // request is less then 2000 characters and the browser supports CORS, make GET request with XMLHttpRequest\n if(requestLength <= 2000 && L.esri.Support.CORS){\n httpRequest.open('GET', url + '?' + paramString);\n httpRequest.send(null);\n\n // request is less more then 2000 characters and the browser supports CORS, make POST request with XMLHttpRequest\n } else if (requestLength > 2000 && L.esri.Support.CORS){\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(paramString);\n\n // request is less more then 2000 characters and the browser does not support CORS, make a JSONP request\n } else if(requestLength <= 2000 && !L.esri.Support.CORS){\n return L.esri.Request.get.JSONP(url, params, callback, context);\n\n // request is longer then 2000 characters and the browser does not support CORS, log a warning\n } else {\n EsriLeaflet.Util.warn('a request to ' + url + ' was longer then 2000 characters and this browser cannot make a cross-domain post request. Please use a proxy http://esri.github.io/esri-leaflet/api-reference/request.html');\n return;\n }\n\n return httpRequest;\n },\n\n post: {\n XMLHTTP: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(serialize(params));\n\n return httpRequest;\n }\n },\n\n get: {\n CORS: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n\n httpRequest.open('GET', url + '?' + serialize(params), true);\n httpRequest.send(null);\n\n return httpRequest;\n },\n JSONP: function(url, params, callback, context){\n var callbackId = 'c' + callbacks;\n\n params.callback = 'window._EsriLeafletCallbacks.' + callbackId;\n\n var script = L.DomUtil.create('script', null, document.body);\n script.type = 'text/javascript';\n script.src = url + '?' + serialize(params);\n script.id = callbackId;\n\n window._EsriLeafletCallbacks[callbackId] = function(response){\n if(window._EsriLeafletCallbacks[callbackId] !== true){\n var error;\n var responseType = Object.prototype.toString.call(response);\n\n if(!(responseType === '[object Object]' || responseType === '[object Array]')){\n error = {\n error: {\n code: 500,\n message: 'Expected array or object as JSONP response'\n }\n };\n response = null;\n }\n\n if (!error && response.error) {\n error = response;\n response = null;\n }\n\n callback.call(context, error, response);\n window._EsriLeafletCallbacks[callbackId] = true;\n }\n };\n\n callbacks++;\n\n return {\n id: callbackId,\n url: script.src,\n abort: function(){\n window._EsriLeafletCallbacks._callback[callbackId]({\n code: 0,\n message: 'Request aborted.'\n });\n }\n };\n }\n }\n };\n\n // choose the correct AJAX handler depending on CORS support\n EsriLeaflet.get = (EsriLeaflet.Support.CORS) ? EsriLeaflet.Request.get.CORS : EsriLeaflet.Request.get.JSONP;\n\n // always use XMLHttpRequest for posts\n EsriLeaflet.post = EsriLeaflet.Request.post.XMLHTTP;\n\n // expose a common request method the uses GET\\POST based on request length\n EsriLeaflet.request = EsriLeaflet.Request.request;\n\n})(EsriLeaflet);","EsriLeaflet.Services.Service = L.Class.extend({\n\n includes: L.Mixin.Events,\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n initialize: function (options) {\n options = options || {};\n this._requestQueue = [];\n this._authenticating = false;\n L.Util.setOptions(this, options);\n this.options.url = EsriLeaflet.Util.cleanUrl(this.options.url);\n },\n\n get: function (path, params, callback, context) {\n return this._request('get', path, params, callback, context);\n },\n\n post: function (path, params, callback, context) {\n return this._request('post', path, params, callback, context);\n },\n\n request: function (path, params, callback, context) {\n return this._request('request', path, params, callback, context);\n },\n\n metadata: function (callback, context) {\n return this._request('get', '', {}, callback, context);\n },\n\n authenticate: function(token){\n this._authenticating = false;\n this.options.token = token;\n this._runQueue();\n return this;\n },\n\n _request: function(method, path, params, callback, context){\n this.fire('requeststart', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n\n var wrappedCallback = this._createServiceCallback(method, path, params, callback, context);\n\n if (this.options.token) {\n params.token = this.options.token;\n }\n\n if (this._authenticating) {\n this._requestQueue.push([method, path, params, callback, context]);\n return;\n } else {\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, wrappedCallback);\n } else {\n return EsriLeaflet[method](url, params, wrappedCallback);\n }\n }\n },\n\n _createServiceCallback: function(method, path, params, callback, context){\n return L.Util.bind(function(error, response){\n\n if (error && (error.code === 499 || error.code === 498)) {\n this._authenticating = true;\n\n this._requestQueue.push([method, path, params, callback, context]);\n\n // fire an event for users to handle and re-authenticate\n this.fire('authenticationrequired', {\n authenticate: L.Util.bind(this.authenticate, this)\n });\n\n // if the user has access to a callback they can handle the auth error\n error.authenticate = L.Util.bind(this.authenticate, this);\n }\n\n callback.call(context, error, response);\n\n if(error) {\n this.fire('requesterror', {\n url: this.options.url + path,\n params: params,\n message: error.message,\n code: error.code,\n method: method\n });\n } else {\n this.fire('requestsuccess', {\n url: this.options.url + path,\n params: params,\n response: response,\n method: method\n });\n }\n\n this.fire('requestend', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n }, this);\n },\n\n _runQueue: function(){\n for (var i = this._requestQueue.length - 1; i >= 0; i--) {\n var request = this._requestQueue[i];\n var method = request.shift();\n this[method].apply(this, request);\n }\n this._requestQueue = [];\n }\n\n});\n\nEsriLeaflet.Services.service = function(params){\n return new EsriLeaflet.Services.Service(params);\n};\n","EsriLeaflet.Services.FeatureLayerService = EsriLeaflet.Services.Service.extend({\n\n options: {\n idAttribute: 'OBJECTID'\n },\n\n query: function(){\n return new EsriLeaflet.Tasks.Query(this);\n },\n\n addFeature: function(feature, callback, context) {\n delete feature.id;\n\n feature = EsriLeaflet.Util.geojsonToArcGIS(feature);\n\n return this.post('addFeatures', {\n features: [feature]\n }, function(error, response){\n var result = (response && response.addResults) ? response.addResults[0] : undefined;\n if(callback){\n callback.call(context, error || response.addResults[0].error, result);\n }\n }, context);\n },\n\n updateFeature: function(feature, callback, context) {\n feature = EsriLeaflet.Util.geojsonToArcGIS(feature, this.options.idAttribute);\n\n return this.post('updateFeatures', {\n features: [feature]\n }, function(error, response){\n var result = (response && response.updateResults) ? response.updateResults[0] : undefined;\n if(callback){\n callback.call(context, error || response.updateResults[0].error, result);\n }\n }, context);\n },\n\n deleteFeature: function(id, callback, context) {\n return this.post('deleteFeatures', {\n objectIds: id\n }, function(error, response){\n var result = (response && response.deleteResults) ? response.deleteResults[0] : undefined;\n if(callback){\n callback.call(context, error || response.deleteResults[0].error, result);\n }\n }, context);\n },\n\n deleteFeatures: function(ids, callback, context) {\n return this.post('deleteFeatures', {\n objectIds: ids\n }, function(error, response){\n // pass back the entire array\n var result = (response && response.deleteResults) ? response.deleteResults : undefined;\n if(callback){\n callback.call(context, error || response.deleteResults[0].error, result);\n }\n }, context);\n }\n});\n\nEsriLeaflet.Services.featureLayerService = function(options) {\n return new EsriLeaflet.Services.FeatureLayerService(options);\n};\n","EsriLeaflet.Services.MapService = EsriLeaflet.Services.Service.extend({\n\n identify: function () {\n return new EsriLeaflet.Tasks.identifyFeatures(this);\n },\n\n find: function () {\n return new EsriLeaflet.Tasks.Find(this);\n },\n\n query: function () {\n return new EsriLeaflet.Tasks.Query(this);\n }\n\n});\n\nEsriLeaflet.Services.mapService = function(params){\n return new EsriLeaflet.Services.MapService(params);\n};","EsriLeaflet.Services.ImageService = EsriLeaflet.Services.Service.extend({\n\n query: function () {\n return new EsriLeaflet.Tasks.Query(this);\n },\n\n identify: function() {\n return new EsriLeaflet.Tasks.IdentifyImage(this);\n }\n});\n\nEsriLeaflet.Services.imageService = function(params){\n return new EsriLeaflet.Services.ImageService(params);\n};","EsriLeaflet.Tasks.Task = L.Class.extend({\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n //Generate a method for each methodName:paramName in the setters for this task.\n generateSetter: function(param, context){\n return L.Util.bind(function(value){\n this.params[param] = value;\n return this;\n }, context);\n },\n\n initialize: function(endpoint){\n // endpoint can be either a url (and options) for an ArcGIS Rest Service or an instance of EsriLeaflet.Service\n if(endpoint.request && endpoint.options){\n this._service = endpoint;\n L.Util.setOptions(this, endpoint.options);\n } else {\n L.Util.setOptions(this, endpoint);\n this.options.url = L.esri.Util.cleanUrl(endpoint.url);\n }\n\n // clone default params into this object\n this.params = L.Util.extend({}, this.params || {});\n\n // generate setter methods based on the setters object implimented a child class\n if(this.setters){\n for (var setter in this.setters){\n var param = this.setters[setter];\n this[setter] = this.generateSetter(param, this);\n }\n }\n },\n\n token: function(token){\n if(this._service){\n this._service.authenticate(token);\n } else {\n this.params.token = token;\n }\n return this;\n },\n\n request: function(callback, context){\n if(this._service){\n return this._service.request(this.path, this.params, callback, context);\n } else {\n return this._request('request', this.path, this.params, callback, context);\n }\n },\n\n _request: function(method, path, params, callback, context){\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, callback, context);\n } else{\n return EsriLeaflet[method](url, params, callback, context);\n }\n }\n});","EsriLeaflet.Tasks.Query = EsriLeaflet.Tasks.Task.extend({\n setters: {\n 'offset': 'offset',\n 'limit': 'limit',\n 'fields': 'outFields',\n 'precision': 'geometryPrecision',\n 'featureIds': 'objectIds',\n 'returnGeometry': 'returnGeometry',\n 'token': 'token'\n },\n\n path: 'query',\n\n params: {\n returnGeometry: true,\n where: '1=1',\n outSr: 4326,\n outFields: '*'\n },\n\n within: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelContains'; // will make code read layer within geometry, to the api this will reads geometry contains layer\n return this;\n },\n\n intersects: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelIntersects';\n return this;\n },\n\n contains: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelWithin'; // will make code read layer contains geometry, to the api this will reads geometry within layer\n return this;\n },\n\n // crosses: function(geometry){\n // this._setGeometry(geometry);\n // this.params.spatialRel = 'esriSpatialRelCrosses';\n // return this;\n // },\n\n // touches: function(geometry){\n // this._setGeometry(geometry);\n // this.params.spatialRel = 'esriSpatialRelTouches';\n // return this;\n // },\n\n overlaps: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelOverlaps';\n return this;\n },\n\n // only valid for Feature Services running on ArcGIS Server 10.3 or ArcGIS Online\n nearby: function(latlng, radius){\n latlng = L.latLng(latlng);\n this.params.geometry = [latlng.lng, latlng.lat];\n this.params.geometryType = 'esriGeometryPoint';\n this.params.spatialRel = 'esriSpatialRelIntersects';\n this.params.units = 'esriSRUnit_Meter';\n this.params.distance = radius;\n this.params.inSr = 4326;\n return this;\n },\n\n where: function(string){\n // instead of converting double-quotes to single quotes, pass as is, and provide a more informative message if a 400 is encountered\n this.params.where = string;\n return this;\n },\n\n between: function(start, end){\n this.params.time = [start.valueOf(), end.valueOf()];\n return this;\n },\n\n simplify: function(map, factor){\n var mapWidth = Math.abs(map.getBounds().getWest() - map.getBounds().getEast());\n this.params.maxAllowableOffset = (mapWidth / map.getSize().y) * factor;\n return this;\n },\n\n orderBy: function(fieldName, order){\n order = order || 'ASC';\n this.params.orderByFields = (this.params.orderByFields) ? this.params.orderByFields + ',' : '';\n this.params.orderByFields += ([fieldName, order]).join(' ');\n return this;\n },\n\n run: function(callback, context){\n this._cleanParams();\n\n // if the service is hosted on arcgis online request geojson directly\n if(EsriLeaflet.Util.isArcgisOnline(this.options.url)){\n this.params.f = 'geojson';\n\n return this.request(function(error, response){\n this._trapSQLerrors(error);\n callback.call(context, error, response, response);\n }, this);\n\n // otherwise convert it in the callback then pass it on\n } else {\n return this.request(function(error, response){\n this._trapSQLerrors(error);\n callback.call(context, error, (response && EsriLeaflet.Util.responseToFeatureCollection(response)), response);\n }, this);\n }\n },\n\n count: function(callback, context){\n this._cleanParams();\n this.params.returnCountOnly = true;\n return this.request(function(error, response){\n callback.call(this, error, (response && response.count), response);\n }, context);\n },\n\n ids: function(callback, context){\n this._cleanParams();\n this.params.returnIdsOnly = true;\n return this.request(function(error, response){\n callback.call(this, error, (response && response.objectIds), response);\n }, context);\n },\n\n // only valid for Feature Services running on ArcGIS Server 10.3 or ArcGIS Online\n bounds: function(callback, context){\n this._cleanParams();\n this.params.returnExtentOnly = true;\n return this.request(function(error, response){\n callback.call(context, error, (response && response.extent && EsriLeaflet.Util.extentToBounds(response.extent)), response);\n }, context);\n },\n\n // only valid for image services\n pixelSize: function(point){\n point = L.point(point);\n this.params.pixelSize = [point.x,point.y];\n return this;\n },\n\n // only valid for map services\n layer: function(layer){\n this.path = layer + '/query';\n return this;\n },\n\n _trapSQLerrors: function(error){\n if (error){\n if (error.code === '400'){\n EsriLeaflet.Util.warn('one common syntax error in query requests is encasing string values in double quotes instead of single quotes');\n }\n }\n },\n\n _cleanParams: function(){\n delete this.params.returnIdsOnly;\n delete this.params.returnExtentOnly;\n delete this.params.returnCountOnly;\n },\n\n _setGeometry: function(geometry) {\n this.params.inSr = 4326;\n\n // convert bounds to extent and finish\n if ( geometry instanceof L.LatLngBounds ) {\n // set geometry + geometryType\n this.params.geometry = EsriLeaflet.Util.boundsToExtent(geometry);\n this.params.geometryType = 'esriGeometryEnvelope';\n return;\n }\n\n // convert L.Marker > L.LatLng\n if(geometry.getLatLng){\n geometry = geometry.getLatLng();\n }\n\n // convert L.LatLng to a geojson point and continue;\n if (geometry instanceof L.LatLng) {\n geometry = {\n type: 'Point',\n coordinates: [geometry.lng, geometry.lat]\n };\n }\n\n // handle L.GeoJSON, pull out the first geometry\n if ( geometry instanceof L.GeoJSON ) {\n //reassign geometry to the GeoJSON value (we are assuming that only one feature is present)\n geometry = geometry.getLayers()[0].feature.geometry;\n this.params.geometry = EsriLeaflet.Util.geojsonToArcGIS(geometry);\n this.params.geometryType = EsriLeaflet.Util.geojsonTypeToArcGIS(geometry.type);\n }\n\n // Handle L.Polyline and L.Polygon\n if (geometry.toGeoJSON) {\n geometry = geometry.toGeoJSON();\n }\n\n // handle GeoJSON feature by pulling out the geometry\n if ( geometry.type === 'Feature' ) {\n // get the geometry of the geojson feature\n geometry = geometry.geometry;\n }\n\n // confirm that our GeoJSON is a point, line or polygon\n if ( geometry.type === 'Point' || geometry.type === 'LineString' || geometry.type === 'Polygon') {\n this.params.geometry = EsriLeaflet.Util.geojsonToArcGIS(geometry);\n this.params.geometryType = EsriLeaflet.Util.geojsonTypeToArcGIS(geometry.type);\n return;\n }\n\n // warn the user if we havn't found a\n /* global console */\n EsriLeaflet.Util.warn('invalid geometry passed to spatial query. Should be an L.LatLng, L.LatLngBounds or L.Marker or a GeoJSON Point Line or Polygon object');\n\n return;\n }\n});\n\nEsriLeaflet.Tasks.query = function(params){\n return new EsriLeaflet.Tasks.Query(params);\n};","EsriLeaflet.Tasks.Find = EsriLeaflet.Tasks.Task.extend({\n setters: {\n // method name > param name\n 'contains': 'contains',\n 'text': 'searchText',\n 'fields': 'searchFields', // denote an array or single string\n 'spatialReference': 'sr',\n 'sr': 'sr',\n 'layers': 'layers',\n 'returnGeometry': 'returnGeometry',\n 'maxAllowableOffset': 'maxAllowableOffset',\n 'precision': 'geometryPrecision',\n 'dynamicLayers': 'dynamicLayers',\n 'returnZ' : 'returnZ',\n 'returnM' : 'returnM',\n 'gdbVersion' : 'gdbVersion',\n 'token' : 'token'\n },\n\n path: 'find',\n\n params: {\n sr: 4326,\n contains: true,\n returnGeometry: true,\n returnZ: true,\n returnM: false\n },\n\n layerDefs: function (id, where) {\n this.params.layerDefs = (this.params.layerDefs) ? this.params.layerDefs + ';' : '';\n this.params.layerDefs += ([id, where]).join(':');\n return this;\n },\n\n simplify: function(map, factor){\n var mapWidth = Math.abs(map.getBounds().getWest() - map.getBounds().getEast());\n this.params.maxAllowableOffset = (mapWidth / map.getSize().y) * factor;\n return this;\n },\n\n run: function (callback, context) {\n return this.request(function(error, response){\n callback.call(context, error, (response && EsriLeaflet.Util.responseToFeatureCollection(response)), response);\n }, context);\n }\n});\n\nEsriLeaflet.Tasks.find = function (params) {\n return new EsriLeaflet.Tasks.Find(params);\n};","EsriLeaflet.Tasks.Identify = EsriLeaflet.Tasks.Task.extend({\n path: 'identify',\n\n between: function(start, end){\n this.params.time = [start.valueOf(), end.valueOf()];\n return this;\n }\n});\n","EsriLeaflet.Tasks.IdentifyImage = EsriLeaflet.Tasks.Identify.extend({\n setters: {\n 'setMosaicRule': 'mosaicRule',\n 'setRenderingRule': 'renderingRule',\n 'setPixelSize': 'pixelSize',\n 'returnCatalogItems': 'returnCatalogItems',\n 'returnGeometry': 'returnGeometry'\n },\n\n params: {\n returnGeometry: false\n },\n\n at: function(latlng){\n latlng = L.latLng(latlng);\n this.params.geometry = JSON.stringify({\n x: latlng.lng,\n y: latlng.lat,\n spatialReference:{\n wkid: 4326\n }\n });\n this.params.geometryType = 'esriGeometryPoint';\n return this;\n },\n\n getMosaicRule: function() {\n return this.params.mosaicRule;\n },\n\n getRenderingRule: function() {\n return this.params.renderingRule;\n },\n\n getPixelSize: function() {\n return this.params.pixelSize;\n },\n\n run: function (callback, context){\n return this.request(function(error, response){\n callback.call(context, error, (response && this._responseToGeoJSON(response)), response);\n }, this);\n },\n\n // get pixel data and return as geoJSON point\n // populate catalog items (if any)\n // merging in any catalogItemVisibilities as a propery of each feature\n _responseToGeoJSON: function(response) {\n var location = response.location;\n var catalogItems = response.catalogItems;\n var catalogItemVisibilities = response.catalogItemVisibilities;\n var geoJSON = {\n 'pixel': {\n 'type': 'Feature',\n 'geometry': {\n 'type': 'Point',\n 'coordinates': [location.x, location.y]\n },\n 'crs': {\n 'type': 'EPSG',\n 'properties': {\n 'code': location.spatialReference.wkid\n }\n },\n 'properties': {\n 'OBJECTID': response.objectId,\n 'name': response.name,\n 'value': response.value\n },\n 'id': response.objectId\n }\n };\n if (response.properties && response.properties.Values) {\n geoJSON.pixel.properties.values = response.properties.Values;\n }\n if (catalogItems && catalogItems.features) {\n geoJSON.catalogItems = EsriLeaflet.Util.responseToFeatureCollection(catalogItems);\n if (catalogItemVisibilities && catalogItemVisibilities.length === geoJSON.catalogItems.features.length) {\n for (var i = catalogItemVisibilities.length - 1; i >= 0; i--) {\n geoJSON.catalogItems.features[i].properties.catalogItemVisibility = catalogItemVisibilities[i];\n }\n }\n }\n return geoJSON;\n }\n\n});\n\nEsriLeaflet.Tasks.identifyImage = function(params){\n return new EsriLeaflet.Tasks.IdentifyImage(params);\n};","EsriLeaflet.Tasks.IdentifyFeatures = EsriLeaflet.Tasks.Identify.extend({\n setters: {\n 'layers': 'layers',\n 'precision': 'geometryPrecision',\n 'tolerance': 'tolerance',\n 'returnGeometry': 'returnGeometry'\n },\n\n params: {\n sr: 4326,\n layers: 'all',\n tolerance: 3,\n returnGeometry: true\n },\n\n on: function(map){\n var extent = EsriLeaflet.Util.boundsToExtent(map.getBounds());\n var size = map.getSize();\n this.params.imageDisplay = [size.x, size.y, 96];\n this.params.mapExtent = [extent.xmin, extent.ymin, extent.xmax, extent.ymax];\n return this;\n },\n\n at: function(latlng){\n latlng = L.latLng(latlng);\n this.params.geometry = [latlng.lng, latlng.lat];\n this.params.geometryType = 'esriGeometryPoint';\n return this;\n },\n\n layerDef: function (id, where){\n this.params.layerDefs = (this.params.layerDefs) ? this.params.layerDefs + ';' : '';\n this.params.layerDefs += ([id, where]).join(':');\n return this;\n },\n\n simplify: function(map, factor){\n var mapWidth = Math.abs(map.getBounds().getWest() - map.getBounds().getEast());\n this.params.maxAllowableOffset = (mapWidth / map.getSize().y) * (1 - factor);\n return this;\n },\n\n run: function (callback, context){\n return this.request(function(error, response){\n // immediately invoke with an error\n if(error) {\n callback.call(context, error, undefined, response);\n return;\n\n // ok no error lets just assume we have features...\n } else {\n var featureCollection = EsriLeaflet.Util.responseToFeatureCollection(response);\n response.results = response.results.reverse();\n for (var i = 0; i < featureCollection.features.length; i++) {\n var feature = featureCollection.features[i];\n feature.layerId = response.results[i].layerId;\n }\n callback.call(context, undefined, featureCollection, response);\n }\n });\n }\n});\n\nEsriLeaflet.Tasks.identifyFeatures = function(params){\n return new EsriLeaflet.Tasks.IdentifyFeatures(params);\n};","(function(EsriLeaflet){\n\n var tileProtocol = (window.location.protocol !== 'https:') ? 'http:' : 'https:';\n\n EsriLeaflet.Layers.BasemapLayer = L.TileLayer.extend({\n statics: {\n TILES: {\n Streets: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/{z}/{y}/{x}',\n attributionUrl: 'https://static.arcgis.com/attribution/World_Street_Map',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services'],\n attribution: 'Esri'\n }\n },\n Topographic: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/{z}/{y}/{x}',\n attributionUrl: 'https://static.arcgis.com/attribution/World_Topo_Map',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services'],\n attribution: 'Esri'\n }\n },\n Oceans: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/arcgis/rest/services/Ocean/World_Ocean_Base/MapServer/tile/{z}/{y}/{x}',\n attributionUrl: 'https://static.arcgis.com/attribution/Ocean_Basemap',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services'],\n attribution: 'Esri'\n }\n },\n OceansLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/arcgis/rest/services/Ocean/World_Ocean_Reference/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services']\n }\n },\n NationalGeographic: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services'],\n attribution: 'Esri'\n }\n },\n DarkGray: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Dark_Gray_Base/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services'],\n attribution: 'Esri, DeLorme, HERE'\n }\n },\n DarkGrayLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Dark_Gray_Reference/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services']\n }\n },\n Gray: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services'],\n attribution: 'Esri, NAVTEQ, DeLorme'\n }\n },\n GrayLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Reference/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services']\n }\n },\n Imagery: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services'],\n attribution: 'Esri, DigitalGlobe, GeoEye, i-cubed, USDA, USGS, AEX, Getmapping, Aerogrid, IGN, IGP, swisstopo, and the GIS User Community'\n }\n },\n ImageryLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Boundaries_and_Places/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services']\n }\n },\n ImageryTransportation: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Transportation/MapServer/tile/{z}/{y}/{x}',\n //pane: 'esri-label',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services']\n }\n },\n ShadedRelief: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Shaded_Relief/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 13,\n subdomains: ['server', 'services'],\n attribution: 'Esri, NAVTEQ, DeLorme'\n }\n },\n ShadedReliefLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Boundaries_and_Places_Alternate/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 12,\n subdomains: ['server', 'services']\n }\n },\n Terrain: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Terrain_Base/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 13,\n subdomains: ['server', 'services'],\n attribution: 'Esri, USGS, NOAA'\n }\n },\n TerrainLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Reference_Overlay/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 13,\n subdomains: ['server', 'services']\n }\n }\n }\n },\n initialize: function(key, options){\n var config;\n\n // set the config variable with the appropriate config object\n if (typeof key === 'object' && key.urlTemplate && key.options){\n config = key;\n } else if(typeof key === 'string' && EsriLeaflet.BasemapLayer.TILES[key]){\n config = EsriLeaflet.BasemapLayer.TILES[key];\n } else {\n throw new Error('L.esri.BasemapLayer: Invalid parameter. Use one of \"Streets\", \"Topographic\", \"Oceans\", \"OceansLabels\", \"NationalGeographic\", \"Gray\", \"GrayLabels\", \"DarkGray\", \"DarkGrayLabels\", \"Imagery\", \"ImageryLabels\", \"ImageryTransportation\", \"ShadedRelief\", \"ShadedReliefLabels\", \"Terrain\" or \"TerrainLabels\"');\n }\n\n // merge passed options into the config options\n var tileOptions = L.Util.extend(config.options, options);\n\n // call the initialize method on L.TileLayer to set everything up\n L.TileLayer.prototype.initialize.call(this, config.urlTemplate, L.Util.setOptions(this, tileOptions));\n\n // if this basemap requires dynamic attribution set it up\n if(config.attributionUrl){\n this._getAttributionData(config.attributionUrl);\n }\n this._logo = new EsriLeaflet.Controls.Logo({\n position: this.options.logoPosition\n });\n },\n onAdd: function(map){\n if(!this.options.hideLogo && !map._hasEsriLogo){\n this._logo.addTo(map);\n map._hasEsriLogo = true;\n }\n\n // if(this.options.pane && EsriLeaflet.Support.pointerEvents){\n // this._initPane();\n // }\n\n L.TileLayer.prototype.onAdd.call(this, map);\n\n map.on('moveend', this._updateMapAttribution, this);\n },\n onRemove: function(map){\n // check to make sure the logo hasn't already been removed\n if(!map._hasEsriLogo && this._logo && this._logo._container){\n map.removeControl(this._logo);\n map._hasEsriLogo = false;\n }\n\n L.TileLayer.prototype.onRemove.call(this, map);\n\n map.off('moveend', this._updateMapAttribution, this);\n },\n getAttribution:function(){\n var attribution = '' + this.options.attribution + ''/* + logo*/;\n return attribution;\n },\n // _initPane: function(){\n // if(!this._map.getPane(this.options.pane)){\n // var pane = this._map.createPane(this.options.pane);\n // pane.style.pointerEvents = 'none';\n // pane.style.zIndex = 5;\n // }\n // },\n _getAttributionData: function(url){\n L.esri.Request.get.JSONP(url, {}, L.Util.bind(function(error, attributions){\n this._attributions = [];\n\n for (var c = 0; c < attributions.contributors.length; c++) {\n var contributor = attributions.contributors[c];\n for (var i = 0; i < contributor.coverageAreas.length; i++) {\n var coverageArea = contributor.coverageAreas[i];\n var southWest = new L.LatLng(coverageArea.bbox[0], coverageArea.bbox[1]);\n var northEast = new L.LatLng(coverageArea.bbox[2], coverageArea.bbox[3]);\n this._attributions.push({\n attribution: contributor.attribution,\n score: coverageArea.score,\n bounds: new L.LatLngBounds(southWest, northEast),\n minZoom: coverageArea.zoomMin,\n maxZoom: coverageArea.zoomMax\n });\n }\n }\n\n this._attributions.sort(function(a, b){\n return b.score - a.score;\n });\n\n this._updateMapAttribution();\n }, this));\n },\n _updateMapAttribution: function(){\n if(this._map && this._map.attributionControl && this._attributions){\n var newAttributions = '';\n var bounds = this._map.getBounds();\n var zoom = this._map.getZoom();\n\n for (var i = 0; i < this._attributions.length; i++) {\n var attribution = this._attributions[i];\n var text = attribution.attribution;\n if(!newAttributions.match(text) && bounds.intersects(attribution.bounds) && zoom >= attribution.minZoom && zoom <= attribution.maxZoom) {\n newAttributions += (', ' + text);\n }\n }\n newAttributions = newAttributions.substr(2);\n var attributionElement = this._map.attributionControl._container.querySelector('.esri-attributions');\n attributionElement.innerHTML = newAttributions;\n attributionElement.style.maxWidth = (this._map.getSize().x * 0.65) + 'px';\n this.fire('attributionupdated', {\n attribution: newAttributions\n });\n }\n }\n });\n\n EsriLeaflet.BasemapLayer = EsriLeaflet.Layers.BasemapLayer;\n\n EsriLeaflet.Layers.basemapLayer = function(key, options){\n return new EsriLeaflet.Layers.BasemapLayer(key, options);\n };\n\n EsriLeaflet.basemapLayer = function(key, options){\n return new EsriLeaflet.Layers.BasemapLayer(key, options);\n };\n\n})(EsriLeaflet);","EsriLeaflet.Layers.RasterLayer = L.Class.extend({\n includes: L.Mixin.Events,\n\n options: {\n opacity: 1,\n position: 'front',\n f: 'image'\n },\n\n onAdd: function (map) {\n this._map = map;\n\n this._update = L.Util.limitExecByInterval(this._update, this.options.updateInterval, this);\n\n if (map.options.crs && map.options.crs.code) {\n var sr = map.options.crs.code.split(':')[1];\n this.options.bboxSR = sr;\n this.options.imageSR = sr;\n }\n\n map.on('moveend', this._update, this);\n\n // if we had an image loaded and it matches the\n // current bounds show the image otherwise remove it\n if(this._currentImage && this._currentImage._bounds.equals(this._map.getBounds())){\n map.addLayer(this._currentImage);\n } else if(this._currentImage) {\n this._map.removeLayer(this._currentImage);\n this._currentImage = null;\n }\n\n this._update();\n\n if(this._popup){\n this._map.on('click', this._getPopupData, this);\n this._map.on('dblclick', this._resetPopupState, this);\n }\n },\n\n bindPopup: function(fn, popupOptions){\n this._shouldRenderPopup = false;\n this._lastClick = false;\n this._popup = L.popup(popupOptions);\n this._popupFunction = fn;\n if(this._map){\n this._map.on('click', this._getPopupData, this);\n this._map.on('dblclick', this._resetPopupState, this);\n }\n return this;\n },\n\n unbindPopup: function(){\n if(this._map){\n this._map.closePopup(this._popup);\n this._map.off('click', this._getPopupData, this);\n this._map.off('dblclick', this._resetPopupState, this);\n }\n this._popup = false;\n return this;\n },\n\n onRemove: function (map) {\n if (this._currentImage) {\n this._map.removeLayer(this._currentImage);\n }\n\n if(this._popup){\n this._map.off('click', this._getPopupData, this);\n this._map.off('dblclick', this._resetPopupState, this);\n }\n\n this._map.off('moveend', this._update, this);\n this._map = null;\n },\n\n addTo: function(map){\n map.addLayer(this);\n return this;\n },\n\n removeFrom: function(map){\n map.removeLayer(this);\n return this;\n },\n\n bringToFront: function(){\n this.options.position = 'front';\n if(this._currentImage){\n this._currentImage.bringToFront();\n }\n return this;\n },\n\n bringToBack: function(){\n this.options.position = 'back';\n if(this._currentImage){\n this._currentImage.bringToBack();\n }\n return this;\n },\n\n getAttribution: function () {\n return this.options.attribution;\n },\n\n getOpacity: function(){\n return this.options.opacity;\n },\n\n setOpacity: function(opacity){\n this.options.opacity = opacity;\n this._currentImage.setOpacity(opacity);\n return this;\n },\n\n getTimeRange: function(){\n return [this.options.from, this.options.to];\n },\n\n setTimeRange: function(from, to){\n this.options.from = from;\n this.options.to = to;\n this._update();\n return this;\n },\n\n metadata: function(callback, context){\n this._service.metadata(callback, context);\n return this;\n },\n\n authenticate: function(token){\n this._service.authenticate(token);\n return this;\n },\n\n _renderImage: function(url, bounds){\n if(this._map){\n // create a new image overlay and add it to the map\n // to start loading the image\n // opacity is 0 while the image is loading\n var image = new L.ImageOverlay(url, bounds, {\n opacity: 0\n }).addTo(this._map);\n\n // once the image loads\n image.once('load', function(e){\n var newImage = e.target;\n var oldImage = this._currentImage;\n\n // if the bounds of this image matches the bounds that\n // _renderImage was called with and we have a map with the same bounds\n // hide the old image if there is one and set the opacity\n // of the new image otherwise remove the new image\n if(newImage._bounds.equals(bounds) && newImage._bounds.equals(this._map.getBounds())){\n this._currentImage = newImage;\n\n if(this.options.position === 'front'){\n this.bringToFront();\n } else {\n this.bringToBack();\n }\n\n if(this._map && this._currentImage._map){\n this._currentImage.setOpacity(this.options.opacity);\n } else {\n this._currentImage._map.removeLayer(this._currentImage);\n }\n\n if(oldImage && this._map) {\n this._map.removeLayer(oldImage);\n }\n\n if(oldImage && oldImage._map){\n oldImage._map.removeLayer(oldImage);\n }\n } else {\n this._map.removeLayer(newImage);\n }\n\n this.fire('load', {\n bounds: bounds\n });\n\n }, this);\n\n this.fire('loading', {\n bounds: bounds\n });\n }\n },\n\n _update: function () {\n if(!this._map){\n return;\n }\n\n var zoom = this._map.getZoom();\n var bounds = this._map.getBounds();\n\n if(this._animatingZoom){\n return;\n }\n\n if (this._map._panTransition && this._map._panTransition._inProgress) {\n return;\n }\n\n if (zoom > this.options.maxZoom || zoom < this.options.minZoom) {\n return;\n }\n var params = this._buildExportParams();\n\n this._requestExport(params, bounds);\n },\n\n // TODO: refactor these into raster layer\n _renderPopup: function(latlng, error, results, response){\n latlng = L.latLng(latlng);\n if(this._shouldRenderPopup && this._lastClick.equals(latlng)){\n //add the popup to the map where the mouse was clicked at\n var content = this._popupFunction(error, results, response);\n if (content) {\n this._popup.setLatLng(latlng).setContent(content).openOn(this._map);\n }\n }\n },\n\n _resetPopupState: function(e){\n this._shouldRenderPopup = false;\n this._lastClick = e.latlng;\n },\n\n // from https://github.com/Leaflet/Leaflet/blob/v0.7.2/src/layer/FeatureGroup.js\n // @TODO remove at Leaflet 0.8\n _propagateEvent: function (e) {\n e = L.extend({\n layer: e.target,\n target: this\n }, e);\n this.fire(e.type, e);\n }\n});\n","EsriLeaflet.Layers.DynamicMapLayer = EsriLeaflet.Layers.RasterLayer.extend({\n\n options: {\n updateInterval: 150,\n layers: false,\n layerDefs: false,\n timeOptions: false,\n format: 'png24',\n transparent: true,\n f: 'json'\n },\n\n initialize: function (options) {\n options.url = EsriLeaflet.Util.cleanUrl(options.url);\n this._service = new EsriLeaflet.Services.MapService(options);\n this._service.on('authenticationrequired requeststart requestend requesterror requestsuccess', this._propagateEvent, this);\n if ((options.proxy || options.token) && options.f !== 'json'){\n options.f = 'json';\n }\n L.Util.setOptions(this, options);\n },\n\n getDynamicLayers: function(){\n return this.options.dynamicLayers;\n },\n\n setDynamicLayers: function(dynamicLayers){\n this.options.dynamicLayers = dynamicLayers;\n this._update();\n return this;\n },\n\n getLayers: function(){\n return this.options.layers;\n },\n\n setLayers: function(layers){\n this.options.layers = layers;\n this._update();\n return this;\n },\n\n getLayerDefs: function(){\n return this.options.layerDefs;\n },\n\n setLayerDefs: function(layerDefs){\n this.options.layerDefs = layerDefs;\n this._update();\n return this;\n },\n\n getTimeOptions: function(){\n return this.options.timeOptions;\n },\n\n setTimeOptions: function(timeOptions){\n this.options.timeOptions = timeOptions;\n this._update();\n return this;\n },\n\n query: function(){\n return this._service.query();\n },\n\n identify: function(){\n return this._service.identify();\n },\n\n find: function(){\n return this._service.find();\n },\n\n _getPopupData: function(e){\n var callback = L.Util.bind(function(error, featureCollection, response) {\n if(error) { return; } // we really can't do anything here but authenticate or requesterror will fire\n setTimeout(L.Util.bind(function(){\n this._renderPopup(e.latlng, error, featureCollection, response);\n }, this), 300);\n }, this);\n\n var identifyRequest = this.identify().on(this._map).at(e.latlng);\n\n if(this.options.layers){\n identifyRequest.layers('visible:' + this.options.layers.join(','));\n } else {\n identifyRequest.layers('visible');\n }\n\n identifyRequest.run(callback);\n\n // set the flags to show the popup\n this._shouldRenderPopup = true;\n this._lastClick = e.latlng;\n },\n\n _buildExportParams: function () {\n var bounds = this._map.getBounds();\n var size = this._map.getSize();\n var ne = this._map.options.crs.project(bounds._northEast);\n var sw = this._map.options.crs.project(bounds._southWest);\n\n //ensure that we don't ask ArcGIS Server for a taller image than we have actual map displaying\n var top = this._map.latLngToLayerPoint(bounds._northEast);\n var bottom = this._map.latLngToLayerPoint(bounds._southWest);\n\n if (top.y > 0 || bottom.y < size.y){\n size.y = bottom.y - top.y;\n }\n\n var params = {\n bbox: [sw.x, sw.y, ne.x, ne.y].join(','),\n size: size.x + ',' + size.y,\n dpi: 96,\n format: this.options.format,\n transparent: this.options.transparent,\n bboxSR: this.options.bboxSR,\n imageSR: this.options.imageSR\n };\n\n if(this.options.dynamicLayers){\n params.dynamicLayers = this.options.dynamicLayers;\n }\n\n if(this.options.layers){\n params.layers = 'show:' + this.options.layers.join(',');\n }\n\n if(this.options.layerDefs){\n params.layerDefs = JSON.stringify(this.options.layerDefs);\n }\n\n if(this.options.timeOptions){\n params.timeOptions = JSON.stringify(this.options.timeOptions);\n }\n\n if(this.options.from && this.options.to){\n params.time = this.options.from.valueOf() + ',' + this.options.to.valueOf();\n }\n\n if(this._service.options.token) {\n params.token = this._service.options.token;\n }\n\n return params;\n },\n\n _requestExport: function (params, bounds) {\n if(this.options.f === 'json'){\n this._service.request('export', params, function(error, response){\n if(error) { return; } // we really can't do anything here but authenticate or requesterror will fire\n this._renderImage(response.href, bounds);\n }, this);\n } else {\n params.f = 'image';\n this._renderImage(this.options.url + 'export' + L.Util.getParamString(params), bounds);\n }\n }\n});\n\nEsriLeaflet.DynamicMapLayer = EsriLeaflet.Layers.DynamicMapLayer;\n\nEsriLeaflet.Layers.dynamicMapLayer = function(options){\n return new EsriLeaflet.Layers.DynamicMapLayer(options);\n};\n\nEsriLeaflet.dynamicMapLayer = function(options){\n return new EsriLeaflet.Layers.DynamicMapLayer(options);\n};\n","EsriLeaflet.Layers.ImageMapLayer = EsriLeaflet.Layers.RasterLayer.extend({\n\n options: {\n updateInterval: 150,\n format: 'jpgpng',\n transparent: true,\n f: 'json'\n },\n\n query: function(){\n return this._service.query();\n },\n\n identify: function(){\n return this._service.identify();\n },\n\n initialize: function (options) {\n options.url = EsriLeaflet.Util.cleanUrl(options.url);\n this._service = new EsriLeaflet.Services.ImageService(options);\n this._service.on('authenticationrequired requeststart requestend requesterror requestsuccess', this._propagateEvent, this);\n L.Util.setOptions(this, options);\n },\n\n setPixelType: function (pixelType) {\n this.options.pixelType = pixelType;\n this._update();\n return this;\n },\n\n getPixelType: function () {\n return this.options.pixelType;\n },\n\n setBandIds: function (bandIds) {\n if (L.Util.isArray(bandIds)) {\n this.options.bandIds = bandIds.join(',');\n } else {\n this.options.bandIds = bandIds.toString();\n }\n this._update();\n return this;\n },\n\n getBandIds: function () {\n return this.options.bandIds;\n },\n\n setNoData: function (noData, noDataInterpretation) {\n if (L.Util.isArray(noData)) {\n this.options.noData = noData.join(',');\n } else {\n this.options.noData = noData.toString();\n }\n if (noDataInterpretation) {\n this.options.noDataInterpretation = noDataInterpretation;\n }\n this._update();\n return this;\n },\n\n getNoData: function () {\n return this.options.noData;\n },\n\n getNoDataInterpretation: function () {\n return this.options.noDataInterpretation;\n },\n\n setRenderingRule: function(renderingRule) {\n this.options.renderingRule = renderingRule;\n this._update();\n },\n\n getRenderingRule: function() {\n return this.options.renderingRule;\n },\n\n setMosaicRule: function(mosaicRule) {\n this.options.mosaicRule = mosaicRule;\n this._update();\n },\n\n getMosaicRule: function() {\n return this.options.mosaicRule;\n },\n\n _getPopupData: function(e){\n var callback = L.Util.bind(function(error, results, response) {\n if(error) { return; } // we really can't do anything here but authenticate or requesterror will fire\n setTimeout(L.Util.bind(function(){\n this._renderPopup(e.latlng, error, results, response);\n }, this), 300);\n }, this);\n\n var identifyRequest = this.identify().at(e.latlng);\n\n // set mosaic rule for identify task if it is set for layer\n if (this.options.mosaicRule) {\n identifyRequest.setMosaicRule(this.options.mosaicRule);\n // @TODO: force return catalog items too?\n }\n\n // @TODO: set rendering rule? Not sure,\n // sometimes you want raw pixel values\n // if (this.options.renderingRule) {\n // identifyRequest.setRenderingRule(this.options.renderingRule);\n // }\n\n identifyRequest.run(callback);\n\n // set the flags to show the popup\n this._shouldRenderPopup = true;\n this._lastClick = e.latlng;\n },\n\n _buildExportParams: function () {\n var bounds = this._map.getBounds();\n var size = this._map.getSize();\n var ne = this._map.options.crs.project(bounds._northEast);\n var sw = this._map.options.crs.project(bounds._southWest);\n\n var params = {\n bbox: [sw.x, sw.y, ne.x, ne.y].join(','),\n size: size.x + ',' + size.y,\n format: this.options.format,\n transparent: this.options.transparent,\n bboxSR: this.options.bboxSR,\n imageSR: this.options.imageSR\n };\n\n if (this.options.from && this.options.to) {\n params.time = this.options.from.valueOf() + ',' + this.options.to.valueOf();\n }\n\n if (this.options.pixelType) {\n params.pixelType = this.options.pixelType;\n }\n\n if (this.options.interpolation) {\n params.interpolation = this.options.interpolation;\n }\n\n if (this.options.compressionQuality) {\n params.compressionQuality = this.options.compressionQuality;\n }\n\n if (this.options.bandIds) {\n params.bandIds = this.options.bandIds;\n }\n\n if (this.options.noData) {\n params.noData = this.options.noData;\n }\n\n if (this.options.noDataInterpretation) {\n params.noDataInterpretation = this.options.noDataInterpretation;\n }\n\n if (this._service.options.token) {\n params.token = this._service.options.token;\n }\n\n if(this.options.renderingRule) {\n params.renderingRule = JSON.stringify(this.options.renderingRule);\n }\n\n if(this.options.mosaicRule) {\n params.mosaicRule = JSON.stringify(this.options.mosaicRule);\n }\n\n return params;\n },\n\n _requestExport: function (params, bounds) {\n if (this.options.f === 'json') {\n this._service.request('exportImage', params, function(error, response){\n if(error) { return; } // we really can't do anything here but authenticate or requesterror will fire\n this._renderImage(response.href, bounds);\n }, this);\n } else {\n params.f = 'image';\n this._renderImage(this.options.url + 'exportImage' + L.Util.getParamString(params), bounds);\n }\n }\n});\n\nEsriLeaflet.ImageMapLayer = EsriLeaflet.Layers.ImageMapLayer;\n\nEsriLeaflet.Layers.imageMapLayer = function (options) {\n return new EsriLeaflet.Layers.ImageMapLayer(options);\n};\n\nEsriLeaflet.imageMapLayer = function (options) {\n return new EsriLeaflet.Layers.ImageMapLayer(options);\n};\n","EsriLeaflet.Layers.TiledMapLayer = L.TileLayer.extend({\n options: {\n zoomOffsetAllowance: 0.1,\n correctZoomLevels: true\n },\n\n statics: {\n MercatorZoomLevels: {\n '0':156543.03392799999,\n '1':78271.516963999893,\n '2':39135.758482000099,\n '3':19567.879240999901,\n '4':9783.9396204999593,\n '5':4891.9698102499797,\n '6':2445.9849051249898,\n '7':1222.9924525624899,\n '8':611.49622628138002,\n '9':305.74811314055802,\n '10':152.874056570411,\n '11':76.437028285073197,\n '12':38.218514142536598,\n '13':19.109257071268299,\n '14':9.5546285356341496,\n '15':4.7773142679493699,\n '16':2.38865713397468,\n '17':1.1943285668550501,\n '18':0.59716428355981699,\n '19':0.29858214164761698,\n '20':0.14929107082381,\n '21':0.07464553541191,\n '22':0.0373227677059525,\n '23':0.0186613838529763\n }\n },\n\n initialize: function(options){\n options.url = EsriLeaflet.Util.cleanUrl(options.url);\n options = L.Util.setOptions(this, options);\n\n // set the urls\n //this.url = L.esri.Util.cleanUrl(url);\n this.tileUrl = L.esri.Util.cleanUrl(options.url) + 'tile/{z}/{y}/{x}';\n this._service = new L.esri.Services.MapService(options);\n this._service.on('authenticationrequired requeststart requestend requesterror requestsuccess', this._propagateEvent, this);\n\n //if this is looking at the AGO tiles subdomain insert the subdomain placeholder\n if(this.tileUrl.match('://tiles.arcgisonline.com')){\n this.tileUrl = this.tileUrl.replace('://tiles.arcgisonline.com', '://tiles{s}.arcgisonline.com');\n options.subdomains = ['1', '2', '3', '4'];\n }\n\n if(this.options.token) {\n this.tileUrl += ('?token=' + this.options.token);\n }\n\n // init layer by calling TileLayers initialize method\n L.TileLayer.prototype.initialize.call(this, this.tileUrl, options);\n },\n\n getTileUrl: function (tilePoint) {\n return L.Util.template(this.tileUrl, L.extend({\n s: this._getSubdomain(tilePoint),\n z: this._lodMap[tilePoint.z] || tilePoint.z, // try lod map first, then just defualt to zoom level\n x: tilePoint.x,\n y: tilePoint.y\n }, this.options));\n },\n\n onAdd: function(map){\n if (!this._lodMap && this.options.correctZoomLevels) {\n this._lodMap = {}; // make sure we always have an lod map even if its empty\n this.metadata(function(error, metadata) {\n if(!error) {\n var sr = metadata.spatialReference.latestWkid || metadata.spatialReference.wkid;\n\n if (sr === 102100 || sr === 3857) {\n //create the zoom level data\n var arcgisLODs = metadata.tileInfo.lods;\n var correctResolutions = EsriLeaflet.Layers.TiledMapLayer.MercatorZoomLevels;\n\n for(var i = 0; i < arcgisLODs.length; i++) {\n var arcgisLOD = arcgisLODs[i];\n for(var ci in correctResolutions) {\n var correctRes = correctResolutions[ci];\n\n if(this._withinPercentage(arcgisLOD.resolution, correctRes, this.options.zoomOffsetAllowance)) {\n this._lodMap[ci] = arcgisLOD.level;\n break;\n }\n }\n }\n } else {\n EsriLeaflet.Util.warn('L.esri.TiledMapLayer is using a non-mercator spatial reference. Support may be available through Proj4Leaflet http://esri.github.io/esri-leaflet/examples/non-mercator-projection.html');\n }\n }\n\n L.TileLayer.prototype.onAdd.call(this, map);\n }, this);\n } else {\n L.TileLayer.prototype.onAdd.call(this, map);\n }\n },\n\n metadata: function(callback, context){\n this._service.metadata(callback, context);\n return this;\n },\n\n identify: function(){\n return this._service.identify();\n },\n\n authenticate: function(token){\n var tokenQs = '?token=' + token;\n this.tileUrl = (this.options.token) ? this.tileUrl.replace(/\\?token=(.+)/g, tokenQs) : this.tileUrl + tokenQs;\n this.options.token = token;\n this._service.authenticate(token);\n return this;\n },\n\n // from https://github.com/Leaflet/Leaflet/blob/v0.7.2/src/layer/FeatureGroup.js\n // @TODO remove at Leaflet 0.8\n _propagateEvent: function (e) {\n e = L.extend({\n layer: e.target,\n target: this\n }, e);\n this.fire(e.type, e);\n },\n\n _withinPercentage: function (a, b, percentage) {\n var diff = Math.abs((a/b) - 1);\n return diff < percentage;\n }\n});\n\nL.esri.TiledMapLayer = L.esri.Layers.tiledMapLayer;\n\nL.esri.Layers.tiledMapLayer = function(options){\n return new L.esri.Layers.TiledMapLayer(options);\n};\n\nL.esri.tiledMapLayer = function(options){\n return new L.esri.Layers.TiledMapLayer(options);\n};\n","EsriLeaflet.Layers.FeatureGrid = L.Class.extend({\n\n includes: L.Mixin.Events,\n\n options: {\n cellSize: 512,\n updateInterval: 150\n },\n\n initialize: function (options) {\n options = L.setOptions(this, options);\n },\n\n onAdd: function (map) {\n this._map = map;\n this._update = L.Util.limitExecByInterval(this._update, this.options.updateInterval, this);\n\n // @TODO remove for leaflet 0.8\n this._map.addEventListener(this.getEvents(), this);\n\n this._reset();\n this._update();\n },\n\n onRemove: function(){\n this._map.removeEventListener(this.getEvents(), this);\n this._removeCells();\n },\n\n getEvents: function () {\n var events = {\n viewreset: this._reset,\n moveend: this._update,\n zoomend : this._onZoom\n };\n\n return events;\n },\n\n addTo: function(map){\n map.addLayer(this);\n return this;\n },\n\n removeFrom: function(map){\n map.removeLayer(this);\n return this;\n },\n\n _onZoom : function () {\n var zoom = this._map.getZoom();\n\n if (zoom > this.options.maxZoom ||\n zoom < this.options.minZoom) {\n this.removeFrom(this._map);\n this._map.addEventListener('zoomend', this.getEvents().zoomend, this);\n } else if (!this._map.hasLayer(this)) {\n this._map.removeEventListener('zoomend', this.getEvents().zoomend, this);\n this.addTo(this._map);\n }\n\n },\n\n _reset: function () {\n this._removeCells();\n\n this._cells = {};\n this._activeCells = {};\n this._cellsToLoad = 0;\n this._cellsTotal = 0;\n\n // @TODO enable at Leaflet 0.8\n // this._cellNumBounds = this._getCellNumBounds();\n\n this._resetWrap();\n },\n\n _resetWrap: function () {\n var map = this._map,\n crs = map.options.crs;\n\n if (crs.infinite) { return; }\n\n var cellSize = this._getCellSize();\n\n if (crs.wrapLng) {\n this._wrapLng = [\n Math.floor(map.project([0, crs.wrapLng[0]]).x / cellSize),\n Math.ceil(map.project([0, crs.wrapLng[1]]).x / cellSize)\n ];\n }\n\n if (crs.wrapLat) {\n this._wrapLat = [\n Math.floor(map.project([crs.wrapLat[0], 0]).y / cellSize),\n Math.ceil(map.project([crs.wrapLat[1], 0]).y / cellSize)\n ];\n }\n },\n\n _getCellSize: function () {\n return this.options.cellSize;\n },\n\n _update: function () {\n if (!this._map) { return; }\n\n var bounds = this._map.getPixelBounds(),\n zoom = this._map.getZoom(),\n cellSize = this._getCellSize(),\n cellPadding = [cellSize/2,cellSize/2];\n // cellPadding = [0,0]\n\n if (zoom > this.options.maxZoom ||\n zoom < this.options.minZoom) { return; }\n\n // cell coordinates range for the current view\n var topLeft = bounds.min.subtract(cellPadding).divideBy(cellSize).floor();\n topLeft.x = Math.max(topLeft.x, 0);\n topLeft.y = Math.max(topLeft.y, 0);\n\n var cellBounds = L.bounds(topLeft, bounds.max.add(cellPadding).divideBy(cellSize).floor());\n\n // remove any present cells that are off the specified bounds\n this._removeOtherCells(cellBounds);\n this._addCells(cellBounds);\n },\n\n _addCells: function (bounds) {\n var queue = [],\n center = bounds.getCenter(),\n zoom = this._map.getZoom();\n\n var j, i, coords;\n // create a queue of coordinates to load cells from\n for (j = bounds.min.y; j <= bounds.max.y; j++) {\n for (i = bounds.min.x; i <= bounds.max.x; i++) {\n coords = new L.Point(i, j);\n coords.z = zoom;\n\n // @TODO enable at Leaflet 0.8\n // if (this._isValidCell(coords)) {\n // queue.push(coords);\n // }\n\n queue.push(coords);\n }\n }\n var cellsToLoad = queue.length;\n\n if (cellsToLoad === 0) { return; }\n\n this._cellsToLoad += cellsToLoad;\n this._cellsTotal += cellsToLoad;\n\n // sort cell queue to load cells in order of their distance to center\n queue.sort(function (a, b) {\n return a.distanceTo(center) - b.distanceTo(center);\n });\n\n for (i = 0; i < cellsToLoad; i++) {\n this._addCell(queue[i]);\n }\n },\n\n // @TODO enable at Leaflet 0.8\n // _isValidCell: function (coords) {\n // var crs = this._map.options.crs;\n\n // if (!crs.infinite) {\n // // don't load cell if it's out of bounds and not wrapped\n // var bounds = this._cellNumBounds;\n // if (\n // (!crs.wrapLng && (coords.x < bounds.min.x || coords.x > bounds.max.x)) ||\n // (!crs.wrapLat && (coords.y < bounds.min.y || coords.y > bounds.max.y))\n // ) {\n // return false;\n // }\n // }\n\n // if (!this.options.bounds) {\n // return true;\n // }\n\n // // don't load cell if it doesn't intersect the bounds in options\n // var cellBounds = this._cellCoordsToBounds(coords);\n // return L.latLngBounds(this.options.bounds).intersects(cellBounds);\n // },\n\n // converts cell coordinates to its geographical bounds\n _cellCoordsToBounds: function (coords) {\n var map = this._map,\n cellSize = this.options.cellSize,\n\n nwPoint = coords.multiplyBy(cellSize),\n sePoint = nwPoint.add([cellSize, cellSize]),\n\n // @TODO for Leaflet 0.8\n // nw = map.wrapLatLng(map.unproject(nwPoint, coords.z)),\n // se = map.wrapLatLng(map.unproject(sePoint, coords.z));\n\n nw = map.unproject(nwPoint, coords.z).wrap(),\n se = map.unproject(sePoint, coords.z).wrap();\n\n return new L.LatLngBounds(nw, se);\n },\n\n // converts cell coordinates to key for the cell cache\n _cellCoordsToKey: function (coords) {\n return coords.x + ':' + coords.y;\n },\n\n // converts cell cache key to coordiantes\n _keyToCellCoords: function (key) {\n var kArr = key.split(':'),\n x = parseInt(kArr[0], 10),\n y = parseInt(kArr[1], 10);\n\n return new L.Point(x, y);\n },\n\n // remove any present cells that are off the specified bounds\n _removeOtherCells: function (bounds) {\n for (var key in this._cells) {\n if (!bounds.contains(this._keyToCellCoords(key))) {\n this._removeCell(key);\n }\n }\n },\n\n _removeCell: function (key) {\n var cell = this._activeCells[key];\n if(cell){\n delete this._activeCells[key];\n\n if (this.cellLeave) {\n this.cellLeave(cell.bounds, cell.coords);\n }\n\n this.fire('cellleave', {\n bounds: cell.bounds,\n coords: cell.coords\n });\n }\n },\n\n _removeCells: function(){\n for (var key in this._cells) {\n var bounds = this._cells[key].bounds;\n var coords = this._cells[key].coords;\n\n if (this.cellLeave) {\n this.cellLeave(bounds, coords);\n }\n\n this.fire('cellleave', {\n bounds: bounds,\n coords: coords\n });\n }\n },\n\n _addCell: function (coords) {\n\n // wrap cell coords if necessary (depending on CRS)\n this._wrapCoords(coords);\n\n // generate the cell key\n var key = this._cellCoordsToKey(coords);\n\n // get the cell from the cache\n var cell = this._cells[key];\n // if this cell should be shown as isnt active yet (enter)\n\n if (cell && !this._activeCells[key]) {\n if (this.cellEnter) {\n this.cellEnter(cell.bounds, coords);\n }\n\n this.fire('cellenter', {\n bounds: cell.bounds,\n coords: coords\n });\n\n this._activeCells[key] = cell;\n }\n\n // if we dont have this cell in the cache yet (create)\n if (!cell) {\n cell = {\n coords: coords,\n bounds: this._cellCoordsToBounds(coords)\n };\n\n this._cells[key] = cell;\n this._activeCells[key] = cell;\n\n if(this.createCell){\n this.createCell(cell.bounds, coords);\n }\n\n this.fire('cellcreate', {\n bounds: cell.bounds,\n coords: coords\n });\n }\n },\n\n _wrapCoords: function (coords) {\n coords.x = this._wrapLng ? L.Util.wrapNum(coords.x, this._wrapLng) : coords.x;\n coords.y = this._wrapLat ? L.Util.wrapNum(coords.y, this._wrapLat) : coords.y;\n }\n\n // get the global cell coordinates range for the current zoom\n // @TODO enable at Leaflet 0.8\n // _getCellNumBounds: function () {\n // // @TODO for Leaflet 0.8\n // // var bounds = this._map.getPixelWorldBounds(),\n // // size = this._getCellSize();\n // //\n // // return bounds ? L.bounds(\n // // bounds.min.divideBy(size).floor(),\n // // bounds.max.divideBy(size).ceil().subtract([1, 1])) : null;\n // }\n\n});","(function(EsriLeaflet){\n\n EsriLeaflet.Layers.FeatureManager = EsriLeaflet.Layers.FeatureGrid.extend({\n\n /**\n * Options\n */\n\n options: {\n where: '1=1',\n fields: ['*'],\n from: false,\n to: false,\n timeField: false,\n timeFilterMode: 'server',\n simplifyFactor: 0,\n precision: 6\n },\n\n /**\n * Constructor\n */\n\n initialize: function (options) {\n EsriLeaflet.Layers.FeatureGrid.prototype.initialize.call(this, options);\n\n options.url = EsriLeaflet.Util.cleanUrl(options.url);\n options = L.setOptions(this, options);\n\n this._service = new EsriLeaflet.Services.FeatureLayerService(options);\n\n //use case insensitive regex to look for common fieldnames used for indexing\n /*global console */\n if (this.options.fields[0] !== '*'){\n var oidCheck = false;\n for (var i = 0; i < this.options.fields.length; i++){\n if (this.options.fields[i].match(/^(OBJECTID|FID|OID|ID)$/i)){\n oidCheck = true;\n }\n }\n if (oidCheck === false) {\n EsriLeaflet.Util.warn('no known esriFieldTypeOID field detected in fields Array. Please add an attribute field containing unique IDs to ensure the layer can be drawn correctly.');\n }\n }\n\n // Leaflet 0.8 change to new propagation\n this._service.on('authenticationrequired requeststart requestend requesterror requestsuccess', function (e) {\n e = L.extend({\n target: this\n }, e);\n this.fire(e.type, e);\n }, this);\n\n if(this.options.timeField.start && this.options.timeField.end){\n this._startTimeIndex = new BinarySearchIndex();\n this._endTimeIndex = new BinarySearchIndex();\n } else if(this.options.timeField){\n this._timeIndex = new BinarySearchIndex();\n }\n\n this._cache = {};\n this._currentSnapshot = []; // cache of what layers should be active\n this._activeRequests = 0;\n this._pendingRequests = [];\n },\n\n /**\n * Layer Interface\n */\n\n onAdd: function(map){\n return EsriLeaflet.Layers.FeatureGrid.prototype.onAdd.call(this, map);\n },\n\n onRemove: function(map){\n return EsriLeaflet.Layers.FeatureGrid.prototype.onRemove.call(this, map);\n },\n\n getAttribution: function () {\n return this.options.attribution;\n },\n\n /**\n * Feature Managment\n */\n\n createCell: function(bounds, coords){\n this._requestFeatures(bounds, coords);\n },\n\n _requestFeatures: function(bounds, coords, callback){\n this._activeRequests++;\n\n // our first active request fires loading\n if(this._activeRequests === 1){\n this.fire('loading', {\n bounds: bounds\n });\n }\n\n this._buildQuery(bounds).run(function(error, featureCollection, response){\n if(response && response.exceededTransferLimit){\n this.fire('drawlimitexceeded');\n }\n\n // no error, features\n if(!error && featureCollection && featureCollection.features.length && !this._removed){\n // schedule adding features until the next animation frame\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){\n this._addFeatures(featureCollection.features, coords);\n this._postProcessFeatures(bounds);\n }, this));\n }\n\n // no error, no features\n if (!error && featureCollection && !featureCollection.features.length) {\n this._postProcessFeatures(bounds);\n }\n\n if(callback){\n callback.call(this, error, featureCollection);\n }\n }, this);\n },\n\n _postProcessFeatures: function (bounds) {\n //deincriment the request counter now that we have processed features\n this._activeRequests--;\n\n // if there are no more active requests fire a load event for this view\n if(this._activeRequests <= 0){\n this.fire('load', {\n bounds: bounds\n });\n }\n },\n\n _cacheKey: function (coords){\n return coords.z + ':' + coords.x + ':' +coords.y;\n },\n\n _addFeatures: function(features, coords){\n var key = this._cacheKey(coords);\n this._cache[key] = this._cache[key] || [];\n\n for (var i = features.length - 1; i >= 0; i--) {\n var id = features[i].id;\n this._currentSnapshot.push(id);\n this._cache[key].push(id);\n /*\n should we refactor the code in FeatureManager.setWhere()\n so that we can reuse it to make sure that we remove features\n on the client that are removed from the service?\n */\n\n }\n\n if(this.options.timeField){\n this._buildTimeIndexes(features);\n }\n\n var zoom = this._map.getZoom();\n\n if (zoom > this.options.maxZoom ||\n zoom < this.options.minZoom) { return; }\n\n this.createLayers(features);\n },\n\n _buildQuery: function(bounds){\n var query = this._service.query()\n .intersects(bounds)\n .where(this.options.where)\n .fields(this.options.fields)\n .precision(this.options.precision);\n\n if(this.options.simplifyFactor){\n query.simplify(this._map, this.options.simplifyFactor);\n }\n\n if(this.options.timeFilterMode === 'server' && this.options.from && this.options.to){\n query.between(this.options.from, this.options.to);\n }\n\n return query;\n },\n\n /**\n * Where Methods\n */\n\n setWhere: function(where, callback, context){\n\n this.options.where = (where && where.length) ? where : '1=1';\n\n var oldSnapshot = [];\n var newSnapshot = [];\n var pendingRequests = 0;\n var mostRecentError = null;\n var requestCallback = L.Util.bind(function(error, featureCollection){\n pendingRequests--;\n\n if(error) {\n mostRecentError = error;\n }\n\n if(featureCollection){\n for (var i = featureCollection.features.length - 1; i >= 0; i--) {\n newSnapshot.push(featureCollection.features[i].id);\n }\n }\n\n if(pendingRequests <= 0) {\n this._currentSnapshot = newSnapshot;\n // delay adding features until the next animation frame\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function() {\n this.removeLayers(oldSnapshot);\n this.addLayers(newSnapshot);\n if(callback) {\n callback.call(context, mostRecentError);\n }\n }, this));\n }\n }, this);\n\n for (var i = this._currentSnapshot.length - 1; i >= 0; i--) {\n oldSnapshot.push(this._currentSnapshot[i]);\n }\n\n for(var key in this._activeCells){\n pendingRequests++;\n var coords = this._keyToCellCoords(key);\n var bounds = this._cellCoordsToBounds(coords);\n this._requestFeatures(bounds, key, requestCallback);\n }\n\n return this;\n },\n\n getWhere: function(){\n return this.options.where;\n },\n\n /**\n * Time Range Methods\n */\n\n getTimeRange: function(){\n return [this.options.from, this.options.to];\n },\n\n setTimeRange: function(from, to, callback, context){\n var oldFrom = this.options.from;\n var oldTo = this.options.to;\n var pendingRequests = 0;\n var mostRecentError = null;\n var requestCallback = L.Util.bind(function(error){\n if(error){\n mostRecentError = error;\n }\n\n this._filterExistingFeatures(oldFrom, oldTo, from, to);\n\n pendingRequests--;\n\n if(callback && pendingRequests <= 0){\n callback.call(context, mostRecentError);\n }\n }, this);\n\n this.options.from = from;\n this.options.to = to;\n\n this._filterExistingFeatures(oldFrom, oldTo, from, to);\n\n if(this.options.timeFilterMode === 'server') {\n for(var key in this._activeCells){\n pendingRequests++;\n var coords = this._keyToCellCoords(key);\n var bounds = this._cellCoordsToBounds(coords);\n this._requestFeatures(bounds, key, requestCallback);\n }\n }\n },\n\n refresh: function(){\n for(var key in this._activeCells){\n var coords = this._keyToCellCoords(key);\n var bounds = this._cellCoordsToBounds(coords);\n this._requestFeatures(bounds, key);\n }\n\n if(this.redraw){\n this.once('load', function(){\n this.eachFeature(function(layer){\n this._redraw(layer.feature.id);\n }, this);\n }, this);\n }\n },\n\n _filterExistingFeatures: function (oldFrom, oldTo, newFrom, newTo) {\n var layersToRemove = (oldFrom && oldTo) ? this._getFeaturesInTimeRange(oldFrom, oldTo) : this._currentSnapshot;\n var layersToAdd = this._getFeaturesInTimeRange(newFrom, newTo);\n\n if(layersToAdd.indexOf){\n for (var i = 0; i < layersToAdd.length; i++) {\n var shouldRemoveLayer = layersToRemove.indexOf(layersToAdd[i]);\n if(shouldRemoveLayer >= 0){\n layersToRemove.splice(shouldRemoveLayer, 1);\n }\n }\n }\n\n // schedule adding features until the next animation frame\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){\n this.removeLayers(layersToRemove);\n this.addLayers(layersToAdd);\n }, this));\n },\n\n _getFeaturesInTimeRange: function(start, end){\n var ids = [];\n var search;\n\n if(this.options.timeField.start && this.options.timeField.end){\n var startTimes = this._startTimeIndex.between(start, end);\n var endTimes = this._endTimeIndex.between(start, end);\n search = startTimes.concat(endTimes);\n } else {\n search = this._timeIndex.between(start, end);\n }\n\n for (var i = search.length - 1; i >= 0; i--) {\n ids.push(search[i].id);\n }\n\n return ids;\n },\n\n _buildTimeIndexes: function(geojson){\n var i;\n var feature;\n if(this.options.timeField.start && this.options.timeField.end){\n var startTimeEntries = [];\n var endTimeEntries = [];\n for (i = geojson.length - 1; i >= 0; i--) {\n feature = geojson[i];\n startTimeEntries.push( {\n id: feature.id,\n value: new Date(feature.properties[this.options.timeField.start])\n });\n endTimeEntries.push( {\n id: feature.id,\n value: new Date(feature.properties[this.options.timeField.end])\n });\n }\n this._startTimeIndex.bulkAdd(startTimeEntries);\n this._endTimeIndex.bulkAdd(endTimeEntries);\n } else {\n var timeEntries = [];\n for (i = geojson.length - 1; i >= 0; i--) {\n feature = geojson[i];\n timeEntries.push( {\n id: feature.id,\n value: new Date(feature.properties[this.options.timeField])\n });\n }\n\n this._timeIndex.bulkAdd(timeEntries);\n }\n },\n\n _featureWithinTimeRange: function(feature){\n if(!this.options.from || !this.options.to){\n return true;\n }\n\n var from = +this.options.from.valueOf();\n var to = +this.options.to.valueOf();\n\n if(typeof this.options.timeField === 'string'){\n var date = +feature.properties[this.options.timeField];\n return (date >= from) && (date <= to);\n }\n\n if(this.options.timeField.start && this.options.timeField.end){\n var startDate = +feature.properties[this.options.timeField.start];\n var endDate = +feature.properties[this.options.timeField.end];\n return ((startDate >= from) && (startDate <= to)) || ((endDate >= from) && (endDate <= to));\n }\n },\n\n /**\n * Service Methods\n */\n\n authenticate: function(token){\n this._service.authenticate(token);\n return this;\n },\n\n metadata: function(callback, context){\n this._service.metadata(callback, context);\n return this;\n },\n\n query: function(){\n return this._service.query();\n },\n\n _getMetadata: function(callback){\n if(this._metadata){\n var error;\n callback(error, this._metadata);\n } else {\n this.metadata(L.Util.bind(function(error, response) {\n this._metadata = response;\n callback(error, this._metadata);\n }, this));\n }\n },\n\n addFeature: function(feature, callback, context){\n this._getMetadata(L.Util.bind(function(error, metadata){\n this._service.addFeature(feature, L.Util.bind(function(error, response){\n if(!error){\n // assign ID from result to appropriate objectid field from service metadata\n feature.properties[metadata.objectIdField] = response.objectId;\n\n // we also need to update the geojson id for createLayers() to function\n feature.id = response.objectId;\n this.createLayers([feature]);\n }\n\n if(callback){\n callback.call(context, error, response);\n }\n }, this));\n }, this));\n },\n\n updateFeature: function(feature, callback, context){\n this._service.updateFeature(feature, function(error, response){\n if(!error){\n this.removeLayers([feature.id], true);\n this.createLayers([feature]);\n }\n\n if(callback){\n callback.call(context, error, response);\n }\n }, this);\n },\n\n deleteFeature: function(id, callback, context){\n this._service.deleteFeature(id, function(error, response){\n if(!error && response.objectId){\n this.removeLayers([response.objectId], true);\n }\n\n if(callback){\n callback.call(context, error, response);\n }\n }, this);\n },\n\n deleteFeatures: function(ids, callback, context){\n return this._service.deleteFeatures(ids, function(error, response){\n if(!error && response.length > 0){\n for (var i=0; i +query) {\n maxIndex = currentIndex - 1;\n } else {\n return currentIndex;\n }\n }\n\n return ~maxIndex;\n };\n\n BinarySearchIndex.prototype.sort = function(){\n this.values.sort(function(a, b) {\n return +b.value - +a.value;\n }).reverse();\n this.dirty = false;\n };\n\n BinarySearchIndex.prototype.between = function(start, end){\n if(this.dirty){\n this.sort();\n }\n\n var startIndex = this._query(start);\n var endIndex = this._query(end);\n\n if(startIndex === 0 && endIndex === 0){\n return [];\n }\n\n startIndex = Math.abs(startIndex);\n endIndex = (endIndex < 0) ? Math.abs(endIndex): endIndex + 1;\n\n return this.values.slice(startIndex, endIndex);\n };\n\n BinarySearchIndex.prototype.bulkAdd = function(items){\n this.dirty = true;\n this.values = this.values.concat(items);\n };\n\n})(EsriLeaflet);\n","EsriLeaflet.Layers.FeatureLayer = EsriLeaflet.Layers.FeatureManager.extend({\n\n statics: {\n EVENTS: 'click dblclick mouseover mouseout mousemove contextmenu popupopen popupclose'\n },\n\n options: {\n cacheLayers: true\n },\n\n /**\n * Constructor\n */\n\n initialize: function (options) {\n EsriLeaflet.Layers.FeatureManager.prototype.initialize.call(this, options);\n\n options = L.setOptions(this, options);\n\n this._layers = {};\n this._leafletIds = {};\n this._key = 'c'+(Math.random() * 1e9).toString(36).replace('.', '_');\n },\n\n /**\n * Layer Interface\n */\n\n onAdd: function(map){\n map.on('zoomstart zoomend', function(e){\n this._zooming = (e.type === 'zoomstart');\n }, this);\n this._removed = false;\n\n return EsriLeaflet.Layers.FeatureManager.prototype.onAdd.call(this, map);\n },\n\n onRemove: function(map){\n this._removed = true;\n for (var i in this._layers) {\n map.removeLayer(this._layers[i]);\n }\n\n return EsriLeaflet.Layers.FeatureManager.prototype.onRemove.call(this, map);\n },\n\n createNewLayer: function(geojson){\n // @TODO Leaflet 0.8\n //newLayer = L.GeoJSON.geometryToLayer(geojson, this.options);\n return L.GeoJSON.geometryToLayer(geojson, this.options.pointToLayer, L.GeoJSON.coordsToLatLng, this.options);\n },\n\n _updateLayer: function(layer, geojson){\n // convert the geojson coordinates into a Leaflet LatLng array/nested arrays\n // pass it to setLatLngs to update layer geometries\n var latlngs = [];\n var coordsToLatLng = this.options.coordsToLatLng || L.GeoJSON.coordsToLatLng;\n\n // copy new attributes, if present\n if (geojson.properties) {\n layer.feature.properties = geojson.properties;\n }\n\n switch(geojson.geometry.type){\n case 'Point':\n latlngs = L.GeoJSON.coordsToLatLng(geojson.geometry.coordinates);\n layer.setLatLng(latlngs);\n break;\n case 'LineString':\n latlngs = L.GeoJSON.coordsToLatLngs(geojson.geometry.coordinates, 0, coordsToLatLng);\n layer.setLatLngs(latlngs);\n break;\n case 'MultiLineString':\n latlngs = L.GeoJSON.coordsToLatLngs(geojson.geometry.coordinates, 1, coordsToLatLng);\n layer.setLatLngs(latlngs);\n break;\n case 'Polygon':\n latlngs = L.GeoJSON.coordsToLatLngs(geojson.geometry.coordinates, 1, coordsToLatLng);\n layer.setLatLngs(latlngs);\n break;\n case 'MultiPolygon':\n latlngs = L.GeoJSON.coordsToLatLngs(geojson.geometry.coordinates, 2, coordsToLatLng);\n layer.setLatLngs(latlngs);\n break;\n }\n },\n\n /**\n * Feature Management Methods\n */\n\n createLayers: function(features){\n for (var i = features.length - 1; i >= 0; i--) {\n\n var geojson = features[i];\n\n var layer = this._layers[geojson.id];\n var newLayer;\n\n if(layer && !this._map.hasLayer(layer)){\n this._map.addLayer(layer);\n }\n\n // update geomerty if neccessary\n if (layer && (layer.setLatLngs || layer.setLatLng)) {\n this._updateLayer(layer, geojson);\n }\n\n\n if(!layer){\n newLayer = this.createNewLayer(geojson);\n newLayer.feature = geojson;\n\n if (this.options.style) {\n newLayer._originalStyle = this.options.style;\n }\n\n // circleMarker check\n else if (newLayer.setStyle) {\n newLayer._originalStyle = newLayer.options;\n }\n\n newLayer._leaflet_id = this._key + '_' + geojson.id;\n\n this._leafletIds[newLayer._leaflet_id] = geojson.id;\n\n // bubble events from layers to this\n // @TODO Leaflet 0.8\n // newLayer.addEventParent(this);\n\n newLayer.on(EsriLeaflet.Layers.FeatureLayer.EVENTS, this._propagateEvent, this);\n\n // bind a popup if we have one\n if(this._popup && newLayer.bindPopup){\n newLayer.bindPopup(this._popup(newLayer.feature, newLayer), this._popupOptions);\n }\n\n if(this.options.onEachFeature){\n this.options.onEachFeature(newLayer.feature, newLayer);\n }\n\n // cache the layer\n this._layers[newLayer.feature.id] = newLayer;\n\n // style the layer\n this.resetStyle(newLayer.feature.id);\n\n this.fire('createfeature', {\n feature: newLayer.feature\n });\n\n // add the layer if it is within the time bounds or our layer is not time enabled\n if(!this.options.timeField || (this.options.timeField && this._featureWithinTimeRange(geojson)) ){\n this._map.addLayer(newLayer);\n }\n }\n }\n },\n\n addLayers: function(ids){\n for (var i = ids.length - 1; i >= 0; i--) {\n var layer = this._layers[ids[i]];\n if(layer){\n this.fire('addfeature', {\n feature: layer.feature\n });\n this._map.addLayer(layer);\n }\n }\n },\n\n removeLayers: function(ids, permanent){\n for (var i = ids.length - 1; i >= 0; i--) {\n var id = ids[i];\n var layer = this._layers[id];\n if(layer){\n this.fire('removefeature', {\n feature: layer.feature,\n permanent: permanent\n });\n this._map.removeLayer(layer);\n }\n if(layer && permanent){\n delete this._layers[id];\n }\n }\n },\n\n cellEnter: function(bounds, coords){\n if(!this._zooming){\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){\n var cacheKey = this._cacheKey(coords);\n var cellKey = this._cellCoordsToKey(coords);\n var layers = this._cache[cacheKey];\n if(this._activeCells[cellKey] && layers){\n this.addLayers(layers);\n }\n }, this));\n }\n },\n\n cellLeave: function(bounds, coords){\n if(!this._zooming){\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){\n var cacheKey = this._cacheKey(coords);\n var cellKey = this._cellCoordsToKey(coords);\n var layers = this._cache[cacheKey];\n var mapBounds = this._map.getBounds();\n if(!this._activeCells[cellKey] && layers){\n var removable = true;\n\n for (var i = 0; i < layers.length; i++) {\n var layer = this._layers[layers[i]];\n if(layer && layer.getBounds && mapBounds.intersects(layer.getBounds())){\n removable = false;\n }\n }\n\n if(removable){\n this.removeLayers(layers, !this.options.cacheLayers);\n }\n\n if(!this.options.cacheLayers && removable){\n delete this._cache[cacheKey];\n delete this._cells[cellKey];\n delete this._activeCells[cellKey];\n }\n }\n }, this));\n }\n },\n\n /**\n * Styling Methods\n */\n\n resetStyle: function (id) {\n var layer = this._layers[id];\n\n if(layer){\n this.setFeatureStyle(layer.feature.id, layer._originalStyle);\n }\n\n return this;\n },\n\n setStyle: function (style) {\n this.options.style = style;\n this.eachFeature(function (layer) {\n this.setFeatureStyle(layer.feature.id, style);\n }, this);\n return this;\n },\n\n setFeatureStyle: function (id, style) {\n var layer = this._layers[id];\n\n if (typeof style === 'function') {\n style = style(layer.feature);\n }\n\n if (!style && !layer.defaultOptions) {\n style = L.Path.prototype.options;\n style.fill = true; //not set by default\n }\n\n if (layer && layer.setStyle) {\n layer.setStyle(style);\n }\n\n return this;\n },\n\n /**\n * Popup Methods\n */\n\n bindPopup: function (fn, options) {\n this._popup = fn;\n this._popupOptions = options;\n for (var i in this._layers) {\n var layer = this._layers[i];\n var popupContent = this._popup(layer.feature, layer);\n layer.bindPopup(popupContent, options);\n }\n return this;\n },\n\n unbindPopup: function () {\n this._popup = false;\n for (var i in this._layers) {\n var layer = this._layers[i];\n if (layer.unbindPopup) {\n layer.unbindPopup();\n } else if (layer.getLayers) {\n var groupLayers = layer.getLayers();\n for (var j in groupLayers) {\n var gLayer = groupLayers[j];\n gLayer.unbindPopup();\n }\n }\n }\n return this;\n },\n\n /**\n * Utility Methods\n */\n\n eachFeature: function (fn, context) {\n for (var i in this._layers) {\n fn.call(context, this._layers[i]);\n }\n return this;\n },\n\n getFeature: function (id) {\n return this._layers[id];\n },\n\n bringToBack: function () {\n this.eachFeature(function (layer) {\n if(layer.bringToBack) {\n layer.bringToBack();\n }\n });\n },\n\n bringToFront: function () {\n this.eachFeature(function (layer) {\n if(layer.bringToFront) {\n layer.bringToFront();\n }\n });\n },\n\n redraw: function (id) {\n if (id) {\n this._redraw(id);\n }\n return this;\n },\n\n _redraw: function(id) {\n var layer = this._layers[id];\n var geojson = layer.feature;\n\n // if this looks like a marker\n if (layer && layer.setIcon && this.options.pointToLayer) {\n // update custom symbology, if necessary\n if (this.options.pointToLayer){\n var getIcon = this.options.pointToLayer(geojson, L.latLng(geojson.geometry.coordinates[1], geojson.geometry.coordinates[0]));\n var updatedIcon = getIcon.options.icon;\n layer.setIcon(updatedIcon);\n }\n }\n\n // looks like a vector marker (circleMarker)\n if (layer && layer.setStyle && this.options.pointToLayer) {\n var getStyle = this.options.pointToLayer(geojson, L.latLng(geojson.geometry.coordinates[1], geojson.geometry.coordinates[0]));\n var updatedStyle = getStyle.options;\n this.setFeatureStyle(geojson.id, updatedStyle);\n }\n\n // looks like a path (polygon/polyline)\n if(layer && layer.setStyle && this.options.style) {\n this.resetStyle(geojson.id);\n }\n },\n\n // from https://github.com/Leaflet/Leaflet/blob/v0.7.2/src/layer/FeatureGroup.js\n // @TODO remove at Leaflet 0.8\n _propagateEvent: function (e) {\n e.layer = this._layers[this._leafletIds[e.target._leaflet_id]];\n e.target = this;\n this.fire(e.type, e);\n }\n});\n\nEsriLeaflet.FeatureLayer = EsriLeaflet.Layers.FeatureLayer;\n\nEsriLeaflet.Layers.featureLayer = function(options){\n return new EsriLeaflet.Layers.FeatureLayer(options);\n};\n\nEsriLeaflet.featureLayer = function(options){\n return new EsriLeaflet.Layers.FeatureLayer(options);\n};\n","EsriLeaflet.Controls.Logo = L.Control.extend({\n options: {\n position: 'bottomright',\n marginTop: 0,\n marginLeft: 0,\n marginBottom: 0,\n marginRight: 0\n },\n\n onAdd: function () {\n var div = L.DomUtil.create('div', 'esri-leaflet-logo');\n div.style.marginTop = this.options.marginTop;\n div.style.marginLeft = this.options.marginLeft;\n div.style.marginBottom = this.options.marginBottom;\n div.style.marginRight = this.options.marginRight;\n div.innerHTML = this._adjustLogo(this._map._size);\n\n this._map.on('resize', function(e){\n div.innerHTML = this._adjustLogo(e.newSize);\n }, this);\n\n return div;\n },\n\n _adjustLogo: function (mapSize) {\n if (mapSize.x <= 600 || mapSize.y <= 600){\n return '\"Powered';\n }\n else {\n return '\"Powered';\n }\n }\n\n});\n\nEsriLeaflet.Controls.logo = function(options){\n return new L.esri.Controls.Logo(options);\n};\n"]} \ No newline at end of file +{"version":3,"sources":["../src/EsriLeaflet.js","../src/Util.js","../src/Request.js","../src/Services/Service.js","../src/Services/FeatureLayerService.js","../src/Services/MapService.js","../src/Services/ImageService.js","../src/Tasks/Task.js","../src/Tasks/Query.js","../src/Tasks/Find.js","../src/Tasks/Identify.js","../src/Tasks/IdentifyImage.js","../src/Tasks/IdentifyFeatures.js","../src/Layers/BasemapLayer.js","../src/Layers/RasterLayer.js","../src/Layers/DynamicMapLayer.js","../src/Layers/ImageMapLayer.js","../src/Layers/TiledMapLayer.js","../src/Layers/FeatureLayer/FeatureGrid.js","../src/Layers/FeatureLayer/FeatureManager.js","../src/Layers/FeatureLayer/FeatureLayer.js","../src/Controls/Logo.js"],"names":[],"mappings":"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","file":"esri-leaflet-src.js","sourcesContent":["var EsriLeaflet = { //jshint ignore:line\n VERSION: '1.0.3',\n Layers: {},\n Services: {},\n Controls: {},\n Tasks: {},\n Util: {},\n Support: {\n CORS: !!(window.XMLHttpRequest && 'withCredentials' in new XMLHttpRequest()),\n pointerEvents: document.documentElement.style.pointerEvents === ''\n }\n};\n\nif(typeof window !== 'undefined' && window.L){\n window.L.esri = EsriLeaflet;\n}\n","(function(EsriLeaflet){\n\n // normalize request animation frame\n var raf = window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.msRequestAnimationFrame ||\n function(cb) { return window.setTimeout(cb, 1000 / 60); };\n\n // shallow object clone for feature properties and attributes\n // from http://jsperf.com/cloning-an-object/2\n function clone(obj) {\n var target = {};\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n target[i] = obj[i];\n }\n }\n return target;\n }\n\n // checks if 2 x,y points are equal\n function pointsEqual(a, b) {\n for (var i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n\n // checks if the first and last points of a ring are equal and closes the ring\n function closeRing(coordinates) {\n if (!pointsEqual(coordinates[0], coordinates[coordinates.length - 1])) {\n coordinates.push(coordinates[0]);\n }\n return coordinates;\n }\n\n // determine if polygon ring coordinates are clockwise. clockwise signifies outer ring, counter-clockwise an inner ring\n // or hole. this logic was found at http://stackoverflow.com/questions/1165647/how-to-determine-if-a-list-of-polygon-\n // points-are-in-clockwise-order\n function ringIsClockwise(ringToTest) {\n var total = 0,i = 0;\n var rLength = ringToTest.length;\n var pt1 = ringToTest[i];\n var pt2;\n for (i; i < rLength - 1; i++) {\n pt2 = ringToTest[i + 1];\n total += (pt2[0] - pt1[0]) * (pt2[1] + pt1[1]);\n pt1 = pt2;\n }\n return (total >= 0);\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L504-L519\n function vertexIntersectsVertex(a1, a2, b1, b2) {\n var uaT = (b2[0] - b1[0]) * (a1[1] - b1[1]) - (b2[1] - b1[1]) * (a1[0] - b1[0]);\n var ubT = (a2[0] - a1[0]) * (a1[1] - b1[1]) - (a2[1] - a1[1]) * (a1[0] - b1[0]);\n var uB = (b2[1] - b1[1]) * (a2[0] - a1[0]) - (b2[0] - b1[0]) * (a2[1] - a1[1]);\n\n if ( uB !== 0 ) {\n var ua = uaT / uB;\n var ub = ubT / uB;\n\n if ( 0 <= ua && ua <= 1 && 0 <= ub && ub <= 1 ) {\n return true;\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L521-L531\n function arrayIntersectsArray(a, b) {\n for (var i = 0; i < a.length - 1; i++) {\n for (var j = 0; j < b.length - 1; j++) {\n if (vertexIntersectsVertex(a[i], a[i + 1], b[j], b[j + 1])) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L470-L480\n function coordinatesContainPoint(coordinates, point) {\n var contains = false;\n for(var i = -1, l = coordinates.length, j = l - 1; ++i < l; j = i) {\n if (((coordinates[i][1] <= point[1] && point[1] < coordinates[j][1]) ||\n (coordinates[j][1] <= point[1] && point[1] < coordinates[i][1])) &&\n (point[0] < (coordinates[j][0] - coordinates[i][0]) * (point[1] - coordinates[i][1]) / (coordinates[j][1] - coordinates[i][1]) + coordinates[i][0])) {\n contains = !contains;\n }\n }\n return contains;\n }\n\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L106-L113\n function coordinatesContainCoordinates(outer, inner){\n var intersects = arrayIntersectsArray(outer, inner);\n var contains = coordinatesContainPoint(outer, inner[0]);\n if(!intersects && contains){\n return true;\n }\n return false;\n }\n\n // do any polygons in this array contain any other polygons in this array?\n // used for checking for holes in arcgis rings\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L117-L172\n function convertRingsToGeoJSON(rings){\n var outerRings = [];\n var holes = [];\n var x; // iterator\n var outerRing; // current outer ring being evaluated\n var hole; // current hole being evaluated\n\n // for each ring\n for (var r = 0; r < rings.length; r++) {\n var ring = closeRing(rings[r].slice(0));\n if(ring.length < 4){\n continue;\n }\n // is this ring an outer ring? is it clockwise?\n if(ringIsClockwise(ring)){\n var polygon = [ ring ];\n outerRings.push(polygon); // push to outer rings\n } else {\n holes.push(ring); // counterclockwise push to holes\n }\n }\n\n var uncontainedHoles = [];\n\n // while there are holes left...\n while(holes.length){\n // pop a hole off out stack\n hole = holes.pop();\n\n // loop over all outer rings and see if they contain our hole.\n var contained = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(coordinatesContainCoordinates(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n contained = true;\n break;\n }\n }\n\n // ring is not contained in any outer ring\n // sometimes this happens https://github.com/Esri/esri-leaflet/issues/320\n if(!contained){\n uncontainedHoles.push(hole);\n }\n }\n\n // if we couldn't match any holes using contains we can try intersects...\n while(uncontainedHoles.length){\n // pop a hole off out stack\n hole = uncontainedHoles.pop();\n\n // loop over all outer rings and see if any intersect our hole.\n var intersects = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(arrayIntersectsArray(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n intersects = true;\n break;\n }\n }\n\n if(!intersects) {\n outerRings.push([hole.reverse()]);\n }\n }\n\n if(outerRings.length === 1){\n return {\n type: 'Polygon',\n coordinates: outerRings[0]\n };\n } else {\n return {\n type: 'MultiPolygon',\n coordinates: outerRings\n };\n }\n }\n\n // This function ensures that rings are oriented in the right directions\n // outer rings are clockwise, holes are counterclockwise\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function orientRings(poly){\n var output = [];\n var polygon = poly.slice(0);\n var outerRing = closeRing(polygon.shift().slice(0));\n if(outerRing.length >= 4){\n if(!ringIsClockwise(outerRing)){\n outerRing.reverse();\n }\n\n output.push(outerRing);\n\n for (var i = 0; i < polygon.length; i++) {\n var hole = closeRing(polygon[i].slice(0));\n if(hole.length >= 4){\n if(ringIsClockwise(hole)){\n hole.reverse();\n }\n output.push(hole);\n }\n }\n }\n\n return output;\n }\n\n // This function flattens holes in multipolygons to one array of polygons\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function flattenMultiPolygonRings(rings){\n var output = [];\n for (var i = 0; i < rings.length; i++) {\n var polygon = orientRings(rings[i]);\n for (var x = polygon.length - 1; x >= 0; x--) {\n var ring = polygon[x].slice(0);\n output.push(ring);\n }\n }\n return output;\n }\n\n // convert an extent (ArcGIS) to LatLngBounds (Leaflet)\n EsriLeaflet.Util.extentToBounds = function(extent){\n var sw = new L.LatLng(extent.ymin, extent.xmin);\n var ne = new L.LatLng(extent.ymax, extent.xmax);\n return new L.LatLngBounds(sw, ne);\n };\n\n // convert an LatLngBounds (Leaflet) to extent (ArcGIS)\n EsriLeaflet.Util.boundsToExtent = function(bounds) {\n bounds = L.latLngBounds(bounds);\n return {\n 'xmin': bounds.getSouthWest().lng,\n 'ymin': bounds.getSouthWest().lat,\n 'xmax': bounds.getNorthEast().lng,\n 'ymax': bounds.getNorthEast().lat,\n 'spatialReference': {\n 'wkid' : 4326\n }\n };\n };\n\n EsriLeaflet.Util.arcgisToGeojson = function (arcgis, idAttribute){\n var geojson = {};\n\n if(typeof arcgis.x === 'number' && typeof arcgis.y === 'number'){\n geojson.type = 'Point';\n geojson.coordinates = [arcgis.x, arcgis.y];\n }\n\n if(arcgis.points){\n geojson.type = 'MultiPoint';\n geojson.coordinates = arcgis.points.slice(0);\n }\n\n if(arcgis.paths) {\n if(arcgis.paths.length === 1){\n geojson.type = 'LineString';\n geojson.coordinates = arcgis.paths[0].slice(0);\n } else {\n geojson.type = 'MultiLineString';\n geojson.coordinates = arcgis.paths.slice(0);\n }\n }\n\n if(arcgis.rings) {\n geojson = convertRingsToGeoJSON(arcgis.rings.slice(0));\n }\n\n if(arcgis.geometry || arcgis.attributes) {\n geojson.type = 'Feature';\n geojson.geometry = (arcgis.geometry) ? EsriLeaflet.Util.arcgisToGeojson(arcgis.geometry) : null;\n geojson.properties = (arcgis.attributes) ? clone(arcgis.attributes) : null;\n if(arcgis.attributes) {\n geojson.id = arcgis.attributes[idAttribute] || arcgis.attributes.OBJECTID || arcgis.attributes.FID;\n }\n }\n\n return geojson;\n };\n\n // GeoJSON -> ArcGIS\n EsriLeaflet.Util.geojsonToArcGIS = function(geojson, idAttribute){\n idAttribute = idAttribute || 'OBJECTID';\n var spatialReference = { wkid: 4326 };\n var result = {};\n var i;\n\n switch(geojson.type){\n case 'Point':\n result.x = geojson.coordinates[0];\n result.y = geojson.coordinates[1];\n result.spatialReference = spatialReference;\n break;\n case 'MultiPoint':\n result.points = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'LineString':\n result.paths = [geojson.coordinates.slice(0)];\n result.spatialReference = spatialReference;\n break;\n case 'MultiLineString':\n result.paths = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'Polygon':\n result.rings = orientRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'MultiPolygon':\n result.rings = flattenMultiPolygonRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'Feature':\n if(geojson.geometry) {\n result.geometry = EsriLeaflet.Util.geojsonToArcGIS(geojson.geometry, idAttribute);\n }\n result.attributes = (geojson.properties) ? clone(geojson.properties) : {};\n if(geojson.id){\n result.attributes[idAttribute] = geojson.id;\n }\n break;\n case 'FeatureCollection':\n result = [];\n for (i = 0; i < geojson.features.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.features[i], idAttribute));\n }\n break;\n case 'GeometryCollection':\n result = [];\n for (i = 0; i < geojson.geometries.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.geometries[i], idAttribute));\n }\n break;\n }\n\n return result;\n };\n\n EsriLeaflet.Util.responseToFeatureCollection = function(response, idAttribute){\n var objectIdField;\n\n if(idAttribute){\n objectIdField = idAttribute;\n } else if(response.objectIdFieldName){\n objectIdField = response.objectIdFieldName;\n } else if(response.fields) {\n for (var j = 0; j <= response.fields.length - 1; j++) {\n if(response.fields[j].type === 'esriFieldTypeOID') {\n objectIdField = response.fields[j].name;\n break;\n }\n }\n } else {\n objectIdField = 'OBJECTID';\n }\n\n var featureCollection = {\n type: 'FeatureCollection',\n features: []\n };\n var features = response.features || response.results;\n if(features.length){\n for (var i = features.length - 1; i >= 0; i--) {\n featureCollection.features.push(EsriLeaflet.Util.arcgisToGeojson(features[i], objectIdField));\n }\n }\n\n return featureCollection;\n };\n\n // trim url whitespace and add a trailing slash if needed\n EsriLeaflet.Util.cleanUrl = function(url){\n //trim leading and trailing spaces, but not spaces inside the url\n url = url.replace(/^\\s+|\\s+$|\\A\\s+|\\s+\\z/g, '');\n\n //add a trailing slash to the url if the user omitted it\n if(url[url.length-1] !== '/'){\n url += '/';\n }\n\n return url;\n };\n\n EsriLeaflet.Util.isArcgisOnline = function(url){\n /* hosted feature services can emit geojson natively.\n our check for 'geojson' support will need to be revisted\n once the functionality makes its way to ArcGIS Server*/\n return (/\\.arcgis\\.com.*?FeatureServer/g).test(url);\n };\n\n EsriLeaflet.Util.geojsonTypeToArcGIS = function (geoJsonType) {\n var arcgisGeometryType;\n switch (geoJsonType) {\n case 'Point':\n arcgisGeometryType = 'esriGeometryPoint';\n break;\n case 'MultiPoint':\n arcgisGeometryType = 'esriGeometryMultipoint';\n break;\n case 'LineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'MultiLineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'Polygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n case 'MultiPolygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n }\n return arcgisGeometryType;\n };\n\n EsriLeaflet.Util.requestAnimationFrame = L.Util.bind(raf, window);\n\n EsriLeaflet.Util.warn = function (message) {\n if(console && console.warn) {\n console.warn(message);\n }\n };\n\n})(EsriLeaflet);","(function(EsriLeaflet){\n\n var callbacks = 0;\n\n window._EsriLeafletCallbacks = {};\n\n function serialize(params){\n var data = '';\n\n params.f = params.f || 'json';\n\n for (var key in params){\n if(params.hasOwnProperty(key)){\n var param = params[key];\n var type = Object.prototype.toString.call(param);\n var value;\n\n if(data.length){\n data += '&';\n }\n\n if (type === '[object Array]'){\n value = (Object.prototype.toString.call(param[0]) === '[object Object]') ? JSON.stringify(param) : param.join(',');\n } else if (type === '[object Object]') {\n value = JSON.stringify(param);\n } else if (type === '[object Date]'){\n value = param.valueOf();\n } else {\n value = param;\n }\n\n data += encodeURIComponent(key) + '=' + encodeURIComponent(value);\n }\n }\n\n return data;\n }\n\n function createRequest(callback, context){\n var httpRequest = new XMLHttpRequest();\n\n httpRequest.onerror = function(e) {\n httpRequest.onreadystatechange = L.Util.falseFn;\n\n callback.call(context, {\n error: {\n code: 500,\n message: 'XMLHttpRequest error'\n }\n }, null);\n };\n\n httpRequest.onreadystatechange = function(){\n var response;\n var error;\n\n if (httpRequest.readyState === 4) {\n try {\n response = JSON.parse(httpRequest.responseText);\n } catch(e) {\n response = null;\n error = {\n code: 500,\n message: 'Could not parse response as JSON. This could also be caused by a CORS or XMLHttpRequest error.'\n };\n }\n\n if (!error && response.error) {\n error = response.error;\n response = null;\n }\n\n httpRequest.onerror = L.Util.falseFn;\n\n callback.call(context, error, response);\n }\n };\n\n return httpRequest;\n }\n\n // AJAX handlers for CORS (modern browsers) or JSONP (older browsers)\n EsriLeaflet.Request = {\n request: function(url, params, callback, context){\n var paramString = serialize(params);\n var httpRequest = createRequest(callback, context);\n var requestLength = (url + '?' + paramString).length;\n\n // request is less then 2000 characters and the browser supports CORS, make GET request with XMLHttpRequest\n if(requestLength <= 2000 && L.esri.Support.CORS){\n httpRequest.open('GET', url + '?' + paramString);\n httpRequest.send(null);\n\n // request is less more then 2000 characters and the browser supports CORS, make POST request with XMLHttpRequest\n } else if (requestLength > 2000 && L.esri.Support.CORS){\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(paramString);\n\n // request is less more then 2000 characters and the browser does not support CORS, make a JSONP request\n } else if(requestLength <= 2000 && !L.esri.Support.CORS){\n return L.esri.Request.get.JSONP(url, params, callback, context);\n\n // request is longer then 2000 characters and the browser does not support CORS, log a warning\n } else {\n EsriLeaflet.Util.warn('a request to ' + url + ' was longer then 2000 characters and this browser cannot make a cross-domain post request. Please use a proxy http://esri.github.io/esri-leaflet/api-reference/request.html');\n return;\n }\n\n return httpRequest;\n },\n\n post: {\n XMLHTTP: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(serialize(params));\n\n return httpRequest;\n }\n },\n\n get: {\n CORS: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n\n httpRequest.open('GET', url + '?' + serialize(params), true);\n httpRequest.send(null);\n\n return httpRequest;\n },\n JSONP: function(url, params, callback, context){\n var callbackId = 'c' + callbacks;\n\n params.callback = 'window._EsriLeafletCallbacks.' + callbackId;\n\n var script = L.DomUtil.create('script', null, document.body);\n script.type = 'text/javascript';\n script.src = url + '?' + serialize(params);\n script.id = callbackId;\n\n window._EsriLeafletCallbacks[callbackId] = function(response){\n if(window._EsriLeafletCallbacks[callbackId] !== true){\n var error;\n var responseType = Object.prototype.toString.call(response);\n\n if(!(responseType === '[object Object]' || responseType === '[object Array]')){\n error = {\n error: {\n code: 500,\n message: 'Expected array or object as JSONP response'\n }\n };\n response = null;\n }\n\n if (!error && response.error) {\n error = response;\n response = null;\n }\n\n callback.call(context, error, response);\n window._EsriLeafletCallbacks[callbackId] = true;\n }\n };\n\n callbacks++;\n\n return {\n id: callbackId,\n url: script.src,\n abort: function(){\n window._EsriLeafletCallbacks._callback[callbackId]({\n code: 0,\n message: 'Request aborted.'\n });\n }\n };\n }\n }\n };\n\n // choose the correct AJAX handler depending on CORS support\n EsriLeaflet.get = (EsriLeaflet.Support.CORS) ? EsriLeaflet.Request.get.CORS : EsriLeaflet.Request.get.JSONP;\n\n // always use XMLHttpRequest for posts\n EsriLeaflet.post = EsriLeaflet.Request.post.XMLHTTP;\n\n // expose a common request method the uses GET\\POST based on request length\n EsriLeaflet.request = EsriLeaflet.Request.request;\n\n})(EsriLeaflet);","EsriLeaflet.Services.Service = L.Class.extend({\n\n includes: L.Mixin.Events,\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n initialize: function (options) {\n options = options || {};\n this._requestQueue = [];\n this._authenticating = false;\n L.Util.setOptions(this, options);\n this.options.url = EsriLeaflet.Util.cleanUrl(this.options.url);\n },\n\n get: function (path, params, callback, context) {\n return this._request('get', path, params, callback, context);\n },\n\n post: function (path, params, callback, context) {\n return this._request('post', path, params, callback, context);\n },\n\n request: function (path, params, callback, context) {\n return this._request('request', path, params, callback, context);\n },\n\n metadata: function (callback, context) {\n return this._request('get', '', {}, callback, context);\n },\n\n authenticate: function(token){\n this._authenticating = false;\n this.options.token = token;\n this._runQueue();\n return this;\n },\n\n _request: function(method, path, params, callback, context){\n this.fire('requeststart', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n\n var wrappedCallback = this._createServiceCallback(method, path, params, callback, context);\n\n if (this.options.token) {\n params.token = this.options.token;\n }\n\n if (this._authenticating) {\n this._requestQueue.push([method, path, params, callback, context]);\n return;\n } else {\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, wrappedCallback);\n } else {\n return EsriLeaflet[method](url, params, wrappedCallback);\n }\n }\n },\n\n _createServiceCallback: function(method, path, params, callback, context){\n return L.Util.bind(function(error, response){\n\n if (error && (error.code === 499 || error.code === 498)) {\n this._authenticating = true;\n\n this._requestQueue.push([method, path, params, callback, context]);\n\n // fire an event for users to handle and re-authenticate\n this.fire('authenticationrequired', {\n authenticate: L.Util.bind(this.authenticate, this)\n });\n\n // if the user has access to a callback they can handle the auth error\n error.authenticate = L.Util.bind(this.authenticate, this);\n }\n\n callback.call(context, error, response);\n\n if(error) {\n this.fire('requesterror', {\n url: this.options.url + path,\n params: params,\n message: error.message,\n code: error.code,\n method: method\n });\n } else {\n this.fire('requestsuccess', {\n url: this.options.url + path,\n params: params,\n response: response,\n method: method\n });\n }\n\n this.fire('requestend', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n }, this);\n },\n\n _runQueue: function(){\n for (var i = this._requestQueue.length - 1; i >= 0; i--) {\n var request = this._requestQueue[i];\n var method = request.shift();\n this[method].apply(this, request);\n }\n this._requestQueue = [];\n }\n\n});\n\nEsriLeaflet.Services.service = function(params){\n return new EsriLeaflet.Services.Service(params);\n};\n","EsriLeaflet.Services.FeatureLayerService = EsriLeaflet.Services.Service.extend({\n\n options: {\n idAttribute: 'OBJECTID'\n },\n\n query: function(){\n return new EsriLeaflet.Tasks.Query(this);\n },\n\n addFeature: function(feature, callback, context) {\n delete feature.id;\n\n feature = EsriLeaflet.Util.geojsonToArcGIS(feature);\n\n return this.post('addFeatures', {\n features: [feature]\n }, function(error, response){\n var result = (response && response.addResults) ? response.addResults[0] : undefined;\n if(callback){\n callback.call(context, error || response.addResults[0].error, result);\n }\n }, context);\n },\n\n updateFeature: function(feature, callback, context) {\n feature = EsriLeaflet.Util.geojsonToArcGIS(feature, this.options.idAttribute);\n\n return this.post('updateFeatures', {\n features: [feature]\n }, function(error, response){\n var result = (response && response.updateResults) ? response.updateResults[0] : undefined;\n if(callback){\n callback.call(context, error || response.updateResults[0].error, result);\n }\n }, context);\n },\n\n deleteFeature: function(id, callback, context) {\n return this.post('deleteFeatures', {\n objectIds: id\n }, function(error, response){\n var result = (response && response.deleteResults) ? response.deleteResults[0] : undefined;\n if(callback){\n callback.call(context, error || response.deleteResults[0].error, result);\n }\n }, context);\n },\n\n deleteFeatures: function(ids, callback, context) {\n return this.post('deleteFeatures', {\n objectIds: ids\n }, function(error, response){\n // pass back the entire array\n var result = (response && response.deleteResults) ? response.deleteResults : undefined;\n if(callback){\n callback.call(context, error || response.deleteResults[0].error, result);\n }\n }, context);\n }\n});\n\nEsriLeaflet.Services.featureLayerService = function(options) {\n return new EsriLeaflet.Services.FeatureLayerService(options);\n};\n","EsriLeaflet.Services.MapService = EsriLeaflet.Services.Service.extend({\n\n identify: function () {\n return new EsriLeaflet.Tasks.identifyFeatures(this);\n },\n\n find: function () {\n return new EsriLeaflet.Tasks.Find(this);\n },\n\n query: function () {\n return new EsriLeaflet.Tasks.Query(this);\n }\n\n});\n\nEsriLeaflet.Services.mapService = function(params){\n return new EsriLeaflet.Services.MapService(params);\n};","EsriLeaflet.Services.ImageService = EsriLeaflet.Services.Service.extend({\n\n query: function () {\n return new EsriLeaflet.Tasks.Query(this);\n },\n\n identify: function() {\n return new EsriLeaflet.Tasks.IdentifyImage(this);\n }\n});\n\nEsriLeaflet.Services.imageService = function(params){\n return new EsriLeaflet.Services.ImageService(params);\n};","EsriLeaflet.Tasks.Task = L.Class.extend({\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n //Generate a method for each methodName:paramName in the setters for this task.\n generateSetter: function(param, context){\n return L.Util.bind(function(value){\n this.params[param] = value;\n return this;\n }, context);\n },\n\n initialize: function(endpoint){\n // endpoint can be either a url (and options) for an ArcGIS Rest Service or an instance of EsriLeaflet.Service\n if(endpoint.request && endpoint.options){\n this._service = endpoint;\n L.Util.setOptions(this, endpoint.options);\n } else {\n L.Util.setOptions(this, endpoint);\n this.options.url = L.esri.Util.cleanUrl(endpoint.url);\n }\n\n // clone default params into this object\n this.params = L.Util.extend({}, this.params || {});\n\n // generate setter methods based on the setters object implimented a child class\n if(this.setters){\n for (var setter in this.setters){\n var param = this.setters[setter];\n this[setter] = this.generateSetter(param, this);\n }\n }\n },\n\n token: function(token){\n if(this._service){\n this._service.authenticate(token);\n } else {\n this.params.token = token;\n }\n return this;\n },\n\n request: function(callback, context){\n if(this._service){\n return this._service.request(this.path, this.params, callback, context);\n } else {\n return this._request('request', this.path, this.params, callback, context);\n }\n },\n\n _request: function(method, path, params, callback, context){\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, callback, context);\n } else{\n return EsriLeaflet[method](url, params, callback, context);\n }\n }\n});","EsriLeaflet.Tasks.Query = EsriLeaflet.Tasks.Task.extend({\n setters: {\n 'offset': 'offset',\n 'limit': 'limit',\n 'fields': 'outFields',\n 'precision': 'geometryPrecision',\n 'featureIds': 'objectIds',\n 'returnGeometry': 'returnGeometry',\n 'token': 'token'\n },\n\n path: 'query',\n\n params: {\n returnGeometry: true,\n where: '1=1',\n outSr: 4326,\n outFields: '*'\n },\n\n within: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelContains'; // will make code read layer within geometry, to the api this will reads geometry contains layer\n return this;\n },\n\n intersects: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelIntersects';\n return this;\n },\n\n contains: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelWithin'; // will make code read layer contains geometry, to the api this will reads geometry within layer\n return this;\n },\n\n // crosses: function(geometry){\n // this._setGeometry(geometry);\n // this.params.spatialRel = 'esriSpatialRelCrosses';\n // return this;\n // },\n\n // touches: function(geometry){\n // this._setGeometry(geometry);\n // this.params.spatialRel = 'esriSpatialRelTouches';\n // return this;\n // },\n\n overlaps: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelOverlaps';\n return this;\n },\n\n // only valid for Feature Services running on ArcGIS Server 10.3 or ArcGIS Online\n nearby: function(latlng, radius){\n latlng = L.latLng(latlng);\n this.params.geometry = [latlng.lng, latlng.lat];\n this.params.geometryType = 'esriGeometryPoint';\n this.params.spatialRel = 'esriSpatialRelIntersects';\n this.params.units = 'esriSRUnit_Meter';\n this.params.distance = radius;\n this.params.inSr = 4326;\n return this;\n },\n\n where: function(string){\n // instead of converting double-quotes to single quotes, pass as is, and provide a more informative message if a 400 is encountered\n this.params.where = string;\n return this;\n },\n\n between: function(start, end){\n this.params.time = [start.valueOf(), end.valueOf()];\n return this;\n },\n\n simplify: function(map, factor){\n var mapWidth = Math.abs(map.getBounds().getWest() - map.getBounds().getEast());\n this.params.maxAllowableOffset = (mapWidth / map.getSize().y) * factor;\n return this;\n },\n\n orderBy: function(fieldName, order){\n order = order || 'ASC';\n this.params.orderByFields = (this.params.orderByFields) ? this.params.orderByFields + ',' : '';\n this.params.orderByFields += ([fieldName, order]).join(' ');\n return this;\n },\n\n run: function(callback, context){\n this._cleanParams();\n\n // if the service is hosted on arcgis online request geojson directly\n if(EsriLeaflet.Util.isArcgisOnline(this.options.url)){\n this.params.f = 'geojson';\n\n return this.request(function(error, response){\n this._trapSQLerrors(error);\n callback.call(context, error, response, response);\n }, this);\n\n // otherwise convert it in the callback then pass it on\n } else {\n return this.request(function(error, response){\n this._trapSQLerrors(error);\n callback.call(context, error, (response && EsriLeaflet.Util.responseToFeatureCollection(response)), response);\n }, this);\n }\n },\n\n count: function(callback, context){\n this._cleanParams();\n this.params.returnCountOnly = true;\n return this.request(function(error, response){\n callback.call(this, error, (response && response.count), response);\n }, context);\n },\n\n ids: function(callback, context){\n this._cleanParams();\n this.params.returnIdsOnly = true;\n return this.request(function(error, response){\n callback.call(this, error, (response && response.objectIds), response);\n }, context);\n },\n\n // only valid for Feature Services running on ArcGIS Server 10.3 or ArcGIS Online\n bounds: function(callback, context){\n this._cleanParams();\n this.params.returnExtentOnly = true;\n return this.request(function(error, response){\n callback.call(context, error, (response && response.extent && EsriLeaflet.Util.extentToBounds(response.extent)), response);\n }, context);\n },\n\n // only valid for image services\n pixelSize: function(point){\n point = L.point(point);\n this.params.pixelSize = [point.x,point.y];\n return this;\n },\n\n // only valid for map services\n layer: function(layer){\n this.path = layer + '/query';\n return this;\n },\n\n _trapSQLerrors: function(error){\n if (error){\n if (error.code === '400'){\n EsriLeaflet.Util.warn('one common syntax error in query requests is encasing string values in double quotes instead of single quotes');\n }\n }\n },\n\n _cleanParams: function(){\n delete this.params.returnIdsOnly;\n delete this.params.returnExtentOnly;\n delete this.params.returnCountOnly;\n },\n\n _setGeometry: function(geometry) {\n this.params.inSr = 4326;\n\n // convert bounds to extent and finish\n if ( geometry instanceof L.LatLngBounds ) {\n // set geometry + geometryType\n this.params.geometry = EsriLeaflet.Util.boundsToExtent(geometry);\n this.params.geometryType = 'esriGeometryEnvelope';\n return;\n }\n\n // convert L.Marker > L.LatLng\n if(geometry.getLatLng){\n geometry = geometry.getLatLng();\n }\n\n // convert L.LatLng to a geojson point and continue;\n if (geometry instanceof L.LatLng) {\n geometry = {\n type: 'Point',\n coordinates: [geometry.lng, geometry.lat]\n };\n }\n\n // handle L.GeoJSON, pull out the first geometry\n if ( geometry instanceof L.GeoJSON ) {\n //reassign geometry to the GeoJSON value (we are assuming that only one feature is present)\n geometry = geometry.getLayers()[0].feature.geometry;\n this.params.geometry = EsriLeaflet.Util.geojsonToArcGIS(geometry);\n this.params.geometryType = EsriLeaflet.Util.geojsonTypeToArcGIS(geometry.type);\n }\n\n // Handle L.Polyline and L.Polygon\n if (geometry.toGeoJSON) {\n geometry = geometry.toGeoJSON();\n }\n\n // handle GeoJSON feature by pulling out the geometry\n if ( geometry.type === 'Feature' ) {\n // get the geometry of the geojson feature\n geometry = geometry.geometry;\n }\n\n // confirm that our GeoJSON is a point, line or polygon\n if ( geometry.type === 'Point' || geometry.type === 'LineString' || geometry.type === 'Polygon') {\n this.params.geometry = EsriLeaflet.Util.geojsonToArcGIS(geometry);\n this.params.geometryType = EsriLeaflet.Util.geojsonTypeToArcGIS(geometry.type);\n return;\n }\n\n // warn the user if we havn't found a\n /* global console */\n EsriLeaflet.Util.warn('invalid geometry passed to spatial query. Should be an L.LatLng, L.LatLngBounds or L.Marker or a GeoJSON Point Line or Polygon object');\n\n return;\n }\n});\n\nEsriLeaflet.Tasks.query = function(params){\n return new EsriLeaflet.Tasks.Query(params);\n};","EsriLeaflet.Tasks.Find = EsriLeaflet.Tasks.Task.extend({\n setters: {\n // method name > param name\n 'contains': 'contains',\n 'text': 'searchText',\n 'fields': 'searchFields', // denote an array or single string\n 'spatialReference': 'sr',\n 'sr': 'sr',\n 'layers': 'layers',\n 'returnGeometry': 'returnGeometry',\n 'maxAllowableOffset': 'maxAllowableOffset',\n 'precision': 'geometryPrecision',\n 'dynamicLayers': 'dynamicLayers',\n 'returnZ' : 'returnZ',\n 'returnM' : 'returnM',\n 'gdbVersion' : 'gdbVersion',\n 'token' : 'token'\n },\n\n path: 'find',\n\n params: {\n sr: 4326,\n contains: true,\n returnGeometry: true,\n returnZ: true,\n returnM: false\n },\n\n layerDefs: function (id, where) {\n this.params.layerDefs = (this.params.layerDefs) ? this.params.layerDefs + ';' : '';\n this.params.layerDefs += ([id, where]).join(':');\n return this;\n },\n\n simplify: function(map, factor){\n var mapWidth = Math.abs(map.getBounds().getWest() - map.getBounds().getEast());\n this.params.maxAllowableOffset = (mapWidth / map.getSize().y) * factor;\n return this;\n },\n\n run: function (callback, context) {\n return this.request(function(error, response){\n callback.call(context, error, (response && EsriLeaflet.Util.responseToFeatureCollection(response)), response);\n }, context);\n }\n});\n\nEsriLeaflet.Tasks.find = function (params) {\n return new EsriLeaflet.Tasks.Find(params);\n};","EsriLeaflet.Tasks.Identify = EsriLeaflet.Tasks.Task.extend({\n path: 'identify',\n\n between: function(start, end){\n this.params.time = [start.valueOf(), end.valueOf()];\n return this;\n }\n});\n","EsriLeaflet.Tasks.IdentifyImage = EsriLeaflet.Tasks.Identify.extend({\n setters: {\n 'setMosaicRule': 'mosaicRule',\n 'setRenderingRule': 'renderingRule',\n 'setPixelSize': 'pixelSize',\n 'returnCatalogItems': 'returnCatalogItems',\n 'returnGeometry': 'returnGeometry'\n },\n\n params: {\n returnGeometry: false\n },\n\n at: function(latlng){\n latlng = L.latLng(latlng);\n this.params.geometry = JSON.stringify({\n x: latlng.lng,\n y: latlng.lat,\n spatialReference:{\n wkid: 4326\n }\n });\n this.params.geometryType = 'esriGeometryPoint';\n return this;\n },\n\n getMosaicRule: function() {\n return this.params.mosaicRule;\n },\n\n getRenderingRule: function() {\n return this.params.renderingRule;\n },\n\n getPixelSize: function() {\n return this.params.pixelSize;\n },\n\n run: function (callback, context){\n return this.request(function(error, response){\n callback.call(context, error, (response && this._responseToGeoJSON(response)), response);\n }, this);\n },\n\n // get pixel data and return as geoJSON point\n // populate catalog items (if any)\n // merging in any catalogItemVisibilities as a propery of each feature\n _responseToGeoJSON: function(response) {\n var location = response.location;\n var catalogItems = response.catalogItems;\n var catalogItemVisibilities = response.catalogItemVisibilities;\n var geoJSON = {\n 'pixel': {\n 'type': 'Feature',\n 'geometry': {\n 'type': 'Point',\n 'coordinates': [location.x, location.y]\n },\n 'crs': {\n 'type': 'EPSG',\n 'properties': {\n 'code': location.spatialReference.wkid\n }\n },\n 'properties': {\n 'OBJECTID': response.objectId,\n 'name': response.name,\n 'value': response.value\n },\n 'id': response.objectId\n }\n };\n if (response.properties && response.properties.Values) {\n geoJSON.pixel.properties.values = response.properties.Values;\n }\n if (catalogItems && catalogItems.features) {\n geoJSON.catalogItems = EsriLeaflet.Util.responseToFeatureCollection(catalogItems);\n if (catalogItemVisibilities && catalogItemVisibilities.length === geoJSON.catalogItems.features.length) {\n for (var i = catalogItemVisibilities.length - 1; i >= 0; i--) {\n geoJSON.catalogItems.features[i].properties.catalogItemVisibility = catalogItemVisibilities[i];\n }\n }\n }\n return geoJSON;\n }\n\n});\n\nEsriLeaflet.Tasks.identifyImage = function(params){\n return new EsriLeaflet.Tasks.IdentifyImage(params);\n};","EsriLeaflet.Tasks.IdentifyFeatures = EsriLeaflet.Tasks.Identify.extend({\n setters: {\n 'layers': 'layers',\n 'precision': 'geometryPrecision',\n 'tolerance': 'tolerance',\n 'returnGeometry': 'returnGeometry'\n },\n\n params: {\n sr: 4326,\n layers: 'all',\n tolerance: 3,\n returnGeometry: true\n },\n\n on: function(map){\n var extent = EsriLeaflet.Util.boundsToExtent(map.getBounds());\n var size = map.getSize();\n this.params.imageDisplay = [size.x, size.y, 96];\n this.params.mapExtent = [extent.xmin, extent.ymin, extent.xmax, extent.ymax];\n return this;\n },\n\n at: function(latlng){\n latlng = L.latLng(latlng);\n this.params.geometry = [latlng.lng, latlng.lat];\n this.params.geometryType = 'esriGeometryPoint';\n return this;\n },\n\n layerDef: function (id, where){\n this.params.layerDefs = (this.params.layerDefs) ? this.params.layerDefs + ';' : '';\n this.params.layerDefs += ([id, where]).join(':');\n return this;\n },\n\n simplify: function(map, factor){\n var mapWidth = Math.abs(map.getBounds().getWest() - map.getBounds().getEast());\n this.params.maxAllowableOffset = (mapWidth / map.getSize().y) * (1 - factor);\n return this;\n },\n\n run: function (callback, context){\n return this.request(function(error, response){\n // immediately invoke with an error\n if(error) {\n callback.call(context, error, undefined, response);\n return;\n\n // ok no error lets just assume we have features...\n } else {\n var featureCollection = EsriLeaflet.Util.responseToFeatureCollection(response);\n response.results = response.results.reverse();\n for (var i = 0; i < featureCollection.features.length; i++) {\n var feature = featureCollection.features[i];\n feature.layerId = response.results[i].layerId;\n }\n callback.call(context, undefined, featureCollection, response);\n }\n });\n }\n});\n\nEsriLeaflet.Tasks.identifyFeatures = function(params){\n return new EsriLeaflet.Tasks.IdentifyFeatures(params);\n};","(function(EsriLeaflet){\n\n var tileProtocol = (window.location.protocol !== 'https:') ? 'http:' : 'https:';\n\n EsriLeaflet.Layers.BasemapLayer = L.TileLayer.extend({\n statics: {\n TILES: {\n Streets: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/{z}/{y}/{x}',\n attributionUrl: 'https://static.arcgis.com/attribution/World_Street_Map',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services'],\n attribution: 'Esri'\n }\n },\n Topographic: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/{z}/{y}/{x}',\n attributionUrl: 'https://static.arcgis.com/attribution/World_Topo_Map',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services'],\n attribution: 'Esri'\n }\n },\n Oceans: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/arcgis/rest/services/Ocean/World_Ocean_Base/MapServer/tile/{z}/{y}/{x}',\n attributionUrl: 'https://static.arcgis.com/attribution/Ocean_Basemap',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services'],\n attribution: 'Esri'\n }\n },\n OceansLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/arcgis/rest/services/Ocean/World_Ocean_Reference/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services']\n }\n },\n NationalGeographic: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services'],\n attribution: 'Esri'\n }\n },\n DarkGray: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Dark_Gray_Base/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services'],\n attribution: 'Esri, DeLorme, HERE'\n }\n },\n DarkGrayLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Dark_Gray_Reference/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services']\n }\n },\n Gray: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services'],\n attribution: 'Esri, NAVTEQ, DeLorme'\n }\n },\n GrayLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Reference/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services']\n }\n },\n Imagery: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services'],\n attribution: 'Esri, DigitalGlobe, GeoEye, i-cubed, USDA, USGS, AEX, Getmapping, Aerogrid, IGN, IGP, swisstopo, and the GIS User Community'\n }\n },\n ImageryLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Boundaries_and_Places/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services']\n }\n },\n ImageryTransportation: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Transportation/MapServer/tile/{z}/{y}/{x}',\n //pane: 'esri-label',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services']\n }\n },\n ShadedRelief: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Shaded_Relief/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 13,\n subdomains: ['server', 'services'],\n attribution: 'Esri, NAVTEQ, DeLorme'\n }\n },\n ShadedReliefLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Boundaries_and_Places_Alternate/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 12,\n subdomains: ['server', 'services']\n }\n },\n Terrain: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Terrain_Base/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 13,\n subdomains: ['server', 'services'],\n attribution: 'Esri, USGS, NOAA'\n }\n },\n TerrainLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Reference_Overlay/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 13,\n subdomains: ['server', 'services']\n }\n }\n }\n },\n initialize: function(key, options){\n var config;\n\n // set the config variable with the appropriate config object\n if (typeof key === 'object' && key.urlTemplate && key.options){\n config = key;\n } else if(typeof key === 'string' && EsriLeaflet.BasemapLayer.TILES[key]){\n config = EsriLeaflet.BasemapLayer.TILES[key];\n } else {\n throw new Error('L.esri.BasemapLayer: Invalid parameter. Use one of \"Streets\", \"Topographic\", \"Oceans\", \"OceansLabels\", \"NationalGeographic\", \"Gray\", \"GrayLabels\", \"DarkGray\", \"DarkGrayLabels\", \"Imagery\", \"ImageryLabels\", \"ImageryTransportation\", \"ShadedRelief\", \"ShadedReliefLabels\", \"Terrain\" or \"TerrainLabels\"');\n }\n\n // merge passed options into the config options\n var tileOptions = L.Util.extend(config.options, options);\n\n // call the initialize method on L.TileLayer to set everything up\n L.TileLayer.prototype.initialize.call(this, config.urlTemplate, L.Util.setOptions(this, tileOptions));\n\n // if this basemap requires dynamic attribution set it up\n if(config.attributionUrl){\n this._getAttributionData(config.attributionUrl);\n }\n this._logo = new EsriLeaflet.Controls.Logo({\n position: this.options.logoPosition\n });\n },\n onAdd: function(map){\n if(!this.options.hideLogo && !map._hasEsriLogo){\n this._logo.addTo(map);\n map._hasEsriLogo = true;\n }\n\n // if(this.options.pane && EsriLeaflet.Support.pointerEvents){\n // this._initPane();\n // }\n\n L.TileLayer.prototype.onAdd.call(this, map);\n\n map.on('moveend', this._updateMapAttribution, this);\n },\n onRemove: function(map){\n // check to make sure the logo hasn't already been removed\n if(!map._hasEsriLogo && this._logo && this._logo._container){\n map.removeControl(this._logo);\n map._hasEsriLogo = false;\n }\n\n L.TileLayer.prototype.onRemove.call(this, map);\n\n map.off('moveend', this._updateMapAttribution, this);\n },\n getAttribution:function(){\n var attribution = '' + this.options.attribution + ''/* + logo*/;\n return attribution;\n },\n // _initPane: function(){\n // if(!this._map.getPane(this.options.pane)){\n // var pane = this._map.createPane(this.options.pane);\n // pane.style.pointerEvents = 'none';\n // pane.style.zIndex = 5;\n // }\n // },\n _getAttributionData: function(url){\n L.esri.Request.get.JSONP(url, {}, L.Util.bind(function(error, attributions){\n this._attributions = [];\n\n for (var c = 0; c < attributions.contributors.length; c++) {\n var contributor = attributions.contributors[c];\n for (var i = 0; i < contributor.coverageAreas.length; i++) {\n var coverageArea = contributor.coverageAreas[i];\n var southWest = new L.LatLng(coverageArea.bbox[0], coverageArea.bbox[1]);\n var northEast = new L.LatLng(coverageArea.bbox[2], coverageArea.bbox[3]);\n this._attributions.push({\n attribution: contributor.attribution,\n score: coverageArea.score,\n bounds: new L.LatLngBounds(southWest, northEast),\n minZoom: coverageArea.zoomMin,\n maxZoom: coverageArea.zoomMax\n });\n }\n }\n\n this._attributions.sort(function(a, b){\n return b.score - a.score;\n });\n\n this._updateMapAttribution();\n }, this));\n },\n _updateMapAttribution: function(){\n if(this._map && this._map.attributionControl && this._attributions){\n var newAttributions = '';\n var bounds = this._map.getBounds();\n var zoom = this._map.getZoom();\n\n for (var i = 0; i < this._attributions.length; i++) {\n var attribution = this._attributions[i];\n var text = attribution.attribution;\n if(!newAttributions.match(text) && bounds.intersects(attribution.bounds) && zoom >= attribution.minZoom && zoom <= attribution.maxZoom) {\n newAttributions += (', ' + text);\n }\n }\n newAttributions = newAttributions.substr(2);\n var attributionElement = this._map.attributionControl._container.querySelector('.esri-attributions');\n attributionElement.innerHTML = newAttributions;\n attributionElement.style.maxWidth = (this._map.getSize().x * 0.65) + 'px';\n this.fire('attributionupdated', {\n attribution: newAttributions\n });\n }\n }\n });\n\n EsriLeaflet.BasemapLayer = EsriLeaflet.Layers.BasemapLayer;\n\n EsriLeaflet.Layers.basemapLayer = function(key, options){\n return new EsriLeaflet.Layers.BasemapLayer(key, options);\n };\n\n EsriLeaflet.basemapLayer = function(key, options){\n return new EsriLeaflet.Layers.BasemapLayer(key, options);\n };\n\n})(EsriLeaflet);","EsriLeaflet.Layers.RasterLayer = L.Class.extend({\n includes: L.Mixin.Events,\n\n options: {\n opacity: 1,\n position: 'front',\n f: 'image'\n },\n\n onAdd: function (map) {\n this._map = map;\n\n this._update = L.Util.limitExecByInterval(this._update, this.options.updateInterval, this);\n\n if (map.options.crs && map.options.crs.code) {\n var sr = map.options.crs.code.split(':')[1];\n this.options.bboxSR = sr;\n this.options.imageSR = sr;\n }\n\n map.on('moveend', this._update, this);\n\n // if we had an image loaded and it matches the\n // current bounds show the image otherwise remove it\n if(this._currentImage && this._currentImage._bounds.equals(this._map.getBounds())){\n map.addLayer(this._currentImage);\n } else if(this._currentImage) {\n this._map.removeLayer(this._currentImage);\n this._currentImage = null;\n }\n\n this._update();\n\n if(this._popup){\n this._map.on('click', this._getPopupData, this);\n this._map.on('dblclick', this._resetPopupState, this);\n }\n },\n\n bindPopup: function(fn, popupOptions){\n this._shouldRenderPopup = false;\n this._lastClick = false;\n this._popup = L.popup(popupOptions);\n this._popupFunction = fn;\n if(this._map){\n this._map.on('click', this._getPopupData, this);\n this._map.on('dblclick', this._resetPopupState, this);\n }\n return this;\n },\n\n unbindPopup: function(){\n if(this._map){\n this._map.closePopup(this._popup);\n this._map.off('click', this._getPopupData, this);\n this._map.off('dblclick', this._resetPopupState, this);\n }\n this._popup = false;\n return this;\n },\n\n onRemove: function (map) {\n if (this._currentImage) {\n this._map.removeLayer(this._currentImage);\n }\n\n if(this._popup){\n this._map.off('click', this._getPopupData, this);\n this._map.off('dblclick', this._resetPopupState, this);\n }\n\n this._map.off('moveend', this._update, this);\n this._map = null;\n },\n\n addTo: function(map){\n map.addLayer(this);\n return this;\n },\n\n removeFrom: function(map){\n map.removeLayer(this);\n return this;\n },\n\n bringToFront: function(){\n this.options.position = 'front';\n if(this._currentImage){\n this._currentImage.bringToFront();\n }\n return this;\n },\n\n bringToBack: function(){\n this.options.position = 'back';\n if(this._currentImage){\n this._currentImage.bringToBack();\n }\n return this;\n },\n\n getAttribution: function () {\n return this.options.attribution;\n },\n\n getOpacity: function(){\n return this.options.opacity;\n },\n\n setOpacity: function(opacity){\n this.options.opacity = opacity;\n this._currentImage.setOpacity(opacity);\n return this;\n },\n\n getTimeRange: function(){\n return [this.options.from, this.options.to];\n },\n\n setTimeRange: function(from, to){\n this.options.from = from;\n this.options.to = to;\n this._update();\n return this;\n },\n\n metadata: function(callback, context){\n this._service.metadata(callback, context);\n return this;\n },\n\n authenticate: function(token){\n this._service.authenticate(token);\n return this;\n },\n\n _renderImage: function(url, bounds){\n if(this._map){\n // create a new image overlay and add it to the map\n // to start loading the image\n // opacity is 0 while the image is loading\n var image = new L.ImageOverlay(url, bounds, {\n opacity: 0\n }).addTo(this._map);\n\n // once the image loads\n image.once('load', function(e){\n var newImage = e.target;\n var oldImage = this._currentImage;\n\n // if the bounds of this image matches the bounds that\n // _renderImage was called with and we have a map with the same bounds\n // hide the old image if there is one and set the opacity\n // of the new image otherwise remove the new image\n if(newImage._bounds.equals(bounds) && newImage._bounds.equals(this._map.getBounds())){\n this._currentImage = newImage;\n\n if(this.options.position === 'front'){\n this.bringToFront();\n } else {\n this.bringToBack();\n }\n\n if(this._map && this._currentImage._map){\n this._currentImage.setOpacity(this.options.opacity);\n } else {\n this._currentImage._map.removeLayer(this._currentImage);\n }\n\n if(oldImage && this._map) {\n this._map.removeLayer(oldImage);\n }\n\n if(oldImage && oldImage._map){\n oldImage._map.removeLayer(oldImage);\n }\n } else {\n this._map.removeLayer(newImage);\n }\n\n this.fire('load', {\n bounds: bounds\n });\n\n }, this);\n\n this.fire('loading', {\n bounds: bounds\n });\n }\n },\n\n _update: function () {\n if(!this._map){\n return;\n }\n\n var zoom = this._map.getZoom();\n var bounds = this._map.getBounds();\n\n if(this._animatingZoom){\n return;\n }\n\n if (this._map._panTransition && this._map._panTransition._inProgress) {\n return;\n }\n\n if (zoom > this.options.maxZoom || zoom < this.options.minZoom) {\n if (this._currentImage) {\n this._currentImage._map.removeLayer(this._currentImage);\n }\n return;\n }\n var params = this._buildExportParams();\n\n this._requestExport(params, bounds);\n },\n\n // TODO: refactor these into raster layer\n _renderPopup: function(latlng, error, results, response){\n latlng = L.latLng(latlng);\n if(this._shouldRenderPopup && this._lastClick.equals(latlng)){\n //add the popup to the map where the mouse was clicked at\n var content = this._popupFunction(error, results, response);\n if (content) {\n this._popup.setLatLng(latlng).setContent(content).openOn(this._map);\n }\n }\n },\n\n _resetPopupState: function(e){\n this._shouldRenderPopup = false;\n this._lastClick = e.latlng;\n },\n\n // from https://github.com/Leaflet/Leaflet/blob/v0.7.2/src/layer/FeatureGroup.js\n // @TODO remove at Leaflet 0.8\n _propagateEvent: function (e) {\n e = L.extend({\n layer: e.target,\n target: this\n }, e);\n this.fire(e.type, e);\n }\n});\n","EsriLeaflet.Layers.DynamicMapLayer = EsriLeaflet.Layers.RasterLayer.extend({\n\n options: {\n updateInterval: 150,\n layers: false,\n layerDefs: false,\n timeOptions: false,\n format: 'png24',\n transparent: true,\n f: 'json'\n },\n\n initialize: function (options) {\n options.url = EsriLeaflet.Util.cleanUrl(options.url);\n this._service = new EsriLeaflet.Services.MapService(options);\n this._service.on('authenticationrequired requeststart requestend requesterror requestsuccess', this._propagateEvent, this);\n if ((options.proxy || options.token) && options.f !== 'json'){\n options.f = 'json';\n }\n L.Util.setOptions(this, options);\n },\n\n getDynamicLayers: function(){\n return this.options.dynamicLayers;\n },\n\n setDynamicLayers: function(dynamicLayers){\n this.options.dynamicLayers = dynamicLayers;\n this._update();\n return this;\n },\n\n getLayers: function(){\n return this.options.layers;\n },\n\n setLayers: function(layers){\n this.options.layers = layers;\n this._update();\n return this;\n },\n\n getLayerDefs: function(){\n return this.options.layerDefs;\n },\n\n setLayerDefs: function(layerDefs){\n this.options.layerDefs = layerDefs;\n this._update();\n return this;\n },\n\n getTimeOptions: function(){\n return this.options.timeOptions;\n },\n\n setTimeOptions: function(timeOptions){\n this.options.timeOptions = timeOptions;\n this._update();\n return this;\n },\n\n query: function(){\n return this._service.query();\n },\n\n identify: function(){\n return this._service.identify();\n },\n\n find: function(){\n return this._service.find();\n },\n\n _getPopupData: function(e){\n var callback = L.Util.bind(function(error, featureCollection, response) {\n if(error) { return; } // we really can't do anything here but authenticate or requesterror will fire\n setTimeout(L.Util.bind(function(){\n this._renderPopup(e.latlng, error, featureCollection, response);\n }, this), 300);\n }, this);\n\n var identifyRequest = this.identify().on(this._map).at(e.latlng);\n\n if(this.options.layers){\n identifyRequest.layers('visible:' + this.options.layers.join(','));\n } else {\n identifyRequest.layers('visible');\n }\n\n identifyRequest.run(callback);\n\n // set the flags to show the popup\n this._shouldRenderPopup = true;\n this._lastClick = e.latlng;\n },\n\n _buildExportParams: function () {\n var bounds = this._map.getBounds();\n var size = this._map.getSize();\n var ne = this._map.options.crs.project(bounds._northEast);\n var sw = this._map.options.crs.project(bounds._southWest);\n\n //ensure that we don't ask ArcGIS Server for a taller image than we have actual map displaying\n var top = this._map.latLngToLayerPoint(bounds._northEast);\n var bottom = this._map.latLngToLayerPoint(bounds._southWest);\n\n if (top.y > 0 || bottom.y < size.y){\n size.y = bottom.y - top.y;\n }\n\n var params = {\n bbox: [sw.x, sw.y, ne.x, ne.y].join(','),\n size: size.x + ',' + size.y,\n dpi: 96,\n format: this.options.format,\n transparent: this.options.transparent,\n bboxSR: this.options.bboxSR,\n imageSR: this.options.imageSR\n };\n\n if(this.options.dynamicLayers){\n params.dynamicLayers = this.options.dynamicLayers;\n }\n\n if(this.options.layers){\n params.layers = 'show:' + this.options.layers.join(',');\n }\n\n if(this.options.layerDefs){\n params.layerDefs = JSON.stringify(this.options.layerDefs);\n }\n\n if(this.options.timeOptions){\n params.timeOptions = JSON.stringify(this.options.timeOptions);\n }\n\n if(this.options.from && this.options.to){\n params.time = this.options.from.valueOf() + ',' + this.options.to.valueOf();\n }\n\n if(this._service.options.token) {\n params.token = this._service.options.token;\n }\n\n return params;\n },\n\n _requestExport: function (params, bounds) {\n if(this.options.f === 'json'){\n this._service.request('export', params, function(error, response){\n if(error) { return; } // we really can't do anything here but authenticate or requesterror will fire\n this._renderImage(response.href, bounds);\n }, this);\n } else {\n params.f = 'image';\n this._renderImage(this.options.url + 'export' + L.Util.getParamString(params), bounds);\n }\n }\n});\n\nEsriLeaflet.DynamicMapLayer = EsriLeaflet.Layers.DynamicMapLayer;\n\nEsriLeaflet.Layers.dynamicMapLayer = function(options){\n return new EsriLeaflet.Layers.DynamicMapLayer(options);\n};\n\nEsriLeaflet.dynamicMapLayer = function(options){\n return new EsriLeaflet.Layers.DynamicMapLayer(options);\n};\n","EsriLeaflet.Layers.ImageMapLayer = EsriLeaflet.Layers.RasterLayer.extend({\n\n options: {\n updateInterval: 150,\n format: 'jpgpng',\n transparent: true,\n f: 'json'\n },\n\n query: function(){\n return this._service.query();\n },\n\n identify: function(){\n return this._service.identify();\n },\n\n initialize: function (options) {\n options.url = EsriLeaflet.Util.cleanUrl(options.url);\n this._service = new EsriLeaflet.Services.ImageService(options);\n this._service.on('authenticationrequired requeststart requestend requesterror requestsuccess', this._propagateEvent, this);\n L.Util.setOptions(this, options);\n },\n\n setPixelType: function (pixelType) {\n this.options.pixelType = pixelType;\n this._update();\n return this;\n },\n\n getPixelType: function () {\n return this.options.pixelType;\n },\n\n setBandIds: function (bandIds) {\n if (L.Util.isArray(bandIds)) {\n this.options.bandIds = bandIds.join(',');\n } else {\n this.options.bandIds = bandIds.toString();\n }\n this._update();\n return this;\n },\n\n getBandIds: function () {\n return this.options.bandIds;\n },\n\n setNoData: function (noData, noDataInterpretation) {\n if (L.Util.isArray(noData)) {\n this.options.noData = noData.join(',');\n } else {\n this.options.noData = noData.toString();\n }\n if (noDataInterpretation) {\n this.options.noDataInterpretation = noDataInterpretation;\n }\n this._update();\n return this;\n },\n\n getNoData: function () {\n return this.options.noData;\n },\n\n getNoDataInterpretation: function () {\n return this.options.noDataInterpretation;\n },\n\n setRenderingRule: function(renderingRule) {\n this.options.renderingRule = renderingRule;\n this._update();\n },\n\n getRenderingRule: function() {\n return this.options.renderingRule;\n },\n\n setMosaicRule: function(mosaicRule) {\n this.options.mosaicRule = mosaicRule;\n this._update();\n },\n\n getMosaicRule: function() {\n return this.options.mosaicRule;\n },\n\n _getPopupData: function(e){\n var callback = L.Util.bind(function(error, results, response) {\n if(error) { return; } // we really can't do anything here but authenticate or requesterror will fire\n setTimeout(L.Util.bind(function(){\n this._renderPopup(e.latlng, error, results, response);\n }, this), 300);\n }, this);\n\n var identifyRequest = this.identify().at(e.latlng);\n\n // set mosaic rule for identify task if it is set for layer\n if (this.options.mosaicRule) {\n identifyRequest.setMosaicRule(this.options.mosaicRule);\n // @TODO: force return catalog items too?\n }\n\n // @TODO: set rendering rule? Not sure,\n // sometimes you want raw pixel values\n // if (this.options.renderingRule) {\n // identifyRequest.setRenderingRule(this.options.renderingRule);\n // }\n\n identifyRequest.run(callback);\n\n // set the flags to show the popup\n this._shouldRenderPopup = true;\n this._lastClick = e.latlng;\n },\n\n _buildExportParams: function () {\n var bounds = this._map.getBounds();\n var size = this._map.getSize();\n var ne = this._map.options.crs.project(bounds._northEast);\n var sw = this._map.options.crs.project(bounds._southWest);\n\n var params = {\n bbox: [sw.x, sw.y, ne.x, ne.y].join(','),\n size: size.x + ',' + size.y,\n format: this.options.format,\n transparent: this.options.transparent,\n bboxSR: this.options.bboxSR,\n imageSR: this.options.imageSR\n };\n\n if (this.options.from && this.options.to) {\n params.time = this.options.from.valueOf() + ',' + this.options.to.valueOf();\n }\n\n if (this.options.pixelType) {\n params.pixelType = this.options.pixelType;\n }\n\n if (this.options.interpolation) {\n params.interpolation = this.options.interpolation;\n }\n\n if (this.options.compressionQuality) {\n params.compressionQuality = this.options.compressionQuality;\n }\n\n if (this.options.bandIds) {\n params.bandIds = this.options.bandIds;\n }\n\n if (this.options.noData) {\n params.noData = this.options.noData;\n }\n\n if (this.options.noDataInterpretation) {\n params.noDataInterpretation = this.options.noDataInterpretation;\n }\n\n if (this._service.options.token) {\n params.token = this._service.options.token;\n }\n\n if(this.options.renderingRule) {\n params.renderingRule = JSON.stringify(this.options.renderingRule);\n }\n\n if(this.options.mosaicRule) {\n params.mosaicRule = JSON.stringify(this.options.mosaicRule);\n }\n\n return params;\n },\n\n _requestExport: function (params, bounds) {\n if (this.options.f === 'json') {\n this._service.request('exportImage', params, function(error, response){\n if(error) { return; } // we really can't do anything here but authenticate or requesterror will fire\n this._renderImage(response.href, bounds);\n }, this);\n } else {\n params.f = 'image';\n this._renderImage(this.options.url + 'exportImage' + L.Util.getParamString(params), bounds);\n }\n }\n});\n\nEsriLeaflet.ImageMapLayer = EsriLeaflet.Layers.ImageMapLayer;\n\nEsriLeaflet.Layers.imageMapLayer = function (options) {\n return new EsriLeaflet.Layers.ImageMapLayer(options);\n};\n\nEsriLeaflet.imageMapLayer = function (options) {\n return new EsriLeaflet.Layers.ImageMapLayer(options);\n};\n","EsriLeaflet.Layers.TiledMapLayer = L.TileLayer.extend({\n options: {\n zoomOffsetAllowance: 0.1,\n correctZoomLevels: true\n },\n\n statics: {\n MercatorZoomLevels: {\n '0':156543.03392799999,\n '1':78271.516963999893,\n '2':39135.758482000099,\n '3':19567.879240999901,\n '4':9783.9396204999593,\n '5':4891.9698102499797,\n '6':2445.9849051249898,\n '7':1222.9924525624899,\n '8':611.49622628138002,\n '9':305.74811314055802,\n '10':152.874056570411,\n '11':76.437028285073197,\n '12':38.218514142536598,\n '13':19.109257071268299,\n '14':9.5546285356341496,\n '15':4.7773142679493699,\n '16':2.38865713397468,\n '17':1.1943285668550501,\n '18':0.59716428355981699,\n '19':0.29858214164761698,\n '20':0.14929107082381,\n '21':0.07464553541191,\n '22':0.0373227677059525,\n '23':0.0186613838529763\n }\n },\n\n initialize: function(options){\n options.url = EsriLeaflet.Util.cleanUrl(options.url);\n options = L.Util.setOptions(this, options);\n\n // set the urls\n //this.url = L.esri.Util.cleanUrl(url);\n this.tileUrl = L.esri.Util.cleanUrl(options.url) + 'tile/{z}/{y}/{x}';\n this._service = new L.esri.Services.MapService(options);\n this._service.on('authenticationrequired requeststart requestend requesterror requestsuccess', this._propagateEvent, this);\n\n //if this is looking at the AGO tiles subdomain insert the subdomain placeholder\n if(this.tileUrl.match('://tiles.arcgisonline.com')){\n this.tileUrl = this.tileUrl.replace('://tiles.arcgisonline.com', '://tiles{s}.arcgisonline.com');\n options.subdomains = ['1', '2', '3', '4'];\n }\n\n if(this.options.token) {\n this.tileUrl += ('?token=' + this.options.token);\n }\n\n // init layer by calling TileLayers initialize method\n L.TileLayer.prototype.initialize.call(this, this.tileUrl, options);\n },\n\n getTileUrl: function (tilePoint) {\n return L.Util.template(this.tileUrl, L.extend({\n s: this._getSubdomain(tilePoint),\n z: this._lodMap[tilePoint.z] || tilePoint.z, // try lod map first, then just defualt to zoom level\n x: tilePoint.x,\n y: tilePoint.y\n }, this.options));\n },\n\n onAdd: function(map){\n if (!this._lodMap && this.options.correctZoomLevels) {\n this._lodMap = {}; // make sure we always have an lod map even if its empty\n this.metadata(function(error, metadata) {\n if(!error) {\n var sr = metadata.spatialReference.latestWkid || metadata.spatialReference.wkid;\n\n if (sr === 102100 || sr === 3857) {\n //create the zoom level data\n var arcgisLODs = metadata.tileInfo.lods;\n var correctResolutions = EsriLeaflet.Layers.TiledMapLayer.MercatorZoomLevels;\n\n for(var i = 0; i < arcgisLODs.length; i++) {\n var arcgisLOD = arcgisLODs[i];\n for(var ci in correctResolutions) {\n var correctRes = correctResolutions[ci];\n\n if(this._withinPercentage(arcgisLOD.resolution, correctRes, this.options.zoomOffsetAllowance)) {\n this._lodMap[ci] = arcgisLOD.level;\n break;\n }\n }\n }\n } else {\n EsriLeaflet.Util.warn('L.esri.TiledMapLayer is using a non-mercator spatial reference. Support may be available through Proj4Leaflet http://esri.github.io/esri-leaflet/examples/non-mercator-projection.html');\n }\n }\n\n L.TileLayer.prototype.onAdd.call(this, map);\n }, this);\n } else {\n L.TileLayer.prototype.onAdd.call(this, map);\n }\n },\n\n metadata: function(callback, context){\n this._service.metadata(callback, context);\n return this;\n },\n\n identify: function(){\n return this._service.identify();\n },\n\n authenticate: function(token){\n var tokenQs = '?token=' + token;\n this.tileUrl = (this.options.token) ? this.tileUrl.replace(/\\?token=(.+)/g, tokenQs) : this.tileUrl + tokenQs;\n this.options.token = token;\n this._service.authenticate(token);\n return this;\n },\n\n // from https://github.com/Leaflet/Leaflet/blob/v0.7.2/src/layer/FeatureGroup.js\n // @TODO remove at Leaflet 0.8\n _propagateEvent: function (e) {\n e = L.extend({\n layer: e.target,\n target: this\n }, e);\n this.fire(e.type, e);\n },\n\n _withinPercentage: function (a, b, percentage) {\n var diff = Math.abs((a/b) - 1);\n return diff < percentage;\n }\n});\n\nL.esri.TiledMapLayer = L.esri.Layers.tiledMapLayer;\n\nL.esri.Layers.tiledMapLayer = function(options){\n return new L.esri.Layers.TiledMapLayer(options);\n};\n\nL.esri.tiledMapLayer = function(options){\n return new L.esri.Layers.TiledMapLayer(options);\n};\n","EsriLeaflet.Layers.FeatureGrid = L.Class.extend({\n\n includes: L.Mixin.Events,\n\n options: {\n cellSize: 512,\n updateInterval: 150\n },\n\n initialize: function (options) {\n options = L.setOptions(this, options);\n },\n\n onAdd: function (map) {\n this._map = map;\n this._update = L.Util.limitExecByInterval(this._update, this.options.updateInterval, this);\n\n // @TODO remove for leaflet 0.8\n this._map.addEventListener(this.getEvents(), this);\n\n this._reset();\n this._update();\n },\n\n onRemove: function(){\n this._map.removeEventListener(this.getEvents(), this);\n this._removeCells();\n },\n\n getEvents: function () {\n var events = {\n viewreset: this._reset,\n moveend: this._update,\n zoomend : this._onZoom\n };\n\n return events;\n },\n\n addTo: function(map){\n map.addLayer(this);\n return this;\n },\n\n removeFrom: function(map){\n map.removeLayer(this);\n return this;\n },\n\n _onZoom : function () {\n var zoom = this._map.getZoom();\n\n if (zoom > this.options.maxZoom ||\n zoom < this.options.minZoom) {\n this.removeFrom(this._map);\n this._map.addEventListener('zoomend', this.getEvents().zoomend, this);\n } else if (!this._map.hasLayer(this)) {\n this._map.removeEventListener('zoomend', this.getEvents().zoomend, this);\n this.addTo(this._map);\n }\n\n },\n\n _reset: function () {\n this._removeCells();\n\n this._cells = {};\n this._activeCells = {};\n this._cellsToLoad = 0;\n this._cellsTotal = 0;\n\n // @TODO enable at Leaflet 0.8\n // this._cellNumBounds = this._getCellNumBounds();\n\n this._resetWrap();\n },\n\n _resetWrap: function () {\n var map = this._map,\n crs = map.options.crs;\n\n if (crs.infinite) { return; }\n\n var cellSize = this._getCellSize();\n\n if (crs.wrapLng) {\n this._wrapLng = [\n Math.floor(map.project([0, crs.wrapLng[0]]).x / cellSize),\n Math.ceil(map.project([0, crs.wrapLng[1]]).x / cellSize)\n ];\n }\n\n if (crs.wrapLat) {\n this._wrapLat = [\n Math.floor(map.project([crs.wrapLat[0], 0]).y / cellSize),\n Math.ceil(map.project([crs.wrapLat[1], 0]).y / cellSize)\n ];\n }\n },\n\n _getCellSize: function () {\n return this.options.cellSize;\n },\n\n _update: function () {\n if (!this._map) { return; }\n\n var bounds = this._map.getPixelBounds(),\n zoom = this._map.getZoom(),\n cellSize = this._getCellSize(),\n cellPadding = [cellSize/2,cellSize/2];\n // cellPadding = [0,0]\n\n if (zoom > this.options.maxZoom ||\n zoom < this.options.minZoom) { return; }\n\n // cell coordinates range for the current view\n var topLeft = bounds.min.subtract(cellPadding).divideBy(cellSize).floor();\n topLeft.x = Math.max(topLeft.x, 0);\n topLeft.y = Math.max(topLeft.y, 0);\n\n var cellBounds = L.bounds(topLeft, bounds.max.add(cellPadding).divideBy(cellSize).floor());\n\n // remove any present cells that are off the specified bounds\n this._removeOtherCells(cellBounds);\n this._addCells(cellBounds);\n },\n\n _addCells: function (bounds) {\n var queue = [],\n center = bounds.getCenter(),\n zoom = this._map.getZoom();\n\n var j, i, coords;\n // create a queue of coordinates to load cells from\n for (j = bounds.min.y; j <= bounds.max.y; j++) {\n for (i = bounds.min.x; i <= bounds.max.x; i++) {\n coords = new L.Point(i, j);\n coords.z = zoom;\n\n // @TODO enable at Leaflet 0.8\n // if (this._isValidCell(coords)) {\n // queue.push(coords);\n // }\n\n queue.push(coords);\n }\n }\n var cellsToLoad = queue.length;\n\n if (cellsToLoad === 0) { return; }\n\n this._cellsToLoad += cellsToLoad;\n this._cellsTotal += cellsToLoad;\n\n // sort cell queue to load cells in order of their distance to center\n queue.sort(function (a, b) {\n return a.distanceTo(center) - b.distanceTo(center);\n });\n\n for (i = 0; i < cellsToLoad; i++) {\n this._addCell(queue[i]);\n }\n },\n\n // @TODO enable at Leaflet 0.8\n // _isValidCell: function (coords) {\n // var crs = this._map.options.crs;\n\n // if (!crs.infinite) {\n // // don't load cell if it's out of bounds and not wrapped\n // var bounds = this._cellNumBounds;\n // if (\n // (!crs.wrapLng && (coords.x < bounds.min.x || coords.x > bounds.max.x)) ||\n // (!crs.wrapLat && (coords.y < bounds.min.y || coords.y > bounds.max.y))\n // ) {\n // return false;\n // }\n // }\n\n // if (!this.options.bounds) {\n // return true;\n // }\n\n // // don't load cell if it doesn't intersect the bounds in options\n // var cellBounds = this._cellCoordsToBounds(coords);\n // return L.latLngBounds(this.options.bounds).intersects(cellBounds);\n // },\n\n // converts cell coordinates to its geographical bounds\n _cellCoordsToBounds: function (coords) {\n var map = this._map,\n cellSize = this.options.cellSize,\n\n nwPoint = coords.multiplyBy(cellSize),\n sePoint = nwPoint.add([cellSize, cellSize]),\n\n // @TODO for Leaflet 0.8\n // nw = map.wrapLatLng(map.unproject(nwPoint, coords.z)),\n // se = map.wrapLatLng(map.unproject(sePoint, coords.z));\n\n nw = map.unproject(nwPoint, coords.z).wrap(),\n se = map.unproject(sePoint, coords.z).wrap();\n\n return new L.LatLngBounds(nw, se);\n },\n\n // converts cell coordinates to key for the cell cache\n _cellCoordsToKey: function (coords) {\n return coords.x + ':' + coords.y;\n },\n\n // converts cell cache key to coordiantes\n _keyToCellCoords: function (key) {\n var kArr = key.split(':'),\n x = parseInt(kArr[0], 10),\n y = parseInt(kArr[1], 10);\n\n return new L.Point(x, y);\n },\n\n // remove any present cells that are off the specified bounds\n _removeOtherCells: function (bounds) {\n for (var key in this._cells) {\n if (!bounds.contains(this._keyToCellCoords(key))) {\n this._removeCell(key);\n }\n }\n },\n\n _removeCell: function (key) {\n var cell = this._activeCells[key];\n if(cell){\n delete this._activeCells[key];\n\n if (this.cellLeave) {\n this.cellLeave(cell.bounds, cell.coords);\n }\n\n this.fire('cellleave', {\n bounds: cell.bounds,\n coords: cell.coords\n });\n }\n },\n\n _removeCells: function(){\n for (var key in this._cells) {\n var bounds = this._cells[key].bounds;\n var coords = this._cells[key].coords;\n\n if (this.cellLeave) {\n this.cellLeave(bounds, coords);\n }\n\n this.fire('cellleave', {\n bounds: bounds,\n coords: coords\n });\n }\n },\n\n _addCell: function (coords) {\n\n // wrap cell coords if necessary (depending on CRS)\n this._wrapCoords(coords);\n\n // generate the cell key\n var key = this._cellCoordsToKey(coords);\n\n // get the cell from the cache\n var cell = this._cells[key];\n // if this cell should be shown as isnt active yet (enter)\n\n if (cell && !this._activeCells[key]) {\n if (this.cellEnter) {\n this.cellEnter(cell.bounds, coords);\n }\n\n this.fire('cellenter', {\n bounds: cell.bounds,\n coords: coords\n });\n\n this._activeCells[key] = cell;\n }\n\n // if we dont have this cell in the cache yet (create)\n if (!cell) {\n cell = {\n coords: coords,\n bounds: this._cellCoordsToBounds(coords)\n };\n\n this._cells[key] = cell;\n this._activeCells[key] = cell;\n\n if(this.createCell){\n this.createCell(cell.bounds, coords);\n }\n\n this.fire('cellcreate', {\n bounds: cell.bounds,\n coords: coords\n });\n }\n },\n\n _wrapCoords: function (coords) {\n coords.x = this._wrapLng ? L.Util.wrapNum(coords.x, this._wrapLng) : coords.x;\n coords.y = this._wrapLat ? L.Util.wrapNum(coords.y, this._wrapLat) : coords.y;\n }\n\n // get the global cell coordinates range for the current zoom\n // @TODO enable at Leaflet 0.8\n // _getCellNumBounds: function () {\n // // @TODO for Leaflet 0.8\n // // var bounds = this._map.getPixelWorldBounds(),\n // // size = this._getCellSize();\n // //\n // // return bounds ? L.bounds(\n // // bounds.min.divideBy(size).floor(),\n // // bounds.max.divideBy(size).ceil().subtract([1, 1])) : null;\n // }\n\n});","(function(EsriLeaflet){\n\n EsriLeaflet.Layers.FeatureManager = EsriLeaflet.Layers.FeatureGrid.extend({\n\n /**\n * Options\n */\n\n options: {\n where: '1=1',\n fields: ['*'],\n from: false,\n to: false,\n timeField: false,\n timeFilterMode: 'server',\n simplifyFactor: 0,\n precision: 6\n },\n\n /**\n * Constructor\n */\n\n initialize: function (options) {\n EsriLeaflet.Layers.FeatureGrid.prototype.initialize.call(this, options);\n\n options.url = EsriLeaflet.Util.cleanUrl(options.url);\n options = L.setOptions(this, options);\n\n this._service = new EsriLeaflet.Services.FeatureLayerService(options);\n\n //use case insensitive regex to look for common fieldnames used for indexing\n /*global console */\n if (this.options.fields[0] !== '*'){\n var oidCheck = false;\n for (var i = 0; i < this.options.fields.length; i++){\n if (this.options.fields[i].match(/^(OBJECTID|FID|OID|ID)$/i)){\n oidCheck = true;\n }\n }\n if (oidCheck === false) {\n EsriLeaflet.Util.warn('no known esriFieldTypeOID field detected in fields Array. Please add an attribute field containing unique IDs to ensure the layer can be drawn correctly.');\n }\n }\n\n // Leaflet 0.8 change to new propagation\n this._service.on('authenticationrequired requeststart requestend requesterror requestsuccess', function (e) {\n e = L.extend({\n target: this\n }, e);\n this.fire(e.type, e);\n }, this);\n\n if(this.options.timeField.start && this.options.timeField.end){\n this._startTimeIndex = new BinarySearchIndex();\n this._endTimeIndex = new BinarySearchIndex();\n } else if(this.options.timeField){\n this._timeIndex = new BinarySearchIndex();\n }\n\n this._cache = {};\n this._currentSnapshot = []; // cache of what layers should be active\n this._activeRequests = 0;\n this._pendingRequests = [];\n },\n\n /**\n * Layer Interface\n */\n\n onAdd: function(map){\n return EsriLeaflet.Layers.FeatureGrid.prototype.onAdd.call(this, map);\n },\n\n onRemove: function(map){\n return EsriLeaflet.Layers.FeatureGrid.prototype.onRemove.call(this, map);\n },\n\n getAttribution: function () {\n return this.options.attribution;\n },\n\n /**\n * Feature Managment\n */\n\n createCell: function(bounds, coords){\n this._requestFeatures(bounds, coords);\n },\n\n _requestFeatures: function(bounds, coords, callback){\n this._activeRequests++;\n\n // our first active request fires loading\n if(this._activeRequests === 1){\n this.fire('loading', {\n bounds: bounds\n });\n }\n\n this._buildQuery(bounds).run(function(error, featureCollection, response){\n if(response && response.exceededTransferLimit){\n this.fire('drawlimitexceeded');\n }\n\n // no error, features\n if(!error && featureCollection && featureCollection.features.length && !this._removed){\n // schedule adding features until the next animation frame\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){\n this._addFeatures(featureCollection.features, coords);\n this._postProcessFeatures(bounds);\n }, this));\n }\n\n // no error, no features\n if (!error && featureCollection && !featureCollection.features.length) {\n this._postProcessFeatures(bounds);\n }\n\n if(callback){\n callback.call(this, error, featureCollection);\n }\n }, this);\n },\n\n _postProcessFeatures: function (bounds) {\n //deincriment the request counter now that we have processed features\n this._activeRequests--;\n\n // if there are no more active requests fire a load event for this view\n if(this._activeRequests <= 0){\n this.fire('load', {\n bounds: bounds\n });\n }\n },\n\n _cacheKey: function (coords){\n return coords.z + ':' + coords.x + ':' +coords.y;\n },\n\n _addFeatures: function(features, coords){\n var key = this._cacheKey(coords);\n this._cache[key] = this._cache[key] || [];\n\n for (var i = features.length - 1; i >= 0; i--) {\n var id = features[i].id;\n this._currentSnapshot.push(id);\n this._cache[key].push(id);\n /*\n should we refactor the code in FeatureManager.setWhere()\n so that we can reuse it to make sure that we remove features\n on the client that are removed from the service?\n */\n\n }\n\n if(this.options.timeField){\n this._buildTimeIndexes(features);\n }\n\n var zoom = this._map.getZoom();\n\n if (zoom > this.options.maxZoom ||\n zoom < this.options.minZoom) { return; }\n\n this.createLayers(features);\n },\n\n _buildQuery: function(bounds){\n var query = this._service.query()\n .intersects(bounds)\n .where(this.options.where)\n .fields(this.options.fields)\n .precision(this.options.precision);\n\n if(this.options.simplifyFactor){\n query.simplify(this._map, this.options.simplifyFactor);\n }\n\n if(this.options.timeFilterMode === 'server' && this.options.from && this.options.to){\n query.between(this.options.from, this.options.to);\n }\n\n return query;\n },\n\n /**\n * Where Methods\n */\n\n setWhere: function(where, callback, context){\n\n this.options.where = (where && where.length) ? where : '1=1';\n\n var oldSnapshot = [];\n var newSnapshot = [];\n var pendingRequests = 0;\n var mostRecentError = null;\n var requestCallback = L.Util.bind(function(error, featureCollection){\n pendingRequests--;\n\n if(error) {\n mostRecentError = error;\n }\n\n if(featureCollection){\n for (var i = featureCollection.features.length - 1; i >= 0; i--) {\n newSnapshot.push(featureCollection.features[i].id);\n }\n }\n\n if(pendingRequests <= 0) {\n this._currentSnapshot = newSnapshot;\n // delay adding features until the next animation frame\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function() {\n this.removeLayers(oldSnapshot);\n this.addLayers(newSnapshot);\n if(callback) {\n callback.call(context, mostRecentError);\n }\n }, this));\n }\n }, this);\n\n for (var i = this._currentSnapshot.length - 1; i >= 0; i--) {\n oldSnapshot.push(this._currentSnapshot[i]);\n }\n\n for(var key in this._activeCells){\n pendingRequests++;\n var coords = this._keyToCellCoords(key);\n var bounds = this._cellCoordsToBounds(coords);\n this._requestFeatures(bounds, key, requestCallback);\n }\n\n return this;\n },\n\n getWhere: function(){\n return this.options.where;\n },\n\n /**\n * Time Range Methods\n */\n\n getTimeRange: function(){\n return [this.options.from, this.options.to];\n },\n\n setTimeRange: function(from, to, callback, context){\n var oldFrom = this.options.from;\n var oldTo = this.options.to;\n var pendingRequests = 0;\n var mostRecentError = null;\n var requestCallback = L.Util.bind(function(error){\n if(error){\n mostRecentError = error;\n }\n\n this._filterExistingFeatures(oldFrom, oldTo, from, to);\n\n pendingRequests--;\n\n if(callback && pendingRequests <= 0){\n callback.call(context, mostRecentError);\n }\n }, this);\n\n this.options.from = from;\n this.options.to = to;\n\n this._filterExistingFeatures(oldFrom, oldTo, from, to);\n\n if(this.options.timeFilterMode === 'server') {\n for(var key in this._activeCells){\n pendingRequests++;\n var coords = this._keyToCellCoords(key);\n var bounds = this._cellCoordsToBounds(coords);\n this._requestFeatures(bounds, key, requestCallback);\n }\n }\n },\n\n refresh: function(){\n for(var key in this._activeCells){\n var coords = this._keyToCellCoords(key);\n var bounds = this._cellCoordsToBounds(coords);\n this._requestFeatures(bounds, key);\n }\n\n if(this.redraw){\n this.once('load', function(){\n this.eachFeature(function(layer){\n this._redraw(layer.feature.id);\n }, this);\n }, this);\n }\n },\n\n _filterExistingFeatures: function (oldFrom, oldTo, newFrom, newTo) {\n var layersToRemove = (oldFrom && oldTo) ? this._getFeaturesInTimeRange(oldFrom, oldTo) : this._currentSnapshot;\n var layersToAdd = this._getFeaturesInTimeRange(newFrom, newTo);\n\n if(layersToAdd.indexOf){\n for (var i = 0; i < layersToAdd.length; i++) {\n var shouldRemoveLayer = layersToRemove.indexOf(layersToAdd[i]);\n if(shouldRemoveLayer >= 0){\n layersToRemove.splice(shouldRemoveLayer, 1);\n }\n }\n }\n\n // schedule adding features until the next animation frame\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){\n this.removeLayers(layersToRemove);\n this.addLayers(layersToAdd);\n }, this));\n },\n\n _getFeaturesInTimeRange: function(start, end){\n var ids = [];\n var search;\n\n if(this.options.timeField.start && this.options.timeField.end){\n var startTimes = this._startTimeIndex.between(start, end);\n var endTimes = this._endTimeIndex.between(start, end);\n search = startTimes.concat(endTimes);\n } else {\n search = this._timeIndex.between(start, end);\n }\n\n for (var i = search.length - 1; i >= 0; i--) {\n ids.push(search[i].id);\n }\n\n return ids;\n },\n\n _buildTimeIndexes: function(geojson){\n var i;\n var feature;\n if(this.options.timeField.start && this.options.timeField.end){\n var startTimeEntries = [];\n var endTimeEntries = [];\n for (i = geojson.length - 1; i >= 0; i--) {\n feature = geojson[i];\n startTimeEntries.push( {\n id: feature.id,\n value: new Date(feature.properties[this.options.timeField.start])\n });\n endTimeEntries.push( {\n id: feature.id,\n value: new Date(feature.properties[this.options.timeField.end])\n });\n }\n this._startTimeIndex.bulkAdd(startTimeEntries);\n this._endTimeIndex.bulkAdd(endTimeEntries);\n } else {\n var timeEntries = [];\n for (i = geojson.length - 1; i >= 0; i--) {\n feature = geojson[i];\n timeEntries.push( {\n id: feature.id,\n value: new Date(feature.properties[this.options.timeField])\n });\n }\n\n this._timeIndex.bulkAdd(timeEntries);\n }\n },\n\n _featureWithinTimeRange: function(feature){\n if(!this.options.from || !this.options.to){\n return true;\n }\n\n var from = +this.options.from.valueOf();\n var to = +this.options.to.valueOf();\n\n if(typeof this.options.timeField === 'string'){\n var date = +feature.properties[this.options.timeField];\n return (date >= from) && (date <= to);\n }\n\n if(this.options.timeField.start && this.options.timeField.end){\n var startDate = +feature.properties[this.options.timeField.start];\n var endDate = +feature.properties[this.options.timeField.end];\n return ((startDate >= from) && (startDate <= to)) || ((endDate >= from) && (endDate <= to));\n }\n },\n\n /**\n * Service Methods\n */\n\n authenticate: function(token){\n this._service.authenticate(token);\n return this;\n },\n\n metadata: function(callback, context){\n this._service.metadata(callback, context);\n return this;\n },\n\n query: function(){\n return this._service.query();\n },\n\n _getMetadata: function(callback){\n if(this._metadata){\n var error;\n callback(error, this._metadata);\n } else {\n this.metadata(L.Util.bind(function(error, response) {\n this._metadata = response;\n callback(error, this._metadata);\n }, this));\n }\n },\n\n addFeature: function(feature, callback, context){\n this._getMetadata(L.Util.bind(function(error, metadata){\n this._service.addFeature(feature, L.Util.bind(function(error, response){\n if(!error){\n // assign ID from result to appropriate objectid field from service metadata\n feature.properties[metadata.objectIdField] = response.objectId;\n\n // we also need to update the geojson id for createLayers() to function\n feature.id = response.objectId;\n this.createLayers([feature]);\n }\n\n if(callback){\n callback.call(context, error, response);\n }\n }, this));\n }, this));\n },\n\n updateFeature: function(feature, callback, context){\n this._service.updateFeature(feature, function(error, response){\n if(!error){\n this.removeLayers([feature.id], true);\n this.createLayers([feature]);\n }\n\n if(callback){\n callback.call(context, error, response);\n }\n }, this);\n },\n\n deleteFeature: function(id, callback, context){\n this._service.deleteFeature(id, function(error, response){\n if(!error && response.objectId){\n this.removeLayers([response.objectId], true);\n }\n\n if(callback){\n callback.call(context, error, response);\n }\n }, this);\n },\n\n deleteFeatures: function(ids, callback, context){\n return this._service.deleteFeatures(ids, function(error, response){\n if(!error && response.length > 0){\n for (var i=0; i +query) {\n maxIndex = currentIndex - 1;\n } else {\n return currentIndex;\n }\n }\n\n return ~maxIndex;\n };\n\n BinarySearchIndex.prototype.sort = function(){\n this.values.sort(function(a, b) {\n return +b.value - +a.value;\n }).reverse();\n this.dirty = false;\n };\n\n BinarySearchIndex.prototype.between = function(start, end){\n if(this.dirty){\n this.sort();\n }\n\n var startIndex = this._query(start);\n var endIndex = this._query(end);\n\n if(startIndex === 0 && endIndex === 0){\n return [];\n }\n\n startIndex = Math.abs(startIndex);\n endIndex = (endIndex < 0) ? Math.abs(endIndex): endIndex + 1;\n\n return this.values.slice(startIndex, endIndex);\n };\n\n BinarySearchIndex.prototype.bulkAdd = function(items){\n this.dirty = true;\n this.values = this.values.concat(items);\n };\n\n})(EsriLeaflet);\n","EsriLeaflet.Layers.FeatureLayer = EsriLeaflet.Layers.FeatureManager.extend({\n\n statics: {\n EVENTS: 'click dblclick mouseover mouseout mousemove contextmenu popupopen popupclose'\n },\n\n options: {\n cacheLayers: true\n },\n\n /**\n * Constructor\n */\n\n initialize: function (options) {\n EsriLeaflet.Layers.FeatureManager.prototype.initialize.call(this, options);\n\n options = L.setOptions(this, options);\n\n this._layers = {};\n this._leafletIds = {};\n this._key = 'c'+(Math.random() * 1e9).toString(36).replace('.', '_');\n },\n\n /**\n * Layer Interface\n */\n\n onAdd: function(map){\n map.on('zoomstart zoomend', function(e){\n this._zooming = (e.type === 'zoomstart');\n }, this);\n this._removed = false;\n\n return EsriLeaflet.Layers.FeatureManager.prototype.onAdd.call(this, map);\n },\n\n onRemove: function(map){\n this._removed = true;\n for (var i in this._layers) {\n map.removeLayer(this._layers[i]);\n }\n\n return EsriLeaflet.Layers.FeatureManager.prototype.onRemove.call(this, map);\n },\n\n createNewLayer: function(geojson){\n // @TODO Leaflet 0.8\n //newLayer = L.GeoJSON.geometryToLayer(geojson, this.options);\n return L.GeoJSON.geometryToLayer(geojson, this.options.pointToLayer, L.GeoJSON.coordsToLatLng, this.options);\n },\n\n _updateLayer: function(layer, geojson){\n // convert the geojson coordinates into a Leaflet LatLng array/nested arrays\n // pass it to setLatLngs to update layer geometries\n var latlngs = [];\n var coordsToLatLng = this.options.coordsToLatLng || L.GeoJSON.coordsToLatLng;\n\n // copy new attributes, if present\n if (geojson.properties) {\n layer.feature.properties = geojson.properties;\n }\n\n switch(geojson.geometry.type){\n case 'Point':\n latlngs = L.GeoJSON.coordsToLatLng(geojson.geometry.coordinates);\n layer.setLatLng(latlngs);\n break;\n case 'LineString':\n latlngs = L.GeoJSON.coordsToLatLngs(geojson.geometry.coordinates, 0, coordsToLatLng);\n layer.setLatLngs(latlngs);\n break;\n case 'MultiLineString':\n latlngs = L.GeoJSON.coordsToLatLngs(geojson.geometry.coordinates, 1, coordsToLatLng);\n layer.setLatLngs(latlngs);\n break;\n case 'Polygon':\n latlngs = L.GeoJSON.coordsToLatLngs(geojson.geometry.coordinates, 1, coordsToLatLng);\n layer.setLatLngs(latlngs);\n break;\n case 'MultiPolygon':\n latlngs = L.GeoJSON.coordsToLatLngs(geojson.geometry.coordinates, 2, coordsToLatLng);\n layer.setLatLngs(latlngs);\n break;\n }\n },\n\n /**\n * Feature Management Methods\n */\n\n createLayers: function(features){\n for (var i = features.length - 1; i >= 0; i--) {\n\n var geojson = features[i];\n\n var layer = this._layers[geojson.id];\n var newLayer;\n\n if(layer && !this._map.hasLayer(layer)){\n this._map.addLayer(layer);\n }\n\n // update geomerty if neccessary\n if (layer && (layer.setLatLngs || layer.setLatLng)) {\n this._updateLayer(layer, geojson);\n }\n\n\n if(!layer){\n newLayer = this.createNewLayer(geojson);\n newLayer.feature = geojson;\n\n if (this.options.style) {\n newLayer._originalStyle = this.options.style;\n }\n\n // circleMarker check\n else if (newLayer.setStyle) {\n newLayer._originalStyle = newLayer.options;\n }\n\n newLayer._leaflet_id = this._key + '_' + geojson.id;\n\n this._leafletIds[newLayer._leaflet_id] = geojson.id;\n\n // bubble events from layers to this\n // @TODO Leaflet 0.8\n // newLayer.addEventParent(this);\n\n newLayer.on(EsriLeaflet.Layers.FeatureLayer.EVENTS, this._propagateEvent, this);\n\n // bind a popup if we have one\n if(this._popup && newLayer.bindPopup){\n newLayer.bindPopup(this._popup(newLayer.feature, newLayer), this._popupOptions);\n }\n\n if(this.options.onEachFeature){\n this.options.onEachFeature(newLayer.feature, newLayer);\n }\n\n // cache the layer\n this._layers[newLayer.feature.id] = newLayer;\n\n // style the layer\n this.resetStyle(newLayer.feature.id);\n\n this.fire('createfeature', {\n feature: newLayer.feature\n });\n\n // add the layer if it is within the time bounds or our layer is not time enabled\n if(!this.options.timeField || (this.options.timeField && this._featureWithinTimeRange(geojson)) ){\n this._map.addLayer(newLayer);\n }\n }\n }\n },\n\n addLayers: function(ids){\n for (var i = ids.length - 1; i >= 0; i--) {\n var layer = this._layers[ids[i]];\n if(layer){\n this.fire('addfeature', {\n feature: layer.feature\n });\n this._map.addLayer(layer);\n }\n }\n },\n\n removeLayers: function(ids, permanent){\n for (var i = ids.length - 1; i >= 0; i--) {\n var id = ids[i];\n var layer = this._layers[id];\n if(layer){\n this.fire('removefeature', {\n feature: layer.feature,\n permanent: permanent\n });\n this._map.removeLayer(layer);\n }\n if(layer && permanent){\n delete this._layers[id];\n }\n }\n },\n\n cellEnter: function(bounds, coords){\n if(!this._zooming){\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){\n var cacheKey = this._cacheKey(coords);\n var cellKey = this._cellCoordsToKey(coords);\n var layers = this._cache[cacheKey];\n if(this._activeCells[cellKey] && layers){\n this.addLayers(layers);\n }\n }, this));\n }\n },\n\n cellLeave: function(bounds, coords){\n if(!this._zooming){\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){\n var cacheKey = this._cacheKey(coords);\n var cellKey = this._cellCoordsToKey(coords);\n var layers = this._cache[cacheKey];\n var mapBounds = this._map.getBounds();\n if(!this._activeCells[cellKey] && layers){\n var removable = true;\n\n for (var i = 0; i < layers.length; i++) {\n var layer = this._layers[layers[i]];\n if(layer && layer.getBounds && mapBounds.intersects(layer.getBounds())){\n removable = false;\n }\n }\n\n if(removable){\n this.removeLayers(layers, !this.options.cacheLayers);\n }\n\n if(!this.options.cacheLayers && removable){\n delete this._cache[cacheKey];\n delete this._cells[cellKey];\n delete this._activeCells[cellKey];\n }\n }\n }, this));\n }\n },\n\n /**\n * Styling Methods\n */\n\n resetStyle: function (id) {\n var layer = this._layers[id];\n\n if(layer){\n this.setFeatureStyle(layer.feature.id, layer._originalStyle);\n }\n\n return this;\n },\n\n setStyle: function (style) {\n this.options.style = style;\n this.eachFeature(function (layer) {\n this.setFeatureStyle(layer.feature.id, style);\n }, this);\n return this;\n },\n\n setFeatureStyle: function (id, style) {\n var layer = this._layers[id];\n\n if (typeof style === 'function') {\n style = style(layer.feature);\n }\n\n if (!style && !layer.defaultOptions) {\n style = L.Path.prototype.options;\n style.fill = true; //not set by default\n }\n\n if (layer && layer.setStyle) {\n layer.setStyle(style);\n }\n\n return this;\n },\n\n /**\n * Popup Methods\n */\n\n bindPopup: function (fn, options) {\n this._popup = fn;\n this._popupOptions = options;\n for (var i in this._layers) {\n var layer = this._layers[i];\n var popupContent = this._popup(layer.feature, layer);\n layer.bindPopup(popupContent, options);\n }\n return this;\n },\n\n unbindPopup: function () {\n this._popup = false;\n for (var i in this._layers) {\n var layer = this._layers[i];\n if (layer.unbindPopup) {\n layer.unbindPopup();\n } else if (layer.getLayers) {\n var groupLayers = layer.getLayers();\n for (var j in groupLayers) {\n var gLayer = groupLayers[j];\n gLayer.unbindPopup();\n }\n }\n }\n return this;\n },\n\n /**\n * Utility Methods\n */\n\n eachFeature: function (fn, context) {\n for (var i in this._layers) {\n fn.call(context, this._layers[i]);\n }\n return this;\n },\n\n getFeature: function (id) {\n return this._layers[id];\n },\n\n bringToBack: function () {\n this.eachFeature(function (layer) {\n if(layer.bringToBack) {\n layer.bringToBack();\n }\n });\n },\n\n bringToFront: function () {\n this.eachFeature(function (layer) {\n if(layer.bringToFront) {\n layer.bringToFront();\n }\n });\n },\n\n redraw: function (id) {\n if (id) {\n this._redraw(id);\n }\n return this;\n },\n\n _redraw: function(id) {\n var layer = this._layers[id];\n var geojson = layer.feature;\n\n // if this looks like a marker\n if (layer && layer.setIcon && this.options.pointToLayer) {\n // update custom symbology, if necessary\n if (this.options.pointToLayer){\n var getIcon = this.options.pointToLayer(geojson, L.latLng(geojson.geometry.coordinates[1], geojson.geometry.coordinates[0]));\n var updatedIcon = getIcon.options.icon;\n layer.setIcon(updatedIcon);\n }\n }\n\n // looks like a vector marker (circleMarker)\n if (layer && layer.setStyle && this.options.pointToLayer) {\n var getStyle = this.options.pointToLayer(geojson, L.latLng(geojson.geometry.coordinates[1], geojson.geometry.coordinates[0]));\n var updatedStyle = getStyle.options;\n this.setFeatureStyle(geojson.id, updatedStyle);\n }\n\n // looks like a path (polygon/polyline)\n if(layer && layer.setStyle && this.options.style) {\n this.resetStyle(geojson.id);\n }\n },\n\n // from https://github.com/Leaflet/Leaflet/blob/v0.7.2/src/layer/FeatureGroup.js\n // @TODO remove at Leaflet 0.8\n _propagateEvent: function (e) {\n e.layer = this._layers[this._leafletIds[e.target._leaflet_id]];\n e.target = this;\n this.fire(e.type, e);\n }\n});\n\nEsriLeaflet.FeatureLayer = EsriLeaflet.Layers.FeatureLayer;\n\nEsriLeaflet.Layers.featureLayer = function(options){\n return new EsriLeaflet.Layers.FeatureLayer(options);\n};\n\nEsriLeaflet.featureLayer = function(options){\n return new EsriLeaflet.Layers.FeatureLayer(options);\n};\n","EsriLeaflet.Controls.Logo = L.Control.extend({\n options: {\n position: 'bottomright',\n marginTop: 0,\n marginLeft: 0,\n marginBottom: 0,\n marginRight: 0\n },\n\n onAdd: function () {\n var div = L.DomUtil.create('div', 'esri-leaflet-logo');\n div.style.marginTop = this.options.marginTop;\n div.style.marginLeft = this.options.marginLeft;\n div.style.marginBottom = this.options.marginBottom;\n div.style.marginRight = this.options.marginRight;\n div.innerHTML = this._adjustLogo(this._map._size);\n\n this._map.on('resize', function(e){\n div.innerHTML = this._adjustLogo(e.newSize);\n }, this);\n\n return div;\n },\n\n _adjustLogo: function (mapSize) {\n if (mapSize.x <= 600 || mapSize.y <= 600){\n return '\"Powered';\n }\n else {\n return '\"Powered';\n }\n }\n\n});\n\nEsriLeaflet.Controls.logo = function(options){\n return new L.esri.Controls.Logo(options);\n};\n"]} \ No newline at end of file diff --git a/dist/esri-leaflet.js b/dist/esri-leaflet.js index 560fc3595..409672678 100644 --- a/dist/esri-leaflet.js +++ b/dist/esri-leaflet.js @@ -1,5 +1,5 @@ -/*! esri-leaflet - v1.0.2 - 2015-12-31 -* Copyright (c) 2015 Environmental Systems Research Institute, Inc. +/*! esri-leaflet - v1.0.3 - 2016-02-22 +* Copyright (c) 2016 Environmental Systems Research Institute, Inc. * Apache License*/ (function (factory) { //define an AMD module that relies on 'leaflet' @@ -17,8 +17,8 @@ } }(function (L) { -var EsriLeaflet={VERSION:"1.0.2",Layers:{},Services:{},Controls:{},Tasks:{},Util:{},Support:{CORS:!!(window.XMLHttpRequest&&"withCredentials"in new XMLHttpRequest),pointerEvents:""===document.documentElement.style.pointerEvents}};"undefined"!=typeof window&&window.L&&(window.L.esri=EsriLeaflet),function(a){function b(a){var b={};for(var c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);return b}function c(a,b){for(var c=0;cd;d++)b=a[d+1],c+=(b[0]-f[0])*(b[1]+f[1]),f=b;return c>=0}function f(a,b,c,d){var e=(d[0]-c[0])*(a[1]-c[1])-(d[1]-c[1])*(a[0]-c[0]),f=(b[0]-a[0])*(a[1]-c[1])-(b[1]-a[1])*(a[0]-c[0]),g=(d[1]-c[1])*(b[0]-a[0])-(d[0]-c[0])*(b[1]-a[1]);if(0!==g){var h=e/g,i=f/g;if(h>=0&&1>=h&&i>=0&&1>=i)return!0}return!1}function g(a,b){for(var c=0;c=0;b--)if(c=h[b][0],i(c,f)){h[b].push(f),o=!0;break}o||n.push(f)}for(;n.length;){f=n.pop();var p=!1;for(b=h.length-1;b>=0;b--)if(c=h[b][0],g(c,f)){h[b].push(f),p=!0;break}p||h.push([f.reverse()])}return 1===h.length?{type:"Polygon",coordinates:h[0]}:{type:"MultiPolygon",coordinates:h}}function k(a){var b=[],c=a.slice(0),f=d(c.shift().slice(0));if(f.length>=4){e(f)||f.reverse(),b.push(f);for(var g=0;g=4&&(e(h)&&h.reverse(),b.push(h))}}return b}function l(a){for(var b=[],c=0;c=0;e--){var f=d[e].slice(0);b.push(f)}return b}var m=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.msRequestAnimationFrame||function(a){return window.setTimeout(a,1e3/60)};a.Util.extentToBounds=function(a){var b=new L.LatLng(a.ymin,a.xmin),c=new L.LatLng(a.ymax,a.xmax);return new L.LatLngBounds(b,c)},a.Util.boundsToExtent=function(a){return a=L.latLngBounds(a),{xmin:a.getSouthWest().lng,ymin:a.getSouthWest().lat,xmax:a.getNorthEast().lng,ymax:a.getNorthEast().lat,spatialReference:{wkid:4326}}},a.Util.arcgisToGeojson=function(c,d){var e={};return"number"==typeof c.x&&"number"==typeof c.y&&(e.type="Point",e.coordinates=[c.x,c.y]),c.points&&(e.type="MultiPoint",e.coordinates=c.points.slice(0)),c.paths&&(1===c.paths.length?(e.type="LineString",e.coordinates=c.paths[0].slice(0)):(e.type="MultiLineString",e.coordinates=c.paths.slice(0))),c.rings&&(e=j(c.rings.slice(0))),(c.geometry||c.attributes)&&(e.type="Feature",e.geometry=c.geometry?a.Util.arcgisToGeojson(c.geometry):null,e.properties=c.attributes?b(c.attributes):null,c.attributes&&(e.id=c.attributes[d]||c.attributes.OBJECTID||c.attributes.FID)),e},a.Util.geojsonToArcGIS=function(c,d){d=d||"OBJECTID";var e,f={wkid:4326},g={};switch(c.type){case"Point":g.x=c.coordinates[0],g.y=c.coordinates[1],g.spatialReference=f;break;case"MultiPoint":g.points=c.coordinates.slice(0),g.spatialReference=f;break;case"LineString":g.paths=[c.coordinates.slice(0)],g.spatialReference=f;break;case"MultiLineString":g.paths=c.coordinates.slice(0),g.spatialReference=f;break;case"Polygon":g.rings=k(c.coordinates.slice(0)),g.spatialReference=f;break;case"MultiPolygon":g.rings=l(c.coordinates.slice(0)),g.spatialReference=f;break;case"Feature":c.geometry&&(g.geometry=a.Util.geojsonToArcGIS(c.geometry,d)),g.attributes=c.properties?b(c.properties):{},c.id&&(g.attributes[d]=c.id);break;case"FeatureCollection":for(g=[],e=0;e=0;h--)f.features.push(a.Util.arcgisToGeojson(g[h],d));return f},a.Util.cleanUrl=function(a){return a=a.replace(/^\s+|\s+$|\A\s+|\s+\z/g,""),"/"!==a[a.length-1]&&(a+="/"),a},a.Util.isArcgisOnline=function(a){return/\.arcgis\.com.*?FeatureServer/g.test(a)},a.Util.geojsonTypeToArcGIS=function(a){var b;switch(a){case"Point":b="esriGeometryPoint";break;case"MultiPoint":b="esriGeometryMultipoint";break;case"LineString":b="esriGeometryPolyline";break;case"MultiLineString":b="esriGeometryPolyline";break;case"Polygon":b="esriGeometryPolygon";break;case"MultiPolygon":b="esriGeometryPolygon"}return b},a.Util.requestAnimationFrame=L.Util.bind(m,window),a.Util.warn=function(a){console&&console.warn&&console.warn(a)}}(EsriLeaflet),function(a){function b(a){var b="";a.f=a.f||"json";for(var c in a)if(a.hasOwnProperty(c)){var d,e=a[c],f=Object.prototype.toString.call(e);b.length&&(b+="&"),d="[object Array]"===f?"[object Object]"===Object.prototype.toString.call(e[0])?JSON.stringify(e):e.join(","):"[object Object]"===f?JSON.stringify(e):"[object Date]"===f?e.valueOf():e,b+=encodeURIComponent(c)+"="+encodeURIComponent(d)}return b}function c(a,b){var c=new XMLHttpRequest;return c.onerror=function(d){c.onreadystatechange=L.Util.falseFn,a.call(b,{error:{code:500,message:"XMLHttpRequest error"}},null)},c.onreadystatechange=function(){var d,e;if(4===c.readyState){try{d=JSON.parse(c.responseText)}catch(f){d=null,e={code:500,message:"Could not parse response as JSON. This could also be caused by a CORS or XMLHttpRequest error."}}!e&&d.error&&(e=d.error,d=null),c.onerror=L.Util.falseFn,a.call(b,e,d)}},c}var d=0;window._EsriLeafletCallbacks={},a.Request={request:function(d,e,f,g){var h=b(e),i=c(f,g),j=(d+"?"+h).length;if(2e3>=j&&L.esri.Support.CORS)i.open("GET",d+"?"+h),i.send(null);else{if(!(j>2e3&&L.esri.Support.CORS))return 2e3>=j&&!L.esri.Support.CORS?L.esri.Request.get.JSONP(d,e,f,g):void a.Util.warn("a request to "+d+" was longer then 2000 characters and this browser cannot make a cross-domain post request. Please use a proxy http://esri.github.io/esri-leaflet/api-reference/request.html");i.open("POST",d),i.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),i.send(h)}return i},post:{XMLHTTP:function(a,d,e,f){var g=c(e,f);return g.open("POST",a),g.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),g.send(b(d)),g}},get:{CORS:function(a,d,e,f){var g=c(e,f);return g.open("GET",a+"?"+b(d),!0),g.send(null),g},JSONP:function(a,c,e,f){var g="c"+d;c.callback="window._EsriLeafletCallbacks."+g;var h=L.DomUtil.create("script",null,document.body);return h.type="text/javascript",h.src=a+"?"+b(c),h.id=g,window._EsriLeafletCallbacks[g]=function(a){if(window._EsriLeafletCallbacks[g]!==!0){var b,c=Object.prototype.toString.call(a);"[object Object]"!==c&&"[object Array]"!==c&&(b={error:{code:500,message:"Expected array or object as JSONP response"}},a=null),!b&&a.error&&(b=a,a=null),e.call(f,b,a),window._EsriLeafletCallbacks[g]=!0}},d++,{id:g,url:h.src,abort:function(){window._EsriLeafletCallbacks._callback[g]({code:0,message:"Request aborted."})}}}}},a.get=a.Support.CORS?a.Request.get.CORS:a.Request.get.JSONP,a.post=a.Request.post.XMLHTTP,a.request=a.Request.request}(EsriLeaflet),EsriLeaflet.Services.Service=L.Class.extend({includes:L.Mixin.Events,options:{proxy:!1,useCors:EsriLeaflet.Support.CORS},initialize:function(a){a=a||{},this._requestQueue=[],this._authenticating=!1,L.Util.setOptions(this,a),this.options.url=EsriLeaflet.Util.cleanUrl(this.options.url)},get:function(a,b,c,d){return this._request("get",a,b,c,d)},post:function(a,b,c,d){return this._request("post",a,b,c,d)},request:function(a,b,c,d){return this._request("request",a,b,c,d)},metadata:function(a,b){return this._request("get","",{},a,b)},authenticate:function(a){return this._authenticating=!1,this.options.token=a,this._runQueue(),this},_request:function(a,b,c,d,e){this.fire("requeststart",{url:this.options.url+b,params:c,method:a});var f=this._createServiceCallback(a,b,c,d,e);if(this.options.token&&(c.token=this.options.token),this._authenticating)return void this._requestQueue.push([a,b,c,d,e]);var g=this.options.proxy?this.options.proxy+"?"+this.options.url+b:this.options.url+b;return"get"!==a&&"request"!==a||this.options.useCors?EsriLeaflet[a](g,c,f):EsriLeaflet.Request.get.JSONP(g,c,f)},_createServiceCallback:function(a,b,c,d,e){return L.Util.bind(function(f,g){!f||499!==f.code&&498!==f.code||(this._authenticating=!0,this._requestQueue.push([a,b,c,d,e]),this.fire("authenticationrequired",{authenticate:L.Util.bind(this.authenticate,this)}),f.authenticate=L.Util.bind(this.authenticate,this)),d.call(e,f,g),f?this.fire("requesterror",{url:this.options.url+b,params:c,message:f.message,code:f.code,method:a}):this.fire("requestsuccess",{url:this.options.url+b,params:c,response:g,method:a}),this.fire("requestend",{url:this.options.url+b,params:c,method:a})},this)},_runQueue:function(){for(var a=this._requestQueue.length-1;a>=0;a--){var b=this._requestQueue[a],c=b.shift();this[c].apply(this,b)}this._requestQueue=[]}}),EsriLeaflet.Services.service=function(a){return new EsriLeaflet.Services.Service(a)},EsriLeaflet.Services.FeatureLayerService=EsriLeaflet.Services.Service.extend({options:{idAttribute:"OBJECTID"},query:function(){return new EsriLeaflet.Tasks.Query(this)},addFeature:function(a,b,c){return delete a.id,a=EsriLeaflet.Util.geojsonToArcGIS(a),this.post("addFeatures",{features:[a]},function(a,d){var e=d&&d.addResults?d.addResults[0]:void 0;b&&b.call(c,a||d.addResults[0].error,e)},c)},updateFeature:function(a,b,c){return a=EsriLeaflet.Util.geojsonToArcGIS(a,this.options.idAttribute),this.post("updateFeatures",{features:[a]},function(a,d){var e=d&&d.updateResults?d.updateResults[0]:void 0;b&&b.call(c,a||d.updateResults[0].error,e)},c)},deleteFeature:function(a,b,c){return this.post("deleteFeatures",{objectIds:a},function(a,d){var e=d&&d.deleteResults?d.deleteResults[0]:void 0;b&&b.call(c,a||d.deleteResults[0].error,e)},c)},deleteFeatures:function(a,b,c){return this.post("deleteFeatures",{objectIds:a},function(a,d){var e=d&&d.deleteResults?d.deleteResults:void 0;b&&b.call(c,a||d.deleteResults[0].error,e)},c)}}),EsriLeaflet.Services.featureLayerService=function(a){return new EsriLeaflet.Services.FeatureLayerService(a)},EsriLeaflet.Services.MapService=EsriLeaflet.Services.Service.extend({identify:function(){return new EsriLeaflet.Tasks.identifyFeatures(this)},find:function(){return new EsriLeaflet.Tasks.Find(this)},query:function(){return new EsriLeaflet.Tasks.Query(this)}}),EsriLeaflet.Services.mapService=function(a){return new EsriLeaflet.Services.MapService(a)},EsriLeaflet.Services.ImageService=EsriLeaflet.Services.Service.extend({query:function(){return new EsriLeaflet.Tasks.Query(this)},identify:function(){return new EsriLeaflet.Tasks.IdentifyImage(this)}}),EsriLeaflet.Services.imageService=function(a){return new EsriLeaflet.Services.ImageService(a)},EsriLeaflet.Tasks.Task=L.Class.extend({options:{proxy:!1,useCors:EsriLeaflet.Support.CORS},generateSetter:function(a,b){return L.Util.bind(function(b){return this.params[a]=b,this},b)},initialize:function(a){if(a.request&&a.options?(this._service=a,L.Util.setOptions(this,a.options)):(L.Util.setOptions(this,a),this.options.url=L.esri.Util.cleanUrl(a.url)),this.params=L.Util.extend({},this.params||{}),this.setters)for(var b in this.setters){var c=this.setters[b];this[b]=this.generateSetter(c,this)}},token:function(a){return this._service?this._service.authenticate(a):this.params.token=a,this},request:function(a,b){return this._service?this._service.request(this.path,this.params,a,b):this._request("request",this.path,this.params,a,b)},_request:function(a,b,c,d,e){var f=this.options.proxy?this.options.proxy+"?"+this.options.url+b:this.options.url+b;return"get"!==a&&"request"!==a||this.options.useCors?EsriLeaflet[a](f,c,d,e):EsriLeaflet.Request.get.JSONP(f,c,d,e)}}),EsriLeaflet.Tasks.Query=EsriLeaflet.Tasks.Task.extend({setters:{offset:"offset",limit:"limit",fields:"outFields",precision:"geometryPrecision",featureIds:"objectIds",returnGeometry:"returnGeometry",token:"token"},path:"query",params:{returnGeometry:!0,where:"1=1",outSr:4326,outFields:"*"},within:function(a){return this._setGeometry(a),this.params.spatialRel="esriSpatialRelContains",this},intersects:function(a){return this._setGeometry(a),this.params.spatialRel="esriSpatialRelIntersects",this},contains:function(a){return this._setGeometry(a),this.params.spatialRel="esriSpatialRelWithin",this},overlaps:function(a){return this._setGeometry(a),this.params.spatialRel="esriSpatialRelOverlaps",this},nearby:function(a,b){return a=L.latLng(a),this.params.geometry=[a.lng,a.lat],this.params.geometryType="esriGeometryPoint",this.params.spatialRel="esriSpatialRelIntersects",this.params.units="esriSRUnit_Meter",this.params.distance=b,this.params.inSr=4326,this},where:function(a){return this.params.where=a,this},between:function(a,b){return this.params.time=[a.valueOf(),b.valueOf()],this},simplify:function(a,b){var c=Math.abs(a.getBounds().getWest()-a.getBounds().getEast());return this.params.maxAllowableOffset=c/a.getSize().y*b,this},orderBy:function(a,b){return b=b||"ASC",this.params.orderByFields=this.params.orderByFields?this.params.orderByFields+",":"",this.params.orderByFields+=[a,b].join(" "),this},run:function(a,b){return this._cleanParams(),EsriLeaflet.Util.isArcgisOnline(this.options.url)?(this.params.f="geojson",this.request(function(c,d){this._trapSQLerrors(c),a.call(b,c,d,d)},this)):this.request(function(c,d){this._trapSQLerrors(c),a.call(b,c,d&&EsriLeaflet.Util.responseToFeatureCollection(d),d)},this)},count:function(a,b){return this._cleanParams(),this.params.returnCountOnly=!0,this.request(function(b,c){a.call(this,b,c&&c.count,c)},b)},ids:function(a,b){return this._cleanParams(),this.params.returnIdsOnly=!0,this.request(function(b,c){a.call(this,b,c&&c.objectIds,c)},b)},bounds:function(a,b){return this._cleanParams(),this.params.returnExtentOnly=!0,this.request(function(c,d){a.call(b,c,d&&d.extent&&EsriLeaflet.Util.extentToBounds(d.extent),d)},b)},pixelSize:function(a){return a=L.point(a),this.params.pixelSize=[a.x,a.y],this},layer:function(a){return this.path=a+"/query",this},_trapSQLerrors:function(a){a&&"400"===a.code&&EsriLeaflet.Util.warn("one common syntax error in query requests is encasing string values in double quotes instead of single quotes")},_cleanParams:function(){delete this.params.returnIdsOnly,delete this.params.returnExtentOnly,delete this.params.returnCountOnly},_setGeometry:function(a){return this.params.inSr=4326,a instanceof L.LatLngBounds?(this.params.geometry=EsriLeaflet.Util.boundsToExtent(a),void(this.params.geometryType="esriGeometryEnvelope")):(a.getLatLng&&(a=a.getLatLng()),a instanceof L.LatLng&&(a={type:"Point",coordinates:[a.lng,a.lat]}),a instanceof L.GeoJSON&&(a=a.getLayers()[0].feature.geometry,this.params.geometry=EsriLeaflet.Util.geojsonToArcGIS(a),this.params.geometryType=EsriLeaflet.Util.geojsonTypeToArcGIS(a.type)),a.toGeoJSON&&(a=a.toGeoJSON()),"Feature"===a.type&&(a=a.geometry),"Point"===a.type||"LineString"===a.type||"Polygon"===a.type?(this.params.geometry=EsriLeaflet.Util.geojsonToArcGIS(a),void(this.params.geometryType=EsriLeaflet.Util.geojsonTypeToArcGIS(a.type))):void EsriLeaflet.Util.warn("invalid geometry passed to spatial query. Should be an L.LatLng, L.LatLngBounds or L.Marker or a GeoJSON Point Line or Polygon object"))}}),EsriLeaflet.Tasks.query=function(a){return new EsriLeaflet.Tasks.Query(a)},EsriLeaflet.Tasks.Find=EsriLeaflet.Tasks.Task.extend({setters:{contains:"contains",text:"searchText",fields:"searchFields",spatialReference:"sr",sr:"sr",layers:"layers",returnGeometry:"returnGeometry",maxAllowableOffset:"maxAllowableOffset",precision:"geometryPrecision",dynamicLayers:"dynamicLayers",returnZ:"returnZ",returnM:"returnM",gdbVersion:"gdbVersion",token:"token"},path:"find",params:{sr:4326,contains:!0,returnGeometry:!0,returnZ:!0,returnM:!1},layerDefs:function(a,b){return this.params.layerDefs=this.params.layerDefs?this.params.layerDefs+";":"",this.params.layerDefs+=[a,b].join(":"),this},simplify:function(a,b){var c=Math.abs(a.getBounds().getWest()-a.getBounds().getEast());return this.params.maxAllowableOffset=c/a.getSize().y*b,this},run:function(a,b){return this.request(function(c,d){a.call(b,c,d&&EsriLeaflet.Util.responseToFeatureCollection(d),d)},b)}}),EsriLeaflet.Tasks.find=function(a){return new EsriLeaflet.Tasks.Find(a)},EsriLeaflet.Tasks.Identify=EsriLeaflet.Tasks.Task.extend({path:"identify",between:function(a,b){return this.params.time=[a.valueOf(),b.valueOf()],this}}),EsriLeaflet.Tasks.IdentifyImage=EsriLeaflet.Tasks.Identify.extend({setters:{setMosaicRule:"mosaicRule",setRenderingRule:"renderingRule",setPixelSize:"pixelSize",returnCatalogItems:"returnCatalogItems",returnGeometry:"returnGeometry"},params:{returnGeometry:!1},at:function(a){return a=L.latLng(a),this.params.geometry=JSON.stringify({x:a.lng,y:a.lat,spatialReference:{wkid:4326}}),this.params.geometryType="esriGeometryPoint",this},getMosaicRule:function(){return this.params.mosaicRule},getRenderingRule:function(){return this.params.renderingRule},getPixelSize:function(){return this.params.pixelSize},run:function(a,b){return this.request(function(c,d){a.call(b,c,d&&this._responseToGeoJSON(d),d)},this)},_responseToGeoJSON:function(a){var b=a.location,c=a.catalogItems,d=a.catalogItemVisibilities,e={pixel:{type:"Feature",geometry:{type:"Point",coordinates:[b.x,b.y]},crs:{type:"EPSG",properties:{code:b.spatialReference.wkid}},properties:{OBJECTID:a.objectId,name:a.name,value:a.value},id:a.objectId}};if(a.properties&&a.properties.Values&&(e.pixel.properties.values=a.properties.Values),c&&c.features&&(e.catalogItems=EsriLeaflet.Util.responseToFeatureCollection(c),d&&d.length===e.catalogItems.features.length))for(var f=d.length-1;f>=0;f--)e.catalogItems.features[f].properties.catalogItemVisibility=d[f];return e}}),EsriLeaflet.Tasks.identifyImage=function(a){return new EsriLeaflet.Tasks.IdentifyImage(a)},EsriLeaflet.Tasks.IdentifyFeatures=EsriLeaflet.Tasks.Identify.extend({setters:{layers:"layers",precision:"geometryPrecision",tolerance:"tolerance",returnGeometry:"returnGeometry"},params:{sr:4326,layers:"all",tolerance:3,returnGeometry:!0},on:function(a){var b=EsriLeaflet.Util.boundsToExtent(a.getBounds()),c=a.getSize();return this.params.imageDisplay=[c.x,c.y,96],this.params.mapExtent=[b.xmin,b.ymin,b.xmax,b.ymax],this},at:function(a){return a=L.latLng(a),this.params.geometry=[a.lng,a.lat],this.params.geometryType="esriGeometryPoint",this},layerDef:function(a,b){return this.params.layerDefs=this.params.layerDefs?this.params.layerDefs+";":"",this.params.layerDefs+=[a,b].join(":"),this},simplify:function(a,b){var c=Math.abs(a.getBounds().getWest()-a.getBounds().getEast());return this.params.maxAllowableOffset=c/a.getSize().y*(1-b),this},run:function(a,b){return this.request(function(c,d){if(c)return void a.call(b,c,void 0,d);var e=EsriLeaflet.Util.responseToFeatureCollection(d);d.results=d.results.reverse();for(var f=0;f";return a},_getAttributionData:function(a){L.esri.Request.get.JSONP(a,{},L.Util.bind(function(a,b){this._attributions=[];for(var c=0;c=e.minZoom&&c<=e.maxZoom&&(a+=", "+f)}a=a.substr(2);var g=this._map.attributionControl._container.querySelector(".esri-attributions");g.innerHTML=a,g.style.maxWidth=.65*this._map.getSize().x+"px",this.fire("attributionupdated",{attribution:a})}}}),a.BasemapLayer=a.Layers.BasemapLayer,a.Layers.basemapLayer=function(b,c){return new a.Layers.BasemapLayer(b,c)},a.basemapLayer=function(b,c){return new a.Layers.BasemapLayer(b,c)}}(EsriLeaflet),EsriLeaflet.Layers.RasterLayer=L.Class.extend({includes:L.Mixin.Events,options:{opacity:1,position:"front",f:"image"},onAdd:function(a){if(this._map=a,this._update=L.Util.limitExecByInterval(this._update,this.options.updateInterval,this),a.options.crs&&a.options.crs.code){var b=a.options.crs.code.split(":")[1];this.options.bboxSR=b,this.options.imageSR=b}a.on("moveend",this._update,this),this._currentImage&&this._currentImage._bounds.equals(this._map.getBounds())?a.addLayer(this._currentImage):this._currentImage&&(this._map.removeLayer(this._currentImage),this._currentImage=null),this._update(),this._popup&&(this._map.on("click",this._getPopupData,this),this._map.on("dblclick",this._resetPopupState,this))},bindPopup:function(a,b){return this._shouldRenderPopup=!1,this._lastClick=!1,this._popup=L.popup(b),this._popupFunction=a,this._map&&(this._map.on("click",this._getPopupData,this),this._map.on("dblclick",this._resetPopupState,this)),this},unbindPopup:function(){return this._map&&(this._map.closePopup(this._popup),this._map.off("click",this._getPopupData,this),this._map.off("dblclick",this._resetPopupState,this)),this._popup=!1,this},onRemove:function(a){this._currentImage&&this._map.removeLayer(this._currentImage),this._popup&&(this._map.off("click",this._getPopupData,this),this._map.off("dblclick",this._resetPopupState,this)),this._map.off("moveend",this._update,this),this._map=null},addTo:function(a){return a.addLayer(this),this},removeFrom:function(a){return a.removeLayer(this),this},bringToFront:function(){return this.options.position="front",this._currentImage&&this._currentImage.bringToFront(),this},bringToBack:function(){return this.options.position="back",this._currentImage&&this._currentImage.bringToBack(),this},getAttribution:function(){return this.options.attribution},getOpacity:function(){return this.options.opacity},setOpacity:function(a){return this.options.opacity=a,this._currentImage.setOpacity(a),this},getTimeRange:function(){return[this.options.from,this.options.to]},setTimeRange:function(a,b){return this.options.from=a,this.options.to=b,this._update(),this},metadata:function(a,b){return this._service.metadata(a,b),this},authenticate:function(a){return this._service.authenticate(a),this},_renderImage:function(a,b){if(this._map){var c=new L.ImageOverlay(a,b,{opacity:0}).addTo(this._map);c.once("load",function(a){var c=a.target,d=this._currentImage;c._bounds.equals(b)&&c._bounds.equals(this._map.getBounds())?(this._currentImage=c,"front"===this.options.position?this.bringToFront():this.bringToBack(),this._map&&this._currentImage._map?this._currentImage.setOpacity(this.options.opacity):this._currentImage._map.removeLayer(this._currentImage),d&&this._map&&this._map.removeLayer(d),d&&d._map&&d._map.removeLayer(d)):this._map.removeLayer(c),this.fire("load",{bounds:b})},this),this.fire("loading",{bounds:b})}},_update:function(){if(this._map){var a=this._map.getZoom(),b=this._map.getBounds();if(!this._animatingZoom&&!(this._map._panTransition&&this._map._panTransition._inProgress||a>this.options.maxZoom||a0||f.yd}}),L.esri.TiledMapLayer=L.esri.Layers.tiledMapLayer,L.esri.Layers.tiledMapLayer=function(a){return new L.esri.Layers.TiledMapLayer(a)},L.esri.tiledMapLayer=function(a){return new L.esri.Layers.TiledMapLayer(a)},EsriLeaflet.Layers.FeatureGrid=L.Class.extend({includes:L.Mixin.Events,options:{cellSize:512,updateInterval:150},initialize:function(a){a=L.setOptions(this,a)},onAdd:function(a){this._map=a,this._update=L.Util.limitExecByInterval(this._update,this.options.updateInterval,this),this._map.addEventListener(this.getEvents(),this),this._reset(),this._update()},onRemove:function(){this._map.removeEventListener(this.getEvents(),this),this._removeCells()},getEvents:function(){var a={viewreset:this._reset,moveend:this._update,zoomend:this._onZoom};return a},addTo:function(a){return a.addLayer(this),this},removeFrom:function(a){return a.removeLayer(this),this},_onZoom:function(){var a=this._map.getZoom();a>this.options.maxZoom||athis.options.maxZoom||bc;c++)this._addCell(e[c])},_cellCoordsToBounds:function(a){var b=this._map,c=this.options.cellSize,d=a.multiplyBy(c),e=d.add([c,c]),f=b.unproject(d,a.z).wrap(),g=b.unproject(e,a.z).wrap();return new L.LatLngBounds(f,g)},_cellCoordsToKey:function(a){return a.x+":"+a.y},_keyToCellCoords:function(a){var b=a.split(":"),c=parseInt(b[0],10),d=parseInt(b[1],10);return new L.Point(c,d)},_removeOtherCells:function(a){for(var b in this._cells)a.contains(this._keyToCellCoords(b))||this._removeCell(b)},_removeCell:function(a){var b=this._activeCells[a];b&&(delete this._activeCells[a],this.cellLeave&&this.cellLeave(b.bounds,b.coords),this.fire("cellleave",{bounds:b.bounds,coords:b.coords}))},_removeCells:function(){for(var a in this._cells){var b=this._cells[a].bounds,c=this._cells[a].coords;this.cellLeave&&this.cellLeave(b,c),this.fire("cellleave",{bounds:b,coords:c})}},_addCell:function(a){this._wrapCoords(a);var b=this._cellCoordsToKey(a),c=this._cells[b];c&&!this._activeCells[b]&&(this.cellEnter&&this.cellEnter(c.bounds,a),this.fire("cellenter",{bounds:c.bounds,coords:a}),this._activeCells[b]=c),c||(c={coords:a,bounds:this._cellCoordsToBounds(a)},this._cells[b]=c,this._activeCells[b]=c,this.createCell&&this.createCell(c.bounds,a),this.fire("cellcreate",{bounds:c.bounds,coords:a}))},_wrapCoords:function(a){a.x=this._wrapLng?L.Util.wrapNum(a.x,this._wrapLng):a.x,a.y=this._wrapLat?L.Util.wrapNum(a.y,this._wrapLat):a.y}}),function(a){function b(a){this.values=a||[]}a.Layers.FeatureManager=a.Layers.FeatureGrid.extend({options:{where:"1=1",fields:["*"],from:!1,to:!1,timeField:!1,timeFilterMode:"server",simplifyFactor:0,precision:6},initialize:function(c){if(a.Layers.FeatureGrid.prototype.initialize.call(this,c),c.url=a.Util.cleanUrl(c.url),c=L.setOptions(this,c),this._service=new a.Services.FeatureLayerService(c),"*"!==this.options.fields[0]){for(var d=!1,e=0;e=0;d--){var e=a[d].id;this._currentSnapshot.push(e),this._cache[c].push(e)}this.options.timeField&&this._buildTimeIndexes(a);var f=this._map.getZoom();f>this.options.maxZoom||f=0;j--)f.push(i.features[j].id);0>=g&&(this._currentSnapshot=f,a.Util.requestAnimationFrame(L.Util.bind(function(){this.removeLayers(e),this.addLayers(f),c&&c.call(d,h)},this)))},this),j=this._currentSnapshot.length-1;j>=0;j--)e.push(this._currentSnapshot[j]);for(var k in this._activeCells){g++;var l=this._keyToCellCoords(k),m=this._cellCoordsToBounds(l);this._requestFeatures(m,k,i)}return this},getWhere:function(){return this.options.where},getTimeRange:function(){return[this.options.from,this.options.to]},setTimeRange:function(a,b,c,d){var e=this.options.from,f=this.options.to,g=0,h=null,i=L.Util.bind(function(i){i&&(h=i),this._filterExistingFeatures(e,f,a,b),g--,c&&0>=g&&c.call(d,h)},this);if(this.options.from=a,this.options.to=b,this._filterExistingFeatures(e,f,a,b),"server"===this.options.timeFilterMode)for(var j in this._activeCells){g++;var k=this._keyToCellCoords(j),l=this._cellCoordsToBounds(k);this._requestFeatures(l,j,i)}},refresh:function(){for(var a in this._activeCells){var b=this._keyToCellCoords(a),c=this._cellCoordsToBounds(b);this._requestFeatures(c,a)}this.redraw&&this.once("load",function(){this.eachFeature(function(a){this._redraw(a.feature.id)},this)},this)},_filterExistingFeatures:function(b,c,d,e){var f=b&&c?this._getFeaturesInTimeRange(b,c):this._currentSnapshot,g=this._getFeaturesInTimeRange(d,e);if(g.indexOf)for(var h=0;h=0&&f.splice(i,1)}a.Util.requestAnimationFrame(L.Util.bind(function(){this.removeLayers(f),this.addLayers(g)},this))},_getFeaturesInTimeRange:function(a,b){var c,d=[];if(this.options.timeField.start&&this.options.timeField.end){var e=this._startTimeIndex.between(a,b),f=this._endTimeIndex.between(a,b);c=e.concat(f)}else c=this._timeIndex.between(a,b);for(var g=c.length-1;g>=0;g--)d.push(c[g].id);return d},_buildTimeIndexes:function(a){var b,c;if(this.options.timeField.start&&this.options.timeField.end){var d=[],e=[];for(b=a.length-1;b>=0;b--)c=a[b],d.push({id:c.id,value:new Date(c.properties[this.options.timeField.start])}),e.push({id:c.id,value:new Date(c.properties[this.options.timeField.end])});this._startTimeIndex.bulkAdd(d),this._endTimeIndex.bulkAdd(e)}else{var f=[];for(b=a.length-1;b>=0;b--)c=a[b],f.push({id:c.id,value:new Date(c.properties[this.options.timeField])});this._timeIndex.bulkAdd(f)}},_featureWithinTimeRange:function(a){if(!this.options.from||!this.options.to)return!0;var b=+this.options.from.valueOf(),c=+this.options.to.valueOf();if("string"==typeof this.options.timeField){var d=+a.properties[this.options.timeField];return d>=b&&c>=d}if(this.options.timeField.start&&this.options.timeField.end){var e=+a.properties[this.options.timeField.start],f=+a.properties[this.options.timeField.end];return e>=b&&c>=e||f>=b&&c>=f}},authenticate:function(a){return this._service.authenticate(a),this},metadata:function(a,b){return this._service.metadata(a,b),this},query:function(){return this._service.query()},_getMetadata:function(a){if(this._metadata){var b;a(b,this._metadata)}else this.metadata(L.Util.bind(function(b,c){this._metadata=c,a(b,this._metadata)},this))},addFeature:function(a,b,c){this._getMetadata(L.Util.bind(function(d,e){this._service.addFeature(a,L.Util.bind(function(d,f){d||(a.properties[e.objectIdField]=f.objectId,a.id=f.objectId,this.createLayers([a])),b&&b.call(c,d,f)},this))},this))},updateFeature:function(a,b,c){this._service.updateFeature(a,function(d,e){d||(this.removeLayers([a.id],!0),this.createLayers([a])),b&&b.call(c,d,e)},this)},deleteFeature:function(a,b,c){this._service.deleteFeature(a,function(a,d){!a&&d.objectId&&this.removeLayers([d.objectId],!0),b&&b.call(c,a,d)},this)},deleteFeatures:function(a,b,c){return this._service.deleteFeatures(a,function(a,d){if(!a&&d.length>0)for(var e=0;e=e;)if(d=b=(e+f)/2|0,c=this.values[Math.round(b)],+c.value<+a)e=b+1;else{if(!(+c.value>+a))return b;f=b-1}return~f},b.prototype.sort=function(){this.values.sort(function(a,b){return+b.value-+a.value}).reverse(),this.dirty=!1},b.prototype.between=function(a,b){this.dirty&&this.sort();var c=this._query(a),d=this._query(b);return 0===c&&0===d?[]:(c=Math.abs(c),d=0>d?Math.abs(d):d+1,this.values.slice(c,d))},b.prototype.bulkAdd=function(a){this.dirty=!0,this.values=this.values.concat(a)}}(EsriLeaflet),EsriLeaflet.Layers.FeatureLayer=EsriLeaflet.Layers.FeatureManager.extend({statics:{EVENTS:"click dblclick mouseover mouseout mousemove contextmenu popupopen popupclose"},options:{cacheLayers:!0},initialize:function(a){EsriLeaflet.Layers.FeatureManager.prototype.initialize.call(this,a),a=L.setOptions(this,a),this._layers={},this._leafletIds={},this._key="c"+(1e9*Math.random()).toString(36).replace(".","_")},onAdd:function(a){return a.on("zoomstart zoomend",function(a){this._zooming="zoomstart"===a.type},this),this._removed=!1,EsriLeaflet.Layers.FeatureManager.prototype.onAdd.call(this,a)},onRemove:function(a){this._removed=!0;for(var b in this._layers)a.removeLayer(this._layers[b]);return EsriLeaflet.Layers.FeatureManager.prototype.onRemove.call(this,a)},createNewLayer:function(a){return L.GeoJSON.geometryToLayer(a,this.options.pointToLayer,L.GeoJSON.coordsToLatLng,this.options)},_updateLayer:function(a,b){var c=[],d=this.options.coordsToLatLng||L.GeoJSON.coordsToLatLng;switch(b.properties&&(a.feature.properties=b.properties),b.geometry.type){case"Point":c=L.GeoJSON.coordsToLatLng(b.geometry.coordinates),a.setLatLng(c);break;case"LineString":c=L.GeoJSON.coordsToLatLngs(b.geometry.coordinates,0,d),a.setLatLngs(c);break;case"MultiLineString":c=L.GeoJSON.coordsToLatLngs(b.geometry.coordinates,1,d),a.setLatLngs(c);break;case"Polygon":c=L.GeoJSON.coordsToLatLngs(b.geometry.coordinates,1,d),a.setLatLngs(c);break;case"MultiPolygon":c=L.GeoJSON.coordsToLatLngs(b.geometry.coordinates,2,d),a.setLatLngs(c)}},createLayers:function(a){for(var b=a.length-1;b>=0;b--){var c,d=a[b],e=this._layers[d.id];e&&!this._map.hasLayer(e)&&this._map.addLayer(e),e&&(e.setLatLngs||e.setLatLng)&&this._updateLayer(e,d),e||(c=this.createNewLayer(d),c.feature=d,this.options.style?c._originalStyle=this.options.style:c.setStyle&&(c._originalStyle=c.options),c._leaflet_id=this._key+"_"+d.id,this._leafletIds[c._leaflet_id]=d.id,c.on(EsriLeaflet.Layers.FeatureLayer.EVENTS,this._propagateEvent,this),this._popup&&c.bindPopup&&c.bindPopup(this._popup(c.feature,c),this._popupOptions),this.options.onEachFeature&&this.options.onEachFeature(c.feature,c),this._layers[c.feature.id]=c,this.resetStyle(c.feature.id),this.fire("createfeature",{feature:c.feature}),(!this.options.timeField||this.options.timeField&&this._featureWithinTimeRange(d))&&this._map.addLayer(c))}},addLayers:function(a){for(var b=a.length-1;b>=0;b--){var c=this._layers[a[b]];c&&(this.fire("addfeature",{feature:c.feature}),this._map.addLayer(c))}},removeLayers:function(a,b){for(var c=a.length-1;c>=0;c--){var d=a[c],e=this._layers[d];e&&(this.fire("removefeature",{feature:e.feature,permanent:b}),this._map.removeLayer(e)),e&&b&&delete this._layers[d]}},cellEnter:function(a,b){this._zooming||EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){var a=this._cacheKey(b),c=this._cellCoordsToKey(b),d=this._cache[a];this._activeCells[c]&&d&&this.addLayers(d)},this))},cellLeave:function(a,b){this._zooming||EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){var a=this._cacheKey(b),c=this._cellCoordsToKey(b),d=this._cache[a],e=this._map.getBounds();if(!this._activeCells[c]&&d){for(var f=!0,g=0;gPowered by Esri':'Powered by Esri'}}),EsriLeaflet.Controls.logo=function(a){return new L.esri.Controls.Logo(a)}; +var EsriLeaflet={VERSION:"1.0.3",Layers:{},Services:{},Controls:{},Tasks:{},Util:{},Support:{CORS:!!(window.XMLHttpRequest&&"withCredentials"in new XMLHttpRequest),pointerEvents:""===document.documentElement.style.pointerEvents}};"undefined"!=typeof window&&window.L&&(window.L.esri=EsriLeaflet),function(a){function b(a){var b={};for(var c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);return b}function c(a,b){for(var c=0;cd;d++)b=a[d+1],c+=(b[0]-f[0])*(b[1]+f[1]),f=b;return c>=0}function f(a,b,c,d){var e=(d[0]-c[0])*(a[1]-c[1])-(d[1]-c[1])*(a[0]-c[0]),f=(b[0]-a[0])*(a[1]-c[1])-(b[1]-a[1])*(a[0]-c[0]),g=(d[1]-c[1])*(b[0]-a[0])-(d[0]-c[0])*(b[1]-a[1]);if(0!==g){var h=e/g,i=f/g;if(h>=0&&1>=h&&i>=0&&1>=i)return!0}return!1}function g(a,b){for(var c=0;c=0;b--)if(c=h[b][0],i(c,f)){h[b].push(f),o=!0;break}o||n.push(f)}for(;n.length;){f=n.pop();var p=!1;for(b=h.length-1;b>=0;b--)if(c=h[b][0],g(c,f)){h[b].push(f),p=!0;break}p||h.push([f.reverse()])}return 1===h.length?{type:"Polygon",coordinates:h[0]}:{type:"MultiPolygon",coordinates:h}}function k(a){var b=[],c=a.slice(0),f=d(c.shift().slice(0));if(f.length>=4){e(f)||f.reverse(),b.push(f);for(var g=0;g=4&&(e(h)&&h.reverse(),b.push(h))}}return b}function l(a){for(var b=[],c=0;c=0;e--){var f=d[e].slice(0);b.push(f)}return b}var m=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.msRequestAnimationFrame||function(a){return window.setTimeout(a,1e3/60)};a.Util.extentToBounds=function(a){var b=new L.LatLng(a.ymin,a.xmin),c=new L.LatLng(a.ymax,a.xmax);return new L.LatLngBounds(b,c)},a.Util.boundsToExtent=function(a){return a=L.latLngBounds(a),{xmin:a.getSouthWest().lng,ymin:a.getSouthWest().lat,xmax:a.getNorthEast().lng,ymax:a.getNorthEast().lat,spatialReference:{wkid:4326}}},a.Util.arcgisToGeojson=function(c,d){var e={};return"number"==typeof c.x&&"number"==typeof c.y&&(e.type="Point",e.coordinates=[c.x,c.y]),c.points&&(e.type="MultiPoint",e.coordinates=c.points.slice(0)),c.paths&&(1===c.paths.length?(e.type="LineString",e.coordinates=c.paths[0].slice(0)):(e.type="MultiLineString",e.coordinates=c.paths.slice(0))),c.rings&&(e=j(c.rings.slice(0))),(c.geometry||c.attributes)&&(e.type="Feature",e.geometry=c.geometry?a.Util.arcgisToGeojson(c.geometry):null,e.properties=c.attributes?b(c.attributes):null,c.attributes&&(e.id=c.attributes[d]||c.attributes.OBJECTID||c.attributes.FID)),e},a.Util.geojsonToArcGIS=function(c,d){d=d||"OBJECTID";var e,f={wkid:4326},g={};switch(c.type){case"Point":g.x=c.coordinates[0],g.y=c.coordinates[1],g.spatialReference=f;break;case"MultiPoint":g.points=c.coordinates.slice(0),g.spatialReference=f;break;case"LineString":g.paths=[c.coordinates.slice(0)],g.spatialReference=f;break;case"MultiLineString":g.paths=c.coordinates.slice(0),g.spatialReference=f;break;case"Polygon":g.rings=k(c.coordinates.slice(0)),g.spatialReference=f;break;case"MultiPolygon":g.rings=l(c.coordinates.slice(0)),g.spatialReference=f;break;case"Feature":c.geometry&&(g.geometry=a.Util.geojsonToArcGIS(c.geometry,d)),g.attributes=c.properties?b(c.properties):{},c.id&&(g.attributes[d]=c.id);break;case"FeatureCollection":for(g=[],e=0;e=0;h--)f.features.push(a.Util.arcgisToGeojson(g[h],d));return f},a.Util.cleanUrl=function(a){return a=a.replace(/^\s+|\s+$|\A\s+|\s+\z/g,""),"/"!==a[a.length-1]&&(a+="/"),a},a.Util.isArcgisOnline=function(a){return/\.arcgis\.com.*?FeatureServer/g.test(a)},a.Util.geojsonTypeToArcGIS=function(a){var b;switch(a){case"Point":b="esriGeometryPoint";break;case"MultiPoint":b="esriGeometryMultipoint";break;case"LineString":b="esriGeometryPolyline";break;case"MultiLineString":b="esriGeometryPolyline";break;case"Polygon":b="esriGeometryPolygon";break;case"MultiPolygon":b="esriGeometryPolygon"}return b},a.Util.requestAnimationFrame=L.Util.bind(m,window),a.Util.warn=function(a){console&&console.warn&&console.warn(a)}}(EsriLeaflet),function(a){function b(a){var b="";a.f=a.f||"json";for(var c in a)if(a.hasOwnProperty(c)){var d,e=a[c],f=Object.prototype.toString.call(e);b.length&&(b+="&"),d="[object Array]"===f?"[object Object]"===Object.prototype.toString.call(e[0])?JSON.stringify(e):e.join(","):"[object Object]"===f?JSON.stringify(e):"[object Date]"===f?e.valueOf():e,b+=encodeURIComponent(c)+"="+encodeURIComponent(d)}return b}function c(a,b){var c=new XMLHttpRequest;return c.onerror=function(d){c.onreadystatechange=L.Util.falseFn,a.call(b,{error:{code:500,message:"XMLHttpRequest error"}},null)},c.onreadystatechange=function(){var d,e;if(4===c.readyState){try{d=JSON.parse(c.responseText)}catch(f){d=null,e={code:500,message:"Could not parse response as JSON. This could also be caused by a CORS or XMLHttpRequest error."}}!e&&d.error&&(e=d.error,d=null),c.onerror=L.Util.falseFn,a.call(b,e,d)}},c}var d=0;window._EsriLeafletCallbacks={},a.Request={request:function(d,e,f,g){var h=b(e),i=c(f,g),j=(d+"?"+h).length;if(2e3>=j&&L.esri.Support.CORS)i.open("GET",d+"?"+h),i.send(null);else{if(!(j>2e3&&L.esri.Support.CORS))return 2e3>=j&&!L.esri.Support.CORS?L.esri.Request.get.JSONP(d,e,f,g):void a.Util.warn("a request to "+d+" was longer then 2000 characters and this browser cannot make a cross-domain post request. Please use a proxy http://esri.github.io/esri-leaflet/api-reference/request.html");i.open("POST",d),i.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),i.send(h)}return i},post:{XMLHTTP:function(a,d,e,f){var g=c(e,f);return g.open("POST",a),g.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),g.send(b(d)),g}},get:{CORS:function(a,d,e,f){var g=c(e,f);return g.open("GET",a+"?"+b(d),!0),g.send(null),g},JSONP:function(a,c,e,f){var g="c"+d;c.callback="window._EsriLeafletCallbacks."+g;var h=L.DomUtil.create("script",null,document.body);return h.type="text/javascript",h.src=a+"?"+b(c),h.id=g,window._EsriLeafletCallbacks[g]=function(a){if(window._EsriLeafletCallbacks[g]!==!0){var b,c=Object.prototype.toString.call(a);"[object Object]"!==c&&"[object Array]"!==c&&(b={error:{code:500,message:"Expected array or object as JSONP response"}},a=null),!b&&a.error&&(b=a,a=null),e.call(f,b,a),window._EsriLeafletCallbacks[g]=!0}},d++,{id:g,url:h.src,abort:function(){window._EsriLeafletCallbacks._callback[g]({code:0,message:"Request aborted."})}}}}},a.get=a.Support.CORS?a.Request.get.CORS:a.Request.get.JSONP,a.post=a.Request.post.XMLHTTP,a.request=a.Request.request}(EsriLeaflet),EsriLeaflet.Services.Service=L.Class.extend({includes:L.Mixin.Events,options:{proxy:!1,useCors:EsriLeaflet.Support.CORS},initialize:function(a){a=a||{},this._requestQueue=[],this._authenticating=!1,L.Util.setOptions(this,a),this.options.url=EsriLeaflet.Util.cleanUrl(this.options.url)},get:function(a,b,c,d){return this._request("get",a,b,c,d)},post:function(a,b,c,d){return this._request("post",a,b,c,d)},request:function(a,b,c,d){return this._request("request",a,b,c,d)},metadata:function(a,b){return this._request("get","",{},a,b)},authenticate:function(a){return this._authenticating=!1,this.options.token=a,this._runQueue(),this},_request:function(a,b,c,d,e){this.fire("requeststart",{url:this.options.url+b,params:c,method:a});var f=this._createServiceCallback(a,b,c,d,e);if(this.options.token&&(c.token=this.options.token),this._authenticating)return void this._requestQueue.push([a,b,c,d,e]);var g=this.options.proxy?this.options.proxy+"?"+this.options.url+b:this.options.url+b;return"get"!==a&&"request"!==a||this.options.useCors?EsriLeaflet[a](g,c,f):EsriLeaflet.Request.get.JSONP(g,c,f)},_createServiceCallback:function(a,b,c,d,e){return L.Util.bind(function(f,g){!f||499!==f.code&&498!==f.code||(this._authenticating=!0,this._requestQueue.push([a,b,c,d,e]),this.fire("authenticationrequired",{authenticate:L.Util.bind(this.authenticate,this)}),f.authenticate=L.Util.bind(this.authenticate,this)),d.call(e,f,g),f?this.fire("requesterror",{url:this.options.url+b,params:c,message:f.message,code:f.code,method:a}):this.fire("requestsuccess",{url:this.options.url+b,params:c,response:g,method:a}),this.fire("requestend",{url:this.options.url+b,params:c,method:a})},this)},_runQueue:function(){for(var a=this._requestQueue.length-1;a>=0;a--){var b=this._requestQueue[a],c=b.shift();this[c].apply(this,b)}this._requestQueue=[]}}),EsriLeaflet.Services.service=function(a){return new EsriLeaflet.Services.Service(a)},EsriLeaflet.Services.FeatureLayerService=EsriLeaflet.Services.Service.extend({options:{idAttribute:"OBJECTID"},query:function(){return new EsriLeaflet.Tasks.Query(this)},addFeature:function(a,b,c){return delete a.id,a=EsriLeaflet.Util.geojsonToArcGIS(a),this.post("addFeatures",{features:[a]},function(a,d){var e=d&&d.addResults?d.addResults[0]:void 0;b&&b.call(c,a||d.addResults[0].error,e)},c)},updateFeature:function(a,b,c){return a=EsriLeaflet.Util.geojsonToArcGIS(a,this.options.idAttribute),this.post("updateFeatures",{features:[a]},function(a,d){var e=d&&d.updateResults?d.updateResults[0]:void 0;b&&b.call(c,a||d.updateResults[0].error,e)},c)},deleteFeature:function(a,b,c){return this.post("deleteFeatures",{objectIds:a},function(a,d){var e=d&&d.deleteResults?d.deleteResults[0]:void 0;b&&b.call(c,a||d.deleteResults[0].error,e)},c)},deleteFeatures:function(a,b,c){return this.post("deleteFeatures",{objectIds:a},function(a,d){var e=d&&d.deleteResults?d.deleteResults:void 0;b&&b.call(c,a||d.deleteResults[0].error,e)},c)}}),EsriLeaflet.Services.featureLayerService=function(a){return new EsriLeaflet.Services.FeatureLayerService(a)},EsriLeaflet.Services.MapService=EsriLeaflet.Services.Service.extend({identify:function(){return new EsriLeaflet.Tasks.identifyFeatures(this)},find:function(){return new EsriLeaflet.Tasks.Find(this)},query:function(){return new EsriLeaflet.Tasks.Query(this)}}),EsriLeaflet.Services.mapService=function(a){return new EsriLeaflet.Services.MapService(a)},EsriLeaflet.Services.ImageService=EsriLeaflet.Services.Service.extend({query:function(){return new EsriLeaflet.Tasks.Query(this)},identify:function(){return new EsriLeaflet.Tasks.IdentifyImage(this)}}),EsriLeaflet.Services.imageService=function(a){return new EsriLeaflet.Services.ImageService(a)},EsriLeaflet.Tasks.Task=L.Class.extend({options:{proxy:!1,useCors:EsriLeaflet.Support.CORS},generateSetter:function(a,b){return L.Util.bind(function(b){return this.params[a]=b,this},b)},initialize:function(a){if(a.request&&a.options?(this._service=a,L.Util.setOptions(this,a.options)):(L.Util.setOptions(this,a),this.options.url=L.esri.Util.cleanUrl(a.url)),this.params=L.Util.extend({},this.params||{}),this.setters)for(var b in this.setters){var c=this.setters[b];this[b]=this.generateSetter(c,this)}},token:function(a){return this._service?this._service.authenticate(a):this.params.token=a,this},request:function(a,b){return this._service?this._service.request(this.path,this.params,a,b):this._request("request",this.path,this.params,a,b)},_request:function(a,b,c,d,e){var f=this.options.proxy?this.options.proxy+"?"+this.options.url+b:this.options.url+b;return"get"!==a&&"request"!==a||this.options.useCors?EsriLeaflet[a](f,c,d,e):EsriLeaflet.Request.get.JSONP(f,c,d,e)}}),EsriLeaflet.Tasks.Query=EsriLeaflet.Tasks.Task.extend({setters:{offset:"offset",limit:"limit",fields:"outFields",precision:"geometryPrecision",featureIds:"objectIds",returnGeometry:"returnGeometry",token:"token"},path:"query",params:{returnGeometry:!0,where:"1=1",outSr:4326,outFields:"*"},within:function(a){return this._setGeometry(a),this.params.spatialRel="esriSpatialRelContains",this},intersects:function(a){return this._setGeometry(a),this.params.spatialRel="esriSpatialRelIntersects",this},contains:function(a){return this._setGeometry(a),this.params.spatialRel="esriSpatialRelWithin",this},overlaps:function(a){return this._setGeometry(a),this.params.spatialRel="esriSpatialRelOverlaps",this},nearby:function(a,b){return a=L.latLng(a),this.params.geometry=[a.lng,a.lat],this.params.geometryType="esriGeometryPoint",this.params.spatialRel="esriSpatialRelIntersects",this.params.units="esriSRUnit_Meter",this.params.distance=b,this.params.inSr=4326,this},where:function(a){return this.params.where=a,this},between:function(a,b){return this.params.time=[a.valueOf(),b.valueOf()],this},simplify:function(a,b){var c=Math.abs(a.getBounds().getWest()-a.getBounds().getEast());return this.params.maxAllowableOffset=c/a.getSize().y*b,this},orderBy:function(a,b){return b=b||"ASC",this.params.orderByFields=this.params.orderByFields?this.params.orderByFields+",":"",this.params.orderByFields+=[a,b].join(" "),this},run:function(a,b){return this._cleanParams(),EsriLeaflet.Util.isArcgisOnline(this.options.url)?(this.params.f="geojson",this.request(function(c,d){this._trapSQLerrors(c),a.call(b,c,d,d)},this)):this.request(function(c,d){this._trapSQLerrors(c),a.call(b,c,d&&EsriLeaflet.Util.responseToFeatureCollection(d),d)},this)},count:function(a,b){return this._cleanParams(),this.params.returnCountOnly=!0,this.request(function(b,c){a.call(this,b,c&&c.count,c)},b)},ids:function(a,b){return this._cleanParams(),this.params.returnIdsOnly=!0,this.request(function(b,c){a.call(this,b,c&&c.objectIds,c)},b)},bounds:function(a,b){return this._cleanParams(),this.params.returnExtentOnly=!0,this.request(function(c,d){a.call(b,c,d&&d.extent&&EsriLeaflet.Util.extentToBounds(d.extent),d)},b)},pixelSize:function(a){return a=L.point(a),this.params.pixelSize=[a.x,a.y],this},layer:function(a){return this.path=a+"/query",this},_trapSQLerrors:function(a){a&&"400"===a.code&&EsriLeaflet.Util.warn("one common syntax error in query requests is encasing string values in double quotes instead of single quotes")},_cleanParams:function(){delete this.params.returnIdsOnly,delete this.params.returnExtentOnly,delete this.params.returnCountOnly},_setGeometry:function(a){return this.params.inSr=4326,a instanceof L.LatLngBounds?(this.params.geometry=EsriLeaflet.Util.boundsToExtent(a),void(this.params.geometryType="esriGeometryEnvelope")):(a.getLatLng&&(a=a.getLatLng()),a instanceof L.LatLng&&(a={type:"Point",coordinates:[a.lng,a.lat]}),a instanceof L.GeoJSON&&(a=a.getLayers()[0].feature.geometry,this.params.geometry=EsriLeaflet.Util.geojsonToArcGIS(a),this.params.geometryType=EsriLeaflet.Util.geojsonTypeToArcGIS(a.type)),a.toGeoJSON&&(a=a.toGeoJSON()),"Feature"===a.type&&(a=a.geometry),"Point"===a.type||"LineString"===a.type||"Polygon"===a.type?(this.params.geometry=EsriLeaflet.Util.geojsonToArcGIS(a),void(this.params.geometryType=EsriLeaflet.Util.geojsonTypeToArcGIS(a.type))):void EsriLeaflet.Util.warn("invalid geometry passed to spatial query. Should be an L.LatLng, L.LatLngBounds or L.Marker or a GeoJSON Point Line or Polygon object"))}}),EsriLeaflet.Tasks.query=function(a){return new EsriLeaflet.Tasks.Query(a)},EsriLeaflet.Tasks.Find=EsriLeaflet.Tasks.Task.extend({setters:{contains:"contains",text:"searchText",fields:"searchFields",spatialReference:"sr",sr:"sr",layers:"layers",returnGeometry:"returnGeometry",maxAllowableOffset:"maxAllowableOffset",precision:"geometryPrecision",dynamicLayers:"dynamicLayers",returnZ:"returnZ",returnM:"returnM",gdbVersion:"gdbVersion",token:"token"},path:"find",params:{sr:4326,contains:!0,returnGeometry:!0,returnZ:!0,returnM:!1},layerDefs:function(a,b){return this.params.layerDefs=this.params.layerDefs?this.params.layerDefs+";":"",this.params.layerDefs+=[a,b].join(":"),this},simplify:function(a,b){var c=Math.abs(a.getBounds().getWest()-a.getBounds().getEast());return this.params.maxAllowableOffset=c/a.getSize().y*b,this},run:function(a,b){return this.request(function(c,d){a.call(b,c,d&&EsriLeaflet.Util.responseToFeatureCollection(d),d)},b)}}),EsriLeaflet.Tasks.find=function(a){return new EsriLeaflet.Tasks.Find(a)},EsriLeaflet.Tasks.Identify=EsriLeaflet.Tasks.Task.extend({path:"identify",between:function(a,b){return this.params.time=[a.valueOf(),b.valueOf()],this}}),EsriLeaflet.Tasks.IdentifyImage=EsriLeaflet.Tasks.Identify.extend({setters:{setMosaicRule:"mosaicRule",setRenderingRule:"renderingRule",setPixelSize:"pixelSize",returnCatalogItems:"returnCatalogItems",returnGeometry:"returnGeometry"},params:{returnGeometry:!1},at:function(a){return a=L.latLng(a),this.params.geometry=JSON.stringify({x:a.lng,y:a.lat,spatialReference:{wkid:4326}}),this.params.geometryType="esriGeometryPoint",this},getMosaicRule:function(){return this.params.mosaicRule},getRenderingRule:function(){return this.params.renderingRule},getPixelSize:function(){return this.params.pixelSize},run:function(a,b){return this.request(function(c,d){a.call(b,c,d&&this._responseToGeoJSON(d),d)},this)},_responseToGeoJSON:function(a){var b=a.location,c=a.catalogItems,d=a.catalogItemVisibilities,e={pixel:{type:"Feature",geometry:{type:"Point",coordinates:[b.x,b.y]},crs:{type:"EPSG",properties:{code:b.spatialReference.wkid}},properties:{OBJECTID:a.objectId,name:a.name,value:a.value},id:a.objectId}};if(a.properties&&a.properties.Values&&(e.pixel.properties.values=a.properties.Values),c&&c.features&&(e.catalogItems=EsriLeaflet.Util.responseToFeatureCollection(c),d&&d.length===e.catalogItems.features.length))for(var f=d.length-1;f>=0;f--)e.catalogItems.features[f].properties.catalogItemVisibility=d[f];return e}}),EsriLeaflet.Tasks.identifyImage=function(a){return new EsriLeaflet.Tasks.IdentifyImage(a)},EsriLeaflet.Tasks.IdentifyFeatures=EsriLeaflet.Tasks.Identify.extend({setters:{layers:"layers",precision:"geometryPrecision",tolerance:"tolerance",returnGeometry:"returnGeometry"},params:{sr:4326,layers:"all",tolerance:3,returnGeometry:!0},on:function(a){var b=EsriLeaflet.Util.boundsToExtent(a.getBounds()),c=a.getSize();return this.params.imageDisplay=[c.x,c.y,96],this.params.mapExtent=[b.xmin,b.ymin,b.xmax,b.ymax],this},at:function(a){return a=L.latLng(a),this.params.geometry=[a.lng,a.lat],this.params.geometryType="esriGeometryPoint",this},layerDef:function(a,b){return this.params.layerDefs=this.params.layerDefs?this.params.layerDefs+";":"",this.params.layerDefs+=[a,b].join(":"),this},simplify:function(a,b){var c=Math.abs(a.getBounds().getWest()-a.getBounds().getEast());return this.params.maxAllowableOffset=c/a.getSize().y*(1-b),this},run:function(a,b){return this.request(function(c,d){if(c)return void a.call(b,c,void 0,d);var e=EsriLeaflet.Util.responseToFeatureCollection(d);d.results=d.results.reverse();for(var f=0;f";return a},_getAttributionData:function(a){L.esri.Request.get.JSONP(a,{},L.Util.bind(function(a,b){this._attributions=[];for(var c=0;c=e.minZoom&&c<=e.maxZoom&&(a+=", "+f)}a=a.substr(2);var g=this._map.attributionControl._container.querySelector(".esri-attributions");g.innerHTML=a,g.style.maxWidth=.65*this._map.getSize().x+"px",this.fire("attributionupdated",{attribution:a})}}}),a.BasemapLayer=a.Layers.BasemapLayer,a.Layers.basemapLayer=function(b,c){return new a.Layers.BasemapLayer(b,c)},a.basemapLayer=function(b,c){return new a.Layers.BasemapLayer(b,c)}}(EsriLeaflet),EsriLeaflet.Layers.RasterLayer=L.Class.extend({includes:L.Mixin.Events,options:{opacity:1,position:"front",f:"image"},onAdd:function(a){if(this._map=a,this._update=L.Util.limitExecByInterval(this._update,this.options.updateInterval,this),a.options.crs&&a.options.crs.code){var b=a.options.crs.code.split(":")[1];this.options.bboxSR=b,this.options.imageSR=b}a.on("moveend",this._update,this),this._currentImage&&this._currentImage._bounds.equals(this._map.getBounds())?a.addLayer(this._currentImage):this._currentImage&&(this._map.removeLayer(this._currentImage),this._currentImage=null),this._update(),this._popup&&(this._map.on("click",this._getPopupData,this),this._map.on("dblclick",this._resetPopupState,this))},bindPopup:function(a,b){return this._shouldRenderPopup=!1,this._lastClick=!1,this._popup=L.popup(b),this._popupFunction=a,this._map&&(this._map.on("click",this._getPopupData,this),this._map.on("dblclick",this._resetPopupState,this)),this},unbindPopup:function(){return this._map&&(this._map.closePopup(this._popup),this._map.off("click",this._getPopupData,this),this._map.off("dblclick",this._resetPopupState,this)),this._popup=!1,this},onRemove:function(a){this._currentImage&&this._map.removeLayer(this._currentImage),this._popup&&(this._map.off("click",this._getPopupData,this),this._map.off("dblclick",this._resetPopupState,this)),this._map.off("moveend",this._update,this),this._map=null},addTo:function(a){return a.addLayer(this),this},removeFrom:function(a){return a.removeLayer(this),this},bringToFront:function(){return this.options.position="front",this._currentImage&&this._currentImage.bringToFront(),this},bringToBack:function(){return this.options.position="back",this._currentImage&&this._currentImage.bringToBack(),this},getAttribution:function(){return this.options.attribution},getOpacity:function(){return this.options.opacity},setOpacity:function(a){return this.options.opacity=a,this._currentImage.setOpacity(a),this},getTimeRange:function(){return[this.options.from,this.options.to]},setTimeRange:function(a,b){return this.options.from=a,this.options.to=b,this._update(),this},metadata:function(a,b){return this._service.metadata(a,b),this},authenticate:function(a){return this._service.authenticate(a),this},_renderImage:function(a,b){if(this._map){var c=new L.ImageOverlay(a,b,{opacity:0}).addTo(this._map);c.once("load",function(a){var c=a.target,d=this._currentImage;c._bounds.equals(b)&&c._bounds.equals(this._map.getBounds())?(this._currentImage=c,"front"===this.options.position?this.bringToFront():this.bringToBack(),this._map&&this._currentImage._map?this._currentImage.setOpacity(this.options.opacity):this._currentImage._map.removeLayer(this._currentImage),d&&this._map&&this._map.removeLayer(d),d&&d._map&&d._map.removeLayer(d)):this._map.removeLayer(c),this.fire("load",{bounds:b})},this),this.fire("loading",{bounds:b})}},_update:function(){if(this._map){var a=this._map.getZoom(),b=this._map.getBounds();if(!(this._animatingZoom||this._map._panTransition&&this._map._panTransition._inProgress)){if(a>this.options.maxZoom||a0||f.yd}}),L.esri.TiledMapLayer=L.esri.Layers.tiledMapLayer,L.esri.Layers.tiledMapLayer=function(a){return new L.esri.Layers.TiledMapLayer(a)},L.esri.tiledMapLayer=function(a){return new L.esri.Layers.TiledMapLayer(a)},EsriLeaflet.Layers.FeatureGrid=L.Class.extend({includes:L.Mixin.Events,options:{cellSize:512,updateInterval:150},initialize:function(a){a=L.setOptions(this,a)},onAdd:function(a){this._map=a,this._update=L.Util.limitExecByInterval(this._update,this.options.updateInterval,this),this._map.addEventListener(this.getEvents(),this),this._reset(),this._update()},onRemove:function(){this._map.removeEventListener(this.getEvents(),this),this._removeCells()},getEvents:function(){var a={viewreset:this._reset,moveend:this._update,zoomend:this._onZoom};return a},addTo:function(a){return a.addLayer(this),this},removeFrom:function(a){return a.removeLayer(this),this},_onZoom:function(){var a=this._map.getZoom();a>this.options.maxZoom||athis.options.maxZoom||bc;c++)this._addCell(e[c])},_cellCoordsToBounds:function(a){var b=this._map,c=this.options.cellSize,d=a.multiplyBy(c),e=d.add([c,c]),f=b.unproject(d,a.z).wrap(),g=b.unproject(e,a.z).wrap();return new L.LatLngBounds(f,g)},_cellCoordsToKey:function(a){return a.x+":"+a.y},_keyToCellCoords:function(a){var b=a.split(":"),c=parseInt(b[0],10),d=parseInt(b[1],10);return new L.Point(c,d)},_removeOtherCells:function(a){for(var b in this._cells)a.contains(this._keyToCellCoords(b))||this._removeCell(b)},_removeCell:function(a){var b=this._activeCells[a];b&&(delete this._activeCells[a],this.cellLeave&&this.cellLeave(b.bounds,b.coords),this.fire("cellleave",{bounds:b.bounds,coords:b.coords}))},_removeCells:function(){for(var a in this._cells){var b=this._cells[a].bounds,c=this._cells[a].coords;this.cellLeave&&this.cellLeave(b,c),this.fire("cellleave",{bounds:b,coords:c})}},_addCell:function(a){this._wrapCoords(a);var b=this._cellCoordsToKey(a),c=this._cells[b];c&&!this._activeCells[b]&&(this.cellEnter&&this.cellEnter(c.bounds,a),this.fire("cellenter",{bounds:c.bounds,coords:a}),this._activeCells[b]=c),c||(c={coords:a,bounds:this._cellCoordsToBounds(a)},this._cells[b]=c,this._activeCells[b]=c,this.createCell&&this.createCell(c.bounds,a),this.fire("cellcreate",{bounds:c.bounds,coords:a}))},_wrapCoords:function(a){a.x=this._wrapLng?L.Util.wrapNum(a.x,this._wrapLng):a.x,a.y=this._wrapLat?L.Util.wrapNum(a.y,this._wrapLat):a.y}}),function(a){function b(a){this.values=a||[]}a.Layers.FeatureManager=a.Layers.FeatureGrid.extend({options:{where:"1=1",fields:["*"],from:!1,to:!1,timeField:!1,timeFilterMode:"server",simplifyFactor:0,precision:6},initialize:function(c){if(a.Layers.FeatureGrid.prototype.initialize.call(this,c),c.url=a.Util.cleanUrl(c.url),c=L.setOptions(this,c),this._service=new a.Services.FeatureLayerService(c),"*"!==this.options.fields[0]){for(var d=!1,e=0;e=0;d--){var e=a[d].id;this._currentSnapshot.push(e),this._cache[c].push(e)}this.options.timeField&&this._buildTimeIndexes(a);var f=this._map.getZoom();f>this.options.maxZoom||f=0;j--)f.push(i.features[j].id);0>=g&&(this._currentSnapshot=f,a.Util.requestAnimationFrame(L.Util.bind(function(){this.removeLayers(e),this.addLayers(f),c&&c.call(d,h)},this)))},this),j=this._currentSnapshot.length-1;j>=0;j--)e.push(this._currentSnapshot[j]);for(var k in this._activeCells){g++;var l=this._keyToCellCoords(k),m=this._cellCoordsToBounds(l);this._requestFeatures(m,k,i)}return this},getWhere:function(){return this.options.where},getTimeRange:function(){return[this.options.from,this.options.to]},setTimeRange:function(a,b,c,d){var e=this.options.from,f=this.options.to,g=0,h=null,i=L.Util.bind(function(i){i&&(h=i),this._filterExistingFeatures(e,f,a,b),g--,c&&0>=g&&c.call(d,h)},this);if(this.options.from=a,this.options.to=b,this._filterExistingFeatures(e,f,a,b),"server"===this.options.timeFilterMode)for(var j in this._activeCells){g++;var k=this._keyToCellCoords(j),l=this._cellCoordsToBounds(k);this._requestFeatures(l,j,i)}},refresh:function(){for(var a in this._activeCells){var b=this._keyToCellCoords(a),c=this._cellCoordsToBounds(b);this._requestFeatures(c,a)}this.redraw&&this.once("load",function(){this.eachFeature(function(a){this._redraw(a.feature.id)},this)},this)},_filterExistingFeatures:function(b,c,d,e){var f=b&&c?this._getFeaturesInTimeRange(b,c):this._currentSnapshot,g=this._getFeaturesInTimeRange(d,e);if(g.indexOf)for(var h=0;h=0&&f.splice(i,1)}a.Util.requestAnimationFrame(L.Util.bind(function(){this.removeLayers(f),this.addLayers(g)},this))},_getFeaturesInTimeRange:function(a,b){var c,d=[];if(this.options.timeField.start&&this.options.timeField.end){var e=this._startTimeIndex.between(a,b),f=this._endTimeIndex.between(a,b);c=e.concat(f)}else c=this._timeIndex.between(a,b);for(var g=c.length-1;g>=0;g--)d.push(c[g].id);return d},_buildTimeIndexes:function(a){var b,c;if(this.options.timeField.start&&this.options.timeField.end){var d=[],e=[];for(b=a.length-1;b>=0;b--)c=a[b],d.push({id:c.id,value:new Date(c.properties[this.options.timeField.start])}),e.push({id:c.id,value:new Date(c.properties[this.options.timeField.end])});this._startTimeIndex.bulkAdd(d),this._endTimeIndex.bulkAdd(e)}else{var f=[];for(b=a.length-1;b>=0;b--)c=a[b],f.push({id:c.id,value:new Date(c.properties[this.options.timeField])});this._timeIndex.bulkAdd(f)}},_featureWithinTimeRange:function(a){if(!this.options.from||!this.options.to)return!0;var b=+this.options.from.valueOf(),c=+this.options.to.valueOf();if("string"==typeof this.options.timeField){var d=+a.properties[this.options.timeField];return d>=b&&c>=d}if(this.options.timeField.start&&this.options.timeField.end){var e=+a.properties[this.options.timeField.start],f=+a.properties[this.options.timeField.end];return e>=b&&c>=e||f>=b&&c>=f}},authenticate:function(a){return this._service.authenticate(a),this},metadata:function(a,b){return this._service.metadata(a,b),this},query:function(){return this._service.query()},_getMetadata:function(a){if(this._metadata){var b;a(b,this._metadata)}else this.metadata(L.Util.bind(function(b,c){this._metadata=c,a(b,this._metadata)},this))},addFeature:function(a,b,c){this._getMetadata(L.Util.bind(function(d,e){this._service.addFeature(a,L.Util.bind(function(d,f){d||(a.properties[e.objectIdField]=f.objectId,a.id=f.objectId,this.createLayers([a])),b&&b.call(c,d,f)},this))},this))},updateFeature:function(a,b,c){this._service.updateFeature(a,function(d,e){d||(this.removeLayers([a.id],!0),this.createLayers([a])),b&&b.call(c,d,e)},this)},deleteFeature:function(a,b,c){this._service.deleteFeature(a,function(a,d){!a&&d.objectId&&this.removeLayers([d.objectId],!0),b&&b.call(c,a,d)},this)},deleteFeatures:function(a,b,c){return this._service.deleteFeatures(a,function(a,d){if(!a&&d.length>0)for(var e=0;e=e;)if(d=b=(e+f)/2|0,c=this.values[Math.round(b)],+c.value<+a)e=b+1;else{if(!(+c.value>+a))return b;f=b-1}return~f},b.prototype.sort=function(){this.values.sort(function(a,b){return+b.value-+a.value}).reverse(),this.dirty=!1},b.prototype.between=function(a,b){this.dirty&&this.sort();var c=this._query(a),d=this._query(b);return 0===c&&0===d?[]:(c=Math.abs(c),d=0>d?Math.abs(d):d+1,this.values.slice(c,d))},b.prototype.bulkAdd=function(a){this.dirty=!0,this.values=this.values.concat(a)}}(EsriLeaflet),EsriLeaflet.Layers.FeatureLayer=EsriLeaflet.Layers.FeatureManager.extend({statics:{EVENTS:"click dblclick mouseover mouseout mousemove contextmenu popupopen popupclose"},options:{cacheLayers:!0},initialize:function(a){EsriLeaflet.Layers.FeatureManager.prototype.initialize.call(this,a),a=L.setOptions(this,a),this._layers={},this._leafletIds={},this._key="c"+(1e9*Math.random()).toString(36).replace(".","_")},onAdd:function(a){return a.on("zoomstart zoomend",function(a){this._zooming="zoomstart"===a.type},this),this._removed=!1,EsriLeaflet.Layers.FeatureManager.prototype.onAdd.call(this,a)},onRemove:function(a){this._removed=!0;for(var b in this._layers)a.removeLayer(this._layers[b]);return EsriLeaflet.Layers.FeatureManager.prototype.onRemove.call(this,a)},createNewLayer:function(a){return L.GeoJSON.geometryToLayer(a,this.options.pointToLayer,L.GeoJSON.coordsToLatLng,this.options)},_updateLayer:function(a,b){var c=[],d=this.options.coordsToLatLng||L.GeoJSON.coordsToLatLng;switch(b.properties&&(a.feature.properties=b.properties),b.geometry.type){case"Point":c=L.GeoJSON.coordsToLatLng(b.geometry.coordinates),a.setLatLng(c);break;case"LineString":c=L.GeoJSON.coordsToLatLngs(b.geometry.coordinates,0,d),a.setLatLngs(c);break;case"MultiLineString":c=L.GeoJSON.coordsToLatLngs(b.geometry.coordinates,1,d),a.setLatLngs(c);break;case"Polygon":c=L.GeoJSON.coordsToLatLngs(b.geometry.coordinates,1,d),a.setLatLngs(c);break;case"MultiPolygon":c=L.GeoJSON.coordsToLatLngs(b.geometry.coordinates,2,d),a.setLatLngs(c)}},createLayers:function(a){for(var b=a.length-1;b>=0;b--){var c,d=a[b],e=this._layers[d.id];e&&!this._map.hasLayer(e)&&this._map.addLayer(e),e&&(e.setLatLngs||e.setLatLng)&&this._updateLayer(e,d),e||(c=this.createNewLayer(d),c.feature=d,this.options.style?c._originalStyle=this.options.style:c.setStyle&&(c._originalStyle=c.options),c._leaflet_id=this._key+"_"+d.id,this._leafletIds[c._leaflet_id]=d.id,c.on(EsriLeaflet.Layers.FeatureLayer.EVENTS,this._propagateEvent,this),this._popup&&c.bindPopup&&c.bindPopup(this._popup(c.feature,c),this._popupOptions),this.options.onEachFeature&&this.options.onEachFeature(c.feature,c),this._layers[c.feature.id]=c,this.resetStyle(c.feature.id),this.fire("createfeature",{feature:c.feature}),(!this.options.timeField||this.options.timeField&&this._featureWithinTimeRange(d))&&this._map.addLayer(c))}},addLayers:function(a){for(var b=a.length-1;b>=0;b--){var c=this._layers[a[b]];c&&(this.fire("addfeature",{feature:c.feature}),this._map.addLayer(c))}},removeLayers:function(a,b){for(var c=a.length-1;c>=0;c--){var d=a[c],e=this._layers[d];e&&(this.fire("removefeature",{feature:e.feature,permanent:b}),this._map.removeLayer(e)),e&&b&&delete this._layers[d]}},cellEnter:function(a,b){this._zooming||EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){var a=this._cacheKey(b),c=this._cellCoordsToKey(b),d=this._cache[a];this._activeCells[c]&&d&&this.addLayers(d)},this))},cellLeave:function(a,b){this._zooming||EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){var a=this._cacheKey(b),c=this._cellCoordsToKey(b),d=this._cache[a],e=this._map.getBounds();if(!this._activeCells[c]&&d){for(var f=!0,g=0;gPowered by Esri':'Powered by Esri'}}),EsriLeaflet.Controls.logo=function(a){return new L.esri.Controls.Logo(a)}; //# sourceMappingURL=esri-leaflet.js.map return EsriLeaflet; diff --git a/dist/esri-leaflet.js.map b/dist/esri-leaflet.js.map index 8a05c9bd0..a4c7bd2b5 100644 --- a/dist/esri-leaflet.js.map +++ b/dist/esri-leaflet.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/EsriLeaflet.js","../src/Util.js","../src/Request.js","../src/Services/Service.js","../src/Services/FeatureLayerService.js","../src/Services/MapService.js","../src/Services/ImageService.js","../src/Tasks/Task.js","../src/Tasks/Query.js","../src/Tasks/Find.js","../src/Tasks/Identify.js","../src/Tasks/IdentifyImage.js","../src/Tasks/IdentifyFeatures.js","../src/Layers/BasemapLayer.js","../src/Layers/RasterLayer.js","../src/Layers/DynamicMapLayer.js","../src/Layers/ImageMapLayer.js","../src/Layers/TiledMapLayer.js","../src/Layers/FeatureLayer/FeatureGrid.js","../src/Layers/FeatureLayer/FeatureManager.js","../src/Layers/FeatureLayer/FeatureLayer.js","../src/Controls/Logo.js"],"names":["EsriLeaflet","VERSION","Layers","Services","Controls","Tasks","Util","Support","CORS","window","XMLHttpRequest","pointerEvents","document","documentElement","style","L","esri","clone","obj","target","i","hasOwnProperty","pointsEqual","a","b","length","closeRing","coordinates","push","ringIsClockwise","ringToTest","pt2","total","rLength","pt1","vertexIntersectsVertex","a1","a2","b1","b2","uaT","ubT","uB","ua","ub","arrayIntersectsArray","j","coordinatesContainPoint","point","contains","l","coordinatesContainCoordinates","outer","inner","intersects","convertRingsToGeoJSON","rings","x","outerRing","hole","outerRings","holes","r","ring","slice","polygon","uncontainedHoles","pop","contained","reverse","type","orientRings","poly","output","shift","flattenMultiPolygonRings","raf","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","msRequestAnimationFrame","cb","setTimeout","extentToBounds","extent","sw","LatLng","ymin","xmin","ne","ymax","xmax","LatLngBounds","boundsToExtent","bounds","latLngBounds","getSouthWest","lng","lat","getNorthEast","spatialReference","wkid","arcgisToGeojson","arcgis","idAttribute","geojson","y","points","paths","geometry","attributes","properties","id","OBJECTID","FID","geojsonToArcGIS","result","features","geometries","responseToFeatureCollection","response","objectIdField","objectIdFieldName","fields","name","featureCollection","results","cleanUrl","url","replace","isArcgisOnline","test","geojsonTypeToArcGIS","geoJsonType","arcgisGeometryType","bind","warn","message","console","serialize","params","data","f","key","value","param","Object","prototype","toString","call","JSON","stringify","join","valueOf","encodeURIComponent","createRequest","callback","context","httpRequest","onerror","e","onreadystatechange","falseFn","error","code","readyState","parse","responseText","callbacks","_EsriLeafletCallbacks","Request","request","paramString","requestLength","open","send","get","JSONP","setRequestHeader","post","XMLHTTP","callbackId","script","DomUtil","create","body","src","responseType","abort","_callback","Service","Class","extend","includes","Mixin","Events","options","proxy","useCors","initialize","this","_requestQueue","_authenticating","setOptions","path","_request","metadata","authenticate","token","_runQueue","method","fire","wrappedCallback","_createServiceCallback","apply","service","FeatureLayerService","query","Query","addFeature","feature","addResults","undefined","updateFeature","updateResults","deleteFeature","objectIds","deleteResults","deleteFeatures","ids","featureLayerService","MapService","identify","identifyFeatures","find","Find","mapService","ImageService","IdentifyImage","imageService","Task","generateSetter","endpoint","_service","setters","setter","offset","limit","precision","featureIds","returnGeometry","where","outSr","outFields","within","_setGeometry","spatialRel","overlaps","nearby","latlng","radius","latLng","geometryType","units","distance","inSr","string","between","start","end","time","simplify","map","factor","mapWidth","Math","abs","getBounds","getWest","getEast","maxAllowableOffset","getSize","orderBy","fieldName","order","orderByFields","run","_cleanParams","_trapSQLerrors","count","returnCountOnly","returnIdsOnly","returnExtentOnly","pixelSize","layer","getLatLng","GeoJSON","getLayers","toGeoJSON","text","sr","layers","dynamicLayers","returnZ","returnM","gdbVersion","layerDefs","Identify","setMosaicRule","setRenderingRule","setPixelSize","returnCatalogItems","at","getMosaicRule","mosaicRule","getRenderingRule","renderingRule","getPixelSize","_responseToGeoJSON","location","catalogItems","catalogItemVisibilities","geoJSON","pixel","crs","objectId","Values","values","catalogItemVisibility","identifyImage","IdentifyFeatures","tolerance","on","size","imageDisplay","mapExtent","layerDef","layerId","tileProtocol","protocol","BasemapLayer","TileLayer","statics","TILES","Streets","urlTemplate","attributionUrl","hideLogo","logoPosition","minZoom","maxZoom","subdomains","attribution","Topographic","Oceans","OceansLabels","NationalGeographic","DarkGray","DarkGrayLabels","Gray","GrayLabels","Imagery","ImageryLabels","ImageryTransportation","ShadedRelief","ShadedReliefLabels","Terrain","TerrainLabels","config","Error","tileOptions","_getAttributionData","_logo","Logo","position","onAdd","_hasEsriLogo","addTo","_updateMapAttribution","onRemove","_container","removeControl","off","getAttribution","attributions","_attributions","c","contributors","contributor","coverageAreas","coverageArea","southWest","bbox","northEast","score","zoomMin","zoomMax","sort","_map","attributionControl","newAttributions","zoom","getZoom","match","substr","attributionElement","querySelector","innerHTML","maxWidth","basemapLayer","RasterLayer","opacity","_update","limitExecByInterval","updateInterval","split","bboxSR","imageSR","_currentImage","_bounds","equals","addLayer","removeLayer","_popup","_getPopupData","_resetPopupState","bindPopup","fn","popupOptions","_shouldRenderPopup","_lastClick","popup","_popupFunction","unbindPopup","closePopup","removeFrom","bringToFront","bringToBack","getOpacity","setOpacity","getTimeRange","from","to","setTimeRange","_renderImage","image","ImageOverlay","once","newImage","oldImage","_animatingZoom","_panTransition","_inProgress","_buildExportParams","_requestExport","_renderPopup","content","setLatLng","setContent","openOn","_propagateEvent","DynamicMapLayer","timeOptions","format","transparent","getDynamicLayers","setDynamicLayers","setLayers","getLayerDefs","setLayerDefs","getTimeOptions","setTimeOptions","identifyRequest","project","_northEast","_southWest","top","latLngToLayerPoint","bottom","dpi","href","getParamString","dynamicMapLayer","ImageMapLayer","setPixelType","pixelType","getPixelType","setBandIds","bandIds","isArray","getBandIds","setNoData","noData","noDataInterpretation","getNoData","getNoDataInterpretation","interpolation","compressionQuality","imageMapLayer","TiledMapLayer","zoomOffsetAllowance","correctZoomLevels","MercatorZoomLevels","0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","tileUrl","getTileUrl","tilePoint","template","s","_getSubdomain","z","_lodMap","latestWkid","arcgisLODs","tileInfo","lods","correctResolutions","arcgisLOD","ci","correctRes","_withinPercentage","resolution","level","tokenQs","percentage","diff","tiledMapLayer","FeatureGrid","cellSize","addEventListener","getEvents","_reset","removeEventListener","_removeCells","events","viewreset","moveend","zoomend","_onZoom","hasLayer","_cells","_activeCells","_cellsToLoad","_cellsTotal","_resetWrap","infinite","_getCellSize","wrapLng","_wrapLng","floor","ceil","wrapLat","_wrapLat","getPixelBounds","cellPadding","topLeft","min","subtract","divideBy","max","cellBounds","add","_removeOtherCells","_addCells","coords","queue","center","getCenter","Point","cellsToLoad","distanceTo","_addCell","_cellCoordsToBounds","nwPoint","multiplyBy","sePoint","nw","unproject","wrap","se","_cellCoordsToKey","_keyToCellCoords","kArr","parseInt","_removeCell","cell","cellLeave","_wrapCoords","cellEnter","createCell","wrapNum","BinarySearchIndex","FeatureManager","timeField","timeFilterMode","simplifyFactor","oidCheck","_startTimeIndex","_endTimeIndex","_timeIndex","_cache","_currentSnapshot","_activeRequests","_pendingRequests","_requestFeatures","_buildQuery","exceededTransferLimit","_removed","_addFeatures","_postProcessFeatures","_cacheKey","_buildTimeIndexes","createLayers","setWhere","oldSnapshot","newSnapshot","pendingRequests","mostRecentError","requestCallback","removeLayers","addLayers","getWhere","oldFrom","oldTo","_filterExistingFeatures","refresh","redraw","eachFeature","_redraw","newFrom","newTo","layersToRemove","_getFeaturesInTimeRange","layersToAdd","indexOf","shouldRemoveLayer","splice","search","startTimes","endTimes","concat","startTimeEntries","endTimeEntries","Date","bulkAdd","timeEntries","_featureWithinTimeRange","date","startDate","endDate","_getMetadata","_metadata","_query","currentIndex","currentElement","resultIndex","minIndex","maxIndex","round","dirty","startIndex","endIndex","items","FeatureLayer","EVENTS","cacheLayers","_layers","_leafletIds","_key","random","_zooming","createNewLayer","geometryToLayer","pointToLayer","coordsToLatLng","_updateLayer","latlngs","coordsToLatLngs","setLatLngs","newLayer","_originalStyle","setStyle","_leaflet_id","_popupOptions","onEachFeature","resetStyle","permanent","cacheKey","cellKey","mapBounds","removable","setFeatureStyle","defaultOptions","Path","fill","popupContent","groupLayers","gLayer","getFeature","setIcon","getIcon","updatedIcon","icon","getStyle","updatedStyle","featureLayer","Control","marginTop","marginLeft","marginBottom","marginRight","div","_adjustLogo","_size","newSize","mapSize","logo"],"mappings":"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","file":"esri-leaflet.js","sourcesContent":["var EsriLeaflet = { //jshint ignore:line\n VERSION: '1.0.2',\n Layers: {},\n Services: {},\n Controls: {},\n Tasks: {},\n Util: {},\n Support: {\n CORS: !!(window.XMLHttpRequest && 'withCredentials' in new XMLHttpRequest()),\n pointerEvents: document.documentElement.style.pointerEvents === ''\n }\n};\n\nif(typeof window !== 'undefined' && window.L){\n window.L.esri = EsriLeaflet;\n}\n","(function(EsriLeaflet){\n\n // normalize request animation frame\n var raf = window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.msRequestAnimationFrame ||\n function(cb) { return window.setTimeout(cb, 1000 / 60); };\n\n // shallow object clone for feature properties and attributes\n // from http://jsperf.com/cloning-an-object/2\n function clone(obj) {\n var target = {};\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n target[i] = obj[i];\n }\n }\n return target;\n }\n\n // checks if 2 x,y points are equal\n function pointsEqual(a, b) {\n for (var i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n\n // checks if the first and last points of a ring are equal and closes the ring\n function closeRing(coordinates) {\n if (!pointsEqual(coordinates[0], coordinates[coordinates.length - 1])) {\n coordinates.push(coordinates[0]);\n }\n return coordinates;\n }\n\n // determine if polygon ring coordinates are clockwise. clockwise signifies outer ring, counter-clockwise an inner ring\n // or hole. this logic was found at http://stackoverflow.com/questions/1165647/how-to-determine-if-a-list-of-polygon-\n // points-are-in-clockwise-order\n function ringIsClockwise(ringToTest) {\n var total = 0,i = 0;\n var rLength = ringToTest.length;\n var pt1 = ringToTest[i];\n var pt2;\n for (i; i < rLength - 1; i++) {\n pt2 = ringToTest[i + 1];\n total += (pt2[0] - pt1[0]) * (pt2[1] + pt1[1]);\n pt1 = pt2;\n }\n return (total >= 0);\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L504-L519\n function vertexIntersectsVertex(a1, a2, b1, b2) {\n var uaT = (b2[0] - b1[0]) * (a1[1] - b1[1]) - (b2[1] - b1[1]) * (a1[0] - b1[0]);\n var ubT = (a2[0] - a1[0]) * (a1[1] - b1[1]) - (a2[1] - a1[1]) * (a1[0] - b1[0]);\n var uB = (b2[1] - b1[1]) * (a2[0] - a1[0]) - (b2[0] - b1[0]) * (a2[1] - a1[1]);\n\n if ( uB !== 0 ) {\n var ua = uaT / uB;\n var ub = ubT / uB;\n\n if ( 0 <= ua && ua <= 1 && 0 <= ub && ub <= 1 ) {\n return true;\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L521-L531\n function arrayIntersectsArray(a, b) {\n for (var i = 0; i < a.length - 1; i++) {\n for (var j = 0; j < b.length - 1; j++) {\n if (vertexIntersectsVertex(a[i], a[i + 1], b[j], b[j + 1])) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L470-L480\n function coordinatesContainPoint(coordinates, point) {\n var contains = false;\n for(var i = -1, l = coordinates.length, j = l - 1; ++i < l; j = i) {\n if (((coordinates[i][1] <= point[1] && point[1] < coordinates[j][1]) ||\n (coordinates[j][1] <= point[1] && point[1] < coordinates[i][1])) &&\n (point[0] < (coordinates[j][0] - coordinates[i][0]) * (point[1] - coordinates[i][1]) / (coordinates[j][1] - coordinates[i][1]) + coordinates[i][0])) {\n contains = !contains;\n }\n }\n return contains;\n }\n\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L106-L113\n function coordinatesContainCoordinates(outer, inner){\n var intersects = arrayIntersectsArray(outer, inner);\n var contains = coordinatesContainPoint(outer, inner[0]);\n if(!intersects && contains){\n return true;\n }\n return false;\n }\n\n // do any polygons in this array contain any other polygons in this array?\n // used for checking for holes in arcgis rings\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L117-L172\n function convertRingsToGeoJSON(rings){\n var outerRings = [];\n var holes = [];\n var x; // iterator\n var outerRing; // current outer ring being evaluated\n var hole; // current hole being evaluated\n\n // for each ring\n for (var r = 0; r < rings.length; r++) {\n var ring = closeRing(rings[r].slice(0));\n if(ring.length < 4){\n continue;\n }\n // is this ring an outer ring? is it clockwise?\n if(ringIsClockwise(ring)){\n var polygon = [ ring ];\n outerRings.push(polygon); // push to outer rings\n } else {\n holes.push(ring); // counterclockwise push to holes\n }\n }\n\n var uncontainedHoles = [];\n\n // while there are holes left...\n while(holes.length){\n // pop a hole off out stack\n hole = holes.pop();\n\n // loop over all outer rings and see if they contain our hole.\n var contained = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(coordinatesContainCoordinates(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n contained = true;\n break;\n }\n }\n\n // ring is not contained in any outer ring\n // sometimes this happens https://github.com/Esri/esri-leaflet/issues/320\n if(!contained){\n uncontainedHoles.push(hole);\n }\n }\n\n // if we couldn't match any holes using contains we can try intersects...\n while(uncontainedHoles.length){\n // pop a hole off out stack\n hole = uncontainedHoles.pop();\n\n // loop over all outer rings and see if any intersect our hole.\n var intersects = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(arrayIntersectsArray(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n intersects = true;\n break;\n }\n }\n\n if(!intersects) {\n outerRings.push([hole.reverse()]);\n }\n }\n\n if(outerRings.length === 1){\n return {\n type: 'Polygon',\n coordinates: outerRings[0]\n };\n } else {\n return {\n type: 'MultiPolygon',\n coordinates: outerRings\n };\n }\n }\n\n // This function ensures that rings are oriented in the right directions\n // outer rings are clockwise, holes are counterclockwise\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function orientRings(poly){\n var output = [];\n var polygon = poly.slice(0);\n var outerRing = closeRing(polygon.shift().slice(0));\n if(outerRing.length >= 4){\n if(!ringIsClockwise(outerRing)){\n outerRing.reverse();\n }\n\n output.push(outerRing);\n\n for (var i = 0; i < polygon.length; i++) {\n var hole = closeRing(polygon[i].slice(0));\n if(hole.length >= 4){\n if(ringIsClockwise(hole)){\n hole.reverse();\n }\n output.push(hole);\n }\n }\n }\n\n return output;\n }\n\n // This function flattens holes in multipolygons to one array of polygons\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function flattenMultiPolygonRings(rings){\n var output = [];\n for (var i = 0; i < rings.length; i++) {\n var polygon = orientRings(rings[i]);\n for (var x = polygon.length - 1; x >= 0; x--) {\n var ring = polygon[x].slice(0);\n output.push(ring);\n }\n }\n return output;\n }\n\n // convert an extent (ArcGIS) to LatLngBounds (Leaflet)\n EsriLeaflet.Util.extentToBounds = function(extent){\n var sw = new L.LatLng(extent.ymin, extent.xmin);\n var ne = new L.LatLng(extent.ymax, extent.xmax);\n return new L.LatLngBounds(sw, ne);\n };\n\n // convert an LatLngBounds (Leaflet) to extent (ArcGIS)\n EsriLeaflet.Util.boundsToExtent = function(bounds) {\n bounds = L.latLngBounds(bounds);\n return {\n 'xmin': bounds.getSouthWest().lng,\n 'ymin': bounds.getSouthWest().lat,\n 'xmax': bounds.getNorthEast().lng,\n 'ymax': bounds.getNorthEast().lat,\n 'spatialReference': {\n 'wkid' : 4326\n }\n };\n };\n\n EsriLeaflet.Util.arcgisToGeojson = function (arcgis, idAttribute){\n var geojson = {};\n\n if(typeof arcgis.x === 'number' && typeof arcgis.y === 'number'){\n geojson.type = 'Point';\n geojson.coordinates = [arcgis.x, arcgis.y];\n }\n\n if(arcgis.points){\n geojson.type = 'MultiPoint';\n geojson.coordinates = arcgis.points.slice(0);\n }\n\n if(arcgis.paths) {\n if(arcgis.paths.length === 1){\n geojson.type = 'LineString';\n geojson.coordinates = arcgis.paths[0].slice(0);\n } else {\n geojson.type = 'MultiLineString';\n geojson.coordinates = arcgis.paths.slice(0);\n }\n }\n\n if(arcgis.rings) {\n geojson = convertRingsToGeoJSON(arcgis.rings.slice(0));\n }\n\n if(arcgis.geometry || arcgis.attributes) {\n geojson.type = 'Feature';\n geojson.geometry = (arcgis.geometry) ? EsriLeaflet.Util.arcgisToGeojson(arcgis.geometry) : null;\n geojson.properties = (arcgis.attributes) ? clone(arcgis.attributes) : null;\n if(arcgis.attributes) {\n geojson.id = arcgis.attributes[idAttribute] || arcgis.attributes.OBJECTID || arcgis.attributes.FID;\n }\n }\n\n return geojson;\n };\n\n // GeoJSON -> ArcGIS\n EsriLeaflet.Util.geojsonToArcGIS = function(geojson, idAttribute){\n idAttribute = idAttribute || 'OBJECTID';\n var spatialReference = { wkid: 4326 };\n var result = {};\n var i;\n\n switch(geojson.type){\n case 'Point':\n result.x = geojson.coordinates[0];\n result.y = geojson.coordinates[1];\n result.spatialReference = spatialReference;\n break;\n case 'MultiPoint':\n result.points = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'LineString':\n result.paths = [geojson.coordinates.slice(0)];\n result.spatialReference = spatialReference;\n break;\n case 'MultiLineString':\n result.paths = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'Polygon':\n result.rings = orientRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'MultiPolygon':\n result.rings = flattenMultiPolygonRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'Feature':\n if(geojson.geometry) {\n result.geometry = EsriLeaflet.Util.geojsonToArcGIS(geojson.geometry, idAttribute);\n }\n result.attributes = (geojson.properties) ? clone(geojson.properties) : {};\n if(geojson.id){\n result.attributes[idAttribute] = geojson.id;\n }\n break;\n case 'FeatureCollection':\n result = [];\n for (i = 0; i < geojson.features.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.features[i], idAttribute));\n }\n break;\n case 'GeometryCollection':\n result = [];\n for (i = 0; i < geojson.geometries.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.geometries[i], idAttribute));\n }\n break;\n }\n\n return result;\n };\n\n EsriLeaflet.Util.responseToFeatureCollection = function(response, idAttribute){\n var objectIdField;\n\n if(idAttribute){\n objectIdField = idAttribute;\n } else if(response.objectIdFieldName){\n objectIdField = response.objectIdFieldName;\n } else if(response.fields) {\n for (var j = 0; j <= response.fields.length - 1; j++) {\n if(response.fields[j].type === 'esriFieldTypeOID') {\n objectIdField = response.fields[j].name;\n break;\n }\n }\n } else {\n objectIdField = 'OBJECTID';\n }\n\n var featureCollection = {\n type: 'FeatureCollection',\n features: []\n };\n var features = response.features || response.results;\n if(features.length){\n for (var i = features.length - 1; i >= 0; i--) {\n featureCollection.features.push(EsriLeaflet.Util.arcgisToGeojson(features[i], objectIdField));\n }\n }\n\n return featureCollection;\n };\n\n // trim url whitespace and add a trailing slash if needed\n EsriLeaflet.Util.cleanUrl = function(url){\n //trim leading and trailing spaces, but not spaces inside the url\n url = url.replace(/^\\s+|\\s+$|\\A\\s+|\\s+\\z/g, '');\n\n //add a trailing slash to the url if the user omitted it\n if(url[url.length-1] !== '/'){\n url += '/';\n }\n\n return url;\n };\n\n EsriLeaflet.Util.isArcgisOnline = function(url){\n /* hosted feature services can emit geojson natively.\n our check for 'geojson' support will need to be revisted\n once the functionality makes its way to ArcGIS Server*/\n return (/\\.arcgis\\.com.*?FeatureServer/g).test(url);\n };\n\n EsriLeaflet.Util.geojsonTypeToArcGIS = function (geoJsonType) {\n var arcgisGeometryType;\n switch (geoJsonType) {\n case 'Point':\n arcgisGeometryType = 'esriGeometryPoint';\n break;\n case 'MultiPoint':\n arcgisGeometryType = 'esriGeometryMultipoint';\n break;\n case 'LineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'MultiLineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'Polygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n case 'MultiPolygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n }\n return arcgisGeometryType;\n };\n\n EsriLeaflet.Util.requestAnimationFrame = L.Util.bind(raf, window);\n\n EsriLeaflet.Util.warn = function (message) {\n if(console && console.warn) {\n console.warn(message);\n }\n };\n\n})(EsriLeaflet);","(function(EsriLeaflet){\n\n var callbacks = 0;\n\n window._EsriLeafletCallbacks = {};\n\n function serialize(params){\n var data = '';\n\n params.f = params.f || 'json';\n\n for (var key in params){\n if(params.hasOwnProperty(key)){\n var param = params[key];\n var type = Object.prototype.toString.call(param);\n var value;\n\n if(data.length){\n data += '&';\n }\n\n if (type === '[object Array]'){\n value = (Object.prototype.toString.call(param[0]) === '[object Object]') ? JSON.stringify(param) : param.join(',');\n } else if (type === '[object Object]') {\n value = JSON.stringify(param);\n } else if (type === '[object Date]'){\n value = param.valueOf();\n } else {\n value = param;\n }\n\n data += encodeURIComponent(key) + '=' + encodeURIComponent(value);\n }\n }\n\n return data;\n }\n\n function createRequest(callback, context){\n var httpRequest = new XMLHttpRequest();\n\n httpRequest.onerror = function(e) {\n httpRequest.onreadystatechange = L.Util.falseFn;\n\n callback.call(context, {\n error: {\n code: 500,\n message: 'XMLHttpRequest error'\n }\n }, null);\n };\n\n httpRequest.onreadystatechange = function(){\n var response;\n var error;\n\n if (httpRequest.readyState === 4) {\n try {\n response = JSON.parse(httpRequest.responseText);\n } catch(e) {\n response = null;\n error = {\n code: 500,\n message: 'Could not parse response as JSON. This could also be caused by a CORS or XMLHttpRequest error.'\n };\n }\n\n if (!error && response.error) {\n error = response.error;\n response = null;\n }\n\n httpRequest.onerror = L.Util.falseFn;\n\n callback.call(context, error, response);\n }\n };\n\n return httpRequest;\n }\n\n // AJAX handlers for CORS (modern browsers) or JSONP (older browsers)\n EsriLeaflet.Request = {\n request: function(url, params, callback, context){\n var paramString = serialize(params);\n var httpRequest = createRequest(callback, context);\n var requestLength = (url + '?' + paramString).length;\n\n // request is less then 2000 characters and the browser supports CORS, make GET request with XMLHttpRequest\n if(requestLength <= 2000 && L.esri.Support.CORS){\n httpRequest.open('GET', url + '?' + paramString);\n httpRequest.send(null);\n\n // request is less more then 2000 characters and the browser supports CORS, make POST request with XMLHttpRequest\n } else if (requestLength > 2000 && L.esri.Support.CORS){\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(paramString);\n\n // request is less more then 2000 characters and the browser does not support CORS, make a JSONP request\n } else if(requestLength <= 2000 && !L.esri.Support.CORS){\n return L.esri.Request.get.JSONP(url, params, callback, context);\n\n // request is longer then 2000 characters and the browser does not support CORS, log a warning\n } else {\n EsriLeaflet.Util.warn('a request to ' + url + ' was longer then 2000 characters and this browser cannot make a cross-domain post request. Please use a proxy http://esri.github.io/esri-leaflet/api-reference/request.html');\n return;\n }\n\n return httpRequest;\n },\n\n post: {\n XMLHTTP: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(serialize(params));\n\n return httpRequest;\n }\n },\n\n get: {\n CORS: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n\n httpRequest.open('GET', url + '?' + serialize(params), true);\n httpRequest.send(null);\n\n return httpRequest;\n },\n JSONP: function(url, params, callback, context){\n var callbackId = 'c' + callbacks;\n\n params.callback = 'window._EsriLeafletCallbacks.' + callbackId;\n\n var script = L.DomUtil.create('script', null, document.body);\n script.type = 'text/javascript';\n script.src = url + '?' + serialize(params);\n script.id = callbackId;\n\n window._EsriLeafletCallbacks[callbackId] = function(response){\n if(window._EsriLeafletCallbacks[callbackId] !== true){\n var error;\n var responseType = Object.prototype.toString.call(response);\n\n if(!(responseType === '[object Object]' || responseType === '[object Array]')){\n error = {\n error: {\n code: 500,\n message: 'Expected array or object as JSONP response'\n }\n };\n response = null;\n }\n\n if (!error && response.error) {\n error = response;\n response = null;\n }\n\n callback.call(context, error, response);\n window._EsriLeafletCallbacks[callbackId] = true;\n }\n };\n\n callbacks++;\n\n return {\n id: callbackId,\n url: script.src,\n abort: function(){\n window._EsriLeafletCallbacks._callback[callbackId]({\n code: 0,\n message: 'Request aborted.'\n });\n }\n };\n }\n }\n };\n\n // choose the correct AJAX handler depending on CORS support\n EsriLeaflet.get = (EsriLeaflet.Support.CORS) ? EsriLeaflet.Request.get.CORS : EsriLeaflet.Request.get.JSONP;\n\n // always use XMLHttpRequest for posts\n EsriLeaflet.post = EsriLeaflet.Request.post.XMLHTTP;\n\n // expose a common request method the uses GET\\POST based on request length\n EsriLeaflet.request = EsriLeaflet.Request.request;\n\n})(EsriLeaflet);","EsriLeaflet.Services.Service = L.Class.extend({\n\n includes: L.Mixin.Events,\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n initialize: function (options) {\n options = options || {};\n this._requestQueue = [];\n this._authenticating = false;\n L.Util.setOptions(this, options);\n this.options.url = EsriLeaflet.Util.cleanUrl(this.options.url);\n },\n\n get: function (path, params, callback, context) {\n return this._request('get', path, params, callback, context);\n },\n\n post: function (path, params, callback, context) {\n return this._request('post', path, params, callback, context);\n },\n\n request: function (path, params, callback, context) {\n return this._request('request', path, params, callback, context);\n },\n\n metadata: function (callback, context) {\n return this._request('get', '', {}, callback, context);\n },\n\n authenticate: function(token){\n this._authenticating = false;\n this.options.token = token;\n this._runQueue();\n return this;\n },\n\n _request: function(method, path, params, callback, context){\n this.fire('requeststart', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n\n var wrappedCallback = this._createServiceCallback(method, path, params, callback, context);\n\n if (this.options.token) {\n params.token = this.options.token;\n }\n\n if (this._authenticating) {\n this._requestQueue.push([method, path, params, callback, context]);\n return;\n } else {\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, wrappedCallback);\n } else {\n return EsriLeaflet[method](url, params, wrappedCallback);\n }\n }\n },\n\n _createServiceCallback: function(method, path, params, callback, context){\n return L.Util.bind(function(error, response){\n\n if (error && (error.code === 499 || error.code === 498)) {\n this._authenticating = true;\n\n this._requestQueue.push([method, path, params, callback, context]);\n\n // fire an event for users to handle and re-authenticate\n this.fire('authenticationrequired', {\n authenticate: L.Util.bind(this.authenticate, this)\n });\n\n // if the user has access to a callback they can handle the auth error\n error.authenticate = L.Util.bind(this.authenticate, this);\n }\n\n callback.call(context, error, response);\n\n if(error) {\n this.fire('requesterror', {\n url: this.options.url + path,\n params: params,\n message: error.message,\n code: error.code,\n method: method\n });\n } else {\n this.fire('requestsuccess', {\n url: this.options.url + path,\n params: params,\n response: response,\n method: method\n });\n }\n\n this.fire('requestend', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n }, this);\n },\n\n _runQueue: function(){\n for (var i = this._requestQueue.length - 1; i >= 0; i--) {\n var request = this._requestQueue[i];\n var method = request.shift();\n this[method].apply(this, request);\n }\n this._requestQueue = [];\n }\n\n});\n\nEsriLeaflet.Services.service = function(params){\n return new EsriLeaflet.Services.Service(params);\n};\n","EsriLeaflet.Services.FeatureLayerService = EsriLeaflet.Services.Service.extend({\n\n options: {\n idAttribute: 'OBJECTID'\n },\n\n query: function(){\n return new EsriLeaflet.Tasks.Query(this);\n },\n\n addFeature: function(feature, callback, context) {\n delete feature.id;\n\n feature = EsriLeaflet.Util.geojsonToArcGIS(feature);\n\n return this.post('addFeatures', {\n features: [feature]\n }, function(error, response){\n var result = (response && response.addResults) ? response.addResults[0] : undefined;\n if(callback){\n callback.call(context, error || response.addResults[0].error, result);\n }\n }, context);\n },\n\n updateFeature: function(feature, callback, context) {\n feature = EsriLeaflet.Util.geojsonToArcGIS(feature, this.options.idAttribute);\n\n return this.post('updateFeatures', {\n features: [feature]\n }, function(error, response){\n var result = (response && response.updateResults) ? response.updateResults[0] : undefined;\n if(callback){\n callback.call(context, error || response.updateResults[0].error, result);\n }\n }, context);\n },\n\n deleteFeature: function(id, callback, context) {\n return this.post('deleteFeatures', {\n objectIds: id\n }, function(error, response){\n var result = (response && response.deleteResults) ? response.deleteResults[0] : undefined;\n if(callback){\n callback.call(context, error || response.deleteResults[0].error, result);\n }\n }, context);\n },\n\n deleteFeatures: function(ids, callback, context) {\n return this.post('deleteFeatures', {\n objectIds: ids\n }, function(error, response){\n // pass back the entire array\n var result = (response && response.deleteResults) ? response.deleteResults : undefined;\n if(callback){\n callback.call(context, error || response.deleteResults[0].error, result);\n }\n }, context);\n }\n});\n\nEsriLeaflet.Services.featureLayerService = function(options) {\n return new EsriLeaflet.Services.FeatureLayerService(options);\n};\n","EsriLeaflet.Services.MapService = EsriLeaflet.Services.Service.extend({\n\n identify: function () {\n return new EsriLeaflet.Tasks.identifyFeatures(this);\n },\n\n find: function () {\n return new EsriLeaflet.Tasks.Find(this);\n },\n\n query: function () {\n return new EsriLeaflet.Tasks.Query(this);\n }\n\n});\n\nEsriLeaflet.Services.mapService = function(params){\n return new EsriLeaflet.Services.MapService(params);\n};","EsriLeaflet.Services.ImageService = EsriLeaflet.Services.Service.extend({\n\n query: function () {\n return new EsriLeaflet.Tasks.Query(this);\n },\n\n identify: function() {\n return new EsriLeaflet.Tasks.IdentifyImage(this);\n }\n});\n\nEsriLeaflet.Services.imageService = function(params){\n return new EsriLeaflet.Services.ImageService(params);\n};","EsriLeaflet.Tasks.Task = L.Class.extend({\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n //Generate a method for each methodName:paramName in the setters for this task.\n generateSetter: function(param, context){\n return L.Util.bind(function(value){\n this.params[param] = value;\n return this;\n }, context);\n },\n\n initialize: function(endpoint){\n // endpoint can be either a url (and options) for an ArcGIS Rest Service or an instance of EsriLeaflet.Service\n if(endpoint.request && endpoint.options){\n this._service = endpoint;\n L.Util.setOptions(this, endpoint.options);\n } else {\n L.Util.setOptions(this, endpoint);\n this.options.url = L.esri.Util.cleanUrl(endpoint.url);\n }\n\n // clone default params into this object\n this.params = L.Util.extend({}, this.params || {});\n\n // generate setter methods based on the setters object implimented a child class\n if(this.setters){\n for (var setter in this.setters){\n var param = this.setters[setter];\n this[setter] = this.generateSetter(param, this);\n }\n }\n },\n\n token: function(token){\n if(this._service){\n this._service.authenticate(token);\n } else {\n this.params.token = token;\n }\n return this;\n },\n\n request: function(callback, context){\n if(this._service){\n return this._service.request(this.path, this.params, callback, context);\n } else {\n return this._request('request', this.path, this.params, callback, context);\n }\n },\n\n _request: function(method, path, params, callback, context){\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, callback, context);\n } else{\n return EsriLeaflet[method](url, params, callback, context);\n }\n }\n});","EsriLeaflet.Tasks.Query = EsriLeaflet.Tasks.Task.extend({\n setters: {\n 'offset': 'offset',\n 'limit': 'limit',\n 'fields': 'outFields',\n 'precision': 'geometryPrecision',\n 'featureIds': 'objectIds',\n 'returnGeometry': 'returnGeometry',\n 'token': 'token'\n },\n\n path: 'query',\n\n params: {\n returnGeometry: true,\n where: '1=1',\n outSr: 4326,\n outFields: '*'\n },\n\n within: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelContains'; // will make code read layer within geometry, to the api this will reads geometry contains layer\n return this;\n },\n\n intersects: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelIntersects';\n return this;\n },\n\n contains: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelWithin'; // will make code read layer contains geometry, to the api this will reads geometry within layer\n return this;\n },\n\n // crosses: function(geometry){\n // this._setGeometry(geometry);\n // this.params.spatialRel = 'esriSpatialRelCrosses';\n // return this;\n // },\n\n // touches: function(geometry){\n // this._setGeometry(geometry);\n // this.params.spatialRel = 'esriSpatialRelTouches';\n // return this;\n // },\n\n overlaps: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelOverlaps';\n return this;\n },\n\n // only valid for Feature Services running on ArcGIS Server 10.3 or ArcGIS Online\n nearby: function(latlng, radius){\n latlng = L.latLng(latlng);\n this.params.geometry = [latlng.lng, latlng.lat];\n this.params.geometryType = 'esriGeometryPoint';\n this.params.spatialRel = 'esriSpatialRelIntersects';\n this.params.units = 'esriSRUnit_Meter';\n this.params.distance = radius;\n this.params.inSr = 4326;\n return this;\n },\n\n where: function(string){\n // instead of converting double-quotes to single quotes, pass as is, and provide a more informative message if a 400 is encountered\n this.params.where = string;\n return this;\n },\n\n between: function(start, end){\n this.params.time = [start.valueOf(), end.valueOf()];\n return this;\n },\n\n simplify: function(map, factor){\n var mapWidth = Math.abs(map.getBounds().getWest() - map.getBounds().getEast());\n this.params.maxAllowableOffset = (mapWidth / map.getSize().y) * factor;\n return this;\n },\n\n orderBy: function(fieldName, order){\n order = order || 'ASC';\n this.params.orderByFields = (this.params.orderByFields) ? this.params.orderByFields + ',' : '';\n this.params.orderByFields += ([fieldName, order]).join(' ');\n return this;\n },\n\n run: function(callback, context){\n this._cleanParams();\n\n // if the service is hosted on arcgis online request geojson directly\n if(EsriLeaflet.Util.isArcgisOnline(this.options.url)){\n this.params.f = 'geojson';\n\n return this.request(function(error, response){\n this._trapSQLerrors(error);\n callback.call(context, error, response, response);\n }, this);\n\n // otherwise convert it in the callback then pass it on\n } else {\n return this.request(function(error, response){\n this._trapSQLerrors(error);\n callback.call(context, error, (response && EsriLeaflet.Util.responseToFeatureCollection(response)), response);\n }, this);\n }\n },\n\n count: function(callback, context){\n this._cleanParams();\n this.params.returnCountOnly = true;\n return this.request(function(error, response){\n callback.call(this, error, (response && response.count), response);\n }, context);\n },\n\n ids: function(callback, context){\n this._cleanParams();\n this.params.returnIdsOnly = true;\n return this.request(function(error, response){\n callback.call(this, error, (response && response.objectIds), response);\n }, context);\n },\n\n // only valid for Feature Services running on ArcGIS Server 10.3 or ArcGIS Online\n bounds: function(callback, context){\n this._cleanParams();\n this.params.returnExtentOnly = true;\n return this.request(function(error, response){\n callback.call(context, error, (response && response.extent && EsriLeaflet.Util.extentToBounds(response.extent)), response);\n }, context);\n },\n\n // only valid for image services\n pixelSize: function(point){\n point = L.point(point);\n this.params.pixelSize = [point.x,point.y];\n return this;\n },\n\n // only valid for map services\n layer: function(layer){\n this.path = layer + '/query';\n return this;\n },\n\n _trapSQLerrors: function(error){\n if (error){\n if (error.code === '400'){\n EsriLeaflet.Util.warn('one common syntax error in query requests is encasing string values in double quotes instead of single quotes');\n }\n }\n },\n\n _cleanParams: function(){\n delete this.params.returnIdsOnly;\n delete this.params.returnExtentOnly;\n delete this.params.returnCountOnly;\n },\n\n _setGeometry: function(geometry) {\n this.params.inSr = 4326;\n\n // convert bounds to extent and finish\n if ( geometry instanceof L.LatLngBounds ) {\n // set geometry + geometryType\n this.params.geometry = EsriLeaflet.Util.boundsToExtent(geometry);\n this.params.geometryType = 'esriGeometryEnvelope';\n return;\n }\n\n // convert L.Marker > L.LatLng\n if(geometry.getLatLng){\n geometry = geometry.getLatLng();\n }\n\n // convert L.LatLng to a geojson point and continue;\n if (geometry instanceof L.LatLng) {\n geometry = {\n type: 'Point',\n coordinates: [geometry.lng, geometry.lat]\n };\n }\n\n // handle L.GeoJSON, pull out the first geometry\n if ( geometry instanceof L.GeoJSON ) {\n //reassign geometry to the GeoJSON value (we are assuming that only one feature is present)\n geometry = geometry.getLayers()[0].feature.geometry;\n this.params.geometry = EsriLeaflet.Util.geojsonToArcGIS(geometry);\n this.params.geometryType = EsriLeaflet.Util.geojsonTypeToArcGIS(geometry.type);\n }\n\n // Handle L.Polyline and L.Polygon\n if (geometry.toGeoJSON) {\n geometry = geometry.toGeoJSON();\n }\n\n // handle GeoJSON feature by pulling out the geometry\n if ( geometry.type === 'Feature' ) {\n // get the geometry of the geojson feature\n geometry = geometry.geometry;\n }\n\n // confirm that our GeoJSON is a point, line or polygon\n if ( geometry.type === 'Point' || geometry.type === 'LineString' || geometry.type === 'Polygon') {\n this.params.geometry = EsriLeaflet.Util.geojsonToArcGIS(geometry);\n this.params.geometryType = EsriLeaflet.Util.geojsonTypeToArcGIS(geometry.type);\n return;\n }\n\n // warn the user if we havn't found a\n /* global console */\n EsriLeaflet.Util.warn('invalid geometry passed to spatial query. Should be an L.LatLng, L.LatLngBounds or L.Marker or a GeoJSON Point Line or Polygon object');\n\n return;\n }\n});\n\nEsriLeaflet.Tasks.query = function(params){\n return new EsriLeaflet.Tasks.Query(params);\n};","EsriLeaflet.Tasks.Find = EsriLeaflet.Tasks.Task.extend({\n setters: {\n // method name > param name\n 'contains': 'contains',\n 'text': 'searchText',\n 'fields': 'searchFields', // denote an array or single string\n 'spatialReference': 'sr',\n 'sr': 'sr',\n 'layers': 'layers',\n 'returnGeometry': 'returnGeometry',\n 'maxAllowableOffset': 'maxAllowableOffset',\n 'precision': 'geometryPrecision',\n 'dynamicLayers': 'dynamicLayers',\n 'returnZ' : 'returnZ',\n 'returnM' : 'returnM',\n 'gdbVersion' : 'gdbVersion',\n 'token' : 'token'\n },\n\n path: 'find',\n\n params: {\n sr: 4326,\n contains: true,\n returnGeometry: true,\n returnZ: true,\n returnM: false\n },\n\n layerDefs: function (id, where) {\n this.params.layerDefs = (this.params.layerDefs) ? this.params.layerDefs + ';' : '';\n this.params.layerDefs += ([id, where]).join(':');\n return this;\n },\n\n simplify: function(map, factor){\n var mapWidth = Math.abs(map.getBounds().getWest() - map.getBounds().getEast());\n this.params.maxAllowableOffset = (mapWidth / map.getSize().y) * factor;\n return this;\n },\n\n run: function (callback, context) {\n return this.request(function(error, response){\n callback.call(context, error, (response && EsriLeaflet.Util.responseToFeatureCollection(response)), response);\n }, context);\n }\n});\n\nEsriLeaflet.Tasks.find = function (params) {\n return new EsriLeaflet.Tasks.Find(params);\n};","EsriLeaflet.Tasks.Identify = EsriLeaflet.Tasks.Task.extend({\n path: 'identify',\n\n between: function(start, end){\n this.params.time = [start.valueOf(), end.valueOf()];\n return this;\n }\n});\n","EsriLeaflet.Tasks.IdentifyImage = EsriLeaflet.Tasks.Identify.extend({\n setters: {\n 'setMosaicRule': 'mosaicRule',\n 'setRenderingRule': 'renderingRule',\n 'setPixelSize': 'pixelSize',\n 'returnCatalogItems': 'returnCatalogItems',\n 'returnGeometry': 'returnGeometry'\n },\n\n params: {\n returnGeometry: false\n },\n\n at: function(latlng){\n latlng = L.latLng(latlng);\n this.params.geometry = JSON.stringify({\n x: latlng.lng,\n y: latlng.lat,\n spatialReference:{\n wkid: 4326\n }\n });\n this.params.geometryType = 'esriGeometryPoint';\n return this;\n },\n\n getMosaicRule: function() {\n return this.params.mosaicRule;\n },\n\n getRenderingRule: function() {\n return this.params.renderingRule;\n },\n\n getPixelSize: function() {\n return this.params.pixelSize;\n },\n\n run: function (callback, context){\n return this.request(function(error, response){\n callback.call(context, error, (response && this._responseToGeoJSON(response)), response);\n }, this);\n },\n\n // get pixel data and return as geoJSON point\n // populate catalog items (if any)\n // merging in any catalogItemVisibilities as a propery of each feature\n _responseToGeoJSON: function(response) {\n var location = response.location;\n var catalogItems = response.catalogItems;\n var catalogItemVisibilities = response.catalogItemVisibilities;\n var geoJSON = {\n 'pixel': {\n 'type': 'Feature',\n 'geometry': {\n 'type': 'Point',\n 'coordinates': [location.x, location.y]\n },\n 'crs': {\n 'type': 'EPSG',\n 'properties': {\n 'code': location.spatialReference.wkid\n }\n },\n 'properties': {\n 'OBJECTID': response.objectId,\n 'name': response.name,\n 'value': response.value\n },\n 'id': response.objectId\n }\n };\n if (response.properties && response.properties.Values) {\n geoJSON.pixel.properties.values = response.properties.Values;\n }\n if (catalogItems && catalogItems.features) {\n geoJSON.catalogItems = EsriLeaflet.Util.responseToFeatureCollection(catalogItems);\n if (catalogItemVisibilities && catalogItemVisibilities.length === geoJSON.catalogItems.features.length) {\n for (var i = catalogItemVisibilities.length - 1; i >= 0; i--) {\n geoJSON.catalogItems.features[i].properties.catalogItemVisibility = catalogItemVisibilities[i];\n }\n }\n }\n return geoJSON;\n }\n\n});\n\nEsriLeaflet.Tasks.identifyImage = function(params){\n return new EsriLeaflet.Tasks.IdentifyImage(params);\n};","EsriLeaflet.Tasks.IdentifyFeatures = EsriLeaflet.Tasks.Identify.extend({\n setters: {\n 'layers': 'layers',\n 'precision': 'geometryPrecision',\n 'tolerance': 'tolerance',\n 'returnGeometry': 'returnGeometry'\n },\n\n params: {\n sr: 4326,\n layers: 'all',\n tolerance: 3,\n returnGeometry: true\n },\n\n on: function(map){\n var extent = EsriLeaflet.Util.boundsToExtent(map.getBounds());\n var size = map.getSize();\n this.params.imageDisplay = [size.x, size.y, 96];\n this.params.mapExtent = [extent.xmin, extent.ymin, extent.xmax, extent.ymax];\n return this;\n },\n\n at: function(latlng){\n latlng = L.latLng(latlng);\n this.params.geometry = [latlng.lng, latlng.lat];\n this.params.geometryType = 'esriGeometryPoint';\n return this;\n },\n\n layerDef: function (id, where){\n this.params.layerDefs = (this.params.layerDefs) ? this.params.layerDefs + ';' : '';\n this.params.layerDefs += ([id, where]).join(':');\n return this;\n },\n\n simplify: function(map, factor){\n var mapWidth = Math.abs(map.getBounds().getWest() - map.getBounds().getEast());\n this.params.maxAllowableOffset = (mapWidth / map.getSize().y) * (1 - factor);\n return this;\n },\n\n run: function (callback, context){\n return this.request(function(error, response){\n // immediately invoke with an error\n if(error) {\n callback.call(context, error, undefined, response);\n return;\n\n // ok no error lets just assume we have features...\n } else {\n var featureCollection = EsriLeaflet.Util.responseToFeatureCollection(response);\n response.results = response.results.reverse();\n for (var i = 0; i < featureCollection.features.length; i++) {\n var feature = featureCollection.features[i];\n feature.layerId = response.results[i].layerId;\n }\n callback.call(context, undefined, featureCollection, response);\n }\n });\n }\n});\n\nEsriLeaflet.Tasks.identifyFeatures = function(params){\n return new EsriLeaflet.Tasks.IdentifyFeatures(params);\n};","(function(EsriLeaflet){\n\n var tileProtocol = (window.location.protocol !== 'https:') ? 'http:' : 'https:';\n\n EsriLeaflet.Layers.BasemapLayer = L.TileLayer.extend({\n statics: {\n TILES: {\n Streets: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/{z}/{y}/{x}',\n attributionUrl: 'https://static.arcgis.com/attribution/World_Street_Map',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services'],\n attribution: 'Esri'\n }\n },\n Topographic: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/{z}/{y}/{x}',\n attributionUrl: 'https://static.arcgis.com/attribution/World_Topo_Map',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services'],\n attribution: 'Esri'\n }\n },\n Oceans: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/arcgis/rest/services/Ocean/World_Ocean_Base/MapServer/tile/{z}/{y}/{x}',\n attributionUrl: 'https://static.arcgis.com/attribution/Ocean_Basemap',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services'],\n attribution: 'Esri'\n }\n },\n OceansLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/arcgis/rest/services/Ocean/World_Ocean_Reference/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services']\n }\n },\n NationalGeographic: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services'],\n attribution: 'Esri'\n }\n },\n DarkGray: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Dark_Gray_Base/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services'],\n attribution: 'Esri, DeLorme, HERE'\n }\n },\n DarkGrayLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Dark_Gray_Reference/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services']\n }\n },\n Gray: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services'],\n attribution: 'Esri, NAVTEQ, DeLorme'\n }\n },\n GrayLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Reference/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services']\n }\n },\n Imagery: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services'],\n attribution: 'Esri, DigitalGlobe, GeoEye, i-cubed, USDA, USGS, AEX, Getmapping, Aerogrid, IGN, IGP, swisstopo, and the GIS User Community'\n }\n },\n ImageryLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Boundaries_and_Places/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services']\n }\n },\n ImageryTransportation: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Transportation/MapServer/tile/{z}/{y}/{x}',\n //pane: 'esri-label',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services']\n }\n },\n ShadedRelief: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Shaded_Relief/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 13,\n subdomains: ['server', 'services'],\n attribution: 'Esri, NAVTEQ, DeLorme'\n }\n },\n ShadedReliefLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Boundaries_and_Places_Alternate/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 12,\n subdomains: ['server', 'services']\n }\n },\n Terrain: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Terrain_Base/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 13,\n subdomains: ['server', 'services'],\n attribution: 'Esri, USGS, NOAA'\n }\n },\n TerrainLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Reference_Overlay/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 13,\n subdomains: ['server', 'services']\n }\n }\n }\n },\n initialize: function(key, options){\n var config;\n\n // set the config variable with the appropriate config object\n if (typeof key === 'object' && key.urlTemplate && key.options){\n config = key;\n } else if(typeof key === 'string' && EsriLeaflet.BasemapLayer.TILES[key]){\n config = EsriLeaflet.BasemapLayer.TILES[key];\n } else {\n throw new Error('L.esri.BasemapLayer: Invalid parameter. Use one of \"Streets\", \"Topographic\", \"Oceans\", \"OceansLabels\", \"NationalGeographic\", \"Gray\", \"GrayLabels\", \"DarkGray\", \"DarkGrayLabels\", \"Imagery\", \"ImageryLabels\", \"ImageryTransportation\", \"ShadedRelief\", \"ShadedReliefLabels\", \"Terrain\" or \"TerrainLabels\"');\n }\n\n // merge passed options into the config options\n var tileOptions = L.Util.extend(config.options, options);\n\n // call the initialize method on L.TileLayer to set everything up\n L.TileLayer.prototype.initialize.call(this, config.urlTemplate, L.Util.setOptions(this, tileOptions));\n\n // if this basemap requires dynamic attribution set it up\n if(config.attributionUrl){\n this._getAttributionData(config.attributionUrl);\n }\n this._logo = new EsriLeaflet.Controls.Logo({\n position: this.options.logoPosition\n });\n },\n onAdd: function(map){\n if(!this.options.hideLogo && !map._hasEsriLogo){\n this._logo.addTo(map);\n map._hasEsriLogo = true;\n }\n\n // if(this.options.pane && EsriLeaflet.Support.pointerEvents){\n // this._initPane();\n // }\n\n L.TileLayer.prototype.onAdd.call(this, map);\n\n map.on('moveend', this._updateMapAttribution, this);\n },\n onRemove: function(map){\n // check to make sure the logo hasn't already been removed\n if(!map._hasEsriLogo && this._logo && this._logo._container){\n map.removeControl(this._logo);\n map._hasEsriLogo = false;\n }\n\n L.TileLayer.prototype.onRemove.call(this, map);\n\n map.off('moveend', this._updateMapAttribution, this);\n },\n getAttribution:function(){\n var attribution = '' + this.options.attribution + ''/* + logo*/;\n return attribution;\n },\n // _initPane: function(){\n // if(!this._map.getPane(this.options.pane)){\n // var pane = this._map.createPane(this.options.pane);\n // pane.style.pointerEvents = 'none';\n // pane.style.zIndex = 5;\n // }\n // },\n _getAttributionData: function(url){\n L.esri.Request.get.JSONP(url, {}, L.Util.bind(function(error, attributions){\n this._attributions = [];\n\n for (var c = 0; c < attributions.contributors.length; c++) {\n var contributor = attributions.contributors[c];\n for (var i = 0; i < contributor.coverageAreas.length; i++) {\n var coverageArea = contributor.coverageAreas[i];\n var southWest = new L.LatLng(coverageArea.bbox[0], coverageArea.bbox[1]);\n var northEast = new L.LatLng(coverageArea.bbox[2], coverageArea.bbox[3]);\n this._attributions.push({\n attribution: contributor.attribution,\n score: coverageArea.score,\n bounds: new L.LatLngBounds(southWest, northEast),\n minZoom: coverageArea.zoomMin,\n maxZoom: coverageArea.zoomMax\n });\n }\n }\n\n this._attributions.sort(function(a, b){\n return b.score - a.score;\n });\n\n this._updateMapAttribution();\n }, this));\n },\n _updateMapAttribution: function(){\n if(this._map && this._map.attributionControl && this._attributions){\n var newAttributions = '';\n var bounds = this._map.getBounds();\n var zoom = this._map.getZoom();\n\n for (var i = 0; i < this._attributions.length; i++) {\n var attribution = this._attributions[i];\n var text = attribution.attribution;\n if(!newAttributions.match(text) && bounds.intersects(attribution.bounds) && zoom >= attribution.minZoom && zoom <= attribution.maxZoom) {\n newAttributions += (', ' + text);\n }\n }\n newAttributions = newAttributions.substr(2);\n var attributionElement = this._map.attributionControl._container.querySelector('.esri-attributions');\n attributionElement.innerHTML = newAttributions;\n attributionElement.style.maxWidth = (this._map.getSize().x * 0.65) + 'px';\n this.fire('attributionupdated', {\n attribution: newAttributions\n });\n }\n }\n });\n\n EsriLeaflet.BasemapLayer = EsriLeaflet.Layers.BasemapLayer;\n\n EsriLeaflet.Layers.basemapLayer = function(key, options){\n return new EsriLeaflet.Layers.BasemapLayer(key, options);\n };\n\n EsriLeaflet.basemapLayer = function(key, options){\n return new EsriLeaflet.Layers.BasemapLayer(key, options);\n };\n\n})(EsriLeaflet);","EsriLeaflet.Layers.RasterLayer = L.Class.extend({\n includes: L.Mixin.Events,\n\n options: {\n opacity: 1,\n position: 'front',\n f: 'image'\n },\n\n onAdd: function (map) {\n this._map = map;\n\n this._update = L.Util.limitExecByInterval(this._update, this.options.updateInterval, this);\n\n if (map.options.crs && map.options.crs.code) {\n var sr = map.options.crs.code.split(':')[1];\n this.options.bboxSR = sr;\n this.options.imageSR = sr;\n }\n\n map.on('moveend', this._update, this);\n\n // if we had an image loaded and it matches the\n // current bounds show the image otherwise remove it\n if(this._currentImage && this._currentImage._bounds.equals(this._map.getBounds())){\n map.addLayer(this._currentImage);\n } else if(this._currentImage) {\n this._map.removeLayer(this._currentImage);\n this._currentImage = null;\n }\n\n this._update();\n\n if(this._popup){\n this._map.on('click', this._getPopupData, this);\n this._map.on('dblclick', this._resetPopupState, this);\n }\n },\n\n bindPopup: function(fn, popupOptions){\n this._shouldRenderPopup = false;\n this._lastClick = false;\n this._popup = L.popup(popupOptions);\n this._popupFunction = fn;\n if(this._map){\n this._map.on('click', this._getPopupData, this);\n this._map.on('dblclick', this._resetPopupState, this);\n }\n return this;\n },\n\n unbindPopup: function(){\n if(this._map){\n this._map.closePopup(this._popup);\n this._map.off('click', this._getPopupData, this);\n this._map.off('dblclick', this._resetPopupState, this);\n }\n this._popup = false;\n return this;\n },\n\n onRemove: function (map) {\n if (this._currentImage) {\n this._map.removeLayer(this._currentImage);\n }\n\n if(this._popup){\n this._map.off('click', this._getPopupData, this);\n this._map.off('dblclick', this._resetPopupState, this);\n }\n\n this._map.off('moveend', this._update, this);\n this._map = null;\n },\n\n addTo: function(map){\n map.addLayer(this);\n return this;\n },\n\n removeFrom: function(map){\n map.removeLayer(this);\n return this;\n },\n\n bringToFront: function(){\n this.options.position = 'front';\n if(this._currentImage){\n this._currentImage.bringToFront();\n }\n return this;\n },\n\n bringToBack: function(){\n this.options.position = 'back';\n if(this._currentImage){\n this._currentImage.bringToBack();\n }\n return this;\n },\n\n getAttribution: function () {\n return this.options.attribution;\n },\n\n getOpacity: function(){\n return this.options.opacity;\n },\n\n setOpacity: function(opacity){\n this.options.opacity = opacity;\n this._currentImage.setOpacity(opacity);\n return this;\n },\n\n getTimeRange: function(){\n return [this.options.from, this.options.to];\n },\n\n setTimeRange: function(from, to){\n this.options.from = from;\n this.options.to = to;\n this._update();\n return this;\n },\n\n metadata: function(callback, context){\n this._service.metadata(callback, context);\n return this;\n },\n\n authenticate: function(token){\n this._service.authenticate(token);\n return this;\n },\n\n _renderImage: function(url, bounds){\n if(this._map){\n // create a new image overlay and add it to the map\n // to start loading the image\n // opacity is 0 while the image is loading\n var image = new L.ImageOverlay(url, bounds, {\n opacity: 0\n }).addTo(this._map);\n\n // once the image loads\n image.once('load', function(e){\n var newImage = e.target;\n var oldImage = this._currentImage;\n\n // if the bounds of this image matches the bounds that\n // _renderImage was called with and we have a map with the same bounds\n // hide the old image if there is one and set the opacity\n // of the new image otherwise remove the new image\n if(newImage._bounds.equals(bounds) && newImage._bounds.equals(this._map.getBounds())){\n this._currentImage = newImage;\n\n if(this.options.position === 'front'){\n this.bringToFront();\n } else {\n this.bringToBack();\n }\n\n if(this._map && this._currentImage._map){\n this._currentImage.setOpacity(this.options.opacity);\n } else {\n this._currentImage._map.removeLayer(this._currentImage);\n }\n\n if(oldImage && this._map) {\n this._map.removeLayer(oldImage);\n }\n\n if(oldImage && oldImage._map){\n oldImage._map.removeLayer(oldImage);\n }\n } else {\n this._map.removeLayer(newImage);\n }\n\n this.fire('load', {\n bounds: bounds\n });\n\n }, this);\n\n this.fire('loading', {\n bounds: bounds\n });\n }\n },\n\n _update: function () {\n if(!this._map){\n return;\n }\n\n var zoom = this._map.getZoom();\n var bounds = this._map.getBounds();\n\n if(this._animatingZoom){\n return;\n }\n\n if (this._map._panTransition && this._map._panTransition._inProgress) {\n return;\n }\n\n if (zoom > this.options.maxZoom || zoom < this.options.minZoom) {\n return;\n }\n var params = this._buildExportParams();\n\n this._requestExport(params, bounds);\n },\n\n // TODO: refactor these into raster layer\n _renderPopup: function(latlng, error, results, response){\n latlng = L.latLng(latlng);\n if(this._shouldRenderPopup && this._lastClick.equals(latlng)){\n //add the popup to the map where the mouse was clicked at\n var content = this._popupFunction(error, results, response);\n if (content) {\n this._popup.setLatLng(latlng).setContent(content).openOn(this._map);\n }\n }\n },\n\n _resetPopupState: function(e){\n this._shouldRenderPopup = false;\n this._lastClick = e.latlng;\n },\n\n // from https://github.com/Leaflet/Leaflet/blob/v0.7.2/src/layer/FeatureGroup.js\n // @TODO remove at Leaflet 0.8\n _propagateEvent: function (e) {\n e = L.extend({\n layer: e.target,\n target: this\n }, e);\n this.fire(e.type, e);\n }\n});\n","EsriLeaflet.Layers.DynamicMapLayer = EsriLeaflet.Layers.RasterLayer.extend({\n\n options: {\n updateInterval: 150,\n layers: false,\n layerDefs: false,\n timeOptions: false,\n format: 'png24',\n transparent: true,\n f: 'json'\n },\n\n initialize: function (options) {\n options.url = EsriLeaflet.Util.cleanUrl(options.url);\n this._service = new EsriLeaflet.Services.MapService(options);\n this._service.on('authenticationrequired requeststart requestend requesterror requestsuccess', this._propagateEvent, this);\n if ((options.proxy || options.token) && options.f !== 'json'){\n options.f = 'json';\n }\n L.Util.setOptions(this, options);\n },\n\n getDynamicLayers: function(){\n return this.options.dynamicLayers;\n },\n\n setDynamicLayers: function(dynamicLayers){\n this.options.dynamicLayers = dynamicLayers;\n this._update();\n return this;\n },\n\n getLayers: function(){\n return this.options.layers;\n },\n\n setLayers: function(layers){\n this.options.layers = layers;\n this._update();\n return this;\n },\n\n getLayerDefs: function(){\n return this.options.layerDefs;\n },\n\n setLayerDefs: function(layerDefs){\n this.options.layerDefs = layerDefs;\n this._update();\n return this;\n },\n\n getTimeOptions: function(){\n return this.options.timeOptions;\n },\n\n setTimeOptions: function(timeOptions){\n this.options.timeOptions = timeOptions;\n this._update();\n return this;\n },\n\n query: function(){\n return this._service.query();\n },\n\n identify: function(){\n return this._service.identify();\n },\n\n find: function(){\n return this._service.find();\n },\n\n _getPopupData: function(e){\n var callback = L.Util.bind(function(error, featureCollection, response) {\n if(error) { return; } // we really can't do anything here but authenticate or requesterror will fire\n setTimeout(L.Util.bind(function(){\n this._renderPopup(e.latlng, error, featureCollection, response);\n }, this), 300);\n }, this);\n\n var identifyRequest = this.identify().on(this._map).at(e.latlng);\n\n if(this.options.layers){\n identifyRequest.layers('visible:' + this.options.layers.join(','));\n } else {\n identifyRequest.layers('visible');\n }\n\n identifyRequest.run(callback);\n\n // set the flags to show the popup\n this._shouldRenderPopup = true;\n this._lastClick = e.latlng;\n },\n\n _buildExportParams: function () {\n var bounds = this._map.getBounds();\n var size = this._map.getSize();\n var ne = this._map.options.crs.project(bounds._northEast);\n var sw = this._map.options.crs.project(bounds._southWest);\n\n //ensure that we don't ask ArcGIS Server for a taller image than we have actual map displaying\n var top = this._map.latLngToLayerPoint(bounds._northEast);\n var bottom = this._map.latLngToLayerPoint(bounds._southWest);\n\n if (top.y > 0 || bottom.y < size.y){\n size.y = bottom.y - top.y;\n }\n\n var params = {\n bbox: [sw.x, sw.y, ne.x, ne.y].join(','),\n size: size.x + ',' + size.y,\n dpi: 96,\n format: this.options.format,\n transparent: this.options.transparent,\n bboxSR: this.options.bboxSR,\n imageSR: this.options.imageSR\n };\n\n if(this.options.dynamicLayers){\n params.dynamicLayers = this.options.dynamicLayers;\n }\n\n if(this.options.layers){\n params.layers = 'show:' + this.options.layers.join(',');\n }\n\n if(this.options.layerDefs){\n params.layerDefs = JSON.stringify(this.options.layerDefs);\n }\n\n if(this.options.timeOptions){\n params.timeOptions = JSON.stringify(this.options.timeOptions);\n }\n\n if(this.options.from && this.options.to){\n params.time = this.options.from.valueOf() + ',' + this.options.to.valueOf();\n }\n\n if(this._service.options.token) {\n params.token = this._service.options.token;\n }\n\n return params;\n },\n\n _requestExport: function (params, bounds) {\n if(this.options.f === 'json'){\n this._service.request('export', params, function(error, response){\n if(error) { return; } // we really can't do anything here but authenticate or requesterror will fire\n this._renderImage(response.href, bounds);\n }, this);\n } else {\n params.f = 'image';\n this._renderImage(this.options.url + 'export' + L.Util.getParamString(params), bounds);\n }\n }\n});\n\nEsriLeaflet.DynamicMapLayer = EsriLeaflet.Layers.DynamicMapLayer;\n\nEsriLeaflet.Layers.dynamicMapLayer = function(options){\n return new EsriLeaflet.Layers.DynamicMapLayer(options);\n};\n\nEsriLeaflet.dynamicMapLayer = function(options){\n return new EsriLeaflet.Layers.DynamicMapLayer(options);\n};\n","EsriLeaflet.Layers.ImageMapLayer = EsriLeaflet.Layers.RasterLayer.extend({\n\n options: {\n updateInterval: 150,\n format: 'jpgpng',\n transparent: true,\n f: 'json'\n },\n\n query: function(){\n return this._service.query();\n },\n\n identify: function(){\n return this._service.identify();\n },\n\n initialize: function (options) {\n options.url = EsriLeaflet.Util.cleanUrl(options.url);\n this._service = new EsriLeaflet.Services.ImageService(options);\n this._service.on('authenticationrequired requeststart requestend requesterror requestsuccess', this._propagateEvent, this);\n L.Util.setOptions(this, options);\n },\n\n setPixelType: function (pixelType) {\n this.options.pixelType = pixelType;\n this._update();\n return this;\n },\n\n getPixelType: function () {\n return this.options.pixelType;\n },\n\n setBandIds: function (bandIds) {\n if (L.Util.isArray(bandIds)) {\n this.options.bandIds = bandIds.join(',');\n } else {\n this.options.bandIds = bandIds.toString();\n }\n this._update();\n return this;\n },\n\n getBandIds: function () {\n return this.options.bandIds;\n },\n\n setNoData: function (noData, noDataInterpretation) {\n if (L.Util.isArray(noData)) {\n this.options.noData = noData.join(',');\n } else {\n this.options.noData = noData.toString();\n }\n if (noDataInterpretation) {\n this.options.noDataInterpretation = noDataInterpretation;\n }\n this._update();\n return this;\n },\n\n getNoData: function () {\n return this.options.noData;\n },\n\n getNoDataInterpretation: function () {\n return this.options.noDataInterpretation;\n },\n\n setRenderingRule: function(renderingRule) {\n this.options.renderingRule = renderingRule;\n this._update();\n },\n\n getRenderingRule: function() {\n return this.options.renderingRule;\n },\n\n setMosaicRule: function(mosaicRule) {\n this.options.mosaicRule = mosaicRule;\n this._update();\n },\n\n getMosaicRule: function() {\n return this.options.mosaicRule;\n },\n\n _getPopupData: function(e){\n var callback = L.Util.bind(function(error, results, response) {\n if(error) { return; } // we really can't do anything here but authenticate or requesterror will fire\n setTimeout(L.Util.bind(function(){\n this._renderPopup(e.latlng, error, results, response);\n }, this), 300);\n }, this);\n\n var identifyRequest = this.identify().at(e.latlng);\n\n // set mosaic rule for identify task if it is set for layer\n if (this.options.mosaicRule) {\n identifyRequest.setMosaicRule(this.options.mosaicRule);\n // @TODO: force return catalog items too?\n }\n\n // @TODO: set rendering rule? Not sure,\n // sometimes you want raw pixel values\n // if (this.options.renderingRule) {\n // identifyRequest.setRenderingRule(this.options.renderingRule);\n // }\n\n identifyRequest.run(callback);\n\n // set the flags to show the popup\n this._shouldRenderPopup = true;\n this._lastClick = e.latlng;\n },\n\n _buildExportParams: function () {\n var bounds = this._map.getBounds();\n var size = this._map.getSize();\n var ne = this._map.options.crs.project(bounds._northEast);\n var sw = this._map.options.crs.project(bounds._southWest);\n\n var params = {\n bbox: [sw.x, sw.y, ne.x, ne.y].join(','),\n size: size.x + ',' + size.y,\n format: this.options.format,\n transparent: this.options.transparent,\n bboxSR: this.options.bboxSR,\n imageSR: this.options.imageSR\n };\n\n if (this.options.from && this.options.to) {\n params.time = this.options.from.valueOf() + ',' + this.options.to.valueOf();\n }\n\n if (this.options.pixelType) {\n params.pixelType = this.options.pixelType;\n }\n\n if (this.options.interpolation) {\n params.interpolation = this.options.interpolation;\n }\n\n if (this.options.compressionQuality) {\n params.compressionQuality = this.options.compressionQuality;\n }\n\n if (this.options.bandIds) {\n params.bandIds = this.options.bandIds;\n }\n\n if (this.options.noData) {\n params.noData = this.options.noData;\n }\n\n if (this.options.noDataInterpretation) {\n params.noDataInterpretation = this.options.noDataInterpretation;\n }\n\n if (this._service.options.token) {\n params.token = this._service.options.token;\n }\n\n if(this.options.renderingRule) {\n params.renderingRule = JSON.stringify(this.options.renderingRule);\n }\n\n if(this.options.mosaicRule) {\n params.mosaicRule = JSON.stringify(this.options.mosaicRule);\n }\n\n return params;\n },\n\n _requestExport: function (params, bounds) {\n if (this.options.f === 'json') {\n this._service.request('exportImage', params, function(error, response){\n if(error) { return; } // we really can't do anything here but authenticate or requesterror will fire\n this._renderImage(response.href, bounds);\n }, this);\n } else {\n params.f = 'image';\n this._renderImage(this.options.url + 'exportImage' + L.Util.getParamString(params), bounds);\n }\n }\n});\n\nEsriLeaflet.ImageMapLayer = EsriLeaflet.Layers.ImageMapLayer;\n\nEsriLeaflet.Layers.imageMapLayer = function (options) {\n return new EsriLeaflet.Layers.ImageMapLayer(options);\n};\n\nEsriLeaflet.imageMapLayer = function (options) {\n return new EsriLeaflet.Layers.ImageMapLayer(options);\n};\n","EsriLeaflet.Layers.TiledMapLayer = L.TileLayer.extend({\n options: {\n zoomOffsetAllowance: 0.1,\n correctZoomLevels: true\n },\n\n statics: {\n MercatorZoomLevels: {\n '0':156543.03392799999,\n '1':78271.516963999893,\n '2':39135.758482000099,\n '3':19567.879240999901,\n '4':9783.9396204999593,\n '5':4891.9698102499797,\n '6':2445.9849051249898,\n '7':1222.9924525624899,\n '8':611.49622628138002,\n '9':305.74811314055802,\n '10':152.874056570411,\n '11':76.437028285073197,\n '12':38.218514142536598,\n '13':19.109257071268299,\n '14':9.5546285356341496,\n '15':4.7773142679493699,\n '16':2.38865713397468,\n '17':1.1943285668550501,\n '18':0.59716428355981699,\n '19':0.29858214164761698,\n '20':0.14929107082381,\n '21':0.07464553541191,\n '22':0.0373227677059525,\n '23':0.0186613838529763\n }\n },\n\n initialize: function(options){\n options.url = EsriLeaflet.Util.cleanUrl(options.url);\n options = L.Util.setOptions(this, options);\n\n // set the urls\n //this.url = L.esri.Util.cleanUrl(url);\n this.tileUrl = L.esri.Util.cleanUrl(options.url) + 'tile/{z}/{y}/{x}';\n this._service = new L.esri.Services.MapService(options);\n this._service.on('authenticationrequired requeststart requestend requesterror requestsuccess', this._propagateEvent, this);\n\n //if this is looking at the AGO tiles subdomain insert the subdomain placeholder\n if(this.tileUrl.match('://tiles.arcgisonline.com')){\n this.tileUrl = this.tileUrl.replace('://tiles.arcgisonline.com', '://tiles{s}.arcgisonline.com');\n options.subdomains = ['1', '2', '3', '4'];\n }\n\n if(this.options.token) {\n this.tileUrl += ('?token=' + this.options.token);\n }\n\n // init layer by calling TileLayers initialize method\n L.TileLayer.prototype.initialize.call(this, this.tileUrl, options);\n },\n\n getTileUrl: function (tilePoint) {\n return L.Util.template(this.tileUrl, L.extend({\n s: this._getSubdomain(tilePoint),\n z: this._lodMap[tilePoint.z] || tilePoint.z, // try lod map first, then just defualt to zoom level\n x: tilePoint.x,\n y: tilePoint.y\n }, this.options));\n },\n\n onAdd: function(map){\n if (!this._lodMap && this.options.correctZoomLevels) {\n this._lodMap = {}; // make sure we always have an lod map even if its empty\n this.metadata(function(error, metadata) {\n if(!error) {\n var sr = metadata.spatialReference.latestWkid || metadata.spatialReference.wkid;\n\n if (sr === 102100 || sr === 3857) {\n //create the zoom level data\n var arcgisLODs = metadata.tileInfo.lods;\n var correctResolutions = EsriLeaflet.Layers.TiledMapLayer.MercatorZoomLevels;\n\n for(var i = 0; i < arcgisLODs.length; i++) {\n var arcgisLOD = arcgisLODs[i];\n for(var ci in correctResolutions) {\n var correctRes = correctResolutions[ci];\n\n if(this._withinPercentage(arcgisLOD.resolution, correctRes, this.options.zoomOffsetAllowance)) {\n this._lodMap[ci] = arcgisLOD.level;\n break;\n }\n }\n }\n } else {\n EsriLeaflet.Util.warn('L.esri.TiledMapLayer is using a non-mercator spatial reference. Support may be available through Proj4Leaflet http://esri.github.io/esri-leaflet/examples/non-mercator-projection.html');\n }\n }\n\n L.TileLayer.prototype.onAdd.call(this, map);\n }, this);\n } else {\n L.TileLayer.prototype.onAdd.call(this, map);\n }\n },\n\n metadata: function(callback, context){\n this._service.metadata(callback, context);\n return this;\n },\n\n identify: function(){\n return this._service.identify();\n },\n\n authenticate: function(token){\n var tokenQs = '?token=' + token;\n this.tileUrl = (this.options.token) ? this.tileUrl.replace(/\\?token=(.+)/g, tokenQs) : this.tileUrl + tokenQs;\n this.options.token = token;\n this._service.authenticate(token);\n return this;\n },\n\n // from https://github.com/Leaflet/Leaflet/blob/v0.7.2/src/layer/FeatureGroup.js\n // @TODO remove at Leaflet 0.8\n _propagateEvent: function (e) {\n e = L.extend({\n layer: e.target,\n target: this\n }, e);\n this.fire(e.type, e);\n },\n\n _withinPercentage: function (a, b, percentage) {\n var diff = Math.abs((a/b) - 1);\n return diff < percentage;\n }\n});\n\nL.esri.TiledMapLayer = L.esri.Layers.tiledMapLayer;\n\nL.esri.Layers.tiledMapLayer = function(options){\n return new L.esri.Layers.TiledMapLayer(options);\n};\n\nL.esri.tiledMapLayer = function(options){\n return new L.esri.Layers.TiledMapLayer(options);\n};\n","EsriLeaflet.Layers.FeatureGrid = L.Class.extend({\n\n includes: L.Mixin.Events,\n\n options: {\n cellSize: 512,\n updateInterval: 150\n },\n\n initialize: function (options) {\n options = L.setOptions(this, options);\n },\n\n onAdd: function (map) {\n this._map = map;\n this._update = L.Util.limitExecByInterval(this._update, this.options.updateInterval, this);\n\n // @TODO remove for leaflet 0.8\n this._map.addEventListener(this.getEvents(), this);\n\n this._reset();\n this._update();\n },\n\n onRemove: function(){\n this._map.removeEventListener(this.getEvents(), this);\n this._removeCells();\n },\n\n getEvents: function () {\n var events = {\n viewreset: this._reset,\n moveend: this._update,\n zoomend : this._onZoom\n };\n\n return events;\n },\n\n addTo: function(map){\n map.addLayer(this);\n return this;\n },\n\n removeFrom: function(map){\n map.removeLayer(this);\n return this;\n },\n\n _onZoom : function () {\n var zoom = this._map.getZoom();\n\n if (zoom > this.options.maxZoom ||\n zoom < this.options.minZoom) {\n this.removeFrom(this._map);\n this._map.addEventListener('zoomend', this.getEvents().zoomend, this);\n } else if (!this._map.hasLayer(this)) {\n this._map.removeEventListener('zoomend', this.getEvents().zoomend, this);\n this.addTo(this._map);\n }\n\n },\n\n _reset: function () {\n this._removeCells();\n\n this._cells = {};\n this._activeCells = {};\n this._cellsToLoad = 0;\n this._cellsTotal = 0;\n\n // @TODO enable at Leaflet 0.8\n // this._cellNumBounds = this._getCellNumBounds();\n\n this._resetWrap();\n },\n\n _resetWrap: function () {\n var map = this._map,\n crs = map.options.crs;\n\n if (crs.infinite) { return; }\n\n var cellSize = this._getCellSize();\n\n if (crs.wrapLng) {\n this._wrapLng = [\n Math.floor(map.project([0, crs.wrapLng[0]]).x / cellSize),\n Math.ceil(map.project([0, crs.wrapLng[1]]).x / cellSize)\n ];\n }\n\n if (crs.wrapLat) {\n this._wrapLat = [\n Math.floor(map.project([crs.wrapLat[0], 0]).y / cellSize),\n Math.ceil(map.project([crs.wrapLat[1], 0]).y / cellSize)\n ];\n }\n },\n\n _getCellSize: function () {\n return this.options.cellSize;\n },\n\n _update: function () {\n if (!this._map) { return; }\n\n var bounds = this._map.getPixelBounds(),\n zoom = this._map.getZoom(),\n cellSize = this._getCellSize(),\n cellPadding = [cellSize/2,cellSize/2];\n // cellPadding = [0,0]\n\n if (zoom > this.options.maxZoom ||\n zoom < this.options.minZoom) { return; }\n\n // cell coordinates range for the current view\n var topLeft = bounds.min.subtract(cellPadding).divideBy(cellSize).floor();\n topLeft.x = Math.max(topLeft.x, 0);\n topLeft.y = Math.max(topLeft.y, 0);\n\n var cellBounds = L.bounds(topLeft, bounds.max.add(cellPadding).divideBy(cellSize).floor());\n\n // remove any present cells that are off the specified bounds\n this._removeOtherCells(cellBounds);\n this._addCells(cellBounds);\n },\n\n _addCells: function (bounds) {\n var queue = [],\n center = bounds.getCenter(),\n zoom = this._map.getZoom();\n\n var j, i, coords;\n // create a queue of coordinates to load cells from\n for (j = bounds.min.y; j <= bounds.max.y; j++) {\n for (i = bounds.min.x; i <= bounds.max.x; i++) {\n coords = new L.Point(i, j);\n coords.z = zoom;\n\n // @TODO enable at Leaflet 0.8\n // if (this._isValidCell(coords)) {\n // queue.push(coords);\n // }\n\n queue.push(coords);\n }\n }\n var cellsToLoad = queue.length;\n\n if (cellsToLoad === 0) { return; }\n\n this._cellsToLoad += cellsToLoad;\n this._cellsTotal += cellsToLoad;\n\n // sort cell queue to load cells in order of their distance to center\n queue.sort(function (a, b) {\n return a.distanceTo(center) - b.distanceTo(center);\n });\n\n for (i = 0; i < cellsToLoad; i++) {\n this._addCell(queue[i]);\n }\n },\n\n // @TODO enable at Leaflet 0.8\n // _isValidCell: function (coords) {\n // var crs = this._map.options.crs;\n\n // if (!crs.infinite) {\n // // don't load cell if it's out of bounds and not wrapped\n // var bounds = this._cellNumBounds;\n // if (\n // (!crs.wrapLng && (coords.x < bounds.min.x || coords.x > bounds.max.x)) ||\n // (!crs.wrapLat && (coords.y < bounds.min.y || coords.y > bounds.max.y))\n // ) {\n // return false;\n // }\n // }\n\n // if (!this.options.bounds) {\n // return true;\n // }\n\n // // don't load cell if it doesn't intersect the bounds in options\n // var cellBounds = this._cellCoordsToBounds(coords);\n // return L.latLngBounds(this.options.bounds).intersects(cellBounds);\n // },\n\n // converts cell coordinates to its geographical bounds\n _cellCoordsToBounds: function (coords) {\n var map = this._map,\n cellSize = this.options.cellSize,\n\n nwPoint = coords.multiplyBy(cellSize),\n sePoint = nwPoint.add([cellSize, cellSize]),\n\n // @TODO for Leaflet 0.8\n // nw = map.wrapLatLng(map.unproject(nwPoint, coords.z)),\n // se = map.wrapLatLng(map.unproject(sePoint, coords.z));\n\n nw = map.unproject(nwPoint, coords.z).wrap(),\n se = map.unproject(sePoint, coords.z).wrap();\n\n return new L.LatLngBounds(nw, se);\n },\n\n // converts cell coordinates to key for the cell cache\n _cellCoordsToKey: function (coords) {\n return coords.x + ':' + coords.y;\n },\n\n // converts cell cache key to coordiantes\n _keyToCellCoords: function (key) {\n var kArr = key.split(':'),\n x = parseInt(kArr[0], 10),\n y = parseInt(kArr[1], 10);\n\n return new L.Point(x, y);\n },\n\n // remove any present cells that are off the specified bounds\n _removeOtherCells: function (bounds) {\n for (var key in this._cells) {\n if (!bounds.contains(this._keyToCellCoords(key))) {\n this._removeCell(key);\n }\n }\n },\n\n _removeCell: function (key) {\n var cell = this._activeCells[key];\n if(cell){\n delete this._activeCells[key];\n\n if (this.cellLeave) {\n this.cellLeave(cell.bounds, cell.coords);\n }\n\n this.fire('cellleave', {\n bounds: cell.bounds,\n coords: cell.coords\n });\n }\n },\n\n _removeCells: function(){\n for (var key in this._cells) {\n var bounds = this._cells[key].bounds;\n var coords = this._cells[key].coords;\n\n if (this.cellLeave) {\n this.cellLeave(bounds, coords);\n }\n\n this.fire('cellleave', {\n bounds: bounds,\n coords: coords\n });\n }\n },\n\n _addCell: function (coords) {\n\n // wrap cell coords if necessary (depending on CRS)\n this._wrapCoords(coords);\n\n // generate the cell key\n var key = this._cellCoordsToKey(coords);\n\n // get the cell from the cache\n var cell = this._cells[key];\n // if this cell should be shown as isnt active yet (enter)\n\n if (cell && !this._activeCells[key]) {\n if (this.cellEnter) {\n this.cellEnter(cell.bounds, coords);\n }\n\n this.fire('cellenter', {\n bounds: cell.bounds,\n coords: coords\n });\n\n this._activeCells[key] = cell;\n }\n\n // if we dont have this cell in the cache yet (create)\n if (!cell) {\n cell = {\n coords: coords,\n bounds: this._cellCoordsToBounds(coords)\n };\n\n this._cells[key] = cell;\n this._activeCells[key] = cell;\n\n if(this.createCell){\n this.createCell(cell.bounds, coords);\n }\n\n this.fire('cellcreate', {\n bounds: cell.bounds,\n coords: coords\n });\n }\n },\n\n _wrapCoords: function (coords) {\n coords.x = this._wrapLng ? L.Util.wrapNum(coords.x, this._wrapLng) : coords.x;\n coords.y = this._wrapLat ? L.Util.wrapNum(coords.y, this._wrapLat) : coords.y;\n }\n\n // get the global cell coordinates range for the current zoom\n // @TODO enable at Leaflet 0.8\n // _getCellNumBounds: function () {\n // // @TODO for Leaflet 0.8\n // // var bounds = this._map.getPixelWorldBounds(),\n // // size = this._getCellSize();\n // //\n // // return bounds ? L.bounds(\n // // bounds.min.divideBy(size).floor(),\n // // bounds.max.divideBy(size).ceil().subtract([1, 1])) : null;\n // }\n\n});","(function(EsriLeaflet){\n\n EsriLeaflet.Layers.FeatureManager = EsriLeaflet.Layers.FeatureGrid.extend({\n\n /**\n * Options\n */\n\n options: {\n where: '1=1',\n fields: ['*'],\n from: false,\n to: false,\n timeField: false,\n timeFilterMode: 'server',\n simplifyFactor: 0,\n precision: 6\n },\n\n /**\n * Constructor\n */\n\n initialize: function (options) {\n EsriLeaflet.Layers.FeatureGrid.prototype.initialize.call(this, options);\n\n options.url = EsriLeaflet.Util.cleanUrl(options.url);\n options = L.setOptions(this, options);\n\n this._service = new EsriLeaflet.Services.FeatureLayerService(options);\n\n //use case insensitive regex to look for common fieldnames used for indexing\n /*global console */\n if (this.options.fields[0] !== '*'){\n var oidCheck = false;\n for (var i = 0; i < this.options.fields.length; i++){\n if (this.options.fields[i].match(/^(OBJECTID|FID|OID|ID)$/i)){\n oidCheck = true;\n }\n }\n if (oidCheck === false) {\n EsriLeaflet.Util.warn('no known esriFieldTypeOID field detected in fields Array. Please add an attribute field containing unique IDs to ensure the layer can be drawn correctly.');\n }\n }\n\n // Leaflet 0.8 change to new propagation\n this._service.on('authenticationrequired requeststart requestend requesterror requestsuccess', function (e) {\n e = L.extend({\n target: this\n }, e);\n this.fire(e.type, e);\n }, this);\n\n if(this.options.timeField.start && this.options.timeField.end){\n this._startTimeIndex = new BinarySearchIndex();\n this._endTimeIndex = new BinarySearchIndex();\n } else if(this.options.timeField){\n this._timeIndex = new BinarySearchIndex();\n }\n\n this._cache = {};\n this._currentSnapshot = []; // cache of what layers should be active\n this._activeRequests = 0;\n this._pendingRequests = [];\n },\n\n /**\n * Layer Interface\n */\n\n onAdd: function(map){\n return EsriLeaflet.Layers.FeatureGrid.prototype.onAdd.call(this, map);\n },\n\n onRemove: function(map){\n return EsriLeaflet.Layers.FeatureGrid.prototype.onRemove.call(this, map);\n },\n\n getAttribution: function () {\n return this.options.attribution;\n },\n\n /**\n * Feature Managment\n */\n\n createCell: function(bounds, coords){\n this._requestFeatures(bounds, coords);\n },\n\n _requestFeatures: function(bounds, coords, callback){\n this._activeRequests++;\n\n // our first active request fires loading\n if(this._activeRequests === 1){\n this.fire('loading', {\n bounds: bounds\n });\n }\n\n this._buildQuery(bounds).run(function(error, featureCollection, response){\n if(response && response.exceededTransferLimit){\n this.fire('drawlimitexceeded');\n }\n\n // no error, features\n if(!error && featureCollection && featureCollection.features.length && !this._removed){\n // schedule adding features until the next animation frame\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){\n this._addFeatures(featureCollection.features, coords);\n this._postProcessFeatures(bounds);\n }, this));\n }\n\n // no error, no features\n if (!error && featureCollection && !featureCollection.features.length) {\n this._postProcessFeatures(bounds);\n }\n\n if(callback){\n callback.call(this, error, featureCollection);\n }\n }, this);\n },\n\n _postProcessFeatures: function (bounds) {\n //deincriment the request counter now that we have processed features\n this._activeRequests--;\n\n // if there are no more active requests fire a load event for this view\n if(this._activeRequests <= 0){\n this.fire('load', {\n bounds: bounds\n });\n }\n },\n\n _cacheKey: function (coords){\n return coords.z + ':' + coords.x + ':' +coords.y;\n },\n\n _addFeatures: function(features, coords){\n var key = this._cacheKey(coords);\n this._cache[key] = this._cache[key] || [];\n\n for (var i = features.length - 1; i >= 0; i--) {\n var id = features[i].id;\n this._currentSnapshot.push(id);\n this._cache[key].push(id);\n /*\n should we refactor the code in FeatureManager.setWhere()\n so that we can reuse it to make sure that we remove features\n on the client that are removed from the service?\n */\n\n }\n\n if(this.options.timeField){\n this._buildTimeIndexes(features);\n }\n\n var zoom = this._map.getZoom();\n\n if (zoom > this.options.maxZoom ||\n zoom < this.options.minZoom) { return; }\n\n this.createLayers(features);\n },\n\n _buildQuery: function(bounds){\n var query = this._service.query()\n .intersects(bounds)\n .where(this.options.where)\n .fields(this.options.fields)\n .precision(this.options.precision);\n\n if(this.options.simplifyFactor){\n query.simplify(this._map, this.options.simplifyFactor);\n }\n\n if(this.options.timeFilterMode === 'server' && this.options.from && this.options.to){\n query.between(this.options.from, this.options.to);\n }\n\n return query;\n },\n\n /**\n * Where Methods\n */\n\n setWhere: function(where, callback, context){\n\n this.options.where = (where && where.length) ? where : '1=1';\n\n var oldSnapshot = [];\n var newSnapshot = [];\n var pendingRequests = 0;\n var mostRecentError = null;\n var requestCallback = L.Util.bind(function(error, featureCollection){\n pendingRequests--;\n\n if(error) {\n mostRecentError = error;\n }\n\n if(featureCollection){\n for (var i = featureCollection.features.length - 1; i >= 0; i--) {\n newSnapshot.push(featureCollection.features[i].id);\n }\n }\n\n if(pendingRequests <= 0) {\n this._currentSnapshot = newSnapshot;\n // delay adding features until the next animation frame\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function() {\n this.removeLayers(oldSnapshot);\n this.addLayers(newSnapshot);\n if(callback) {\n callback.call(context, mostRecentError);\n }\n }, this));\n }\n }, this);\n\n for (var i = this._currentSnapshot.length - 1; i >= 0; i--) {\n oldSnapshot.push(this._currentSnapshot[i]);\n }\n\n for(var key in this._activeCells){\n pendingRequests++;\n var coords = this._keyToCellCoords(key);\n var bounds = this._cellCoordsToBounds(coords);\n this._requestFeatures(bounds, key, requestCallback);\n }\n\n return this;\n },\n\n getWhere: function(){\n return this.options.where;\n },\n\n /**\n * Time Range Methods\n */\n\n getTimeRange: function(){\n return [this.options.from, this.options.to];\n },\n\n setTimeRange: function(from, to, callback, context){\n var oldFrom = this.options.from;\n var oldTo = this.options.to;\n var pendingRequests = 0;\n var mostRecentError = null;\n var requestCallback = L.Util.bind(function(error){\n if(error){\n mostRecentError = error;\n }\n\n this._filterExistingFeatures(oldFrom, oldTo, from, to);\n\n pendingRequests--;\n\n if(callback && pendingRequests <= 0){\n callback.call(context, mostRecentError);\n }\n }, this);\n\n this.options.from = from;\n this.options.to = to;\n\n this._filterExistingFeatures(oldFrom, oldTo, from, to);\n\n if(this.options.timeFilterMode === 'server') {\n for(var key in this._activeCells){\n pendingRequests++;\n var coords = this._keyToCellCoords(key);\n var bounds = this._cellCoordsToBounds(coords);\n this._requestFeatures(bounds, key, requestCallback);\n }\n }\n },\n\n refresh: function(){\n for(var key in this._activeCells){\n var coords = this._keyToCellCoords(key);\n var bounds = this._cellCoordsToBounds(coords);\n this._requestFeatures(bounds, key);\n }\n\n if(this.redraw){\n this.once('load', function(){\n this.eachFeature(function(layer){\n this._redraw(layer.feature.id);\n }, this);\n }, this);\n }\n },\n\n _filterExistingFeatures: function (oldFrom, oldTo, newFrom, newTo) {\n var layersToRemove = (oldFrom && oldTo) ? this._getFeaturesInTimeRange(oldFrom, oldTo) : this._currentSnapshot;\n var layersToAdd = this._getFeaturesInTimeRange(newFrom, newTo);\n\n if(layersToAdd.indexOf){\n for (var i = 0; i < layersToAdd.length; i++) {\n var shouldRemoveLayer = layersToRemove.indexOf(layersToAdd[i]);\n if(shouldRemoveLayer >= 0){\n layersToRemove.splice(shouldRemoveLayer, 1);\n }\n }\n }\n\n // schedule adding features until the next animation frame\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){\n this.removeLayers(layersToRemove);\n this.addLayers(layersToAdd);\n }, this));\n },\n\n _getFeaturesInTimeRange: function(start, end){\n var ids = [];\n var search;\n\n if(this.options.timeField.start && this.options.timeField.end){\n var startTimes = this._startTimeIndex.between(start, end);\n var endTimes = this._endTimeIndex.between(start, end);\n search = startTimes.concat(endTimes);\n } else {\n search = this._timeIndex.between(start, end);\n }\n\n for (var i = search.length - 1; i >= 0; i--) {\n ids.push(search[i].id);\n }\n\n return ids;\n },\n\n _buildTimeIndexes: function(geojson){\n var i;\n var feature;\n if(this.options.timeField.start && this.options.timeField.end){\n var startTimeEntries = [];\n var endTimeEntries = [];\n for (i = geojson.length - 1; i >= 0; i--) {\n feature = geojson[i];\n startTimeEntries.push( {\n id: feature.id,\n value: new Date(feature.properties[this.options.timeField.start])\n });\n endTimeEntries.push( {\n id: feature.id,\n value: new Date(feature.properties[this.options.timeField.end])\n });\n }\n this._startTimeIndex.bulkAdd(startTimeEntries);\n this._endTimeIndex.bulkAdd(endTimeEntries);\n } else {\n var timeEntries = [];\n for (i = geojson.length - 1; i >= 0; i--) {\n feature = geojson[i];\n timeEntries.push( {\n id: feature.id,\n value: new Date(feature.properties[this.options.timeField])\n });\n }\n\n this._timeIndex.bulkAdd(timeEntries);\n }\n },\n\n _featureWithinTimeRange: function(feature){\n if(!this.options.from || !this.options.to){\n return true;\n }\n\n var from = +this.options.from.valueOf();\n var to = +this.options.to.valueOf();\n\n if(typeof this.options.timeField === 'string'){\n var date = +feature.properties[this.options.timeField];\n return (date >= from) && (date <= to);\n }\n\n if(this.options.timeField.start && this.options.timeField.end){\n var startDate = +feature.properties[this.options.timeField.start];\n var endDate = +feature.properties[this.options.timeField.end];\n return ((startDate >= from) && (startDate <= to)) || ((endDate >= from) && (endDate <= to));\n }\n },\n\n /**\n * Service Methods\n */\n\n authenticate: function(token){\n this._service.authenticate(token);\n return this;\n },\n\n metadata: function(callback, context){\n this._service.metadata(callback, context);\n return this;\n },\n\n query: function(){\n return this._service.query();\n },\n\n _getMetadata: function(callback){\n if(this._metadata){\n var error;\n callback(error, this._metadata);\n } else {\n this.metadata(L.Util.bind(function(error, response) {\n this._metadata = response;\n callback(error, this._metadata);\n }, this));\n }\n },\n\n addFeature: function(feature, callback, context){\n this._getMetadata(L.Util.bind(function(error, metadata){\n this._service.addFeature(feature, L.Util.bind(function(error, response){\n if(!error){\n // assign ID from result to appropriate objectid field from service metadata\n feature.properties[metadata.objectIdField] = response.objectId;\n\n // we also need to update the geojson id for createLayers() to function\n feature.id = response.objectId;\n this.createLayers([feature]);\n }\n\n if(callback){\n callback.call(context, error, response);\n }\n }, this));\n }, this));\n },\n\n updateFeature: function(feature, callback, context){\n this._service.updateFeature(feature, function(error, response){\n if(!error){\n this.removeLayers([feature.id], true);\n this.createLayers([feature]);\n }\n\n if(callback){\n callback.call(context, error, response);\n }\n }, this);\n },\n\n deleteFeature: function(id, callback, context){\n this._service.deleteFeature(id, function(error, response){\n if(!error && response.objectId){\n this.removeLayers([response.objectId], true);\n }\n\n if(callback){\n callback.call(context, error, response);\n }\n }, this);\n },\n\n deleteFeatures: function(ids, callback, context){\n return this._service.deleteFeatures(ids, function(error, response){\n if(!error && response.length > 0){\n for (var i=0; i +query) {\n maxIndex = currentIndex - 1;\n } else {\n return currentIndex;\n }\n }\n\n return ~maxIndex;\n };\n\n BinarySearchIndex.prototype.sort = function(){\n this.values.sort(function(a, b) {\n return +b.value - +a.value;\n }).reverse();\n this.dirty = false;\n };\n\n BinarySearchIndex.prototype.between = function(start, end){\n if(this.dirty){\n this.sort();\n }\n\n var startIndex = this._query(start);\n var endIndex = this._query(end);\n\n if(startIndex === 0 && endIndex === 0){\n return [];\n }\n\n startIndex = Math.abs(startIndex);\n endIndex = (endIndex < 0) ? Math.abs(endIndex): endIndex + 1;\n\n return this.values.slice(startIndex, endIndex);\n };\n\n BinarySearchIndex.prototype.bulkAdd = function(items){\n this.dirty = true;\n this.values = this.values.concat(items);\n };\n\n})(EsriLeaflet);\n","EsriLeaflet.Layers.FeatureLayer = EsriLeaflet.Layers.FeatureManager.extend({\n\n statics: {\n EVENTS: 'click dblclick mouseover mouseout mousemove contextmenu popupopen popupclose'\n },\n\n options: {\n cacheLayers: true\n },\n\n /**\n * Constructor\n */\n\n initialize: function (options) {\n EsriLeaflet.Layers.FeatureManager.prototype.initialize.call(this, options);\n\n options = L.setOptions(this, options);\n\n this._layers = {};\n this._leafletIds = {};\n this._key = 'c'+(Math.random() * 1e9).toString(36).replace('.', '_');\n },\n\n /**\n * Layer Interface\n */\n\n onAdd: function(map){\n map.on('zoomstart zoomend', function(e){\n this._zooming = (e.type === 'zoomstart');\n }, this);\n this._removed = false;\n\n return EsriLeaflet.Layers.FeatureManager.prototype.onAdd.call(this, map);\n },\n\n onRemove: function(map){\n this._removed = true;\n for (var i in this._layers) {\n map.removeLayer(this._layers[i]);\n }\n\n return EsriLeaflet.Layers.FeatureManager.prototype.onRemove.call(this, map);\n },\n\n createNewLayer: function(geojson){\n // @TODO Leaflet 0.8\n //newLayer = L.GeoJSON.geometryToLayer(geojson, this.options);\n return L.GeoJSON.geometryToLayer(geojson, this.options.pointToLayer, L.GeoJSON.coordsToLatLng, this.options);\n },\n\n _updateLayer: function(layer, geojson){\n // convert the geojson coordinates into a Leaflet LatLng array/nested arrays\n // pass it to setLatLngs to update layer geometries\n var latlngs = [];\n var coordsToLatLng = this.options.coordsToLatLng || L.GeoJSON.coordsToLatLng;\n\n // copy new attributes, if present\n if (geojson.properties) {\n layer.feature.properties = geojson.properties;\n }\n\n switch(geojson.geometry.type){\n case 'Point':\n latlngs = L.GeoJSON.coordsToLatLng(geojson.geometry.coordinates);\n layer.setLatLng(latlngs);\n break;\n case 'LineString':\n latlngs = L.GeoJSON.coordsToLatLngs(geojson.geometry.coordinates, 0, coordsToLatLng);\n layer.setLatLngs(latlngs);\n break;\n case 'MultiLineString':\n latlngs = L.GeoJSON.coordsToLatLngs(geojson.geometry.coordinates, 1, coordsToLatLng);\n layer.setLatLngs(latlngs);\n break;\n case 'Polygon':\n latlngs = L.GeoJSON.coordsToLatLngs(geojson.geometry.coordinates, 1, coordsToLatLng);\n layer.setLatLngs(latlngs);\n break;\n case 'MultiPolygon':\n latlngs = L.GeoJSON.coordsToLatLngs(geojson.geometry.coordinates, 2, coordsToLatLng);\n layer.setLatLngs(latlngs);\n break;\n }\n },\n\n /**\n * Feature Management Methods\n */\n\n createLayers: function(features){\n for (var i = features.length - 1; i >= 0; i--) {\n\n var geojson = features[i];\n\n var layer = this._layers[geojson.id];\n var newLayer;\n\n if(layer && !this._map.hasLayer(layer)){\n this._map.addLayer(layer);\n }\n\n // update geomerty if neccessary\n if (layer && (layer.setLatLngs || layer.setLatLng)) {\n this._updateLayer(layer, geojson);\n }\n\n\n if(!layer){\n newLayer = this.createNewLayer(geojson);\n newLayer.feature = geojson;\n\n if (this.options.style) {\n newLayer._originalStyle = this.options.style;\n }\n\n // circleMarker check\n else if (newLayer.setStyle) {\n newLayer._originalStyle = newLayer.options;\n }\n\n newLayer._leaflet_id = this._key + '_' + geojson.id;\n\n this._leafletIds[newLayer._leaflet_id] = geojson.id;\n\n // bubble events from layers to this\n // @TODO Leaflet 0.8\n // newLayer.addEventParent(this);\n\n newLayer.on(EsriLeaflet.Layers.FeatureLayer.EVENTS, this._propagateEvent, this);\n\n // bind a popup if we have one\n if(this._popup && newLayer.bindPopup){\n newLayer.bindPopup(this._popup(newLayer.feature, newLayer), this._popupOptions);\n }\n\n if(this.options.onEachFeature){\n this.options.onEachFeature(newLayer.feature, newLayer);\n }\n\n // cache the layer\n this._layers[newLayer.feature.id] = newLayer;\n\n // style the layer\n this.resetStyle(newLayer.feature.id);\n\n this.fire('createfeature', {\n feature: newLayer.feature\n });\n\n // add the layer if it is within the time bounds or our layer is not time enabled\n if(!this.options.timeField || (this.options.timeField && this._featureWithinTimeRange(geojson)) ){\n this._map.addLayer(newLayer);\n }\n }\n }\n },\n\n addLayers: function(ids){\n for (var i = ids.length - 1; i >= 0; i--) {\n var layer = this._layers[ids[i]];\n if(layer){\n this.fire('addfeature', {\n feature: layer.feature\n });\n this._map.addLayer(layer);\n }\n }\n },\n\n removeLayers: function(ids, permanent){\n for (var i = ids.length - 1; i >= 0; i--) {\n var id = ids[i];\n var layer = this._layers[id];\n if(layer){\n this.fire('removefeature', {\n feature: layer.feature,\n permanent: permanent\n });\n this._map.removeLayer(layer);\n }\n if(layer && permanent){\n delete this._layers[id];\n }\n }\n },\n\n cellEnter: function(bounds, coords){\n if(!this._zooming){\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){\n var cacheKey = this._cacheKey(coords);\n var cellKey = this._cellCoordsToKey(coords);\n var layers = this._cache[cacheKey];\n if(this._activeCells[cellKey] && layers){\n this.addLayers(layers);\n }\n }, this));\n }\n },\n\n cellLeave: function(bounds, coords){\n if(!this._zooming){\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){\n var cacheKey = this._cacheKey(coords);\n var cellKey = this._cellCoordsToKey(coords);\n var layers = this._cache[cacheKey];\n var mapBounds = this._map.getBounds();\n if(!this._activeCells[cellKey] && layers){\n var removable = true;\n\n for (var i = 0; i < layers.length; i++) {\n var layer = this._layers[layers[i]];\n if(layer && layer.getBounds && mapBounds.intersects(layer.getBounds())){\n removable = false;\n }\n }\n\n if(removable){\n this.removeLayers(layers, !this.options.cacheLayers);\n }\n\n if(!this.options.cacheLayers && removable){\n delete this._cache[cacheKey];\n delete this._cells[cellKey];\n delete this._activeCells[cellKey];\n }\n }\n }, this));\n }\n },\n\n /**\n * Styling Methods\n */\n\n resetStyle: function (id) {\n var layer = this._layers[id];\n\n if(layer){\n this.setFeatureStyle(layer.feature.id, layer._originalStyle);\n }\n\n return this;\n },\n\n setStyle: function (style) {\n this.options.style = style;\n this.eachFeature(function (layer) {\n this.setFeatureStyle(layer.feature.id, style);\n }, this);\n return this;\n },\n\n setFeatureStyle: function (id, style) {\n var layer = this._layers[id];\n\n if (typeof style === 'function') {\n style = style(layer.feature);\n }\n\n if (!style && !layer.defaultOptions) {\n style = L.Path.prototype.options;\n style.fill = true; //not set by default\n }\n\n if (layer && layer.setStyle) {\n layer.setStyle(style);\n }\n\n return this;\n },\n\n /**\n * Popup Methods\n */\n\n bindPopup: function (fn, options) {\n this._popup = fn;\n this._popupOptions = options;\n for (var i in this._layers) {\n var layer = this._layers[i];\n var popupContent = this._popup(layer.feature, layer);\n layer.bindPopup(popupContent, options);\n }\n return this;\n },\n\n unbindPopup: function () {\n this._popup = false;\n for (var i in this._layers) {\n var layer = this._layers[i];\n if (layer.unbindPopup) {\n layer.unbindPopup();\n } else if (layer.getLayers) {\n var groupLayers = layer.getLayers();\n for (var j in groupLayers) {\n var gLayer = groupLayers[j];\n gLayer.unbindPopup();\n }\n }\n }\n return this;\n },\n\n /**\n * Utility Methods\n */\n\n eachFeature: function (fn, context) {\n for (var i in this._layers) {\n fn.call(context, this._layers[i]);\n }\n return this;\n },\n\n getFeature: function (id) {\n return this._layers[id];\n },\n\n bringToBack: function () {\n this.eachFeature(function (layer) {\n if(layer.bringToBack) {\n layer.bringToBack();\n }\n });\n },\n\n bringToFront: function () {\n this.eachFeature(function (layer) {\n if(layer.bringToFront) {\n layer.bringToFront();\n }\n });\n },\n\n redraw: function (id) {\n if (id) {\n this._redraw(id);\n }\n return this;\n },\n\n _redraw: function(id) {\n var layer = this._layers[id];\n var geojson = layer.feature;\n\n // if this looks like a marker\n if (layer && layer.setIcon && this.options.pointToLayer) {\n // update custom symbology, if necessary\n if (this.options.pointToLayer){\n var getIcon = this.options.pointToLayer(geojson, L.latLng(geojson.geometry.coordinates[1], geojson.geometry.coordinates[0]));\n var updatedIcon = getIcon.options.icon;\n layer.setIcon(updatedIcon);\n }\n }\n\n // looks like a vector marker (circleMarker)\n if (layer && layer.setStyle && this.options.pointToLayer) {\n var getStyle = this.options.pointToLayer(geojson, L.latLng(geojson.geometry.coordinates[1], geojson.geometry.coordinates[0]));\n var updatedStyle = getStyle.options;\n this.setFeatureStyle(geojson.id, updatedStyle);\n }\n\n // looks like a path (polygon/polyline)\n if(layer && layer.setStyle && this.options.style) {\n this.resetStyle(geojson.id);\n }\n },\n\n // from https://github.com/Leaflet/Leaflet/blob/v0.7.2/src/layer/FeatureGroup.js\n // @TODO remove at Leaflet 0.8\n _propagateEvent: function (e) {\n e.layer = this._layers[this._leafletIds[e.target._leaflet_id]];\n e.target = this;\n this.fire(e.type, e);\n }\n});\n\nEsriLeaflet.FeatureLayer = EsriLeaflet.Layers.FeatureLayer;\n\nEsriLeaflet.Layers.featureLayer = function(options){\n return new EsriLeaflet.Layers.FeatureLayer(options);\n};\n\nEsriLeaflet.featureLayer = function(options){\n return new EsriLeaflet.Layers.FeatureLayer(options);\n};\n","EsriLeaflet.Controls.Logo = L.Control.extend({\n options: {\n position: 'bottomright',\n marginTop: 0,\n marginLeft: 0,\n marginBottom: 0,\n marginRight: 0\n },\n\n onAdd: function () {\n var div = L.DomUtil.create('div', 'esri-leaflet-logo');\n div.style.marginTop = this.options.marginTop;\n div.style.marginLeft = this.options.marginLeft;\n div.style.marginBottom = this.options.marginBottom;\n div.style.marginRight = this.options.marginRight;\n div.innerHTML = this._adjustLogo(this._map._size);\n\n this._map.on('resize', function(e){\n div.innerHTML = this._adjustLogo(e.newSize);\n }, this);\n\n return div;\n },\n\n _adjustLogo: function (mapSize) {\n if (mapSize.x <= 600 || mapSize.y <= 600){\n return '\"Powered';\n }\n else {\n return '\"Powered';\n }\n }\n\n});\n\nEsriLeaflet.Controls.logo = function(options){\n return new L.esri.Controls.Logo(options);\n};\n"]} \ No newline at end of file +{"version":3,"sources":["../src/EsriLeaflet.js","../src/Util.js","../src/Request.js","../src/Services/Service.js","../src/Services/FeatureLayerService.js","../src/Services/MapService.js","../src/Services/ImageService.js","../src/Tasks/Task.js","../src/Tasks/Query.js","../src/Tasks/Find.js","../src/Tasks/Identify.js","../src/Tasks/IdentifyImage.js","../src/Tasks/IdentifyFeatures.js","../src/Layers/BasemapLayer.js","../src/Layers/RasterLayer.js","../src/Layers/DynamicMapLayer.js","../src/Layers/ImageMapLayer.js","../src/Layers/TiledMapLayer.js","../src/Layers/FeatureLayer/FeatureGrid.js","../src/Layers/FeatureLayer/FeatureManager.js","../src/Layers/FeatureLayer/FeatureLayer.js","../src/Controls/Logo.js"],"names":["EsriLeaflet","VERSION","Layers","Services","Controls","Tasks","Util","Support","CORS","window","XMLHttpRequest","pointerEvents","document","documentElement","style","L","esri","clone","obj","target","i","hasOwnProperty","pointsEqual","a","b","length","closeRing","coordinates","push","ringIsClockwise","ringToTest","pt2","total","rLength","pt1","vertexIntersectsVertex","a1","a2","b1","b2","uaT","ubT","uB","ua","ub","arrayIntersectsArray","j","coordinatesContainPoint","point","contains","l","coordinatesContainCoordinates","outer","inner","intersects","convertRingsToGeoJSON","rings","x","outerRing","hole","outerRings","holes","r","ring","slice","polygon","uncontainedHoles","pop","contained","reverse","type","orientRings","poly","output","shift","flattenMultiPolygonRings","raf","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","msRequestAnimationFrame","cb","setTimeout","extentToBounds","extent","sw","LatLng","ymin","xmin","ne","ymax","xmax","LatLngBounds","boundsToExtent","bounds","latLngBounds","getSouthWest","lng","lat","getNorthEast","spatialReference","wkid","arcgisToGeojson","arcgis","idAttribute","geojson","y","points","paths","geometry","attributes","properties","id","OBJECTID","FID","geojsonToArcGIS","result","features","geometries","responseToFeatureCollection","response","objectIdField","objectIdFieldName","fields","name","featureCollection","results","cleanUrl","url","replace","isArcgisOnline","test","geojsonTypeToArcGIS","geoJsonType","arcgisGeometryType","bind","warn","message","console","serialize","params","data","f","key","value","param","Object","prototype","toString","call","JSON","stringify","join","valueOf","encodeURIComponent","createRequest","callback","context","httpRequest","onerror","e","onreadystatechange","falseFn","error","code","readyState","parse","responseText","callbacks","_EsriLeafletCallbacks","Request","request","paramString","requestLength","open","send","get","JSONP","setRequestHeader","post","XMLHTTP","callbackId","script","DomUtil","create","body","src","responseType","abort","_callback","Service","Class","extend","includes","Mixin","Events","options","proxy","useCors","initialize","this","_requestQueue","_authenticating","setOptions","path","_request","metadata","authenticate","token","_runQueue","method","fire","wrappedCallback","_createServiceCallback","apply","service","FeatureLayerService","query","Query","addFeature","feature","addResults","undefined","updateFeature","updateResults","deleteFeature","objectIds","deleteResults","deleteFeatures","ids","featureLayerService","MapService","identify","identifyFeatures","find","Find","mapService","ImageService","IdentifyImage","imageService","Task","generateSetter","endpoint","_service","setters","setter","offset","limit","precision","featureIds","returnGeometry","where","outSr","outFields","within","_setGeometry","spatialRel","overlaps","nearby","latlng","radius","latLng","geometryType","units","distance","inSr","string","between","start","end","time","simplify","map","factor","mapWidth","Math","abs","getBounds","getWest","getEast","maxAllowableOffset","getSize","orderBy","fieldName","order","orderByFields","run","_cleanParams","_trapSQLerrors","count","returnCountOnly","returnIdsOnly","returnExtentOnly","pixelSize","layer","getLatLng","GeoJSON","getLayers","toGeoJSON","text","sr","layers","dynamicLayers","returnZ","returnM","gdbVersion","layerDefs","Identify","setMosaicRule","setRenderingRule","setPixelSize","returnCatalogItems","at","getMosaicRule","mosaicRule","getRenderingRule","renderingRule","getPixelSize","_responseToGeoJSON","location","catalogItems","catalogItemVisibilities","geoJSON","pixel","crs","objectId","Values","values","catalogItemVisibility","identifyImage","IdentifyFeatures","tolerance","on","size","imageDisplay","mapExtent","layerDef","layerId","tileProtocol","protocol","BasemapLayer","TileLayer","statics","TILES","Streets","urlTemplate","attributionUrl","hideLogo","logoPosition","minZoom","maxZoom","subdomains","attribution","Topographic","Oceans","OceansLabels","NationalGeographic","DarkGray","DarkGrayLabels","Gray","GrayLabels","Imagery","ImageryLabels","ImageryTransportation","ShadedRelief","ShadedReliefLabels","Terrain","TerrainLabels","config","Error","tileOptions","_getAttributionData","_logo","Logo","position","onAdd","_hasEsriLogo","addTo","_updateMapAttribution","onRemove","_container","removeControl","off","getAttribution","attributions","_attributions","c","contributors","contributor","coverageAreas","coverageArea","southWest","bbox","northEast","score","zoomMin","zoomMax","sort","_map","attributionControl","newAttributions","zoom","getZoom","match","substr","attributionElement","querySelector","innerHTML","maxWidth","basemapLayer","RasterLayer","opacity","_update","limitExecByInterval","updateInterval","split","bboxSR","imageSR","_currentImage","_bounds","equals","addLayer","removeLayer","_popup","_getPopupData","_resetPopupState","bindPopup","fn","popupOptions","_shouldRenderPopup","_lastClick","popup","_popupFunction","unbindPopup","closePopup","removeFrom","bringToFront","bringToBack","getOpacity","setOpacity","getTimeRange","from","to","setTimeRange","_renderImage","image","ImageOverlay","once","newImage","oldImage","_animatingZoom","_panTransition","_inProgress","_buildExportParams","_requestExport","_renderPopup","content","setLatLng","setContent","openOn","_propagateEvent","DynamicMapLayer","timeOptions","format","transparent","getDynamicLayers","setDynamicLayers","setLayers","getLayerDefs","setLayerDefs","getTimeOptions","setTimeOptions","identifyRequest","project","_northEast","_southWest","top","latLngToLayerPoint","bottom","dpi","href","getParamString","dynamicMapLayer","ImageMapLayer","setPixelType","pixelType","getPixelType","setBandIds","bandIds","isArray","getBandIds","setNoData","noData","noDataInterpretation","getNoData","getNoDataInterpretation","interpolation","compressionQuality","imageMapLayer","TiledMapLayer","zoomOffsetAllowance","correctZoomLevels","MercatorZoomLevels","0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","tileUrl","getTileUrl","tilePoint","template","s","_getSubdomain","z","_lodMap","latestWkid","arcgisLODs","tileInfo","lods","correctResolutions","arcgisLOD","ci","correctRes","_withinPercentage","resolution","level","tokenQs","percentage","diff","tiledMapLayer","FeatureGrid","cellSize","addEventListener","getEvents","_reset","removeEventListener","_removeCells","events","viewreset","moveend","zoomend","_onZoom","hasLayer","_cells","_activeCells","_cellsToLoad","_cellsTotal","_resetWrap","infinite","_getCellSize","wrapLng","_wrapLng","floor","ceil","wrapLat","_wrapLat","getPixelBounds","cellPadding","topLeft","min","subtract","divideBy","max","cellBounds","add","_removeOtherCells","_addCells","coords","queue","center","getCenter","Point","cellsToLoad","distanceTo","_addCell","_cellCoordsToBounds","nwPoint","multiplyBy","sePoint","nw","unproject","wrap","se","_cellCoordsToKey","_keyToCellCoords","kArr","parseInt","_removeCell","cell","cellLeave","_wrapCoords","cellEnter","createCell","wrapNum","BinarySearchIndex","FeatureManager","timeField","timeFilterMode","simplifyFactor","oidCheck","_startTimeIndex","_endTimeIndex","_timeIndex","_cache","_currentSnapshot","_activeRequests","_pendingRequests","_requestFeatures","_buildQuery","exceededTransferLimit","_removed","_addFeatures","_postProcessFeatures","_cacheKey","_buildTimeIndexes","createLayers","setWhere","oldSnapshot","newSnapshot","pendingRequests","mostRecentError","requestCallback","removeLayers","addLayers","getWhere","oldFrom","oldTo","_filterExistingFeatures","refresh","redraw","eachFeature","_redraw","newFrom","newTo","layersToRemove","_getFeaturesInTimeRange","layersToAdd","indexOf","shouldRemoveLayer","splice","search","startTimes","endTimes","concat","startTimeEntries","endTimeEntries","Date","bulkAdd","timeEntries","_featureWithinTimeRange","date","startDate","endDate","_getMetadata","_metadata","_query","currentIndex","currentElement","resultIndex","minIndex","maxIndex","round","dirty","startIndex","endIndex","items","FeatureLayer","EVENTS","cacheLayers","_layers","_leafletIds","_key","random","_zooming","createNewLayer","geometryToLayer","pointToLayer","coordsToLatLng","_updateLayer","latlngs","coordsToLatLngs","setLatLngs","newLayer","_originalStyle","setStyle","_leaflet_id","_popupOptions","onEachFeature","resetStyle","permanent","cacheKey","cellKey","mapBounds","removable","setFeatureStyle","defaultOptions","Path","fill","popupContent","groupLayers","gLayer","getFeature","setIcon","getIcon","updatedIcon","icon","getStyle","updatedStyle","featureLayer","Control","marginTop","marginLeft","marginBottom","marginRight","div","_adjustLogo","_size","newSize","mapSize","logo"],"mappings":"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","file":"esri-leaflet.js","sourcesContent":["var EsriLeaflet = { //jshint ignore:line\n VERSION: '1.0.3',\n Layers: {},\n Services: {},\n Controls: {},\n Tasks: {},\n Util: {},\n Support: {\n CORS: !!(window.XMLHttpRequest && 'withCredentials' in new XMLHttpRequest()),\n pointerEvents: document.documentElement.style.pointerEvents === ''\n }\n};\n\nif(typeof window !== 'undefined' && window.L){\n window.L.esri = EsriLeaflet;\n}\n","(function(EsriLeaflet){\n\n // normalize request animation frame\n var raf = window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.msRequestAnimationFrame ||\n function(cb) { return window.setTimeout(cb, 1000 / 60); };\n\n // shallow object clone for feature properties and attributes\n // from http://jsperf.com/cloning-an-object/2\n function clone(obj) {\n var target = {};\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n target[i] = obj[i];\n }\n }\n return target;\n }\n\n // checks if 2 x,y points are equal\n function pointsEqual(a, b) {\n for (var i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n\n // checks if the first and last points of a ring are equal and closes the ring\n function closeRing(coordinates) {\n if (!pointsEqual(coordinates[0], coordinates[coordinates.length - 1])) {\n coordinates.push(coordinates[0]);\n }\n return coordinates;\n }\n\n // determine if polygon ring coordinates are clockwise. clockwise signifies outer ring, counter-clockwise an inner ring\n // or hole. this logic was found at http://stackoverflow.com/questions/1165647/how-to-determine-if-a-list-of-polygon-\n // points-are-in-clockwise-order\n function ringIsClockwise(ringToTest) {\n var total = 0,i = 0;\n var rLength = ringToTest.length;\n var pt1 = ringToTest[i];\n var pt2;\n for (i; i < rLength - 1; i++) {\n pt2 = ringToTest[i + 1];\n total += (pt2[0] - pt1[0]) * (pt2[1] + pt1[1]);\n pt1 = pt2;\n }\n return (total >= 0);\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L504-L519\n function vertexIntersectsVertex(a1, a2, b1, b2) {\n var uaT = (b2[0] - b1[0]) * (a1[1] - b1[1]) - (b2[1] - b1[1]) * (a1[0] - b1[0]);\n var ubT = (a2[0] - a1[0]) * (a1[1] - b1[1]) - (a2[1] - a1[1]) * (a1[0] - b1[0]);\n var uB = (b2[1] - b1[1]) * (a2[0] - a1[0]) - (b2[0] - b1[0]) * (a2[1] - a1[1]);\n\n if ( uB !== 0 ) {\n var ua = uaT / uB;\n var ub = ubT / uB;\n\n if ( 0 <= ua && ua <= 1 && 0 <= ub && ub <= 1 ) {\n return true;\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L521-L531\n function arrayIntersectsArray(a, b) {\n for (var i = 0; i < a.length - 1; i++) {\n for (var j = 0; j < b.length - 1; j++) {\n if (vertexIntersectsVertex(a[i], a[i + 1], b[j], b[j + 1])) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n // ported from terraformer.js https://github.com/Esri/Terraformer/blob/master/terraformer.js#L470-L480\n function coordinatesContainPoint(coordinates, point) {\n var contains = false;\n for(var i = -1, l = coordinates.length, j = l - 1; ++i < l; j = i) {\n if (((coordinates[i][1] <= point[1] && point[1] < coordinates[j][1]) ||\n (coordinates[j][1] <= point[1] && point[1] < coordinates[i][1])) &&\n (point[0] < (coordinates[j][0] - coordinates[i][0]) * (point[1] - coordinates[i][1]) / (coordinates[j][1] - coordinates[i][1]) + coordinates[i][0])) {\n contains = !contains;\n }\n }\n return contains;\n }\n\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L106-L113\n function coordinatesContainCoordinates(outer, inner){\n var intersects = arrayIntersectsArray(outer, inner);\n var contains = coordinatesContainPoint(outer, inner[0]);\n if(!intersects && contains){\n return true;\n }\n return false;\n }\n\n // do any polygons in this array contain any other polygons in this array?\n // used for checking for holes in arcgis rings\n // ported from terraformer-arcgis-parser.js https://github.com/Esri/terraformer-arcgis-parser/blob/master/terraformer-arcgis-parser.js#L117-L172\n function convertRingsToGeoJSON(rings){\n var outerRings = [];\n var holes = [];\n var x; // iterator\n var outerRing; // current outer ring being evaluated\n var hole; // current hole being evaluated\n\n // for each ring\n for (var r = 0; r < rings.length; r++) {\n var ring = closeRing(rings[r].slice(0));\n if(ring.length < 4){\n continue;\n }\n // is this ring an outer ring? is it clockwise?\n if(ringIsClockwise(ring)){\n var polygon = [ ring ];\n outerRings.push(polygon); // push to outer rings\n } else {\n holes.push(ring); // counterclockwise push to holes\n }\n }\n\n var uncontainedHoles = [];\n\n // while there are holes left...\n while(holes.length){\n // pop a hole off out stack\n hole = holes.pop();\n\n // loop over all outer rings and see if they contain our hole.\n var contained = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(coordinatesContainCoordinates(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n contained = true;\n break;\n }\n }\n\n // ring is not contained in any outer ring\n // sometimes this happens https://github.com/Esri/esri-leaflet/issues/320\n if(!contained){\n uncontainedHoles.push(hole);\n }\n }\n\n // if we couldn't match any holes using contains we can try intersects...\n while(uncontainedHoles.length){\n // pop a hole off out stack\n hole = uncontainedHoles.pop();\n\n // loop over all outer rings and see if any intersect our hole.\n var intersects = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(arrayIntersectsArray(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n intersects = true;\n break;\n }\n }\n\n if(!intersects) {\n outerRings.push([hole.reverse()]);\n }\n }\n\n if(outerRings.length === 1){\n return {\n type: 'Polygon',\n coordinates: outerRings[0]\n };\n } else {\n return {\n type: 'MultiPolygon',\n coordinates: outerRings\n };\n }\n }\n\n // This function ensures that rings are oriented in the right directions\n // outer rings are clockwise, holes are counterclockwise\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function orientRings(poly){\n var output = [];\n var polygon = poly.slice(0);\n var outerRing = closeRing(polygon.shift().slice(0));\n if(outerRing.length >= 4){\n if(!ringIsClockwise(outerRing)){\n outerRing.reverse();\n }\n\n output.push(outerRing);\n\n for (var i = 0; i < polygon.length; i++) {\n var hole = closeRing(polygon[i].slice(0));\n if(hole.length >= 4){\n if(ringIsClockwise(hole)){\n hole.reverse();\n }\n output.push(hole);\n }\n }\n }\n\n return output;\n }\n\n // This function flattens holes in multipolygons to one array of polygons\n // used for converting GeoJSON Polygons to ArcGIS Polygons\n function flattenMultiPolygonRings(rings){\n var output = [];\n for (var i = 0; i < rings.length; i++) {\n var polygon = orientRings(rings[i]);\n for (var x = polygon.length - 1; x >= 0; x--) {\n var ring = polygon[x].slice(0);\n output.push(ring);\n }\n }\n return output;\n }\n\n // convert an extent (ArcGIS) to LatLngBounds (Leaflet)\n EsriLeaflet.Util.extentToBounds = function(extent){\n var sw = new L.LatLng(extent.ymin, extent.xmin);\n var ne = new L.LatLng(extent.ymax, extent.xmax);\n return new L.LatLngBounds(sw, ne);\n };\n\n // convert an LatLngBounds (Leaflet) to extent (ArcGIS)\n EsriLeaflet.Util.boundsToExtent = function(bounds) {\n bounds = L.latLngBounds(bounds);\n return {\n 'xmin': bounds.getSouthWest().lng,\n 'ymin': bounds.getSouthWest().lat,\n 'xmax': bounds.getNorthEast().lng,\n 'ymax': bounds.getNorthEast().lat,\n 'spatialReference': {\n 'wkid' : 4326\n }\n };\n };\n\n EsriLeaflet.Util.arcgisToGeojson = function (arcgis, idAttribute){\n var geojson = {};\n\n if(typeof arcgis.x === 'number' && typeof arcgis.y === 'number'){\n geojson.type = 'Point';\n geojson.coordinates = [arcgis.x, arcgis.y];\n }\n\n if(arcgis.points){\n geojson.type = 'MultiPoint';\n geojson.coordinates = arcgis.points.slice(0);\n }\n\n if(arcgis.paths) {\n if(arcgis.paths.length === 1){\n geojson.type = 'LineString';\n geojson.coordinates = arcgis.paths[0].slice(0);\n } else {\n geojson.type = 'MultiLineString';\n geojson.coordinates = arcgis.paths.slice(0);\n }\n }\n\n if(arcgis.rings) {\n geojson = convertRingsToGeoJSON(arcgis.rings.slice(0));\n }\n\n if(arcgis.geometry || arcgis.attributes) {\n geojson.type = 'Feature';\n geojson.geometry = (arcgis.geometry) ? EsriLeaflet.Util.arcgisToGeojson(arcgis.geometry) : null;\n geojson.properties = (arcgis.attributes) ? clone(arcgis.attributes) : null;\n if(arcgis.attributes) {\n geojson.id = arcgis.attributes[idAttribute] || arcgis.attributes.OBJECTID || arcgis.attributes.FID;\n }\n }\n\n return geojson;\n };\n\n // GeoJSON -> ArcGIS\n EsriLeaflet.Util.geojsonToArcGIS = function(geojson, idAttribute){\n idAttribute = idAttribute || 'OBJECTID';\n var spatialReference = { wkid: 4326 };\n var result = {};\n var i;\n\n switch(geojson.type){\n case 'Point':\n result.x = geojson.coordinates[0];\n result.y = geojson.coordinates[1];\n result.spatialReference = spatialReference;\n break;\n case 'MultiPoint':\n result.points = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'LineString':\n result.paths = [geojson.coordinates.slice(0)];\n result.spatialReference = spatialReference;\n break;\n case 'MultiLineString':\n result.paths = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case 'Polygon':\n result.rings = orientRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'MultiPolygon':\n result.rings = flattenMultiPolygonRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case 'Feature':\n if(geojson.geometry) {\n result.geometry = EsriLeaflet.Util.geojsonToArcGIS(geojson.geometry, idAttribute);\n }\n result.attributes = (geojson.properties) ? clone(geojson.properties) : {};\n if(geojson.id){\n result.attributes[idAttribute] = geojson.id;\n }\n break;\n case 'FeatureCollection':\n result = [];\n for (i = 0; i < geojson.features.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.features[i], idAttribute));\n }\n break;\n case 'GeometryCollection':\n result = [];\n for (i = 0; i < geojson.geometries.length; i++){\n result.push(EsriLeaflet.Util.geojsonToArcGIS(geojson.geometries[i], idAttribute));\n }\n break;\n }\n\n return result;\n };\n\n EsriLeaflet.Util.responseToFeatureCollection = function(response, idAttribute){\n var objectIdField;\n\n if(idAttribute){\n objectIdField = idAttribute;\n } else if(response.objectIdFieldName){\n objectIdField = response.objectIdFieldName;\n } else if(response.fields) {\n for (var j = 0; j <= response.fields.length - 1; j++) {\n if(response.fields[j].type === 'esriFieldTypeOID') {\n objectIdField = response.fields[j].name;\n break;\n }\n }\n } else {\n objectIdField = 'OBJECTID';\n }\n\n var featureCollection = {\n type: 'FeatureCollection',\n features: []\n };\n var features = response.features || response.results;\n if(features.length){\n for (var i = features.length - 1; i >= 0; i--) {\n featureCollection.features.push(EsriLeaflet.Util.arcgisToGeojson(features[i], objectIdField));\n }\n }\n\n return featureCollection;\n };\n\n // trim url whitespace and add a trailing slash if needed\n EsriLeaflet.Util.cleanUrl = function(url){\n //trim leading and trailing spaces, but not spaces inside the url\n url = url.replace(/^\\s+|\\s+$|\\A\\s+|\\s+\\z/g, '');\n\n //add a trailing slash to the url if the user omitted it\n if(url[url.length-1] !== '/'){\n url += '/';\n }\n\n return url;\n };\n\n EsriLeaflet.Util.isArcgisOnline = function(url){\n /* hosted feature services can emit geojson natively.\n our check for 'geojson' support will need to be revisted\n once the functionality makes its way to ArcGIS Server*/\n return (/\\.arcgis\\.com.*?FeatureServer/g).test(url);\n };\n\n EsriLeaflet.Util.geojsonTypeToArcGIS = function (geoJsonType) {\n var arcgisGeometryType;\n switch (geoJsonType) {\n case 'Point':\n arcgisGeometryType = 'esriGeometryPoint';\n break;\n case 'MultiPoint':\n arcgisGeometryType = 'esriGeometryMultipoint';\n break;\n case 'LineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'MultiLineString':\n arcgisGeometryType = 'esriGeometryPolyline';\n break;\n case 'Polygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n case 'MultiPolygon':\n arcgisGeometryType = 'esriGeometryPolygon';\n break;\n }\n return arcgisGeometryType;\n };\n\n EsriLeaflet.Util.requestAnimationFrame = L.Util.bind(raf, window);\n\n EsriLeaflet.Util.warn = function (message) {\n if(console && console.warn) {\n console.warn(message);\n }\n };\n\n})(EsriLeaflet);","(function(EsriLeaflet){\n\n var callbacks = 0;\n\n window._EsriLeafletCallbacks = {};\n\n function serialize(params){\n var data = '';\n\n params.f = params.f || 'json';\n\n for (var key in params){\n if(params.hasOwnProperty(key)){\n var param = params[key];\n var type = Object.prototype.toString.call(param);\n var value;\n\n if(data.length){\n data += '&';\n }\n\n if (type === '[object Array]'){\n value = (Object.prototype.toString.call(param[0]) === '[object Object]') ? JSON.stringify(param) : param.join(',');\n } else if (type === '[object Object]') {\n value = JSON.stringify(param);\n } else if (type === '[object Date]'){\n value = param.valueOf();\n } else {\n value = param;\n }\n\n data += encodeURIComponent(key) + '=' + encodeURIComponent(value);\n }\n }\n\n return data;\n }\n\n function createRequest(callback, context){\n var httpRequest = new XMLHttpRequest();\n\n httpRequest.onerror = function(e) {\n httpRequest.onreadystatechange = L.Util.falseFn;\n\n callback.call(context, {\n error: {\n code: 500,\n message: 'XMLHttpRequest error'\n }\n }, null);\n };\n\n httpRequest.onreadystatechange = function(){\n var response;\n var error;\n\n if (httpRequest.readyState === 4) {\n try {\n response = JSON.parse(httpRequest.responseText);\n } catch(e) {\n response = null;\n error = {\n code: 500,\n message: 'Could not parse response as JSON. This could also be caused by a CORS or XMLHttpRequest error.'\n };\n }\n\n if (!error && response.error) {\n error = response.error;\n response = null;\n }\n\n httpRequest.onerror = L.Util.falseFn;\n\n callback.call(context, error, response);\n }\n };\n\n return httpRequest;\n }\n\n // AJAX handlers for CORS (modern browsers) or JSONP (older browsers)\n EsriLeaflet.Request = {\n request: function(url, params, callback, context){\n var paramString = serialize(params);\n var httpRequest = createRequest(callback, context);\n var requestLength = (url + '?' + paramString).length;\n\n // request is less then 2000 characters and the browser supports CORS, make GET request with XMLHttpRequest\n if(requestLength <= 2000 && L.esri.Support.CORS){\n httpRequest.open('GET', url + '?' + paramString);\n httpRequest.send(null);\n\n // request is less more then 2000 characters and the browser supports CORS, make POST request with XMLHttpRequest\n } else if (requestLength > 2000 && L.esri.Support.CORS){\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(paramString);\n\n // request is less more then 2000 characters and the browser does not support CORS, make a JSONP request\n } else if(requestLength <= 2000 && !L.esri.Support.CORS){\n return L.esri.Request.get.JSONP(url, params, callback, context);\n\n // request is longer then 2000 characters and the browser does not support CORS, log a warning\n } else {\n EsriLeaflet.Util.warn('a request to ' + url + ' was longer then 2000 characters and this browser cannot make a cross-domain post request. Please use a proxy http://esri.github.io/esri-leaflet/api-reference/request.html');\n return;\n }\n\n return httpRequest;\n },\n\n post: {\n XMLHTTP: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n httpRequest.open('POST', url);\n httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n httpRequest.send(serialize(params));\n\n return httpRequest;\n }\n },\n\n get: {\n CORS: function (url, params, callback, context) {\n var httpRequest = createRequest(callback, context);\n\n httpRequest.open('GET', url + '?' + serialize(params), true);\n httpRequest.send(null);\n\n return httpRequest;\n },\n JSONP: function(url, params, callback, context){\n var callbackId = 'c' + callbacks;\n\n params.callback = 'window._EsriLeafletCallbacks.' + callbackId;\n\n var script = L.DomUtil.create('script', null, document.body);\n script.type = 'text/javascript';\n script.src = url + '?' + serialize(params);\n script.id = callbackId;\n\n window._EsriLeafletCallbacks[callbackId] = function(response){\n if(window._EsriLeafletCallbacks[callbackId] !== true){\n var error;\n var responseType = Object.prototype.toString.call(response);\n\n if(!(responseType === '[object Object]' || responseType === '[object Array]')){\n error = {\n error: {\n code: 500,\n message: 'Expected array or object as JSONP response'\n }\n };\n response = null;\n }\n\n if (!error && response.error) {\n error = response;\n response = null;\n }\n\n callback.call(context, error, response);\n window._EsriLeafletCallbacks[callbackId] = true;\n }\n };\n\n callbacks++;\n\n return {\n id: callbackId,\n url: script.src,\n abort: function(){\n window._EsriLeafletCallbacks._callback[callbackId]({\n code: 0,\n message: 'Request aborted.'\n });\n }\n };\n }\n }\n };\n\n // choose the correct AJAX handler depending on CORS support\n EsriLeaflet.get = (EsriLeaflet.Support.CORS) ? EsriLeaflet.Request.get.CORS : EsriLeaflet.Request.get.JSONP;\n\n // always use XMLHttpRequest for posts\n EsriLeaflet.post = EsriLeaflet.Request.post.XMLHTTP;\n\n // expose a common request method the uses GET\\POST based on request length\n EsriLeaflet.request = EsriLeaflet.Request.request;\n\n})(EsriLeaflet);","EsriLeaflet.Services.Service = L.Class.extend({\n\n includes: L.Mixin.Events,\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n initialize: function (options) {\n options = options || {};\n this._requestQueue = [];\n this._authenticating = false;\n L.Util.setOptions(this, options);\n this.options.url = EsriLeaflet.Util.cleanUrl(this.options.url);\n },\n\n get: function (path, params, callback, context) {\n return this._request('get', path, params, callback, context);\n },\n\n post: function (path, params, callback, context) {\n return this._request('post', path, params, callback, context);\n },\n\n request: function (path, params, callback, context) {\n return this._request('request', path, params, callback, context);\n },\n\n metadata: function (callback, context) {\n return this._request('get', '', {}, callback, context);\n },\n\n authenticate: function(token){\n this._authenticating = false;\n this.options.token = token;\n this._runQueue();\n return this;\n },\n\n _request: function(method, path, params, callback, context){\n this.fire('requeststart', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n\n var wrappedCallback = this._createServiceCallback(method, path, params, callback, context);\n\n if (this.options.token) {\n params.token = this.options.token;\n }\n\n if (this._authenticating) {\n this._requestQueue.push([method, path, params, callback, context]);\n return;\n } else {\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, wrappedCallback);\n } else {\n return EsriLeaflet[method](url, params, wrappedCallback);\n }\n }\n },\n\n _createServiceCallback: function(method, path, params, callback, context){\n return L.Util.bind(function(error, response){\n\n if (error && (error.code === 499 || error.code === 498)) {\n this._authenticating = true;\n\n this._requestQueue.push([method, path, params, callback, context]);\n\n // fire an event for users to handle and re-authenticate\n this.fire('authenticationrequired', {\n authenticate: L.Util.bind(this.authenticate, this)\n });\n\n // if the user has access to a callback they can handle the auth error\n error.authenticate = L.Util.bind(this.authenticate, this);\n }\n\n callback.call(context, error, response);\n\n if(error) {\n this.fire('requesterror', {\n url: this.options.url + path,\n params: params,\n message: error.message,\n code: error.code,\n method: method\n });\n } else {\n this.fire('requestsuccess', {\n url: this.options.url + path,\n params: params,\n response: response,\n method: method\n });\n }\n\n this.fire('requestend', {\n url: this.options.url + path,\n params: params,\n method: method\n });\n }, this);\n },\n\n _runQueue: function(){\n for (var i = this._requestQueue.length - 1; i >= 0; i--) {\n var request = this._requestQueue[i];\n var method = request.shift();\n this[method].apply(this, request);\n }\n this._requestQueue = [];\n }\n\n});\n\nEsriLeaflet.Services.service = function(params){\n return new EsriLeaflet.Services.Service(params);\n};\n","EsriLeaflet.Services.FeatureLayerService = EsriLeaflet.Services.Service.extend({\n\n options: {\n idAttribute: 'OBJECTID'\n },\n\n query: function(){\n return new EsriLeaflet.Tasks.Query(this);\n },\n\n addFeature: function(feature, callback, context) {\n delete feature.id;\n\n feature = EsriLeaflet.Util.geojsonToArcGIS(feature);\n\n return this.post('addFeatures', {\n features: [feature]\n }, function(error, response){\n var result = (response && response.addResults) ? response.addResults[0] : undefined;\n if(callback){\n callback.call(context, error || response.addResults[0].error, result);\n }\n }, context);\n },\n\n updateFeature: function(feature, callback, context) {\n feature = EsriLeaflet.Util.geojsonToArcGIS(feature, this.options.idAttribute);\n\n return this.post('updateFeatures', {\n features: [feature]\n }, function(error, response){\n var result = (response && response.updateResults) ? response.updateResults[0] : undefined;\n if(callback){\n callback.call(context, error || response.updateResults[0].error, result);\n }\n }, context);\n },\n\n deleteFeature: function(id, callback, context) {\n return this.post('deleteFeatures', {\n objectIds: id\n }, function(error, response){\n var result = (response && response.deleteResults) ? response.deleteResults[0] : undefined;\n if(callback){\n callback.call(context, error || response.deleteResults[0].error, result);\n }\n }, context);\n },\n\n deleteFeatures: function(ids, callback, context) {\n return this.post('deleteFeatures', {\n objectIds: ids\n }, function(error, response){\n // pass back the entire array\n var result = (response && response.deleteResults) ? response.deleteResults : undefined;\n if(callback){\n callback.call(context, error || response.deleteResults[0].error, result);\n }\n }, context);\n }\n});\n\nEsriLeaflet.Services.featureLayerService = function(options) {\n return new EsriLeaflet.Services.FeatureLayerService(options);\n};\n","EsriLeaflet.Services.MapService = EsriLeaflet.Services.Service.extend({\n\n identify: function () {\n return new EsriLeaflet.Tasks.identifyFeatures(this);\n },\n\n find: function () {\n return new EsriLeaflet.Tasks.Find(this);\n },\n\n query: function () {\n return new EsriLeaflet.Tasks.Query(this);\n }\n\n});\n\nEsriLeaflet.Services.mapService = function(params){\n return new EsriLeaflet.Services.MapService(params);\n};","EsriLeaflet.Services.ImageService = EsriLeaflet.Services.Service.extend({\n\n query: function () {\n return new EsriLeaflet.Tasks.Query(this);\n },\n\n identify: function() {\n return new EsriLeaflet.Tasks.IdentifyImage(this);\n }\n});\n\nEsriLeaflet.Services.imageService = function(params){\n return new EsriLeaflet.Services.ImageService(params);\n};","EsriLeaflet.Tasks.Task = L.Class.extend({\n\n options: {\n proxy: false,\n useCors: EsriLeaflet.Support.CORS\n },\n\n //Generate a method for each methodName:paramName in the setters for this task.\n generateSetter: function(param, context){\n return L.Util.bind(function(value){\n this.params[param] = value;\n return this;\n }, context);\n },\n\n initialize: function(endpoint){\n // endpoint can be either a url (and options) for an ArcGIS Rest Service or an instance of EsriLeaflet.Service\n if(endpoint.request && endpoint.options){\n this._service = endpoint;\n L.Util.setOptions(this, endpoint.options);\n } else {\n L.Util.setOptions(this, endpoint);\n this.options.url = L.esri.Util.cleanUrl(endpoint.url);\n }\n\n // clone default params into this object\n this.params = L.Util.extend({}, this.params || {});\n\n // generate setter methods based on the setters object implimented a child class\n if(this.setters){\n for (var setter in this.setters){\n var param = this.setters[setter];\n this[setter] = this.generateSetter(param, this);\n }\n }\n },\n\n token: function(token){\n if(this._service){\n this._service.authenticate(token);\n } else {\n this.params.token = token;\n }\n return this;\n },\n\n request: function(callback, context){\n if(this._service){\n return this._service.request(this.path, this.params, callback, context);\n } else {\n return this._request('request', this.path, this.params, callback, context);\n }\n },\n\n _request: function(method, path, params, callback, context){\n var url = (this.options.proxy) ? this.options.proxy + '?' + this.options.url + path : this.options.url + path;\n if((method === 'get' || method === 'request') && !this.options.useCors){\n return EsriLeaflet.Request.get.JSONP(url, params, callback, context);\n } else{\n return EsriLeaflet[method](url, params, callback, context);\n }\n }\n});","EsriLeaflet.Tasks.Query = EsriLeaflet.Tasks.Task.extend({\n setters: {\n 'offset': 'offset',\n 'limit': 'limit',\n 'fields': 'outFields',\n 'precision': 'geometryPrecision',\n 'featureIds': 'objectIds',\n 'returnGeometry': 'returnGeometry',\n 'token': 'token'\n },\n\n path: 'query',\n\n params: {\n returnGeometry: true,\n where: '1=1',\n outSr: 4326,\n outFields: '*'\n },\n\n within: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelContains'; // will make code read layer within geometry, to the api this will reads geometry contains layer\n return this;\n },\n\n intersects: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelIntersects';\n return this;\n },\n\n contains: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelWithin'; // will make code read layer contains geometry, to the api this will reads geometry within layer\n return this;\n },\n\n // crosses: function(geometry){\n // this._setGeometry(geometry);\n // this.params.spatialRel = 'esriSpatialRelCrosses';\n // return this;\n // },\n\n // touches: function(geometry){\n // this._setGeometry(geometry);\n // this.params.spatialRel = 'esriSpatialRelTouches';\n // return this;\n // },\n\n overlaps: function(geometry){\n this._setGeometry(geometry);\n this.params.spatialRel = 'esriSpatialRelOverlaps';\n return this;\n },\n\n // only valid for Feature Services running on ArcGIS Server 10.3 or ArcGIS Online\n nearby: function(latlng, radius){\n latlng = L.latLng(latlng);\n this.params.geometry = [latlng.lng, latlng.lat];\n this.params.geometryType = 'esriGeometryPoint';\n this.params.spatialRel = 'esriSpatialRelIntersects';\n this.params.units = 'esriSRUnit_Meter';\n this.params.distance = radius;\n this.params.inSr = 4326;\n return this;\n },\n\n where: function(string){\n // instead of converting double-quotes to single quotes, pass as is, and provide a more informative message if a 400 is encountered\n this.params.where = string;\n return this;\n },\n\n between: function(start, end){\n this.params.time = [start.valueOf(), end.valueOf()];\n return this;\n },\n\n simplify: function(map, factor){\n var mapWidth = Math.abs(map.getBounds().getWest() - map.getBounds().getEast());\n this.params.maxAllowableOffset = (mapWidth / map.getSize().y) * factor;\n return this;\n },\n\n orderBy: function(fieldName, order){\n order = order || 'ASC';\n this.params.orderByFields = (this.params.orderByFields) ? this.params.orderByFields + ',' : '';\n this.params.orderByFields += ([fieldName, order]).join(' ');\n return this;\n },\n\n run: function(callback, context){\n this._cleanParams();\n\n // if the service is hosted on arcgis online request geojson directly\n if(EsriLeaflet.Util.isArcgisOnline(this.options.url)){\n this.params.f = 'geojson';\n\n return this.request(function(error, response){\n this._trapSQLerrors(error);\n callback.call(context, error, response, response);\n }, this);\n\n // otherwise convert it in the callback then pass it on\n } else {\n return this.request(function(error, response){\n this._trapSQLerrors(error);\n callback.call(context, error, (response && EsriLeaflet.Util.responseToFeatureCollection(response)), response);\n }, this);\n }\n },\n\n count: function(callback, context){\n this._cleanParams();\n this.params.returnCountOnly = true;\n return this.request(function(error, response){\n callback.call(this, error, (response && response.count), response);\n }, context);\n },\n\n ids: function(callback, context){\n this._cleanParams();\n this.params.returnIdsOnly = true;\n return this.request(function(error, response){\n callback.call(this, error, (response && response.objectIds), response);\n }, context);\n },\n\n // only valid for Feature Services running on ArcGIS Server 10.3 or ArcGIS Online\n bounds: function(callback, context){\n this._cleanParams();\n this.params.returnExtentOnly = true;\n return this.request(function(error, response){\n callback.call(context, error, (response && response.extent && EsriLeaflet.Util.extentToBounds(response.extent)), response);\n }, context);\n },\n\n // only valid for image services\n pixelSize: function(point){\n point = L.point(point);\n this.params.pixelSize = [point.x,point.y];\n return this;\n },\n\n // only valid for map services\n layer: function(layer){\n this.path = layer + '/query';\n return this;\n },\n\n _trapSQLerrors: function(error){\n if (error){\n if (error.code === '400'){\n EsriLeaflet.Util.warn('one common syntax error in query requests is encasing string values in double quotes instead of single quotes');\n }\n }\n },\n\n _cleanParams: function(){\n delete this.params.returnIdsOnly;\n delete this.params.returnExtentOnly;\n delete this.params.returnCountOnly;\n },\n\n _setGeometry: function(geometry) {\n this.params.inSr = 4326;\n\n // convert bounds to extent and finish\n if ( geometry instanceof L.LatLngBounds ) {\n // set geometry + geometryType\n this.params.geometry = EsriLeaflet.Util.boundsToExtent(geometry);\n this.params.geometryType = 'esriGeometryEnvelope';\n return;\n }\n\n // convert L.Marker > L.LatLng\n if(geometry.getLatLng){\n geometry = geometry.getLatLng();\n }\n\n // convert L.LatLng to a geojson point and continue;\n if (geometry instanceof L.LatLng) {\n geometry = {\n type: 'Point',\n coordinates: [geometry.lng, geometry.lat]\n };\n }\n\n // handle L.GeoJSON, pull out the first geometry\n if ( geometry instanceof L.GeoJSON ) {\n //reassign geometry to the GeoJSON value (we are assuming that only one feature is present)\n geometry = geometry.getLayers()[0].feature.geometry;\n this.params.geometry = EsriLeaflet.Util.geojsonToArcGIS(geometry);\n this.params.geometryType = EsriLeaflet.Util.geojsonTypeToArcGIS(geometry.type);\n }\n\n // Handle L.Polyline and L.Polygon\n if (geometry.toGeoJSON) {\n geometry = geometry.toGeoJSON();\n }\n\n // handle GeoJSON feature by pulling out the geometry\n if ( geometry.type === 'Feature' ) {\n // get the geometry of the geojson feature\n geometry = geometry.geometry;\n }\n\n // confirm that our GeoJSON is a point, line or polygon\n if ( geometry.type === 'Point' || geometry.type === 'LineString' || geometry.type === 'Polygon') {\n this.params.geometry = EsriLeaflet.Util.geojsonToArcGIS(geometry);\n this.params.geometryType = EsriLeaflet.Util.geojsonTypeToArcGIS(geometry.type);\n return;\n }\n\n // warn the user if we havn't found a\n /* global console */\n EsriLeaflet.Util.warn('invalid geometry passed to spatial query. Should be an L.LatLng, L.LatLngBounds or L.Marker or a GeoJSON Point Line or Polygon object');\n\n return;\n }\n});\n\nEsriLeaflet.Tasks.query = function(params){\n return new EsriLeaflet.Tasks.Query(params);\n};","EsriLeaflet.Tasks.Find = EsriLeaflet.Tasks.Task.extend({\n setters: {\n // method name > param name\n 'contains': 'contains',\n 'text': 'searchText',\n 'fields': 'searchFields', // denote an array or single string\n 'spatialReference': 'sr',\n 'sr': 'sr',\n 'layers': 'layers',\n 'returnGeometry': 'returnGeometry',\n 'maxAllowableOffset': 'maxAllowableOffset',\n 'precision': 'geometryPrecision',\n 'dynamicLayers': 'dynamicLayers',\n 'returnZ' : 'returnZ',\n 'returnM' : 'returnM',\n 'gdbVersion' : 'gdbVersion',\n 'token' : 'token'\n },\n\n path: 'find',\n\n params: {\n sr: 4326,\n contains: true,\n returnGeometry: true,\n returnZ: true,\n returnM: false\n },\n\n layerDefs: function (id, where) {\n this.params.layerDefs = (this.params.layerDefs) ? this.params.layerDefs + ';' : '';\n this.params.layerDefs += ([id, where]).join(':');\n return this;\n },\n\n simplify: function(map, factor){\n var mapWidth = Math.abs(map.getBounds().getWest() - map.getBounds().getEast());\n this.params.maxAllowableOffset = (mapWidth / map.getSize().y) * factor;\n return this;\n },\n\n run: function (callback, context) {\n return this.request(function(error, response){\n callback.call(context, error, (response && EsriLeaflet.Util.responseToFeatureCollection(response)), response);\n }, context);\n }\n});\n\nEsriLeaflet.Tasks.find = function (params) {\n return new EsriLeaflet.Tasks.Find(params);\n};","EsriLeaflet.Tasks.Identify = EsriLeaflet.Tasks.Task.extend({\n path: 'identify',\n\n between: function(start, end){\n this.params.time = [start.valueOf(), end.valueOf()];\n return this;\n }\n});\n","EsriLeaflet.Tasks.IdentifyImage = EsriLeaflet.Tasks.Identify.extend({\n setters: {\n 'setMosaicRule': 'mosaicRule',\n 'setRenderingRule': 'renderingRule',\n 'setPixelSize': 'pixelSize',\n 'returnCatalogItems': 'returnCatalogItems',\n 'returnGeometry': 'returnGeometry'\n },\n\n params: {\n returnGeometry: false\n },\n\n at: function(latlng){\n latlng = L.latLng(latlng);\n this.params.geometry = JSON.stringify({\n x: latlng.lng,\n y: latlng.lat,\n spatialReference:{\n wkid: 4326\n }\n });\n this.params.geometryType = 'esriGeometryPoint';\n return this;\n },\n\n getMosaicRule: function() {\n return this.params.mosaicRule;\n },\n\n getRenderingRule: function() {\n return this.params.renderingRule;\n },\n\n getPixelSize: function() {\n return this.params.pixelSize;\n },\n\n run: function (callback, context){\n return this.request(function(error, response){\n callback.call(context, error, (response && this._responseToGeoJSON(response)), response);\n }, this);\n },\n\n // get pixel data and return as geoJSON point\n // populate catalog items (if any)\n // merging in any catalogItemVisibilities as a propery of each feature\n _responseToGeoJSON: function(response) {\n var location = response.location;\n var catalogItems = response.catalogItems;\n var catalogItemVisibilities = response.catalogItemVisibilities;\n var geoJSON = {\n 'pixel': {\n 'type': 'Feature',\n 'geometry': {\n 'type': 'Point',\n 'coordinates': [location.x, location.y]\n },\n 'crs': {\n 'type': 'EPSG',\n 'properties': {\n 'code': location.spatialReference.wkid\n }\n },\n 'properties': {\n 'OBJECTID': response.objectId,\n 'name': response.name,\n 'value': response.value\n },\n 'id': response.objectId\n }\n };\n if (response.properties && response.properties.Values) {\n geoJSON.pixel.properties.values = response.properties.Values;\n }\n if (catalogItems && catalogItems.features) {\n geoJSON.catalogItems = EsriLeaflet.Util.responseToFeatureCollection(catalogItems);\n if (catalogItemVisibilities && catalogItemVisibilities.length === geoJSON.catalogItems.features.length) {\n for (var i = catalogItemVisibilities.length - 1; i >= 0; i--) {\n geoJSON.catalogItems.features[i].properties.catalogItemVisibility = catalogItemVisibilities[i];\n }\n }\n }\n return geoJSON;\n }\n\n});\n\nEsriLeaflet.Tasks.identifyImage = function(params){\n return new EsriLeaflet.Tasks.IdentifyImage(params);\n};","EsriLeaflet.Tasks.IdentifyFeatures = EsriLeaflet.Tasks.Identify.extend({\n setters: {\n 'layers': 'layers',\n 'precision': 'geometryPrecision',\n 'tolerance': 'tolerance',\n 'returnGeometry': 'returnGeometry'\n },\n\n params: {\n sr: 4326,\n layers: 'all',\n tolerance: 3,\n returnGeometry: true\n },\n\n on: function(map){\n var extent = EsriLeaflet.Util.boundsToExtent(map.getBounds());\n var size = map.getSize();\n this.params.imageDisplay = [size.x, size.y, 96];\n this.params.mapExtent = [extent.xmin, extent.ymin, extent.xmax, extent.ymax];\n return this;\n },\n\n at: function(latlng){\n latlng = L.latLng(latlng);\n this.params.geometry = [latlng.lng, latlng.lat];\n this.params.geometryType = 'esriGeometryPoint';\n return this;\n },\n\n layerDef: function (id, where){\n this.params.layerDefs = (this.params.layerDefs) ? this.params.layerDefs + ';' : '';\n this.params.layerDefs += ([id, where]).join(':');\n return this;\n },\n\n simplify: function(map, factor){\n var mapWidth = Math.abs(map.getBounds().getWest() - map.getBounds().getEast());\n this.params.maxAllowableOffset = (mapWidth / map.getSize().y) * (1 - factor);\n return this;\n },\n\n run: function (callback, context){\n return this.request(function(error, response){\n // immediately invoke with an error\n if(error) {\n callback.call(context, error, undefined, response);\n return;\n\n // ok no error lets just assume we have features...\n } else {\n var featureCollection = EsriLeaflet.Util.responseToFeatureCollection(response);\n response.results = response.results.reverse();\n for (var i = 0; i < featureCollection.features.length; i++) {\n var feature = featureCollection.features[i];\n feature.layerId = response.results[i].layerId;\n }\n callback.call(context, undefined, featureCollection, response);\n }\n });\n }\n});\n\nEsriLeaflet.Tasks.identifyFeatures = function(params){\n return new EsriLeaflet.Tasks.IdentifyFeatures(params);\n};","(function(EsriLeaflet){\n\n var tileProtocol = (window.location.protocol !== 'https:') ? 'http:' : 'https:';\n\n EsriLeaflet.Layers.BasemapLayer = L.TileLayer.extend({\n statics: {\n TILES: {\n Streets: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/{z}/{y}/{x}',\n attributionUrl: 'https://static.arcgis.com/attribution/World_Street_Map',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services'],\n attribution: 'Esri'\n }\n },\n Topographic: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/{z}/{y}/{x}',\n attributionUrl: 'https://static.arcgis.com/attribution/World_Topo_Map',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services'],\n attribution: 'Esri'\n }\n },\n Oceans: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/arcgis/rest/services/Ocean/World_Ocean_Base/MapServer/tile/{z}/{y}/{x}',\n attributionUrl: 'https://static.arcgis.com/attribution/Ocean_Basemap',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services'],\n attribution: 'Esri'\n }\n },\n OceansLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/arcgis/rest/services/Ocean/World_Ocean_Reference/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services']\n }\n },\n NationalGeographic: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services'],\n attribution: 'Esri'\n }\n },\n DarkGray: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Dark_Gray_Base/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services'],\n attribution: 'Esri, DeLorme, HERE'\n }\n },\n DarkGrayLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Dark_Gray_Reference/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services']\n }\n },\n Gray: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services'],\n attribution: 'Esri, NAVTEQ, DeLorme'\n }\n },\n GrayLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Reference/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 16,\n subdomains: ['server', 'services']\n }\n },\n Imagery: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services'],\n attribution: 'Esri, DigitalGlobe, GeoEye, i-cubed, USDA, USGS, AEX, Getmapping, Aerogrid, IGN, IGP, swisstopo, and the GIS User Community'\n }\n },\n ImageryLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Boundaries_and_Places/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services']\n }\n },\n ImageryTransportation: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Transportation/MapServer/tile/{z}/{y}/{x}',\n //pane: 'esri-label',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 19,\n subdomains: ['server', 'services']\n }\n },\n ShadedRelief: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Shaded_Relief/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 13,\n subdomains: ['server', 'services'],\n attribution: 'Esri, NAVTEQ, DeLorme'\n }\n },\n ShadedReliefLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Boundaries_and_Places_Alternate/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 12,\n subdomains: ['server', 'services']\n }\n },\n Terrain: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Terrain_Base/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: false,\n logoPosition: 'bottomright',\n minZoom: 1,\n maxZoom: 13,\n subdomains: ['server', 'services'],\n attribution: 'Esri, USGS, NOAA'\n }\n },\n TerrainLabels: {\n urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Reference_Overlay/MapServer/tile/{z}/{y}/{x}',\n options: {\n hideLogo: true,\n logoPosition: 'bottomright',\n //pane: 'esri-label',\n minZoom: 1,\n maxZoom: 13,\n subdomains: ['server', 'services']\n }\n }\n }\n },\n initialize: function(key, options){\n var config;\n\n // set the config variable with the appropriate config object\n if (typeof key === 'object' && key.urlTemplate && key.options){\n config = key;\n } else if(typeof key === 'string' && EsriLeaflet.BasemapLayer.TILES[key]){\n config = EsriLeaflet.BasemapLayer.TILES[key];\n } else {\n throw new Error('L.esri.BasemapLayer: Invalid parameter. Use one of \"Streets\", \"Topographic\", \"Oceans\", \"OceansLabels\", \"NationalGeographic\", \"Gray\", \"GrayLabels\", \"DarkGray\", \"DarkGrayLabels\", \"Imagery\", \"ImageryLabels\", \"ImageryTransportation\", \"ShadedRelief\", \"ShadedReliefLabels\", \"Terrain\" or \"TerrainLabels\"');\n }\n\n // merge passed options into the config options\n var tileOptions = L.Util.extend(config.options, options);\n\n // call the initialize method on L.TileLayer to set everything up\n L.TileLayer.prototype.initialize.call(this, config.urlTemplate, L.Util.setOptions(this, tileOptions));\n\n // if this basemap requires dynamic attribution set it up\n if(config.attributionUrl){\n this._getAttributionData(config.attributionUrl);\n }\n this._logo = new EsriLeaflet.Controls.Logo({\n position: this.options.logoPosition\n });\n },\n onAdd: function(map){\n if(!this.options.hideLogo && !map._hasEsriLogo){\n this._logo.addTo(map);\n map._hasEsriLogo = true;\n }\n\n // if(this.options.pane && EsriLeaflet.Support.pointerEvents){\n // this._initPane();\n // }\n\n L.TileLayer.prototype.onAdd.call(this, map);\n\n map.on('moveend', this._updateMapAttribution, this);\n },\n onRemove: function(map){\n // check to make sure the logo hasn't already been removed\n if(!map._hasEsriLogo && this._logo && this._logo._container){\n map.removeControl(this._logo);\n map._hasEsriLogo = false;\n }\n\n L.TileLayer.prototype.onRemove.call(this, map);\n\n map.off('moveend', this._updateMapAttribution, this);\n },\n getAttribution:function(){\n var attribution = '' + this.options.attribution + ''/* + logo*/;\n return attribution;\n },\n // _initPane: function(){\n // if(!this._map.getPane(this.options.pane)){\n // var pane = this._map.createPane(this.options.pane);\n // pane.style.pointerEvents = 'none';\n // pane.style.zIndex = 5;\n // }\n // },\n _getAttributionData: function(url){\n L.esri.Request.get.JSONP(url, {}, L.Util.bind(function(error, attributions){\n this._attributions = [];\n\n for (var c = 0; c < attributions.contributors.length; c++) {\n var contributor = attributions.contributors[c];\n for (var i = 0; i < contributor.coverageAreas.length; i++) {\n var coverageArea = contributor.coverageAreas[i];\n var southWest = new L.LatLng(coverageArea.bbox[0], coverageArea.bbox[1]);\n var northEast = new L.LatLng(coverageArea.bbox[2], coverageArea.bbox[3]);\n this._attributions.push({\n attribution: contributor.attribution,\n score: coverageArea.score,\n bounds: new L.LatLngBounds(southWest, northEast),\n minZoom: coverageArea.zoomMin,\n maxZoom: coverageArea.zoomMax\n });\n }\n }\n\n this._attributions.sort(function(a, b){\n return b.score - a.score;\n });\n\n this._updateMapAttribution();\n }, this));\n },\n _updateMapAttribution: function(){\n if(this._map && this._map.attributionControl && this._attributions){\n var newAttributions = '';\n var bounds = this._map.getBounds();\n var zoom = this._map.getZoom();\n\n for (var i = 0; i < this._attributions.length; i++) {\n var attribution = this._attributions[i];\n var text = attribution.attribution;\n if(!newAttributions.match(text) && bounds.intersects(attribution.bounds) && zoom >= attribution.minZoom && zoom <= attribution.maxZoom) {\n newAttributions += (', ' + text);\n }\n }\n newAttributions = newAttributions.substr(2);\n var attributionElement = this._map.attributionControl._container.querySelector('.esri-attributions');\n attributionElement.innerHTML = newAttributions;\n attributionElement.style.maxWidth = (this._map.getSize().x * 0.65) + 'px';\n this.fire('attributionupdated', {\n attribution: newAttributions\n });\n }\n }\n });\n\n EsriLeaflet.BasemapLayer = EsriLeaflet.Layers.BasemapLayer;\n\n EsriLeaflet.Layers.basemapLayer = function(key, options){\n return new EsriLeaflet.Layers.BasemapLayer(key, options);\n };\n\n EsriLeaflet.basemapLayer = function(key, options){\n return new EsriLeaflet.Layers.BasemapLayer(key, options);\n };\n\n})(EsriLeaflet);","EsriLeaflet.Layers.RasterLayer = L.Class.extend({\n includes: L.Mixin.Events,\n\n options: {\n opacity: 1,\n position: 'front',\n f: 'image'\n },\n\n onAdd: function (map) {\n this._map = map;\n\n this._update = L.Util.limitExecByInterval(this._update, this.options.updateInterval, this);\n\n if (map.options.crs && map.options.crs.code) {\n var sr = map.options.crs.code.split(':')[1];\n this.options.bboxSR = sr;\n this.options.imageSR = sr;\n }\n\n map.on('moveend', this._update, this);\n\n // if we had an image loaded and it matches the\n // current bounds show the image otherwise remove it\n if(this._currentImage && this._currentImage._bounds.equals(this._map.getBounds())){\n map.addLayer(this._currentImage);\n } else if(this._currentImage) {\n this._map.removeLayer(this._currentImage);\n this._currentImage = null;\n }\n\n this._update();\n\n if(this._popup){\n this._map.on('click', this._getPopupData, this);\n this._map.on('dblclick', this._resetPopupState, this);\n }\n },\n\n bindPopup: function(fn, popupOptions){\n this._shouldRenderPopup = false;\n this._lastClick = false;\n this._popup = L.popup(popupOptions);\n this._popupFunction = fn;\n if(this._map){\n this._map.on('click', this._getPopupData, this);\n this._map.on('dblclick', this._resetPopupState, this);\n }\n return this;\n },\n\n unbindPopup: function(){\n if(this._map){\n this._map.closePopup(this._popup);\n this._map.off('click', this._getPopupData, this);\n this._map.off('dblclick', this._resetPopupState, this);\n }\n this._popup = false;\n return this;\n },\n\n onRemove: function (map) {\n if (this._currentImage) {\n this._map.removeLayer(this._currentImage);\n }\n\n if(this._popup){\n this._map.off('click', this._getPopupData, this);\n this._map.off('dblclick', this._resetPopupState, this);\n }\n\n this._map.off('moveend', this._update, this);\n this._map = null;\n },\n\n addTo: function(map){\n map.addLayer(this);\n return this;\n },\n\n removeFrom: function(map){\n map.removeLayer(this);\n return this;\n },\n\n bringToFront: function(){\n this.options.position = 'front';\n if(this._currentImage){\n this._currentImage.bringToFront();\n }\n return this;\n },\n\n bringToBack: function(){\n this.options.position = 'back';\n if(this._currentImage){\n this._currentImage.bringToBack();\n }\n return this;\n },\n\n getAttribution: function () {\n return this.options.attribution;\n },\n\n getOpacity: function(){\n return this.options.opacity;\n },\n\n setOpacity: function(opacity){\n this.options.opacity = opacity;\n this._currentImage.setOpacity(opacity);\n return this;\n },\n\n getTimeRange: function(){\n return [this.options.from, this.options.to];\n },\n\n setTimeRange: function(from, to){\n this.options.from = from;\n this.options.to = to;\n this._update();\n return this;\n },\n\n metadata: function(callback, context){\n this._service.metadata(callback, context);\n return this;\n },\n\n authenticate: function(token){\n this._service.authenticate(token);\n return this;\n },\n\n _renderImage: function(url, bounds){\n if(this._map){\n // create a new image overlay and add it to the map\n // to start loading the image\n // opacity is 0 while the image is loading\n var image = new L.ImageOverlay(url, bounds, {\n opacity: 0\n }).addTo(this._map);\n\n // once the image loads\n image.once('load', function(e){\n var newImage = e.target;\n var oldImage = this._currentImage;\n\n // if the bounds of this image matches the bounds that\n // _renderImage was called with and we have a map with the same bounds\n // hide the old image if there is one and set the opacity\n // of the new image otherwise remove the new image\n if(newImage._bounds.equals(bounds) && newImage._bounds.equals(this._map.getBounds())){\n this._currentImage = newImage;\n\n if(this.options.position === 'front'){\n this.bringToFront();\n } else {\n this.bringToBack();\n }\n\n if(this._map && this._currentImage._map){\n this._currentImage.setOpacity(this.options.opacity);\n } else {\n this._currentImage._map.removeLayer(this._currentImage);\n }\n\n if(oldImage && this._map) {\n this._map.removeLayer(oldImage);\n }\n\n if(oldImage && oldImage._map){\n oldImage._map.removeLayer(oldImage);\n }\n } else {\n this._map.removeLayer(newImage);\n }\n\n this.fire('load', {\n bounds: bounds\n });\n\n }, this);\n\n this.fire('loading', {\n bounds: bounds\n });\n }\n },\n\n _update: function () {\n if(!this._map){\n return;\n }\n\n var zoom = this._map.getZoom();\n var bounds = this._map.getBounds();\n\n if(this._animatingZoom){\n return;\n }\n\n if (this._map._panTransition && this._map._panTransition._inProgress) {\n return;\n }\n\n if (zoom > this.options.maxZoom || zoom < this.options.minZoom) {\n if (this._currentImage) {\n this._currentImage._map.removeLayer(this._currentImage);\n }\n return;\n }\n var params = this._buildExportParams();\n\n this._requestExport(params, bounds);\n },\n\n // TODO: refactor these into raster layer\n _renderPopup: function(latlng, error, results, response){\n latlng = L.latLng(latlng);\n if(this._shouldRenderPopup && this._lastClick.equals(latlng)){\n //add the popup to the map where the mouse was clicked at\n var content = this._popupFunction(error, results, response);\n if (content) {\n this._popup.setLatLng(latlng).setContent(content).openOn(this._map);\n }\n }\n },\n\n _resetPopupState: function(e){\n this._shouldRenderPopup = false;\n this._lastClick = e.latlng;\n },\n\n // from https://github.com/Leaflet/Leaflet/blob/v0.7.2/src/layer/FeatureGroup.js\n // @TODO remove at Leaflet 0.8\n _propagateEvent: function (e) {\n e = L.extend({\n layer: e.target,\n target: this\n }, e);\n this.fire(e.type, e);\n }\n});\n","EsriLeaflet.Layers.DynamicMapLayer = EsriLeaflet.Layers.RasterLayer.extend({\n\n options: {\n updateInterval: 150,\n layers: false,\n layerDefs: false,\n timeOptions: false,\n format: 'png24',\n transparent: true,\n f: 'json'\n },\n\n initialize: function (options) {\n options.url = EsriLeaflet.Util.cleanUrl(options.url);\n this._service = new EsriLeaflet.Services.MapService(options);\n this._service.on('authenticationrequired requeststart requestend requesterror requestsuccess', this._propagateEvent, this);\n if ((options.proxy || options.token) && options.f !== 'json'){\n options.f = 'json';\n }\n L.Util.setOptions(this, options);\n },\n\n getDynamicLayers: function(){\n return this.options.dynamicLayers;\n },\n\n setDynamicLayers: function(dynamicLayers){\n this.options.dynamicLayers = dynamicLayers;\n this._update();\n return this;\n },\n\n getLayers: function(){\n return this.options.layers;\n },\n\n setLayers: function(layers){\n this.options.layers = layers;\n this._update();\n return this;\n },\n\n getLayerDefs: function(){\n return this.options.layerDefs;\n },\n\n setLayerDefs: function(layerDefs){\n this.options.layerDefs = layerDefs;\n this._update();\n return this;\n },\n\n getTimeOptions: function(){\n return this.options.timeOptions;\n },\n\n setTimeOptions: function(timeOptions){\n this.options.timeOptions = timeOptions;\n this._update();\n return this;\n },\n\n query: function(){\n return this._service.query();\n },\n\n identify: function(){\n return this._service.identify();\n },\n\n find: function(){\n return this._service.find();\n },\n\n _getPopupData: function(e){\n var callback = L.Util.bind(function(error, featureCollection, response) {\n if(error) { return; } // we really can't do anything here but authenticate or requesterror will fire\n setTimeout(L.Util.bind(function(){\n this._renderPopup(e.latlng, error, featureCollection, response);\n }, this), 300);\n }, this);\n\n var identifyRequest = this.identify().on(this._map).at(e.latlng);\n\n if(this.options.layers){\n identifyRequest.layers('visible:' + this.options.layers.join(','));\n } else {\n identifyRequest.layers('visible');\n }\n\n identifyRequest.run(callback);\n\n // set the flags to show the popup\n this._shouldRenderPopup = true;\n this._lastClick = e.latlng;\n },\n\n _buildExportParams: function () {\n var bounds = this._map.getBounds();\n var size = this._map.getSize();\n var ne = this._map.options.crs.project(bounds._northEast);\n var sw = this._map.options.crs.project(bounds._southWest);\n\n //ensure that we don't ask ArcGIS Server for a taller image than we have actual map displaying\n var top = this._map.latLngToLayerPoint(bounds._northEast);\n var bottom = this._map.latLngToLayerPoint(bounds._southWest);\n\n if (top.y > 0 || bottom.y < size.y){\n size.y = bottom.y - top.y;\n }\n\n var params = {\n bbox: [sw.x, sw.y, ne.x, ne.y].join(','),\n size: size.x + ',' + size.y,\n dpi: 96,\n format: this.options.format,\n transparent: this.options.transparent,\n bboxSR: this.options.bboxSR,\n imageSR: this.options.imageSR\n };\n\n if(this.options.dynamicLayers){\n params.dynamicLayers = this.options.dynamicLayers;\n }\n\n if(this.options.layers){\n params.layers = 'show:' + this.options.layers.join(',');\n }\n\n if(this.options.layerDefs){\n params.layerDefs = JSON.stringify(this.options.layerDefs);\n }\n\n if(this.options.timeOptions){\n params.timeOptions = JSON.stringify(this.options.timeOptions);\n }\n\n if(this.options.from && this.options.to){\n params.time = this.options.from.valueOf() + ',' + this.options.to.valueOf();\n }\n\n if(this._service.options.token) {\n params.token = this._service.options.token;\n }\n\n return params;\n },\n\n _requestExport: function (params, bounds) {\n if(this.options.f === 'json'){\n this._service.request('export', params, function(error, response){\n if(error) { return; } // we really can't do anything here but authenticate or requesterror will fire\n this._renderImage(response.href, bounds);\n }, this);\n } else {\n params.f = 'image';\n this._renderImage(this.options.url + 'export' + L.Util.getParamString(params), bounds);\n }\n }\n});\n\nEsriLeaflet.DynamicMapLayer = EsriLeaflet.Layers.DynamicMapLayer;\n\nEsriLeaflet.Layers.dynamicMapLayer = function(options){\n return new EsriLeaflet.Layers.DynamicMapLayer(options);\n};\n\nEsriLeaflet.dynamicMapLayer = function(options){\n return new EsriLeaflet.Layers.DynamicMapLayer(options);\n};\n","EsriLeaflet.Layers.ImageMapLayer = EsriLeaflet.Layers.RasterLayer.extend({\n\n options: {\n updateInterval: 150,\n format: 'jpgpng',\n transparent: true,\n f: 'json'\n },\n\n query: function(){\n return this._service.query();\n },\n\n identify: function(){\n return this._service.identify();\n },\n\n initialize: function (options) {\n options.url = EsriLeaflet.Util.cleanUrl(options.url);\n this._service = new EsriLeaflet.Services.ImageService(options);\n this._service.on('authenticationrequired requeststart requestend requesterror requestsuccess', this._propagateEvent, this);\n L.Util.setOptions(this, options);\n },\n\n setPixelType: function (pixelType) {\n this.options.pixelType = pixelType;\n this._update();\n return this;\n },\n\n getPixelType: function () {\n return this.options.pixelType;\n },\n\n setBandIds: function (bandIds) {\n if (L.Util.isArray(bandIds)) {\n this.options.bandIds = bandIds.join(',');\n } else {\n this.options.bandIds = bandIds.toString();\n }\n this._update();\n return this;\n },\n\n getBandIds: function () {\n return this.options.bandIds;\n },\n\n setNoData: function (noData, noDataInterpretation) {\n if (L.Util.isArray(noData)) {\n this.options.noData = noData.join(',');\n } else {\n this.options.noData = noData.toString();\n }\n if (noDataInterpretation) {\n this.options.noDataInterpretation = noDataInterpretation;\n }\n this._update();\n return this;\n },\n\n getNoData: function () {\n return this.options.noData;\n },\n\n getNoDataInterpretation: function () {\n return this.options.noDataInterpretation;\n },\n\n setRenderingRule: function(renderingRule) {\n this.options.renderingRule = renderingRule;\n this._update();\n },\n\n getRenderingRule: function() {\n return this.options.renderingRule;\n },\n\n setMosaicRule: function(mosaicRule) {\n this.options.mosaicRule = mosaicRule;\n this._update();\n },\n\n getMosaicRule: function() {\n return this.options.mosaicRule;\n },\n\n _getPopupData: function(e){\n var callback = L.Util.bind(function(error, results, response) {\n if(error) { return; } // we really can't do anything here but authenticate or requesterror will fire\n setTimeout(L.Util.bind(function(){\n this._renderPopup(e.latlng, error, results, response);\n }, this), 300);\n }, this);\n\n var identifyRequest = this.identify().at(e.latlng);\n\n // set mosaic rule for identify task if it is set for layer\n if (this.options.mosaicRule) {\n identifyRequest.setMosaicRule(this.options.mosaicRule);\n // @TODO: force return catalog items too?\n }\n\n // @TODO: set rendering rule? Not sure,\n // sometimes you want raw pixel values\n // if (this.options.renderingRule) {\n // identifyRequest.setRenderingRule(this.options.renderingRule);\n // }\n\n identifyRequest.run(callback);\n\n // set the flags to show the popup\n this._shouldRenderPopup = true;\n this._lastClick = e.latlng;\n },\n\n _buildExportParams: function () {\n var bounds = this._map.getBounds();\n var size = this._map.getSize();\n var ne = this._map.options.crs.project(bounds._northEast);\n var sw = this._map.options.crs.project(bounds._southWest);\n\n var params = {\n bbox: [sw.x, sw.y, ne.x, ne.y].join(','),\n size: size.x + ',' + size.y,\n format: this.options.format,\n transparent: this.options.transparent,\n bboxSR: this.options.bboxSR,\n imageSR: this.options.imageSR\n };\n\n if (this.options.from && this.options.to) {\n params.time = this.options.from.valueOf() + ',' + this.options.to.valueOf();\n }\n\n if (this.options.pixelType) {\n params.pixelType = this.options.pixelType;\n }\n\n if (this.options.interpolation) {\n params.interpolation = this.options.interpolation;\n }\n\n if (this.options.compressionQuality) {\n params.compressionQuality = this.options.compressionQuality;\n }\n\n if (this.options.bandIds) {\n params.bandIds = this.options.bandIds;\n }\n\n if (this.options.noData) {\n params.noData = this.options.noData;\n }\n\n if (this.options.noDataInterpretation) {\n params.noDataInterpretation = this.options.noDataInterpretation;\n }\n\n if (this._service.options.token) {\n params.token = this._service.options.token;\n }\n\n if(this.options.renderingRule) {\n params.renderingRule = JSON.stringify(this.options.renderingRule);\n }\n\n if(this.options.mosaicRule) {\n params.mosaicRule = JSON.stringify(this.options.mosaicRule);\n }\n\n return params;\n },\n\n _requestExport: function (params, bounds) {\n if (this.options.f === 'json') {\n this._service.request('exportImage', params, function(error, response){\n if(error) { return; } // we really can't do anything here but authenticate or requesterror will fire\n this._renderImage(response.href, bounds);\n }, this);\n } else {\n params.f = 'image';\n this._renderImage(this.options.url + 'exportImage' + L.Util.getParamString(params), bounds);\n }\n }\n});\n\nEsriLeaflet.ImageMapLayer = EsriLeaflet.Layers.ImageMapLayer;\n\nEsriLeaflet.Layers.imageMapLayer = function (options) {\n return new EsriLeaflet.Layers.ImageMapLayer(options);\n};\n\nEsriLeaflet.imageMapLayer = function (options) {\n return new EsriLeaflet.Layers.ImageMapLayer(options);\n};\n","EsriLeaflet.Layers.TiledMapLayer = L.TileLayer.extend({\n options: {\n zoomOffsetAllowance: 0.1,\n correctZoomLevels: true\n },\n\n statics: {\n MercatorZoomLevels: {\n '0':156543.03392799999,\n '1':78271.516963999893,\n '2':39135.758482000099,\n '3':19567.879240999901,\n '4':9783.9396204999593,\n '5':4891.9698102499797,\n '6':2445.9849051249898,\n '7':1222.9924525624899,\n '8':611.49622628138002,\n '9':305.74811314055802,\n '10':152.874056570411,\n '11':76.437028285073197,\n '12':38.218514142536598,\n '13':19.109257071268299,\n '14':9.5546285356341496,\n '15':4.7773142679493699,\n '16':2.38865713397468,\n '17':1.1943285668550501,\n '18':0.59716428355981699,\n '19':0.29858214164761698,\n '20':0.14929107082381,\n '21':0.07464553541191,\n '22':0.0373227677059525,\n '23':0.0186613838529763\n }\n },\n\n initialize: function(options){\n options.url = EsriLeaflet.Util.cleanUrl(options.url);\n options = L.Util.setOptions(this, options);\n\n // set the urls\n //this.url = L.esri.Util.cleanUrl(url);\n this.tileUrl = L.esri.Util.cleanUrl(options.url) + 'tile/{z}/{y}/{x}';\n this._service = new L.esri.Services.MapService(options);\n this._service.on('authenticationrequired requeststart requestend requesterror requestsuccess', this._propagateEvent, this);\n\n //if this is looking at the AGO tiles subdomain insert the subdomain placeholder\n if(this.tileUrl.match('://tiles.arcgisonline.com')){\n this.tileUrl = this.tileUrl.replace('://tiles.arcgisonline.com', '://tiles{s}.arcgisonline.com');\n options.subdomains = ['1', '2', '3', '4'];\n }\n\n if(this.options.token) {\n this.tileUrl += ('?token=' + this.options.token);\n }\n\n // init layer by calling TileLayers initialize method\n L.TileLayer.prototype.initialize.call(this, this.tileUrl, options);\n },\n\n getTileUrl: function (tilePoint) {\n return L.Util.template(this.tileUrl, L.extend({\n s: this._getSubdomain(tilePoint),\n z: this._lodMap[tilePoint.z] || tilePoint.z, // try lod map first, then just defualt to zoom level\n x: tilePoint.x,\n y: tilePoint.y\n }, this.options));\n },\n\n onAdd: function(map){\n if (!this._lodMap && this.options.correctZoomLevels) {\n this._lodMap = {}; // make sure we always have an lod map even if its empty\n this.metadata(function(error, metadata) {\n if(!error) {\n var sr = metadata.spatialReference.latestWkid || metadata.spatialReference.wkid;\n\n if (sr === 102100 || sr === 3857) {\n //create the zoom level data\n var arcgisLODs = metadata.tileInfo.lods;\n var correctResolutions = EsriLeaflet.Layers.TiledMapLayer.MercatorZoomLevels;\n\n for(var i = 0; i < arcgisLODs.length; i++) {\n var arcgisLOD = arcgisLODs[i];\n for(var ci in correctResolutions) {\n var correctRes = correctResolutions[ci];\n\n if(this._withinPercentage(arcgisLOD.resolution, correctRes, this.options.zoomOffsetAllowance)) {\n this._lodMap[ci] = arcgisLOD.level;\n break;\n }\n }\n }\n } else {\n EsriLeaflet.Util.warn('L.esri.TiledMapLayer is using a non-mercator spatial reference. Support may be available through Proj4Leaflet http://esri.github.io/esri-leaflet/examples/non-mercator-projection.html');\n }\n }\n\n L.TileLayer.prototype.onAdd.call(this, map);\n }, this);\n } else {\n L.TileLayer.prototype.onAdd.call(this, map);\n }\n },\n\n metadata: function(callback, context){\n this._service.metadata(callback, context);\n return this;\n },\n\n identify: function(){\n return this._service.identify();\n },\n\n authenticate: function(token){\n var tokenQs = '?token=' + token;\n this.tileUrl = (this.options.token) ? this.tileUrl.replace(/\\?token=(.+)/g, tokenQs) : this.tileUrl + tokenQs;\n this.options.token = token;\n this._service.authenticate(token);\n return this;\n },\n\n // from https://github.com/Leaflet/Leaflet/blob/v0.7.2/src/layer/FeatureGroup.js\n // @TODO remove at Leaflet 0.8\n _propagateEvent: function (e) {\n e = L.extend({\n layer: e.target,\n target: this\n }, e);\n this.fire(e.type, e);\n },\n\n _withinPercentage: function (a, b, percentage) {\n var diff = Math.abs((a/b) - 1);\n return diff < percentage;\n }\n});\n\nL.esri.TiledMapLayer = L.esri.Layers.tiledMapLayer;\n\nL.esri.Layers.tiledMapLayer = function(options){\n return new L.esri.Layers.TiledMapLayer(options);\n};\n\nL.esri.tiledMapLayer = function(options){\n return new L.esri.Layers.TiledMapLayer(options);\n};\n","EsriLeaflet.Layers.FeatureGrid = L.Class.extend({\n\n includes: L.Mixin.Events,\n\n options: {\n cellSize: 512,\n updateInterval: 150\n },\n\n initialize: function (options) {\n options = L.setOptions(this, options);\n },\n\n onAdd: function (map) {\n this._map = map;\n this._update = L.Util.limitExecByInterval(this._update, this.options.updateInterval, this);\n\n // @TODO remove for leaflet 0.8\n this._map.addEventListener(this.getEvents(), this);\n\n this._reset();\n this._update();\n },\n\n onRemove: function(){\n this._map.removeEventListener(this.getEvents(), this);\n this._removeCells();\n },\n\n getEvents: function () {\n var events = {\n viewreset: this._reset,\n moveend: this._update,\n zoomend : this._onZoom\n };\n\n return events;\n },\n\n addTo: function(map){\n map.addLayer(this);\n return this;\n },\n\n removeFrom: function(map){\n map.removeLayer(this);\n return this;\n },\n\n _onZoom : function () {\n var zoom = this._map.getZoom();\n\n if (zoom > this.options.maxZoom ||\n zoom < this.options.minZoom) {\n this.removeFrom(this._map);\n this._map.addEventListener('zoomend', this.getEvents().zoomend, this);\n } else if (!this._map.hasLayer(this)) {\n this._map.removeEventListener('zoomend', this.getEvents().zoomend, this);\n this.addTo(this._map);\n }\n\n },\n\n _reset: function () {\n this._removeCells();\n\n this._cells = {};\n this._activeCells = {};\n this._cellsToLoad = 0;\n this._cellsTotal = 0;\n\n // @TODO enable at Leaflet 0.8\n // this._cellNumBounds = this._getCellNumBounds();\n\n this._resetWrap();\n },\n\n _resetWrap: function () {\n var map = this._map,\n crs = map.options.crs;\n\n if (crs.infinite) { return; }\n\n var cellSize = this._getCellSize();\n\n if (crs.wrapLng) {\n this._wrapLng = [\n Math.floor(map.project([0, crs.wrapLng[0]]).x / cellSize),\n Math.ceil(map.project([0, crs.wrapLng[1]]).x / cellSize)\n ];\n }\n\n if (crs.wrapLat) {\n this._wrapLat = [\n Math.floor(map.project([crs.wrapLat[0], 0]).y / cellSize),\n Math.ceil(map.project([crs.wrapLat[1], 0]).y / cellSize)\n ];\n }\n },\n\n _getCellSize: function () {\n return this.options.cellSize;\n },\n\n _update: function () {\n if (!this._map) { return; }\n\n var bounds = this._map.getPixelBounds(),\n zoom = this._map.getZoom(),\n cellSize = this._getCellSize(),\n cellPadding = [cellSize/2,cellSize/2];\n // cellPadding = [0,0]\n\n if (zoom > this.options.maxZoom ||\n zoom < this.options.minZoom) { return; }\n\n // cell coordinates range for the current view\n var topLeft = bounds.min.subtract(cellPadding).divideBy(cellSize).floor();\n topLeft.x = Math.max(topLeft.x, 0);\n topLeft.y = Math.max(topLeft.y, 0);\n\n var cellBounds = L.bounds(topLeft, bounds.max.add(cellPadding).divideBy(cellSize).floor());\n\n // remove any present cells that are off the specified bounds\n this._removeOtherCells(cellBounds);\n this._addCells(cellBounds);\n },\n\n _addCells: function (bounds) {\n var queue = [],\n center = bounds.getCenter(),\n zoom = this._map.getZoom();\n\n var j, i, coords;\n // create a queue of coordinates to load cells from\n for (j = bounds.min.y; j <= bounds.max.y; j++) {\n for (i = bounds.min.x; i <= bounds.max.x; i++) {\n coords = new L.Point(i, j);\n coords.z = zoom;\n\n // @TODO enable at Leaflet 0.8\n // if (this._isValidCell(coords)) {\n // queue.push(coords);\n // }\n\n queue.push(coords);\n }\n }\n var cellsToLoad = queue.length;\n\n if (cellsToLoad === 0) { return; }\n\n this._cellsToLoad += cellsToLoad;\n this._cellsTotal += cellsToLoad;\n\n // sort cell queue to load cells in order of their distance to center\n queue.sort(function (a, b) {\n return a.distanceTo(center) - b.distanceTo(center);\n });\n\n for (i = 0; i < cellsToLoad; i++) {\n this._addCell(queue[i]);\n }\n },\n\n // @TODO enable at Leaflet 0.8\n // _isValidCell: function (coords) {\n // var crs = this._map.options.crs;\n\n // if (!crs.infinite) {\n // // don't load cell if it's out of bounds and not wrapped\n // var bounds = this._cellNumBounds;\n // if (\n // (!crs.wrapLng && (coords.x < bounds.min.x || coords.x > bounds.max.x)) ||\n // (!crs.wrapLat && (coords.y < bounds.min.y || coords.y > bounds.max.y))\n // ) {\n // return false;\n // }\n // }\n\n // if (!this.options.bounds) {\n // return true;\n // }\n\n // // don't load cell if it doesn't intersect the bounds in options\n // var cellBounds = this._cellCoordsToBounds(coords);\n // return L.latLngBounds(this.options.bounds).intersects(cellBounds);\n // },\n\n // converts cell coordinates to its geographical bounds\n _cellCoordsToBounds: function (coords) {\n var map = this._map,\n cellSize = this.options.cellSize,\n\n nwPoint = coords.multiplyBy(cellSize),\n sePoint = nwPoint.add([cellSize, cellSize]),\n\n // @TODO for Leaflet 0.8\n // nw = map.wrapLatLng(map.unproject(nwPoint, coords.z)),\n // se = map.wrapLatLng(map.unproject(sePoint, coords.z));\n\n nw = map.unproject(nwPoint, coords.z).wrap(),\n se = map.unproject(sePoint, coords.z).wrap();\n\n return new L.LatLngBounds(nw, se);\n },\n\n // converts cell coordinates to key for the cell cache\n _cellCoordsToKey: function (coords) {\n return coords.x + ':' + coords.y;\n },\n\n // converts cell cache key to coordiantes\n _keyToCellCoords: function (key) {\n var kArr = key.split(':'),\n x = parseInt(kArr[0], 10),\n y = parseInt(kArr[1], 10);\n\n return new L.Point(x, y);\n },\n\n // remove any present cells that are off the specified bounds\n _removeOtherCells: function (bounds) {\n for (var key in this._cells) {\n if (!bounds.contains(this._keyToCellCoords(key))) {\n this._removeCell(key);\n }\n }\n },\n\n _removeCell: function (key) {\n var cell = this._activeCells[key];\n if(cell){\n delete this._activeCells[key];\n\n if (this.cellLeave) {\n this.cellLeave(cell.bounds, cell.coords);\n }\n\n this.fire('cellleave', {\n bounds: cell.bounds,\n coords: cell.coords\n });\n }\n },\n\n _removeCells: function(){\n for (var key in this._cells) {\n var bounds = this._cells[key].bounds;\n var coords = this._cells[key].coords;\n\n if (this.cellLeave) {\n this.cellLeave(bounds, coords);\n }\n\n this.fire('cellleave', {\n bounds: bounds,\n coords: coords\n });\n }\n },\n\n _addCell: function (coords) {\n\n // wrap cell coords if necessary (depending on CRS)\n this._wrapCoords(coords);\n\n // generate the cell key\n var key = this._cellCoordsToKey(coords);\n\n // get the cell from the cache\n var cell = this._cells[key];\n // if this cell should be shown as isnt active yet (enter)\n\n if (cell && !this._activeCells[key]) {\n if (this.cellEnter) {\n this.cellEnter(cell.bounds, coords);\n }\n\n this.fire('cellenter', {\n bounds: cell.bounds,\n coords: coords\n });\n\n this._activeCells[key] = cell;\n }\n\n // if we dont have this cell in the cache yet (create)\n if (!cell) {\n cell = {\n coords: coords,\n bounds: this._cellCoordsToBounds(coords)\n };\n\n this._cells[key] = cell;\n this._activeCells[key] = cell;\n\n if(this.createCell){\n this.createCell(cell.bounds, coords);\n }\n\n this.fire('cellcreate', {\n bounds: cell.bounds,\n coords: coords\n });\n }\n },\n\n _wrapCoords: function (coords) {\n coords.x = this._wrapLng ? L.Util.wrapNum(coords.x, this._wrapLng) : coords.x;\n coords.y = this._wrapLat ? L.Util.wrapNum(coords.y, this._wrapLat) : coords.y;\n }\n\n // get the global cell coordinates range for the current zoom\n // @TODO enable at Leaflet 0.8\n // _getCellNumBounds: function () {\n // // @TODO for Leaflet 0.8\n // // var bounds = this._map.getPixelWorldBounds(),\n // // size = this._getCellSize();\n // //\n // // return bounds ? L.bounds(\n // // bounds.min.divideBy(size).floor(),\n // // bounds.max.divideBy(size).ceil().subtract([1, 1])) : null;\n // }\n\n});","(function(EsriLeaflet){\n\n EsriLeaflet.Layers.FeatureManager = EsriLeaflet.Layers.FeatureGrid.extend({\n\n /**\n * Options\n */\n\n options: {\n where: '1=1',\n fields: ['*'],\n from: false,\n to: false,\n timeField: false,\n timeFilterMode: 'server',\n simplifyFactor: 0,\n precision: 6\n },\n\n /**\n * Constructor\n */\n\n initialize: function (options) {\n EsriLeaflet.Layers.FeatureGrid.prototype.initialize.call(this, options);\n\n options.url = EsriLeaflet.Util.cleanUrl(options.url);\n options = L.setOptions(this, options);\n\n this._service = new EsriLeaflet.Services.FeatureLayerService(options);\n\n //use case insensitive regex to look for common fieldnames used for indexing\n /*global console */\n if (this.options.fields[0] !== '*'){\n var oidCheck = false;\n for (var i = 0; i < this.options.fields.length; i++){\n if (this.options.fields[i].match(/^(OBJECTID|FID|OID|ID)$/i)){\n oidCheck = true;\n }\n }\n if (oidCheck === false) {\n EsriLeaflet.Util.warn('no known esriFieldTypeOID field detected in fields Array. Please add an attribute field containing unique IDs to ensure the layer can be drawn correctly.');\n }\n }\n\n // Leaflet 0.8 change to new propagation\n this._service.on('authenticationrequired requeststart requestend requesterror requestsuccess', function (e) {\n e = L.extend({\n target: this\n }, e);\n this.fire(e.type, e);\n }, this);\n\n if(this.options.timeField.start && this.options.timeField.end){\n this._startTimeIndex = new BinarySearchIndex();\n this._endTimeIndex = new BinarySearchIndex();\n } else if(this.options.timeField){\n this._timeIndex = new BinarySearchIndex();\n }\n\n this._cache = {};\n this._currentSnapshot = []; // cache of what layers should be active\n this._activeRequests = 0;\n this._pendingRequests = [];\n },\n\n /**\n * Layer Interface\n */\n\n onAdd: function(map){\n return EsriLeaflet.Layers.FeatureGrid.prototype.onAdd.call(this, map);\n },\n\n onRemove: function(map){\n return EsriLeaflet.Layers.FeatureGrid.prototype.onRemove.call(this, map);\n },\n\n getAttribution: function () {\n return this.options.attribution;\n },\n\n /**\n * Feature Managment\n */\n\n createCell: function(bounds, coords){\n this._requestFeatures(bounds, coords);\n },\n\n _requestFeatures: function(bounds, coords, callback){\n this._activeRequests++;\n\n // our first active request fires loading\n if(this._activeRequests === 1){\n this.fire('loading', {\n bounds: bounds\n });\n }\n\n this._buildQuery(bounds).run(function(error, featureCollection, response){\n if(response && response.exceededTransferLimit){\n this.fire('drawlimitexceeded');\n }\n\n // no error, features\n if(!error && featureCollection && featureCollection.features.length && !this._removed){\n // schedule adding features until the next animation frame\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){\n this._addFeatures(featureCollection.features, coords);\n this._postProcessFeatures(bounds);\n }, this));\n }\n\n // no error, no features\n if (!error && featureCollection && !featureCollection.features.length) {\n this._postProcessFeatures(bounds);\n }\n\n if(callback){\n callback.call(this, error, featureCollection);\n }\n }, this);\n },\n\n _postProcessFeatures: function (bounds) {\n //deincriment the request counter now that we have processed features\n this._activeRequests--;\n\n // if there are no more active requests fire a load event for this view\n if(this._activeRequests <= 0){\n this.fire('load', {\n bounds: bounds\n });\n }\n },\n\n _cacheKey: function (coords){\n return coords.z + ':' + coords.x + ':' +coords.y;\n },\n\n _addFeatures: function(features, coords){\n var key = this._cacheKey(coords);\n this._cache[key] = this._cache[key] || [];\n\n for (var i = features.length - 1; i >= 0; i--) {\n var id = features[i].id;\n this._currentSnapshot.push(id);\n this._cache[key].push(id);\n /*\n should we refactor the code in FeatureManager.setWhere()\n so that we can reuse it to make sure that we remove features\n on the client that are removed from the service?\n */\n\n }\n\n if(this.options.timeField){\n this._buildTimeIndexes(features);\n }\n\n var zoom = this._map.getZoom();\n\n if (zoom > this.options.maxZoom ||\n zoom < this.options.minZoom) { return; }\n\n this.createLayers(features);\n },\n\n _buildQuery: function(bounds){\n var query = this._service.query()\n .intersects(bounds)\n .where(this.options.where)\n .fields(this.options.fields)\n .precision(this.options.precision);\n\n if(this.options.simplifyFactor){\n query.simplify(this._map, this.options.simplifyFactor);\n }\n\n if(this.options.timeFilterMode === 'server' && this.options.from && this.options.to){\n query.between(this.options.from, this.options.to);\n }\n\n return query;\n },\n\n /**\n * Where Methods\n */\n\n setWhere: function(where, callback, context){\n\n this.options.where = (where && where.length) ? where : '1=1';\n\n var oldSnapshot = [];\n var newSnapshot = [];\n var pendingRequests = 0;\n var mostRecentError = null;\n var requestCallback = L.Util.bind(function(error, featureCollection){\n pendingRequests--;\n\n if(error) {\n mostRecentError = error;\n }\n\n if(featureCollection){\n for (var i = featureCollection.features.length - 1; i >= 0; i--) {\n newSnapshot.push(featureCollection.features[i].id);\n }\n }\n\n if(pendingRequests <= 0) {\n this._currentSnapshot = newSnapshot;\n // delay adding features until the next animation frame\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function() {\n this.removeLayers(oldSnapshot);\n this.addLayers(newSnapshot);\n if(callback) {\n callback.call(context, mostRecentError);\n }\n }, this));\n }\n }, this);\n\n for (var i = this._currentSnapshot.length - 1; i >= 0; i--) {\n oldSnapshot.push(this._currentSnapshot[i]);\n }\n\n for(var key in this._activeCells){\n pendingRequests++;\n var coords = this._keyToCellCoords(key);\n var bounds = this._cellCoordsToBounds(coords);\n this._requestFeatures(bounds, key, requestCallback);\n }\n\n return this;\n },\n\n getWhere: function(){\n return this.options.where;\n },\n\n /**\n * Time Range Methods\n */\n\n getTimeRange: function(){\n return [this.options.from, this.options.to];\n },\n\n setTimeRange: function(from, to, callback, context){\n var oldFrom = this.options.from;\n var oldTo = this.options.to;\n var pendingRequests = 0;\n var mostRecentError = null;\n var requestCallback = L.Util.bind(function(error){\n if(error){\n mostRecentError = error;\n }\n\n this._filterExistingFeatures(oldFrom, oldTo, from, to);\n\n pendingRequests--;\n\n if(callback && pendingRequests <= 0){\n callback.call(context, mostRecentError);\n }\n }, this);\n\n this.options.from = from;\n this.options.to = to;\n\n this._filterExistingFeatures(oldFrom, oldTo, from, to);\n\n if(this.options.timeFilterMode === 'server') {\n for(var key in this._activeCells){\n pendingRequests++;\n var coords = this._keyToCellCoords(key);\n var bounds = this._cellCoordsToBounds(coords);\n this._requestFeatures(bounds, key, requestCallback);\n }\n }\n },\n\n refresh: function(){\n for(var key in this._activeCells){\n var coords = this._keyToCellCoords(key);\n var bounds = this._cellCoordsToBounds(coords);\n this._requestFeatures(bounds, key);\n }\n\n if(this.redraw){\n this.once('load', function(){\n this.eachFeature(function(layer){\n this._redraw(layer.feature.id);\n }, this);\n }, this);\n }\n },\n\n _filterExistingFeatures: function (oldFrom, oldTo, newFrom, newTo) {\n var layersToRemove = (oldFrom && oldTo) ? this._getFeaturesInTimeRange(oldFrom, oldTo) : this._currentSnapshot;\n var layersToAdd = this._getFeaturesInTimeRange(newFrom, newTo);\n\n if(layersToAdd.indexOf){\n for (var i = 0; i < layersToAdd.length; i++) {\n var shouldRemoveLayer = layersToRemove.indexOf(layersToAdd[i]);\n if(shouldRemoveLayer >= 0){\n layersToRemove.splice(shouldRemoveLayer, 1);\n }\n }\n }\n\n // schedule adding features until the next animation frame\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){\n this.removeLayers(layersToRemove);\n this.addLayers(layersToAdd);\n }, this));\n },\n\n _getFeaturesInTimeRange: function(start, end){\n var ids = [];\n var search;\n\n if(this.options.timeField.start && this.options.timeField.end){\n var startTimes = this._startTimeIndex.between(start, end);\n var endTimes = this._endTimeIndex.between(start, end);\n search = startTimes.concat(endTimes);\n } else {\n search = this._timeIndex.between(start, end);\n }\n\n for (var i = search.length - 1; i >= 0; i--) {\n ids.push(search[i].id);\n }\n\n return ids;\n },\n\n _buildTimeIndexes: function(geojson){\n var i;\n var feature;\n if(this.options.timeField.start && this.options.timeField.end){\n var startTimeEntries = [];\n var endTimeEntries = [];\n for (i = geojson.length - 1; i >= 0; i--) {\n feature = geojson[i];\n startTimeEntries.push( {\n id: feature.id,\n value: new Date(feature.properties[this.options.timeField.start])\n });\n endTimeEntries.push( {\n id: feature.id,\n value: new Date(feature.properties[this.options.timeField.end])\n });\n }\n this._startTimeIndex.bulkAdd(startTimeEntries);\n this._endTimeIndex.bulkAdd(endTimeEntries);\n } else {\n var timeEntries = [];\n for (i = geojson.length - 1; i >= 0; i--) {\n feature = geojson[i];\n timeEntries.push( {\n id: feature.id,\n value: new Date(feature.properties[this.options.timeField])\n });\n }\n\n this._timeIndex.bulkAdd(timeEntries);\n }\n },\n\n _featureWithinTimeRange: function(feature){\n if(!this.options.from || !this.options.to){\n return true;\n }\n\n var from = +this.options.from.valueOf();\n var to = +this.options.to.valueOf();\n\n if(typeof this.options.timeField === 'string'){\n var date = +feature.properties[this.options.timeField];\n return (date >= from) && (date <= to);\n }\n\n if(this.options.timeField.start && this.options.timeField.end){\n var startDate = +feature.properties[this.options.timeField.start];\n var endDate = +feature.properties[this.options.timeField.end];\n return ((startDate >= from) && (startDate <= to)) || ((endDate >= from) && (endDate <= to));\n }\n },\n\n /**\n * Service Methods\n */\n\n authenticate: function(token){\n this._service.authenticate(token);\n return this;\n },\n\n metadata: function(callback, context){\n this._service.metadata(callback, context);\n return this;\n },\n\n query: function(){\n return this._service.query();\n },\n\n _getMetadata: function(callback){\n if(this._metadata){\n var error;\n callback(error, this._metadata);\n } else {\n this.metadata(L.Util.bind(function(error, response) {\n this._metadata = response;\n callback(error, this._metadata);\n }, this));\n }\n },\n\n addFeature: function(feature, callback, context){\n this._getMetadata(L.Util.bind(function(error, metadata){\n this._service.addFeature(feature, L.Util.bind(function(error, response){\n if(!error){\n // assign ID from result to appropriate objectid field from service metadata\n feature.properties[metadata.objectIdField] = response.objectId;\n\n // we also need to update the geojson id for createLayers() to function\n feature.id = response.objectId;\n this.createLayers([feature]);\n }\n\n if(callback){\n callback.call(context, error, response);\n }\n }, this));\n }, this));\n },\n\n updateFeature: function(feature, callback, context){\n this._service.updateFeature(feature, function(error, response){\n if(!error){\n this.removeLayers([feature.id], true);\n this.createLayers([feature]);\n }\n\n if(callback){\n callback.call(context, error, response);\n }\n }, this);\n },\n\n deleteFeature: function(id, callback, context){\n this._service.deleteFeature(id, function(error, response){\n if(!error && response.objectId){\n this.removeLayers([response.objectId], true);\n }\n\n if(callback){\n callback.call(context, error, response);\n }\n }, this);\n },\n\n deleteFeatures: function(ids, callback, context){\n return this._service.deleteFeatures(ids, function(error, response){\n if(!error && response.length > 0){\n for (var i=0; i +query) {\n maxIndex = currentIndex - 1;\n } else {\n return currentIndex;\n }\n }\n\n return ~maxIndex;\n };\n\n BinarySearchIndex.prototype.sort = function(){\n this.values.sort(function(a, b) {\n return +b.value - +a.value;\n }).reverse();\n this.dirty = false;\n };\n\n BinarySearchIndex.prototype.between = function(start, end){\n if(this.dirty){\n this.sort();\n }\n\n var startIndex = this._query(start);\n var endIndex = this._query(end);\n\n if(startIndex === 0 && endIndex === 0){\n return [];\n }\n\n startIndex = Math.abs(startIndex);\n endIndex = (endIndex < 0) ? Math.abs(endIndex): endIndex + 1;\n\n return this.values.slice(startIndex, endIndex);\n };\n\n BinarySearchIndex.prototype.bulkAdd = function(items){\n this.dirty = true;\n this.values = this.values.concat(items);\n };\n\n})(EsriLeaflet);\n","EsriLeaflet.Layers.FeatureLayer = EsriLeaflet.Layers.FeatureManager.extend({\n\n statics: {\n EVENTS: 'click dblclick mouseover mouseout mousemove contextmenu popupopen popupclose'\n },\n\n options: {\n cacheLayers: true\n },\n\n /**\n * Constructor\n */\n\n initialize: function (options) {\n EsriLeaflet.Layers.FeatureManager.prototype.initialize.call(this, options);\n\n options = L.setOptions(this, options);\n\n this._layers = {};\n this._leafletIds = {};\n this._key = 'c'+(Math.random() * 1e9).toString(36).replace('.', '_');\n },\n\n /**\n * Layer Interface\n */\n\n onAdd: function(map){\n map.on('zoomstart zoomend', function(e){\n this._zooming = (e.type === 'zoomstart');\n }, this);\n this._removed = false;\n\n return EsriLeaflet.Layers.FeatureManager.prototype.onAdd.call(this, map);\n },\n\n onRemove: function(map){\n this._removed = true;\n for (var i in this._layers) {\n map.removeLayer(this._layers[i]);\n }\n\n return EsriLeaflet.Layers.FeatureManager.prototype.onRemove.call(this, map);\n },\n\n createNewLayer: function(geojson){\n // @TODO Leaflet 0.8\n //newLayer = L.GeoJSON.geometryToLayer(geojson, this.options);\n return L.GeoJSON.geometryToLayer(geojson, this.options.pointToLayer, L.GeoJSON.coordsToLatLng, this.options);\n },\n\n _updateLayer: function(layer, geojson){\n // convert the geojson coordinates into a Leaflet LatLng array/nested arrays\n // pass it to setLatLngs to update layer geometries\n var latlngs = [];\n var coordsToLatLng = this.options.coordsToLatLng || L.GeoJSON.coordsToLatLng;\n\n // copy new attributes, if present\n if (geojson.properties) {\n layer.feature.properties = geojson.properties;\n }\n\n switch(geojson.geometry.type){\n case 'Point':\n latlngs = L.GeoJSON.coordsToLatLng(geojson.geometry.coordinates);\n layer.setLatLng(latlngs);\n break;\n case 'LineString':\n latlngs = L.GeoJSON.coordsToLatLngs(geojson.geometry.coordinates, 0, coordsToLatLng);\n layer.setLatLngs(latlngs);\n break;\n case 'MultiLineString':\n latlngs = L.GeoJSON.coordsToLatLngs(geojson.geometry.coordinates, 1, coordsToLatLng);\n layer.setLatLngs(latlngs);\n break;\n case 'Polygon':\n latlngs = L.GeoJSON.coordsToLatLngs(geojson.geometry.coordinates, 1, coordsToLatLng);\n layer.setLatLngs(latlngs);\n break;\n case 'MultiPolygon':\n latlngs = L.GeoJSON.coordsToLatLngs(geojson.geometry.coordinates, 2, coordsToLatLng);\n layer.setLatLngs(latlngs);\n break;\n }\n },\n\n /**\n * Feature Management Methods\n */\n\n createLayers: function(features){\n for (var i = features.length - 1; i >= 0; i--) {\n\n var geojson = features[i];\n\n var layer = this._layers[geojson.id];\n var newLayer;\n\n if(layer && !this._map.hasLayer(layer)){\n this._map.addLayer(layer);\n }\n\n // update geomerty if neccessary\n if (layer && (layer.setLatLngs || layer.setLatLng)) {\n this._updateLayer(layer, geojson);\n }\n\n\n if(!layer){\n newLayer = this.createNewLayer(geojson);\n newLayer.feature = geojson;\n\n if (this.options.style) {\n newLayer._originalStyle = this.options.style;\n }\n\n // circleMarker check\n else if (newLayer.setStyle) {\n newLayer._originalStyle = newLayer.options;\n }\n\n newLayer._leaflet_id = this._key + '_' + geojson.id;\n\n this._leafletIds[newLayer._leaflet_id] = geojson.id;\n\n // bubble events from layers to this\n // @TODO Leaflet 0.8\n // newLayer.addEventParent(this);\n\n newLayer.on(EsriLeaflet.Layers.FeatureLayer.EVENTS, this._propagateEvent, this);\n\n // bind a popup if we have one\n if(this._popup && newLayer.bindPopup){\n newLayer.bindPopup(this._popup(newLayer.feature, newLayer), this._popupOptions);\n }\n\n if(this.options.onEachFeature){\n this.options.onEachFeature(newLayer.feature, newLayer);\n }\n\n // cache the layer\n this._layers[newLayer.feature.id] = newLayer;\n\n // style the layer\n this.resetStyle(newLayer.feature.id);\n\n this.fire('createfeature', {\n feature: newLayer.feature\n });\n\n // add the layer if it is within the time bounds or our layer is not time enabled\n if(!this.options.timeField || (this.options.timeField && this._featureWithinTimeRange(geojson)) ){\n this._map.addLayer(newLayer);\n }\n }\n }\n },\n\n addLayers: function(ids){\n for (var i = ids.length - 1; i >= 0; i--) {\n var layer = this._layers[ids[i]];\n if(layer){\n this.fire('addfeature', {\n feature: layer.feature\n });\n this._map.addLayer(layer);\n }\n }\n },\n\n removeLayers: function(ids, permanent){\n for (var i = ids.length - 1; i >= 0; i--) {\n var id = ids[i];\n var layer = this._layers[id];\n if(layer){\n this.fire('removefeature', {\n feature: layer.feature,\n permanent: permanent\n });\n this._map.removeLayer(layer);\n }\n if(layer && permanent){\n delete this._layers[id];\n }\n }\n },\n\n cellEnter: function(bounds, coords){\n if(!this._zooming){\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){\n var cacheKey = this._cacheKey(coords);\n var cellKey = this._cellCoordsToKey(coords);\n var layers = this._cache[cacheKey];\n if(this._activeCells[cellKey] && layers){\n this.addLayers(layers);\n }\n }, this));\n }\n },\n\n cellLeave: function(bounds, coords){\n if(!this._zooming){\n EsriLeaflet.Util.requestAnimationFrame(L.Util.bind(function(){\n var cacheKey = this._cacheKey(coords);\n var cellKey = this._cellCoordsToKey(coords);\n var layers = this._cache[cacheKey];\n var mapBounds = this._map.getBounds();\n if(!this._activeCells[cellKey] && layers){\n var removable = true;\n\n for (var i = 0; i < layers.length; i++) {\n var layer = this._layers[layers[i]];\n if(layer && layer.getBounds && mapBounds.intersects(layer.getBounds())){\n removable = false;\n }\n }\n\n if(removable){\n this.removeLayers(layers, !this.options.cacheLayers);\n }\n\n if(!this.options.cacheLayers && removable){\n delete this._cache[cacheKey];\n delete this._cells[cellKey];\n delete this._activeCells[cellKey];\n }\n }\n }, this));\n }\n },\n\n /**\n * Styling Methods\n */\n\n resetStyle: function (id) {\n var layer = this._layers[id];\n\n if(layer){\n this.setFeatureStyle(layer.feature.id, layer._originalStyle);\n }\n\n return this;\n },\n\n setStyle: function (style) {\n this.options.style = style;\n this.eachFeature(function (layer) {\n this.setFeatureStyle(layer.feature.id, style);\n }, this);\n return this;\n },\n\n setFeatureStyle: function (id, style) {\n var layer = this._layers[id];\n\n if (typeof style === 'function') {\n style = style(layer.feature);\n }\n\n if (!style && !layer.defaultOptions) {\n style = L.Path.prototype.options;\n style.fill = true; //not set by default\n }\n\n if (layer && layer.setStyle) {\n layer.setStyle(style);\n }\n\n return this;\n },\n\n /**\n * Popup Methods\n */\n\n bindPopup: function (fn, options) {\n this._popup = fn;\n this._popupOptions = options;\n for (var i in this._layers) {\n var layer = this._layers[i];\n var popupContent = this._popup(layer.feature, layer);\n layer.bindPopup(popupContent, options);\n }\n return this;\n },\n\n unbindPopup: function () {\n this._popup = false;\n for (var i in this._layers) {\n var layer = this._layers[i];\n if (layer.unbindPopup) {\n layer.unbindPopup();\n } else if (layer.getLayers) {\n var groupLayers = layer.getLayers();\n for (var j in groupLayers) {\n var gLayer = groupLayers[j];\n gLayer.unbindPopup();\n }\n }\n }\n return this;\n },\n\n /**\n * Utility Methods\n */\n\n eachFeature: function (fn, context) {\n for (var i in this._layers) {\n fn.call(context, this._layers[i]);\n }\n return this;\n },\n\n getFeature: function (id) {\n return this._layers[id];\n },\n\n bringToBack: function () {\n this.eachFeature(function (layer) {\n if(layer.bringToBack) {\n layer.bringToBack();\n }\n });\n },\n\n bringToFront: function () {\n this.eachFeature(function (layer) {\n if(layer.bringToFront) {\n layer.bringToFront();\n }\n });\n },\n\n redraw: function (id) {\n if (id) {\n this._redraw(id);\n }\n return this;\n },\n\n _redraw: function(id) {\n var layer = this._layers[id];\n var geojson = layer.feature;\n\n // if this looks like a marker\n if (layer && layer.setIcon && this.options.pointToLayer) {\n // update custom symbology, if necessary\n if (this.options.pointToLayer){\n var getIcon = this.options.pointToLayer(geojson, L.latLng(geojson.geometry.coordinates[1], geojson.geometry.coordinates[0]));\n var updatedIcon = getIcon.options.icon;\n layer.setIcon(updatedIcon);\n }\n }\n\n // looks like a vector marker (circleMarker)\n if (layer && layer.setStyle && this.options.pointToLayer) {\n var getStyle = this.options.pointToLayer(geojson, L.latLng(geojson.geometry.coordinates[1], geojson.geometry.coordinates[0]));\n var updatedStyle = getStyle.options;\n this.setFeatureStyle(geojson.id, updatedStyle);\n }\n\n // looks like a path (polygon/polyline)\n if(layer && layer.setStyle && this.options.style) {\n this.resetStyle(geojson.id);\n }\n },\n\n // from https://github.com/Leaflet/Leaflet/blob/v0.7.2/src/layer/FeatureGroup.js\n // @TODO remove at Leaflet 0.8\n _propagateEvent: function (e) {\n e.layer = this._layers[this._leafletIds[e.target._leaflet_id]];\n e.target = this;\n this.fire(e.type, e);\n }\n});\n\nEsriLeaflet.FeatureLayer = EsriLeaflet.Layers.FeatureLayer;\n\nEsriLeaflet.Layers.featureLayer = function(options){\n return new EsriLeaflet.Layers.FeatureLayer(options);\n};\n\nEsriLeaflet.featureLayer = function(options){\n return new EsriLeaflet.Layers.FeatureLayer(options);\n};\n","EsriLeaflet.Controls.Logo = L.Control.extend({\n options: {\n position: 'bottomright',\n marginTop: 0,\n marginLeft: 0,\n marginBottom: 0,\n marginRight: 0\n },\n\n onAdd: function () {\n var div = L.DomUtil.create('div', 'esri-leaflet-logo');\n div.style.marginTop = this.options.marginTop;\n div.style.marginLeft = this.options.marginLeft;\n div.style.marginBottom = this.options.marginBottom;\n div.style.marginRight = this.options.marginRight;\n div.innerHTML = this._adjustLogo(this._map._size);\n\n this._map.on('resize', function(e){\n div.innerHTML = this._adjustLogo(e.newSize);\n }, this);\n\n return div;\n },\n\n _adjustLogo: function (mapSize) {\n if (mapSize.x <= 600 || mapSize.y <= 600){\n return '\"Powered';\n }\n else {\n return '\"Powered';\n }\n }\n\n});\n\nEsriLeaflet.Controls.logo = function(options){\n return new L.esri.Controls.Logo(options);\n};\n"]} \ No newline at end of file diff --git a/package.json b/package.json index 377e412b4..54a0c8884 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "esri-leaflet", - "version": "1.0.2", + "version": "1.0.3", "description": "Leaflet plugins for consuming ArcGIS Online and ArcGIS Server services", "main": "dist/esri-leaflet.js", "repository": { diff --git a/src/EsriLeaflet.js b/src/EsriLeaflet.js index 0bbbb3daf..5bd00af31 100644 --- a/src/EsriLeaflet.js +++ b/src/EsriLeaflet.js @@ -1,5 +1,5 @@ var EsriLeaflet = { //jshint ignore:line - VERSION: '1.0.2', + VERSION: '1.0.3', Layers: {}, Services: {}, Controls: {}, diff --git a/src/Layers/RasterLayer.js b/src/Layers/RasterLayer.js index bc07a092b..e9d1e1d17 100644 --- a/src/Layers/RasterLayer.js +++ b/src/Layers/RasterLayer.js @@ -207,6 +207,9 @@ EsriLeaflet.Layers.RasterLayer = L.Class.extend({ } if (zoom > this.options.maxZoom || zoom < this.options.minZoom) { + if (this._currentImage) { + this._currentImage._map.removeLayer(this._currentImage); + } return; } var params = this._buildExportParams();