{"version":3,"file":"esri-leaflet-debug.js","sources":["../src/Support.js","../src/Options.js","../src/Request.js","../node_modules/@esri/arcgis-to-geojson-utils/index.js","../src/Util.js","../src/Tasks/Task.js","../src/Tasks/Query.js","../src/Tasks/Find.js","../src/Tasks/Identify.js","../src/Tasks/IdentifyFeatures.js","../src/Tasks/IdentifyImage.js","../src/Services/Service.js","../src/Services/MapService.js","../src/Services/ImageService.js","../src/Services/FeatureLayerService.js","../src/Layers/BasemapLayer.js","../src/Layers/TiledMapLayer.js","../src/Layers/RasterLayer.js","../src/Layers/ImageMapLayer.js","../src/Layers/DynamicMapLayer.js","../node_modules/leaflet-virtual-grid/src/virtual-grid.js","../node_modules/tiny-binary-search/index.js","../src/Layers/FeatureLayer/FeatureManager.js","../src/Layers/FeatureLayer/FeatureLayer.js","../src/EsriLeaflet.js"],"sourcesContent":["export var cors = ((window.XMLHttpRequest && 'withCredentials' in new window.XMLHttpRequest()));\nexport var pointerEvents = document.documentElement.style.pointerEvents === '';\n\nexport var Support = {\n  cors: cors,\n  pointerEvents: pointerEvents\n};\n\nexport default Support;\n","export var options = {\n  attributionWidthOffset: 55\n};\n\nexport default options;\n","import { Util, DomUtil } from 'leaflet';\nimport Support from './Support';\nimport { warn } from './Util';\n\nvar callbacks = 0;\n\nfunction 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\nfunction createRequest (callback, context) {\n  var httpRequest = new window.XMLHttpRequest();\n\n  httpRequest.onerror = function (e) {\n    httpRequest.onreadystatechange = 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 = Util.falseFn;\n\n      callback.call(context, error, response);\n    }\n  };\n\n  httpRequest.ontimeout = function () {\n    this.onerror();\n  };\n\n  return httpRequest;\n}\n\nfunction xmlHttpPost (url, params, callback, context) {\n  var httpRequest = createRequest(callback, context);\n  httpRequest.open('POST', url);\n\n  if (typeof context !== 'undefined' && context !== null) {\n    if (typeof context.options !== 'undefined') {\n      httpRequest.timeout = context.options.timeout;\n    }\n  }\n  httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');\n  httpRequest.send(serialize(params));\n\n  return httpRequest;\n}\n\nfunction xmlHttpGet (url, params, callback, context) {\n  var httpRequest = createRequest(callback, context);\n  httpRequest.open('GET', url + '?' + serialize(params), true);\n\n  if (typeof context !== 'undefined' && context !== null) {\n    if (typeof context.options !== 'undefined') {\n      httpRequest.timeout = context.options.timeout;\n    }\n  }\n  httpRequest.send(null);\n\n  return httpRequest;\n}\n\n// AJAX handlers for CORS (modern browsers) or JSONP (older browsers)\nexport function request (url, params, callback, context) {\n  var paramString = serialize(params);\n  var httpRequest = createRequest(callback, context);\n  var requestLength = (url + '?' + paramString).length;\n\n  // ie10/11 require the request be opened before a timeout is applied\n  if (requestLength <= 2000 && Support.cors) {\n    httpRequest.open('GET', url + '?' + paramString);\n  } else if (requestLength > 2000 && Support.cors) {\n    httpRequest.open('POST', url);\n    httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');\n  }\n\n  if (typeof context !== 'undefined' && context !== null) {\n    if (typeof context.options !== 'undefined') {\n      httpRequest.timeout = context.options.timeout;\n    }\n  }\n\n  // request is less than 2000 characters and the browser supports CORS, make GET request with XMLHttpRequest\n  if (requestLength <= 2000 && Support.cors) {\n    httpRequest.send(null);\n\n  // request is more than 2000 characters and the browser supports CORS, make POST request with XMLHttpRequest\n  } else if (requestLength > 2000 && Support.cors) {\n    httpRequest.send(paramString);\n\n  // request is less  than 2000 characters and the browser does not support CORS, make a JSONP request\n  } else if (requestLength <= 2000 && !Support.cors) {\n    return 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    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\nexport function jsonp (url, params, callback, context) {\n  window._EsriLeafletCallbacks = window._EsriLeafletCallbacks || {};\n  var callbackId = 'c' + callbacks;\n  params.callback = 'window._EsriLeafletCallbacks.' + 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  var script = DomUtil.create('script', null, document.body);\n  script.type = 'text/javascript';\n  script.src = url + '?' + serialize(params);\n  script.id = callbackId;\n  script.onerror = function (error) {\n    if (error && window._EsriLeafletCallbacks[callbackId] !== true) {\n      // Can't get true error code: it can be 404, or 401, or 500\n      var err = {\n        error: {\n          code: 500,\n          message: 'An unknown error occurred'\n        }\n      };\n\n      callback.call(context, err);\n      window._EsriLeafletCallbacks[callbackId] = true;\n    }\n  };\n  DomUtil.addClass(script, 'esri-leaflet-jsonp');\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\nvar get = ((Support.cors) ? xmlHttpGet : jsonp);\nget.CORS = xmlHttpGet;\nget.JSONP = jsonp;\n\n// choose the correct AJAX handler depending on CORS support\nexport { get };\n\n// always use XMLHttpRequest for posts\nexport { xmlHttpPost as post };\n\n// export the Request object to call the different handlers for debugging\nexport var Request = {\n  request: request,\n  get: get,\n  post: xmlHttpPost\n};\n\nexport default Request;\n","/*\n * Copyright 2017 Esri\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// checks if 2 x,y points are equal\nfunction 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\nfunction 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\nfunction ringIsClockwise (ringToTest) {\n  var total = 0;\n  var 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\nfunction 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 (ua >= 0 && ua <= 1 && ub >= 0 && 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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.slice().reverse() ]; // wind outer rings counterclockwise for RFC 7946 compliance\n      outerRings.push(polygon); // push to outer rings\n    } else {\n      holes.push(ring.slice().reverse()); // wind inner rings clockwise for RFC 7946 compliance\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\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\nfunction 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\nfunction 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// shallow object clone for feature properties and attributes\n// from http://jsperf.com/cloning-an-object/2\nfunction shallowClone (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\nfunction getId (attributes, idAttribute) {\n  var keys = idAttribute ? [idAttribute, 'OBJECTID', 'FID'] : ['OBJECTID', 'FID'];\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    if (\n      key in attributes &&\n      (typeof attributes[key] === 'string' ||\n        typeof attributes[key] === 'number')\n    ) {\n      return attributes[key];\n    }\n  }\n  throw Error('No valid id attribute found');\n}\n\nexport function arcgisToGeoJSON (arcgis, idAttribute) {\n  var geojson = {};\n\n  if (arcgis.features) {\n    geojson.type = 'FeatureCollection';\n    geojson.features = [];\n    for (var i = 0; i < arcgis.features.length; i++) {\n      geojson.features.push(arcgisToGeoJSON(arcgis.features[i], idAttribute));\n    }\n  }\n\n  if (typeof arcgis.x === 'number' && typeof arcgis.y === 'number') {\n    geojson.type = 'Point';\n    geojson.coordinates = [arcgis.x, arcgis.y];\n    if (typeof arcgis.z === 'number') {\n      geojson.coordinates.push(arcgis.z);\n    }\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 (\n    typeof arcgis.xmin === 'number' &&\n    typeof arcgis.ymin === 'number' &&\n    typeof arcgis.xmax === 'number' &&\n    typeof arcgis.ymax === 'number'\n  ) {\n    geojson.type = 'Polygon';\n    geojson.coordinates = [[\n      [arcgis.xmax, arcgis.ymax],\n      [arcgis.xmin, arcgis.ymax],\n      [arcgis.xmin, arcgis.ymin],\n      [arcgis.xmax, arcgis.ymin],\n      [arcgis.xmax, arcgis.ymax]\n    ]];\n  }\n\n  if (arcgis.geometry || arcgis.attributes) {\n    geojson.type = 'Feature';\n    geojson.geometry = (arcgis.geometry) ? arcgisToGeoJSON(arcgis.geometry) : null;\n    geojson.properties = (arcgis.attributes) ? shallowClone(arcgis.attributes) : null;\n    if (arcgis.attributes) {\n      try {\n        geojson.id = getId(arcgis.attributes, idAttribute);\n      } catch (err) {\n        // don't set an id\n      }\n    }\n  }\n\n  // if no valid geometry was encountered\n  if (JSON.stringify(geojson.geometry) === JSON.stringify({})) {\n    geojson.geometry = null;\n  }\n\n  if (\n    arcgis.spatialReference &&\n    arcgis.spatialReference.wkid &&\n    arcgis.spatialReference.wkid !== 4326\n  ) {\n    console.warn('Object converted in non-standard crs - ' + JSON.stringify(arcgis.spatialReference));\n  }\n\n  return geojson;\n}\n\nexport function geojsonToArcGIS (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 = geojsonToArcGIS(geojson.geometry, idAttribute);\n      }\n      result.attributes = (geojson.properties) ? shallowClone(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(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(geojsonToArcGIS(geojson.geometries[i], idAttribute));\n      }\n      break;\n  }\n\n  return result;\n}\n\nexport default { arcgisToGeoJSON: arcgisToGeoJSON, geojsonToArcGIS: geojsonToArcGIS };\n","import { latLng, latLngBounds, LatLng, LatLngBounds, Util, DomUtil, GeoJSON } from 'leaflet';\nimport { jsonp } from './Request';\nimport { options } from './Options';\n\nimport {\n  geojsonToArcGIS as g2a,\n  arcgisToGeoJSON as a2g\n} from '@esri/arcgis-to-geojson-utils';\n\nexport function geojsonToArcGIS (geojson, idAttr) {\n  return g2a(geojson, idAttr);\n}\n\nexport function arcgisToGeoJSON (arcgis, idAttr) {\n  return a2g(arcgis, idAttr);\n}\n\n// convert an extent (ArcGIS) to LatLngBounds (Leaflet)\nexport function extentToBounds (extent) {\n  // \"NaN\" coordinates from ArcGIS Server indicate a null geometry\n  if (extent.xmin !== 'NaN' && extent.ymin !== 'NaN' && extent.xmax !== 'NaN' && extent.ymax !== 'NaN') {\n    var sw = latLng(extent.ymin, extent.xmin);\n    var ne = latLng(extent.ymax, extent.xmax);\n    return latLngBounds(sw, ne);\n  } else {\n    return null;\n  }\n}\n\n// convert an LatLngBounds (Leaflet) to extent (ArcGIS)\nexport function boundsToExtent (bounds) {\n  bounds = 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\nvar knownFieldNames = /^(OBJECTID|FID|OID|ID)$/i;\n\n// Attempts to find the ID Field from response\nexport function _findIdAttributeFromResponse (response) {\n  var result;\n\n  if (response.objectIdFieldName) {\n    // Find Id Field directly\n    result = response.objectIdFieldName;\n  } else if (response.fields) {\n    // Find ID Field based on field type\n    for (var j = 0; j <= response.fields.length - 1; j++) {\n      if (response.fields[j].type === 'esriFieldTypeOID') {\n        result = response.fields[j].name;\n        break;\n      }\n    }\n    if (!result) {\n      // If no field was marked as being the esriFieldTypeOID try well known field names\n      for (j = 0; j <= response.fields.length - 1; j++) {\n        if (response.fields[j].name.match(knownFieldNames)) {\n          result = response.fields[j].name;\n          break;\n        }\n      }\n    }\n  }\n  return result;\n}\n\n// This is the 'last' resort, find the Id field from the specified feature\nexport function _findIdAttributeFromFeature (feature) {\n  for (var key in feature.attributes) {\n    if (key.match(knownFieldNames)) {\n      return key;\n    }\n  }\n}\n\nexport function responseToFeatureCollection (response, idAttribute) {\n  var objectIdField;\n  var features = response.features || response.results;\n  var count = features.length;\n\n  if (idAttribute) {\n    objectIdField = idAttribute;\n  } else {\n    objectIdField = _findIdAttributeFromResponse(response);\n  }\n\n  var featureCollection = {\n    type: 'FeatureCollection',\n    features: []\n  };\n\n  if (count) {\n    for (var i = features.length - 1; i >= 0; i--) {\n      var feature = arcgisToGeoJSON(features[i], objectIdField || _findIdAttributeFromFeature(features[i]));\n      featureCollection.features.push(feature);\n    }\n  }\n\n  return featureCollection;\n}\n\n  // trim url whitespace and add a trailing slash if needed\nexport function cleanUrl (url) {\n  // trim leading and trailing spaces, but not spaces inside the url\n  url = Util.trim(url);\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/* Extract url params if any and store them in requestParams attribute.\n   Return the options params updated */\nexport function getUrlParams (options) {\n  if (options.url.indexOf('?') !== -1) {\n    options.requestParams = options.requestParams || {};\n    var queryString = options.url.substring(options.url.indexOf('?') + 1);\n    options.url = options.url.split('?')[0];\n    options.requestParams = JSON.parse('{\"' + decodeURI(queryString).replace(/\"/g, '\\\\\"').replace(/&/g, '\",\"').replace(/=/g, '\":\"') + '\"}');\n  }\n  options.url = cleanUrl(options.url.split('?')[0]);\n  return options;\n}\n\nexport function isArcgisOnline (url) {\n  /* hosted feature services support geojson as an output format\n  utility.arcgis.com services are proxied from a variety of ArcGIS Server vintages, and may not */\n  return (/^(?!.*utility\\.arcgis\\.com).*\\.arcgis\\.com.*FeatureServer/i).test(url);\n}\n\nexport function geojsonTypeToArcGIS (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\n  return arcgisGeometryType;\n}\n\nexport function warn () {\n  if (console && console.warn) {\n    console.warn.apply(console, arguments);\n  }\n}\n\nexport function calcAttributionWidth (map) {\n  // either crop at 55px or user defined buffer\n  return (map.getSize().x - options.attributionWidthOffset) + 'px';\n}\n\nexport function setEsriAttribution (map) {\n  if (map.attributionControl && !map.attributionControl._esriAttributionAdded) {\n    map.attributionControl.setPrefix('<a href=\"http://leafletjs.com\" title=\"A JS library for interactive maps\">Leaflet</a> | Powered by <a href=\"https://www.esri.com\">Esri</a>');\n\n    var hoverAttributionStyle = document.createElement('style');\n    hoverAttributionStyle.type = 'text/css';\n    hoverAttributionStyle.innerHTML = '.esri-truncated-attribution:hover {' +\n      'white-space: normal;' +\n    '}';\n\n    document.getElementsByTagName('head')[0].appendChild(hoverAttributionStyle);\n    DomUtil.addClass(map.attributionControl._container, 'esri-truncated-attribution:hover');\n\n    // define a new css class in JS to trim attribution into a single line\n    var attributionStyle = document.createElement('style');\n    attributionStyle.type = 'text/css';\n    attributionStyle.innerHTML = '.esri-truncated-attribution {' +\n      'vertical-align: -3px;' +\n      'white-space: nowrap;' +\n      'overflow: hidden;' +\n      'text-overflow: ellipsis;' +\n      'display: inline-block;' +\n      'transition: 0s white-space;' +\n      'transition-delay: 1s;' +\n      'max-width: ' + calcAttributionWidth(map) + ';' +\n    '}';\n\n    document.getElementsByTagName('head')[0].appendChild(attributionStyle);\n    DomUtil.addClass(map.attributionControl._container, 'esri-truncated-attribution');\n\n    // update the width used to truncate when the map itself is resized\n    map.on('resize', function (e) {\n      map.attributionControl._container.style.maxWidth = calcAttributionWidth(e.target);\n    });\n\n    // remove injected scripts and style tags\n    map.on('unload', function () {\n      hoverAttributionStyle.parentNode.removeChild(hoverAttributionStyle);\n      attributionStyle.parentNode.removeChild(attributionStyle);\n      var nodeList = document.querySelectorAll('.esri-leaflet-jsonp');\n      for (var i = 0; i < nodeList.length; i++) {\n        nodeList.item(i).parentNode.removeChild(nodeList.item(i));\n      }\n    });\n\n    map.attributionControl._esriAttributionAdded = true;\n  }\n}\n\nexport function _setGeometry (geometry) {\n  var params = {\n    geometry: null,\n    geometryType: null\n  };\n\n  // convert bounds to extent and finish\n  if (geometry instanceof LatLngBounds) {\n    // set geometry + geometryType\n    params.geometry = boundsToExtent(geometry);\n    params.geometryType = 'esriGeometryEnvelope';\n    return params;\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 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 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    params.geometry = geojsonToArcGIS(geometry);\n    params.geometryType = 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' || geometry.type === 'MultiPolygon') {\n    params.geometry = geojsonToArcGIS(geometry);\n    params.geometryType = geojsonTypeToArcGIS(geometry.type);\n    return params;\n  }\n\n  // warn the user if we havn't found an appropriate object\n  warn('invalid geometry passed to spatial query. Should be L.LatLng, L.LatLngBounds, L.Marker or a GeoJSON Point, Line, Polygon or MultiPolygon object');\n\n  return;\n}\n\nexport function _getAttributionData (url, map) {\n  jsonp(url, {}, Util.bind(function (error, attributions) {\n    if (error) { return; }\n    map._esriAttributions = [];\n    for (var c = 0; c < attributions.contributors.length; c++) {\n      var contributor = attributions.contributors[c];\n\n      for (var i = 0; i < contributor.coverageAreas.length; i++) {\n        var coverageArea = contributor.coverageAreas[i];\n        var southWest = latLng(coverageArea.bbox[0], coverageArea.bbox[1]);\n        var northEast = latLng(coverageArea.bbox[2], coverageArea.bbox[3]);\n        map._esriAttributions.push({\n          attribution: contributor.attribution,\n          score: coverageArea.score,\n          bounds: latLngBounds(southWest, northEast),\n          minZoom: coverageArea.zoomMin,\n          maxZoom: coverageArea.zoomMax\n        });\n      }\n    }\n\n    map._esriAttributions.sort(function (a, b) {\n      return b.score - a.score;\n    });\n\n    // pass the same argument as the map's 'moveend' event\n    var obj = { target: map };\n    _updateMapAttribution(obj);\n  }, this));\n}\n\nexport function _updateMapAttribution (evt) {\n  var map = evt.target;\n  var oldAttributions = map._esriAttributions;\n  var attributionElement = map.attributionControl._container.querySelector('.esri-dynamic-attribution');\n\n  if (map && map.attributionControl && attributionElement && oldAttributions) {\n    var newAttributions = '';\n    var bounds = map.getBounds();\n    var wrappedBounds = latLngBounds(\n      bounds.getSouthWest().wrap(),\n      bounds.getNorthEast().wrap()\n    );\n    var zoom = map.getZoom();\n\n    for (var i = 0; i < oldAttributions.length; i++) {\n      var attribution = oldAttributions[i];\n      var text = attribution.attribution;\n\n      if (!newAttributions.match(text) && attribution.bounds.intersects(wrappedBounds) && zoom >= attribution.minZoom && zoom <= attribution.maxZoom) {\n        newAttributions += (', ' + text);\n      }\n    }\n\n    newAttributions = newAttributions.substr(2);\n    attributionElement.innerHTML = newAttributions;\n    attributionElement.style.maxWidth = calcAttributionWidth(map);\n\n    map.fire('attributionupdated', {\n      attribution: newAttributions\n    });\n  }\n}\n\nexport var EsriUtil = {\n  warn: warn,\n  cleanUrl: cleanUrl,\n  getUrlParams: getUrlParams,\n  isArcgisOnline: isArcgisOnline,\n  geojsonTypeToArcGIS: geojsonTypeToArcGIS,\n  responseToFeatureCollection: responseToFeatureCollection,\n  geojsonToArcGIS: geojsonToArcGIS,\n  arcgisToGeoJSON: arcgisToGeoJSON,\n  boundsToExtent: boundsToExtent,\n  extentToBounds: extentToBounds,\n  calcAttributionWidth: calcAttributionWidth,\n  setEsriAttribution: setEsriAttribution,\n  _setGeometry: _setGeometry,\n  _getAttributionData: _getAttributionData,\n  _updateMapAttribution: _updateMapAttribution,\n  _findIdAttributeFromFeature: _findIdAttributeFromFeature,\n  _findIdAttributeFromResponse: _findIdAttributeFromResponse\n};\n\nexport default EsriUtil;\n","import { Class, Util } from 'leaflet';\nimport {cors} from '../Support';\nimport { cleanUrl, getUrlParams } from '../Util';\nimport Request from '../Request';\n\nexport var Task = Class.extend({\n\n  options: {\n    proxy: false,\n    useCors: cors\n  },\n\n  // Generate a method for each methodName:paramName in the setters for this task.\n  generateSetter: function (param, context) {\n    return 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      Util.setOptions(this, endpoint.options);\n    } else {\n      Util.setOptions(this, endpoint);\n      this.options.url = cleanUrl(endpoint.url);\n    }\n\n    // clone default params into this object\n    this.params = 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  // ArcGIS Server Find/Identify 10.5+\n  format: function (boolean) {\n    // use double negative to expose a more intuitive positive method name\n    this.params.returnUnformattedValues = !boolean;\n    return this;\n  },\n\n  request: function (callback, context) {\n    if (this.options.requestParams) {\n      Util.extend(this.params, this.options.requestParams);\n    }\n    if (this._service) {\n      return this._service.request(this.path, this.params, callback, context);\n    }\n\n    return this._request('request', this.path, this.params, callback, context);\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\n    if ((method === 'get' || method === 'request') && !this.options.useCors) {\n      return Request.get.JSONP(url, params, callback, context);\n    }\n\n    return Request[method](url, params, callback, context);\n  }\n});\n\nexport function task (options) {\n  options = getUrlParams(options);\n  return new Task(options);\n}\n\nexport default task;\n","import { point, latLng } from 'leaflet';\nimport { Task } from './Task';\nimport {\n  warn,\n  responseToFeatureCollection,\n  isArcgisOnline,\n  extentToBounds,\n  _setGeometry\n} from '../Util';\n\nexport var Query = Task.extend({\n  setters: {\n    'offset': 'resultOffset',\n    'limit': 'resultRecordCount',\n    'fields': 'outFields',\n    'precision': 'geometryPrecision',\n    'featureIds': 'objectIds',\n    'returnGeometry': 'returnGeometry',\n    'returnM': 'returnM',\n    'transform': 'datumTransformation',\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  // Returns a feature if its shape is wholly contained within the search geometry. Valid for all shape type combinations.\n  within: function (geometry) {\n    this._setGeometryParams(geometry);\n    this.params.spatialRel = 'esriSpatialRelContains'; // to the REST api this reads geometry **contains** layer\n    return this;\n  },\n\n  // Returns a feature if any spatial relationship is found. Applies to all shape type combinations.\n  intersects: function (geometry) {\n    this._setGeometryParams(geometry);\n    this.params.spatialRel = 'esriSpatialRelIntersects';\n    return this;\n  },\n\n  // Returns a feature if its shape wholly contains the search geometry. Valid for all shape type combinations.\n  contains: function (geometry) {\n    this._setGeometryParams(geometry);\n    this.params.spatialRel = 'esriSpatialRelWithin'; // to the REST api this reads geometry **within** layer\n    return this;\n  },\n\n  // Returns a feature if the intersection of the interiors of the two shapes is not empty and has a lower dimension than the maximum dimension of the two shapes. Two lines that share an endpoint in common do not cross. Valid for Line/Line, Line/Area, Multi-point/Area, and Multi-point/Line shape type combinations.\n  crosses: function (geometry) {\n    this._setGeometryParams(geometry);\n    this.params.spatialRel = 'esriSpatialRelCrosses';\n    return this;\n  },\n\n  // Returns a feature if the two shapes share a common boundary. However, the intersection of the interiors of the two shapes must be empty. In the Point/Line case, the point may touch an endpoint only of the line. Applies to all combinations except Point/Point.\n  touches: function (geometry) {\n    this._setGeometryParams(geometry);\n    this.params.spatialRel = 'esriSpatialRelTouches';\n    return this;\n  },\n\n  // Returns a feature if the intersection of the two shapes results in an object of the same dimension, but different from both of the shapes. Applies to Area/Area, Line/Line, and Multi-point/Multi-point shape type combinations.\n  overlaps: function (geometry) {\n    this._setGeometryParams(geometry);\n    this.params.spatialRel = 'esriSpatialRelOverlaps';\n    return this;\n  },\n\n  // Returns a feature if the envelope of the two shapes intersects.\n  bboxIntersects: function (geometry) {\n    this._setGeometryParams(geometry);\n    this.params.spatialRel = 'esriSpatialRelEnvelopeIntersects';\n    return this;\n  },\n\n  // if someone can help decipher the ArcObjects explanation and translate to plain speak, we should mention this method in the doc\n  indexIntersects: function (geometry) {\n    this._setGeometryParams(geometry);\n    this.params.spatialRel = 'esriSpatialRelIndexIntersects'; // Returns a feature if the envelope of the query geometry intersects the index entry for the target geometry\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 = 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    // services hosted on ArcGIS Online and ArcGIS Server 10.3.1+ support requesting geojson directly\n    if (this.options.isModern || 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 && 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      if (response && response.extent && extentToBounds(response.extent)) {\n        callback.call(context, error, extentToBounds(response.extent), response);\n      } else {\n        error = {\n          message: 'Invalid Bounds'\n        };\n        callback.call(context, error, null, response);\n      }\n    }, context);\n  },\n\n  distinct: function () {\n    // geometry must be omitted for queries requesting distinct values\n    this.params.returnGeometry = false;\n    this.params.returnDistinctValues = true;\n    return this;\n  },\n\n  // only valid for image services\n  pixelSize: function (rawPoint) {\n    var castPoint = point(rawPoint);\n    this.params.pixelSize = [castPoint.x, castPoint.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        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  _setGeometryParams: function (geometry) {\n    this.params.inSr = 4326;\n    var converted = _setGeometry(geometry);\n    this.params.geometry = converted.geometry;\n    this.params.geometryType = converted.geometryType;\n  }\n\n});\n\nexport function query (options) {\n  return new Query(options);\n}\n\nexport default query;\n","import { Task } from './Task';\nimport { responseToFeatureCollection } from '../Util';\n\nexport var Find = 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    // skipped implementing this (for now) because the REST service implementation isnt consistent between operations\n    // 'transform': 'datumTransformations',\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 && responseToFeatureCollection(response)), response);\n    }, context);\n  }\n});\n\nexport function find (options) {\n  return new Find(options);\n}\n\nexport default find;\n","import { Task } from './Task';\n\nexport var Identify = 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\nexport function identify (options) {\n  return new Identify(options);\n}\n\nexport default identify;\n","import { latLng } from 'leaflet';\nimport { Identify } from './Identify';\nimport { responseToFeatureCollection,\n  boundsToExtent,\n  _setGeometry\n} from '../Util';\n\nexport var IdentifyFeatures = Identify.extend({\n  setters: {\n    'layers': 'layers',\n    'precision': 'geometryPrecision',\n    'tolerance': 'tolerance',\n    // skipped implementing this (for now) because the REST service implementation isnt consistent between operations.\n    // 'transform': 'datumTransformations'\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 = 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 (geometry) {\n    // cast lat, long pairs in raw array form manually\n    if (geometry.length === 2) {\n      geometry = latLng(geometry);\n    }\n    this._setGeometryParams(geometry);\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) * 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 = 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  _setGeometryParams: function (geometry) {\n    var converted = _setGeometry(geometry);\n    this.params.geometry = converted.geometry;\n    this.params.geometryType = converted.geometryType;\n  }\n});\n\nexport function identifyFeatures (options) {\n  return new IdentifyFeatures(options);\n}\n\nexport default identifyFeatures;\n","import { latLng } from 'leaflet';\nimport { Identify } from './Identify';\nimport { responseToFeatureCollection } from '../Util';\n\nexport var IdentifyImage = 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 = 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\n    if (response.properties && response.properties.Values) {\n      geoJSON.pixel.properties.values = response.properties.Values;\n    }\n\n    if (catalogItems && catalogItems.features) {\n      geoJSON.catalogItems = 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\nexport function identifyImage (params) {\n  return new IdentifyImage(params);\n}\n\nexport default identifyImage;\n","import { Util, Evented } from 'leaflet';\nimport {cors} from '../Support';\nimport {cleanUrl, getUrlParams} from '../Util';\nimport Request from '../Request';\n\nexport var Service = Evented.extend({\n\n  options: {\n    proxy: false,\n    useCors: cors,\n    timeout: 0\n  },\n\n  initialize: function (options) {\n    options = options || {};\n    this._requestQueue = [];\n    this._authenticating = false;\n    Util.setOptions(this, options);\n    this.options.url = 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  getTimeout: function () {\n    return this.options.timeout;\n  },\n\n  setTimeout: function (timeout) {\n    this.options.timeout = timeout;\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    }, true);\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    if (this.options.requestParams) {\n      Util.extend(params, this.options.requestParams);\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 Request.get.JSONP(url, params, wrappedCallback, context);\n      } else {\n        return Request[method](url, params, wrappedCallback, context);\n      }\n    }\n  },\n\n  _createServiceCallback: function (method, path, params, callback, context) {\n    return Util.bind(function (error, response) {\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: Util.bind(this.authenticate, this)\n        }, true);\n\n        // if the user has access to a callback they can handle the auth error\n        error.authenticate = 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        }, true);\n      } else {\n        this.fire('requestsuccess', {\n          url: this.options.url + path,\n          params: params,\n          response: response,\n          method: method\n        }, true);\n      }\n\n      this.fire('requestend', {\n        url: this.options.url + path,\n        params: params,\n        method: method\n      }, true);\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\nexport function service (options) {\n  options = getUrlParams(options);\n  return new Service(options);\n}\n\nexport default service;\n","import { Service } from './Service';\nimport identifyFeatures from '../Tasks/IdentifyFeatures';\nimport query from '../Tasks/Query';\nimport find from '../Tasks/Find';\n\nexport var MapService = Service.extend({\n\n  identify: function () {\n    return identifyFeatures(this);\n  },\n\n  find: function () {\n    return find(this);\n  },\n\n  query: function () {\n    return query(this);\n  }\n\n});\n\nexport function mapService (options) {\n  return new MapService(options);\n}\n\nexport default mapService;\n","import { Service } from './Service';\nimport identifyImage from '../Tasks/IdentifyImage';\nimport query from '../Tasks/Query';\n\nexport var ImageService = Service.extend({\n\n  query: function () {\n    return query(this);\n  },\n\n  identify: function () {\n    return identifyImage(this);\n  }\n});\n\nexport function imageService (options) {\n  return new ImageService(options);\n}\n\nexport default imageService;\n","import { Service } from './Service';\nimport query from '../Tasks/Query';\nimport { geojsonToArcGIS } from '../Util';\n\nexport var FeatureLayerService = Service.extend({\n\n  options: {\n    idAttribute: 'OBJECTID'\n  },\n\n  query: function () {\n    return query(this);\n  },\n\n  addFeature: function (feature, callback, context) {\n    this.addFeatures(feature, callback, context);\n  },\n\n  addFeatures: function (features, callback, context) {\n    var featuresArray = features.features ? features.features : [features];\n    for (var i = featuresArray.length - 1; i >= 0; i--) {\n      delete featuresArray[i].id;\n    }\n    features = geojsonToArcGIS(features);\n    features = featuresArray.length > 1 ? features : [features];\n    return this.post('addFeatures', {\n      features: features\n    }, function (error, response) {\n      // For compatibility reason with former addFeature function,\n      // we return the object in the array and not the array itself\n      var result = (response && response.addResults) ? response.addResults.length > 1 ? 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    this.updateFeatures(feature, callback, context);\n  },\n\n  updateFeatures: function (features, callback, context) {\n    var featuresArray = features.features ? features.features : [features];\n    features = geojsonToArcGIS(features, this.options.idAttribute);\n    features = featuresArray.length > 1 ? features : [features];\n\n    return this.post('updateFeatures', {\n      features: features\n    }, function (error, response) {\n      // For compatibility reason with former updateFeature function,\n      // we return the object in the array and not the array itself\n      var result = (response && response.updateResults) ? response.updateResults.length > 1 ? 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    this.deleteFeatures(id, callback, context);\n  },\n\n  deleteFeatures: function (ids, callback, context) {\n    return this.post('deleteFeatures', {\n      objectIds: ids\n    }, function (error, response) {\n      // For compatibility reason with former deleteFeature function,\n      // we return the object in the array and not the array itself\n      var result = (response && response.deleteResults) ? response.deleteResults.length > 1 ? 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\nexport function featureLayerService (options) {\n  return new FeatureLayerService(options);\n}\n\nexport default featureLayerService;\n","import { TileLayer, Util } from 'leaflet';\nimport { pointerEvents } from '../Support';\nimport {\n  setEsriAttribution,\n  _getAttributionData,\n  _updateMapAttribution\n} from '../Util';\n\nvar tileProtocol = (window.location.protocol !== 'https:') ? 'http:' : 'https:';\n\nexport var BasemapLayer = 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        options: {\n          minZoom: 1,\n          maxZoom: 19,\n          subdomains: ['server', 'services'],\n          attribution: 'USGS, NOAA',\n          attributionUrl: 'https://static.arcgis.com/attribution/World_Street_Map'\n        }\n      },\n      Topographic: {\n        urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/{z}/{y}/{x}',\n        options: {\n          minZoom: 1,\n          maxZoom: 19,\n          subdomains: ['server', 'services'],\n          attribution: 'USGS, NOAA',\n          attributionUrl: 'https://static.arcgis.com/attribution/World_Topo_Map'\n        }\n      },\n      Oceans: {\n        urlTemplate: tileProtocol + '//{s}.arcgisonline.com/arcgis/rest/services/Ocean/World_Ocean_Base/MapServer/tile/{z}/{y}/{x}',\n        options: {\n          minZoom: 1,\n          maxZoom: 16,\n          subdomains: ['server', 'services'],\n          attribution: 'USGS, NOAA',\n          attributionUrl: 'https://static.arcgis.com/attribution/Ocean_Basemap'\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          minZoom: 1,\n          maxZoom: 16,\n          subdomains: ['server', 'services'],\n          pane: (pointerEvents) ? 'esri-labels' : 'tilePane',\n          attribution: ''\n        }\n      },\n      NationalGeographic: {\n        urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer/tile/{z}/{y}/{x}',\n        options: {\n          minZoom: 1,\n          maxZoom: 16,\n          subdomains: ['server', 'services'],\n          attribution: 'National Geographic, DeLorme, HERE, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, increment P Corp.'\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          minZoom: 1,\n          maxZoom: 16,\n          subdomains: ['server', 'services'],\n          attribution: 'HERE, DeLorme, MapmyIndia, &copy; OpenStreetMap contributors'\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          minZoom: 1,\n          maxZoom: 16,\n          subdomains: ['server', 'services'],\n          pane: (pointerEvents) ? 'esri-labels' : 'tilePane',\n          attribution: ''\n\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          minZoom: 1,\n          maxZoom: 16,\n          subdomains: ['server', 'services'],\n          attribution: 'HERE, DeLorme, MapmyIndia, &copy; OpenStreetMap contributors'\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          minZoom: 1,\n          maxZoom: 16,\n          subdomains: ['server', 'services'],\n          pane: (pointerEvents) ? 'esri-labels' : 'tilePane',\n          attribution: ''\n        }\n      },\n      Imagery: {\n        urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',\n        options: {\n          minZoom: 1,\n          maxZoom: 19,\n          subdomains: ['server', 'services'],\n          attribution: 'DigitalGlobe, GeoEye, i-cubed, USDA, USGS, AEX, Getmapping, Aerogrid, IGN, IGP, swisstopo, and the GIS User Community',\n          attributionUrl: 'https://static.arcgis.com/attribution/World_Imagery'\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          minZoom: 1,\n          maxZoom: 19,\n          subdomains: ['server', 'services'],\n          pane: (pointerEvents) ? 'esri-labels' : 'tilePane',\n          attribution: ''\n        }\n      },\n      ImageryTransportation: {\n        urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/Reference/World_Transportation/MapServer/tile/{z}/{y}/{x}',\n        options: {\n          minZoom: 1,\n          maxZoom: 19,\n          subdomains: ['server', 'services'],\n          pane: (pointerEvents) ? 'esri-labels' : 'tilePane',\n          attribution: ''\n        }\n      },\n      ShadedRelief: {\n        urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Shaded_Relief/MapServer/tile/{z}/{y}/{x}',\n        options: {\n          minZoom: 1,\n          maxZoom: 13,\n          subdomains: ['server', 'services'],\n          attribution: 'USGS'\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          minZoom: 1,\n          maxZoom: 12,\n          subdomains: ['server', 'services'],\n          pane: (pointerEvents) ? 'esri-labels' : 'tilePane',\n          attribution: ''\n        }\n      },\n      Terrain: {\n        urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/World_Terrain_Base/MapServer/tile/{z}/{y}/{x}',\n        options: {\n          minZoom: 1,\n          maxZoom: 13,\n          subdomains: ['server', 'services'],\n          attribution: '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          minZoom: 1,\n          maxZoom: 13,\n          subdomains: ['server', 'services'],\n          pane: (pointerEvents) ? 'esri-labels' : 'tilePane',\n          attribution: ''\n        }\n      },\n      USATopo: {\n        urlTemplate: tileProtocol + '//{s}.arcgisonline.com/ArcGIS/rest/services/USA_Topo_Maps/MapServer/tile/{z}/{y}/{x}',\n        options: {\n          minZoom: 1,\n          maxZoom: 15,\n          subdomains: ['server', 'services'],\n          attribution: 'USGS, National Geographic Society, i-cubed'\n        }\n      },\n      ImageryClarity: {\n        urlTemplate: tileProtocol + '//clarity.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',\n        options: {\n          minZoom: 1,\n          maxZoom: 19,\n          attribution: 'Esri, DigitalGlobe, GeoEye, Earthstar Geographics, CNES/Airbus DS, USDA, USGS, AeroGRID, IGN, and the GIS User Community'\n        }\n      },\n      Physical: {\n        urlTemplate: tileProtocol + '//{s}.arcgisonline.com/arcgis/rest/services/World_Physical_Map/MapServer/tile/{z}/{y}/{x}',\n        options: {\n          minZoom: 1,\n          maxZoom: 8,\n          subdomains: ['server', 'services'],\n          attribution: 'U.S. National Park Service'\n        }\n      },\n      ImageryFirefly: {\n        urlTemplate: tileProtocol + '//fly.maptiles.arcgis.com/arcgis/rest/services/World_Imagery_Firefly/MapServer/tile/{z}/{y}/{x}',\n        options: {\n          minZoom: 1,\n          maxZoom: 19,\n          attribution: 'Esri, DigitalGlobe, GeoEye, Earthstar Geographics, CNES/Airbus DS, USDA, USGS, AeroGRID, IGN, and the GIS User Community',\n          attributionUrl: 'https://static.arcgis.com/attribution/World_Imagery'\n        }\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' && BasemapLayer.TILES[key]) {\n      config = BasemapLayer.TILES[key];\n    } else {\n      throw new Error('L.esri.BasemapLayer: Invalid parameter. Use one of \"Streets\", \"Topographic\", \"Oceans\", \"OceansLabels\", \"NationalGeographic\", \"Physical\", \"Gray\", \"GrayLabels\", \"DarkGray\", \"DarkGrayLabels\", \"Imagery\", \"ImageryLabels\", \"ImageryTransportation\", \"ImageryClarity\", \"ImageryFirefly\", ShadedRelief\", \"ShadedReliefLabels\", \"Terrain\", \"TerrainLabels\" or \"USATopo\"');\n    }\n\n    // merge passed options into the config options\n    var tileOptions = Util.extend(config.options, options);\n\n    Util.setOptions(this, tileOptions);\n\n    if (this.options.token && config.urlTemplate.indexOf('token=') === -1) {\n      config.urlTemplate += ('?token=' + this.options.token);\n    }\n\n    // call the initialize method on L.TileLayer to set everything up\n    TileLayer.prototype.initialize.call(this, config.urlTemplate, tileOptions);\n  },\n\n  onAdd: function (map) {\n    // include 'Powered by Esri' in map attribution\n    setEsriAttribution(map);\n\n    if (this.options.pane === 'esri-labels') {\n      this._initPane();\n    }\n    // some basemaps can supply dynamic attribution\n    if (this.options.attributionUrl) {\n      _getAttributionData(this.options.attributionUrl, map);\n    }\n\n    map.on('moveend', _updateMapAttribution);\n\n    TileLayer.prototype.onAdd.call(this, map);\n  },\n\n  onRemove: function (map) {\n    map.off('moveend', _updateMapAttribution);\n    TileLayer.prototype.onRemove.call(this, map);\n  },\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 = 500;\n    }\n  },\n\n  getAttribution: function () {\n    if (this.options.attribution) {\n      var attribution = '<span class=\"esri-dynamic-attribution\">' + this.options.attribution + '</span>';\n    }\n    return attribution;\n  }\n});\n\nexport function basemapLayer (key, options) {\n  return new BasemapLayer(key, options);\n}\n\nexport default basemapLayer;\n","import { CRS, DomEvent, TileLayer, Util } from 'leaflet';\nimport { warn, getUrlParams, setEsriAttribution } from '../Util';\nimport mapService from '../Services/MapService';\n\nexport var TiledMapLayer = TileLayer.extend({\n  options: {\n    zoomOffsetAllowance: 0.1,\n    errorTileUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEABAMAAACuXLVVAAAAA1BMVEUzNDVszlHHAAAAAXRSTlMAQObYZgAAAAlwSFlzAAAAAAAAAAAB6mUWpAAAADZJREFUeJztwQEBAAAAgiD/r25IQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7waBAAABw08RwAAAAABJRU5ErkJggg=='\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 = Util.setOptions(this, options);\n\n    // set the urls\n    options = getUrlParams(options);\n    this.tileUrl = (options.proxy ? options.proxy + '?' : '') + options.url + 'tile/{z}/{y}/{x}' + (options.requestParams && Object.keys(options.requestParams).length > 0 ? Util.getParamString(options.requestParams) : '');\n    // Remove subdomain in url\n    // https://github.com/Esri/esri-leaflet/issues/991\n    if (options.url.indexOf('{s}') !== -1 && options.subdomains) {\n      options.url = options.url.replace('{s}', options.subdomains[0]);\n    }\n    this.service = mapService(options);\n    this.service.addEventParent(this);\n\n    var arcgisonline = new RegExp(/tiles.arcgis(online)?\\.com/g);\n    if (arcgisonline.test(options.url)) {\n      this.tileUrl = this.tileUrl.replace('://tiles', '://tiles{s}');\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    TileLayer.prototype.initialize.call(this, this.tileUrl, options);\n  },\n\n  getTileUrl: function (tilePoint) {\n    var zoom = this._getZoomForUrl();\n\n    return Util.template(this.tileUrl, Util.extend({\n      s: this._getSubdomain(tilePoint),\n      x: tilePoint.x,\n      y: tilePoint.y,\n      // try lod map first, then just default to zoom level\n      z: (this._lodMap && this._lodMap[zoom]) ? this._lodMap[zoom] : zoom\n    }, this.options));\n  },\n\n  createTile: function (coords, done) {\n    var tile = document.createElement('img');\n\n    DomEvent.on(tile, 'load', Util.bind(this._tileOnLoad, this, done, tile));\n    DomEvent.on(tile, 'error', Util.bind(this._tileOnError, this, done, tile));\n\n    if (this.options.crossOrigin) {\n      tile.crossOrigin = '';\n    }\n\n    /*\n     Alt tag is set to empty string to keep screen readers from reading URL and for compliance reasons\n     http://www.w3.org/TR/WCAG20-TECHS/H67\n    */\n    tile.alt = '';\n\n    // if there is no lod map or an lod map with a proper zoom load the tile\n    // otherwise wait for the lod map to become available\n    if (!this._lodMap || (this._lodMap && this._lodMap[this._getZoomForUrl()])) {\n      tile.src = this.getTileUrl(coords);\n    } else {\n      this.once('lodmap', function () {\n        tile.src = this.getTileUrl(coords);\n      }, this);\n    }\n\n    return tile;\n  },\n\n  onAdd: function (map) {\n    // include 'Powered by Esri' in map attribution\n    setEsriAttribution(map);\n\n    if (!this._lodMap) {\n      this.metadata(function (error, metadata) {\n        if (!error && metadata.spatialReference) {\n          var sr = metadata.spatialReference.latestWkid || metadata.spatialReference.wkid;\n          // display the copyright text from the service using leaflet's attribution control\n          if (!this.options.attribution && map.attributionControl && metadata.copyrightText) {\n            this.options.attribution = metadata.copyrightText;\n            map.attributionControl.addAttribution(this.getAttribution());\n          }\n\n          // if the service tiles were published in web mercator using conventional LODs but missing levels, we can try and remap them\n          if (map.options.crs === CRS.EPSG3857 && (sr === 102100 || sr === 3857)) {\n            this._lodMap = {};\n            // create the zoom level data\n            var arcgisLODs = metadata.tileInfo.lods;\n            var correctResolutions = 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\n            this.fire('lodmap');\n          } else if (map.options.crs && map.options.crs.code && (map.options.crs.code.indexOf(sr) > -1)) {\n            // if the projection is WGS84, or the developer is using Proj4 to define a custom CRS, no action is required\n          } else {\n            // if the service was cached in a custom projection and an appropriate LOD hasn't been defined in the map, guide the developer to our Proj4 sample\n            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      }, this);\n    }\n\n    TileLayer.prototype.onAdd.call(this, map);\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  find: function () {\n    return this.service.find();\n  },\n\n  query: function () {\n    return this.service.query();\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  _withinPercentage: function (a, b, percentage) {\n    var diff = Math.abs((a / b) - 1);\n    return diff < percentage;\n  }\n});\n\nexport function tiledMapLayer (url, options) {\n  return new TiledMapLayer(url, options);\n}\n\nexport default tiledMapLayer;\n","import { ImageOverlay, CRS, DomUtil, Util, Layer, popup, latLng, bounds } from 'leaflet';\nimport { cors } from '../Support';\nimport { setEsriAttribution } from '../Util';\n\nvar Overlay = ImageOverlay.extend({\n  onAdd: function (map) {\n    this._topLeft = map.getPixelBounds().min;\n    ImageOverlay.prototype.onAdd.call(this, map);\n  },\n  _reset: function () {\n    if (this._map.options.crs === CRS.EPSG3857) {\n      ImageOverlay.prototype._reset.call(this);\n    } else {\n      DomUtil.setPosition(this._image, this._topLeft.subtract(this._map.getPixelOrigin()));\n    }\n  }\n});\n\nexport var RasterLayer = Layer.extend({\n  options: {\n    opacity: 1,\n    position: 'front',\n    f: 'image',\n    useCors: cors,\n    attribution: null,\n    interactive: false,\n    alt: ''\n  },\n\n  onAdd: function (map) {\n    // include 'Powered by Esri' in map attribution\n    setEsriAttribution(map);\n\n    this._update = Util.throttle(this._update, this.options.updateInterval, this);\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    // add copyright text listed in service metadata\n    this.metadata(function (err, metadata) {\n      if (!err && !this.options.attribution && map.attributionControl && metadata.copyrightText) {\n        this.options.attribution = metadata.copyrightText;\n        map.attributionControl.addAttribution(this.getAttribution());\n      }\n    }, 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  },\n\n  bindPopup: function (fn, popupOptions) {\n    this._shouldRenderPopup = false;\n    this._lastClick = false;\n    this._popup = 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  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    if (this._currentImage) {\n      this._currentImage.setOpacity(opacity);\n    }\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  redraw: function () {\n    this._update();\n  },\n\n  _renderImage: function (url, bounds, contentType) {\n    if (this._map) {\n      // if no output directory has been specified for a service, MIME data will be returned\n      if (contentType) {\n        url = 'data:' + contentType + ';base64,' + url;\n      }\n\n      // if server returns an inappropriate response, abort.\n      if (!url) return;\n\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 Overlay(url, bounds, {\n        opacity: 0,\n        crossOrigin: this.options.useCors,\n        alt: this.options.alt,\n        pane: this.options.pane || this.getPane(),\n        interactive: this.options.interactive\n      }).addTo(this._map);\n\n      var onOverlayError = function () {\n        this._map.removeLayer(image);\n        this.fire('error');\n        image.off('load', onOverlayLoad, this);\n      };\n\n      var onOverlayLoad = function (e) {\n        image.off('error', onOverlayLoad, this);\n        if (this._map) {\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\n        this.fire('load', {\n          bounds: bounds\n        });\n      };\n\n      // If loading the image fails\n      image.once('error', onOverlayError, this);\n\n      // once the image loads\n      image.once('load', onOverlayLoad, 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        this._currentImage = null;\n      }\n      return;\n    }\n\n    var params = this._buildExportParams();\n    Util.extend(params, this.options.requestParams);\n\n    if (params) {\n      this._requestExport(params, bounds);\n    } else if (this._currentImage) {\n      this._currentImage._map.removeLayer(this._currentImage);\n      this._currentImage = null;\n    }\n  },\n\n  _renderPopup: function (latlng, error, results, response) {\n    latlng = 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  _calculateBbox: function () {\n    var pixelBounds = this._map.getPixelBounds();\n\n    var sw = this._map.unproject(pixelBounds.getBottomLeft());\n    var ne = this._map.unproject(pixelBounds.getTopRight());\n\n    var neProjected = this._map.options.crs.project(ne);\n    var swProjected = this._map.options.crs.project(sw);\n\n    // this ensures ne/sw are switched in polar maps where north/top bottom/south is inverted\n    var boundsProjected = bounds(neProjected, swProjected);\n\n    return [boundsProjected.getBottomLeft().x, boundsProjected.getBottomLeft().y, boundsProjected.getTopRight().x, boundsProjected.getTopRight().y].join(',');\n  },\n\n  _calculateImageSize: function () {\n    // ensure that we don't ask ArcGIS Server for a taller image than we have actual map displaying within the div\n    var bounds = this._map.getPixelBounds();\n    var size = this._map.getSize();\n\n    var sw = this._map.unproject(bounds.getBottomLeft());\n    var ne = this._map.unproject(bounds.getTopRight());\n\n    var top = this._map.latLngToLayerPoint(ne).y;\n    var bottom = this._map.latLngToLayerPoint(sw).y;\n\n    if (top > 0 || bottom < size.y) {\n      size.y = bottom - top;\n    }\n\n    return size.x + ',' + size.y;\n  }\n});\n","import { Util } from 'leaflet';\nimport { RasterLayer } from './RasterLayer';\nimport { getUrlParams } from '../Util';\nimport imageService from '../Services/ImageService';\n\nexport var ImageMapLayer = RasterLayer.extend({\n\n  options: {\n    updateInterval: 150,\n    format: 'jpgpng',\n    transparent: true,\n    f: 'image'\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 = getUrlParams(options);\n    this.service = imageService(options);\n    this.service.addEventParent(this);\n\n    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 (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 (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 = 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(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 sr = parseInt(this._map.options.crs.code.split(':')[1], 10);\n\n    var params = {\n      bbox: this._calculateBbox(),\n      size: this._calculateImageSize(),\n      format: this.options.format,\n      transparent: this.options.transparent,\n      bboxSR: sr,\n      imageSR: sr\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    // 0 is falsy *and* a valid input parameter\n    if (this.options.noData === 0 || 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        if (this.options.token) {\n          response.href += ('?token=' + this.options.token);\n        }\n        this._renderImage(response.href, bounds);\n      }, this);\n    } else {\n      params.f = 'image';\n      this._renderImage(this.options.url + 'exportImage' + Util.getParamString(params), bounds);\n    }\n  }\n});\n\nexport function imageMapLayer (url, options) {\n  return new ImageMapLayer(url, options);\n}\n\nexport default imageMapLayer;\n","import { Util } from 'leaflet';\nimport { RasterLayer } from './RasterLayer';\nimport { getUrlParams } from '../Util';\nimport mapService from '../Services/MapService';\n\nexport var DynamicMapLayer = 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 = getUrlParams(options);\n    this.service = mapService(options);\n    this.service.addEventParent(this);\n\n    if ((options.proxy || options.token) && options.f !== 'json') {\n      options.f = 'json';\n    }\n\n    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 = 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(Util.bind(function () {\n        this._renderPopup(e.latlng, error, featureCollection, response);\n      }, this), 300);\n    }, this);\n\n    var identifyRequest;\n    if (this.options.popup) {\n      identifyRequest = this.options.popup.on(this._map).at(e.latlng);\n    } else {\n      identifyRequest = this.identify().on(this._map).at(e.latlng);\n    }\n\n    // remove extraneous vertices from response features if it has not already been done\n    identifyRequest.params.maxAllowableOffset ? true : identifyRequest.simplify(this._map, 0.5);\n\n    if (!(this.options.popup && this.options.popup.params && this.options.popup.params.layers)) {\n      if (this.options.layers) {\n        identifyRequest.layers('visible:' + this.options.layers.join(','));\n      } else {\n        identifyRequest.layers('visible');\n      }\n    }\n\n    // if present, pass layer ids and sql filters through to the identify task\n    if (this.options.layerDefs && typeof this.options.layerDefs !== 'string' && !identifyRequest.params.layerDefs) {\n      for (var id in this.options.layerDefs) {\n        if (this.options.layerDefs.hasOwnProperty(id)) {\n          identifyRequest.layerDef(id, this.options.layerDefs[id]);\n        }\n      }\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 sr = parseInt(this._map.options.crs.code.split(':')[1], 10);\n\n    var params = {\n      bbox: this._calculateBbox(),\n      size: this._calculateImageSize(),\n      dpi: 96,\n      format: this.options.format,\n      transparent: this.options.transparent,\n      bboxSR: sr,\n      imageSR: sr\n    };\n\n    if (this.options.dynamicLayers) {\n      params.dynamicLayers = this.options.dynamicLayers;\n    }\n\n    if (this.options.layers) {\n      if (this.options.layers.length === 0) {\n        return;\n      } else {\n        params.layers = 'show:' + this.options.layers.join(',');\n      }\n    }\n\n    if (this.options.layerDefs) {\n      params.layerDefs = typeof this.options.layerDefs === 'string' ? this.options.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    if (this.options.proxy) {\n      params.proxy = this.options.proxy;\n    }\n\n    // use a timestamp to bust server cache\n    if (this.options.disableCache) {\n      params._ts = Date.now();\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\n        if (this.options.token) {\n          response.href += ('?token=' + this.options.token);\n        }\n        if (this.options.proxy) {\n          response.href = this.options.proxy + '?' + response.href;\n        }\n        if (response.href) {\n          this._renderImage(response.href, bounds);\n        } else {\n          this._renderImage(response.imageData, bounds, response.contentType);\n        }\n      }, this);\n    } else {\n      params.f = 'image';\n      this._renderImage(this.options.url + 'export' + Util.getParamString(params), bounds);\n    }\n  }\n});\n\nexport function dynamicMapLayer (url, options) {\n  return new DynamicMapLayer(url, options);\n}\n\nexport default dynamicMapLayer;\n","import {\n  bounds,\n  latLngBounds,\n  point,\n  Layer,\n  setOptions,\n  Util\n} from 'leaflet';\n\nvar VirtualGrid = Layer.extend({\n\n  options: {\n    cellSize: 512,\n    updateInterval: 150\n  },\n\n  initialize: function (options) {\n    options = setOptions(this, options);\n    this._zooming = false;\n  },\n\n  onAdd: function (map) {\n    this._map = map;\n    this._update = Util.throttle(this._update, this.options.updateInterval, this);\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      moveend: this._update,\n      zoomstart: this._zoomstart,\n      zoomend: this._reset\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  _zoomstart: function () {\n    this._zooming = true;\n  },\n\n  _reset: function () {\n    this._removeCells();\n\n    this._cells = {};\n    this._activeCells = {};\n    this._cellsToLoad = 0;\n    this._cellsTotal = 0;\n    this._cellNumBounds = this._getCellNumBounds();\n\n    this._resetWrap();\n    this._zooming = false;\n  },\n\n  _resetWrap: function () {\n    var map = this._map;\n    var 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) {\n      return;\n    }\n\n    var mapBounds = this._map.getPixelBounds();\n    var cellSize = this._getCellSize();\n\n    // cell coordinates range for the current view\n    var cellBounds = bounds(\n      mapBounds.min.divideBy(cellSize).floor(),\n      mapBounds.max.divideBy(cellSize).floor());\n\n    this._removeOtherCells(cellBounds);\n    this._addCells(cellBounds);\n\n    this.fire('cellsupdated');\n  },\n\n  _addCells: function (cellBounds) {\n    var queue = [];\n    var center = cellBounds.getCenter();\n    var zoom = this._map.getZoom();\n\n    var j, i, coords;\n    // create a queue of coordinates to load cells from\n    for (j = cellBounds.min.y; j <= cellBounds.max.y; j++) {\n      for (i = cellBounds.min.x; i <= cellBounds.max.x; i++) {\n        coords = point(i, j);\n        coords.z = zoom;\n\n        if (this._isValidCell(coords)) {\n          queue.push(coords);\n        }\n      }\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  _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 cellNumBounds = this._cellNumBounds;\n\n      if (!cellNumBounds) return false;\n      if (\n        (!crs.wrapLng && (coords.x < cellNumBounds.min.x || coords.x > cellNumBounds.max.x)) ||\n        (!crs.wrapLat && (coords.y < cellNumBounds.min.y || coords.y > cellNumBounds.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 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    var cellSize = this.options.cellSize;\n    var nwPoint = coords.multiplyBy(cellSize);\n    var sePoint = nwPoint.add([cellSize, cellSize]);\n    var nw = map.wrapLatLng(map.unproject(nwPoint, coords.z));\n    var se = map.wrapLatLng(map.unproject(sePoint, coords.z));\n\n    return 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    var x = parseInt(kArr[0], 10);\n    var y = parseInt(kArr[1], 10);\n\n    return 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\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 cellBounds = this._cells[key].bounds;\n      var coords = this._cells[key].coords;\n\n      if (this.cellLeave) {\n        this.cellLeave(cellBounds, coords);\n      }\n\n      this.fire('cellleave', {\n        bounds: cellBounds,\n        coords: coords\n      });\n    }\n  },\n\n  _addCell: function (coords) {\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 ? Util.wrapNum(coords.x, this._wrapLng) : coords.x;\n    coords.y = this._wrapLat ? Util.wrapNum(coords.y, this._wrapLat) : coords.y;\n  },\n\n  // get the global cell coordinates range for the current zoom\n  _getCellNumBounds: function () {\n    var worldBounds = this._map.getPixelWorldBounds();\n    var size = this._getCellSize();\n\n    return worldBounds ? bounds(\n      worldBounds.min.divideBy(size).floor(),\n      worldBounds.max.divideBy(size).ceil().subtract([1, 1])) : null;\n  }\n});\n\nexport default VirtualGrid;\n","function BinarySearchIndex (values) {\n  this.values = [].concat(values || []);\n}\n\nBinarySearchIndex.prototype.query = function (value) {\n  var index = this.getIndex(value);\n  return this.values[index];\n};\n\nBinarySearchIndex.prototype.getIndex = function getIndex (value) {\n  if (this.dirty) {\n    this.sort();\n  }\n\n  var minIndex = 0;\n  var maxIndex = this.values.length - 1;\n  var currentIndex;\n  var currentElement;\n\n  while (minIndex <= maxIndex) {\n    currentIndex = (minIndex + maxIndex) / 2 | 0;\n    currentElement = this.values[Math.round(currentIndex)];\n    if (+currentElement.value < +value) {\n      minIndex = currentIndex + 1;\n    } else if (+currentElement.value > +value) {\n      maxIndex = currentIndex - 1;\n    } else {\n      return currentIndex;\n    }\n  }\n\n  return Math.abs(~maxIndex);\n};\n\nBinarySearchIndex.prototype.between = function between (start, end) {\n  var startIndex = this.getIndex(start);\n  var endIndex = this.getIndex(end);\n\n  if (startIndex === 0 && endIndex === 0) {\n    return [];\n  }\n\n  while (this.values[startIndex - 1] && this.values[startIndex - 1].value === start) {\n    startIndex--;\n  }\n\n  while (this.values[endIndex + 1] && this.values[endIndex + 1].value === end) {\n    endIndex++;\n  }\n\n  if (this.values[endIndex] && this.values[endIndex].value === end && this.values[endIndex + 1]) {\n    endIndex++;\n  }\n\n  return this.values.slice(startIndex, endIndex);\n};\n\nBinarySearchIndex.prototype.insert = function insert (item) {\n  this.values.splice(this.getIndex(item.value), 0, item);\n  return this;\n};\n\nBinarySearchIndex.prototype.bulkAdd = function bulkAdd (items, sort) {\n  this.values = this.values.concat([].concat(items || []));\n\n  if (sort) {\n    this.sort();\n  } else {\n    this.dirty = true;\n  }\n\n  return this;\n};\n\nBinarySearchIndex.prototype.sort = function sort () {\n  this.values.sort(function (a, b) {\n    return +b.value - +a.value;\n  }).reverse();\n  this.dirty = false;\n  return this;\n};\n\nexport default BinarySearchIndex;\n","import { Util } from 'leaflet';\nimport featureLayerService from '../../Services/FeatureLayerService';\nimport { getUrlParams, warn, setEsriAttribution } from '../../Util';\nimport VirtualGrid from 'leaflet-virtual-grid';\nimport BinarySearchIndex from 'tiny-binary-search';\n\nexport var FeatureManager = VirtualGrid.extend({\n  /**\n   * Options\n   */\n\n  options: {\n    attribution: null,\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    VirtualGrid.prototype.initialize.call(this, options);\n\n    options = getUrlParams(options);\n    options = Util.setOptions(this, options);\n\n    this.service = featureLayerService(options);\n    this.service.addEventParent(this);\n\n    // use case insensitive regex to look for common fieldnames used for indexing\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        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    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  },\n\n  /**\n   * Layer Interface\n   */\n\n  onAdd: function (map) {\n    // include 'Powered by Esri' in map attribution\n    setEsriAttribution(map);\n\n    this.service.metadata(function (err, metadata) {\n      if (!err) {\n        var supportedFormats = metadata.supportedQueryFormats;\n\n        // Check if someone has requested that we don't use geoJSON, even if it's available\n        var forceJsonFormat = false;\n        if (this.service.options.isModern === false) {\n          forceJsonFormat = true;\n        }\n\n        // Unless we've been told otherwise, check to see whether service can emit GeoJSON natively\n        if (!forceJsonFormat && supportedFormats && supportedFormats.indexOf('geoJSON') !== -1) {\n          this.service.options.isModern = true;\n        }\n\n        if (metadata.objectIdField) {\n          this.service.options.idAttribute = metadata.objectIdField;\n        }\n\n        // add copyright text listed in service metadata\n        if (!this.options.attribution && map.attributionControl && metadata.copyrightText) {\n          this.options.attribution = metadata.copyrightText;\n          map.attributionControl.addAttribution(this.getAttribution());\n        }\n      }\n    }, this);\n\n    map.on('zoomend', this._handleZoomChange, this);\n\n    return VirtualGrid.prototype.onAdd.call(this, map);\n  },\n\n  onRemove: function (map) {\n    map.off('zoomend', this._handleZoomChange, this);\n\n    return VirtualGrid.prototype.onRemove.call(this, map);\n  },\n\n  getAttribution: function () {\n    return this.options.attribution;\n  },\n\n  /**\n   * Feature Management\n   */\n\n  createCell: function (bounds, coords) {\n    // dont fetch features outside the scale range defined for the layer\n    if (this._visibleZoom()) {\n      this._requestFeatures(bounds, coords);\n    }\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      }, true);\n    }\n\n    return 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) {\n        // schedule adding features until the next animation frame\n        Util.requestAnimFrame(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 (error) {\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    // deincrement 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\n      if (this._currentSnapshot.indexOf(id) === -1) {\n        this._currentSnapshot.push(id);\n      }\n      if (this._cache[key].indexOf(id) === -1) {\n        this._cache[key].push(id);\n      }\n    }\n\n    if (this.options.timeField) {\n      this._buildTimeIndexes(features);\n    }\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.requestParams) {\n      Util.extend(query.params, this.options.requestParams);\n    }\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    this.options.where = (where && where.length) ? where : '1=1';\n\n    var oldSnapshot = [];\n    var newSnapshot = [];\n    var pendingRequests = 0;\n    var requestError = null;\n    var requestCallback = Util.bind(function (error, featureCollection) {\n      if (error) {\n        requestError = 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      pendingRequests--;\n\n      if (pendingRequests <= 0 && this._visibleZoom()) {\n        this._currentSnapshot = newSnapshot;\n        // schedule adding features for the next animation frame\n        Util.requestAnimFrame(Util.bind(function () {\n          this.removeLayers(oldSnapshot);\n          this.addLayers(newSnapshot);\n          if (callback) {\n            callback.call(context, requestError);\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 requestError = null;\n    var requestCallback = Util.bind(function (error) {\n      if (error) {\n        requestError = error;\n      }\n      this._filterExistingFeatures(oldFrom, oldTo, from, to);\n\n      pendingRequests--;\n\n      if (callback && pendingRequests <= 0) {\n        callback.call(context, requestError);\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    return this;\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    Util.requestAnimFrame(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  _visibleZoom: function () {\n    // check to see whether the current zoom level of the map is within the optional limit defined for the FeatureLayer\n    if (!this._map) {\n      return false;\n    }\n    var zoom = this._map.getZoom();\n    if (zoom > this.options.maxZoom || zoom < this.options.minZoom) {\n      return false;\n    } else { return true; }\n  },\n\n  _handleZoomChange: function () {\n    if (!this._visibleZoom()) {\n      this.removeLayers(this._currentSnapshot);\n      this._currentSnapshot = [];\n    } else {\n      /*\n      for every cell in this._activeCells\n        1. Get the cache key for the coords of the cell\n        2. If this._cache[key] exists it will be an array of feature IDs.\n        3. Call this.addLayers(this._cache[key]) to instruct the feature layer to add the layers back.\n      */\n      for (var i in this._activeCells) {\n        var coords = this._activeCells[i].coords;\n        var key = this._cacheKey(coords);\n        if (this._cache[key]) {\n          this.addLayers(this._cache[key]);\n        }\n      }\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(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.addFeatures(feature, callback, context);\n  },\n\n  addFeatures: function (features, callback, context) {\n    this._getMetadata(Util.bind(function (error, metadata) {\n      if (error) {\n        if (callback) { callback.call(this, error, null); }\n        return;\n      }\n      // GeoJSON featureCollection or simple feature\n      var featuresArray = features.features ? features.features : [features];\n\n      this.service.addFeatures(features, Util.bind(function (error, response) {\n        if (!error) {\n          for (var i = featuresArray.length - 1; i >= 0; i--) {\n            // assign ID from result to appropriate objectid field from service metadata\n            featuresArray[i].properties[metadata.objectIdField] = featuresArray.length > 1 ? response[i].objectId : response.objectId;\n            // we also need to update the geojson id for createLayers() to function\n            featuresArray[i].id = featuresArray.length > 1 ? response[i].objectId : response.objectId;\n          }\n          this.createLayers(featuresArray);\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.updateFeatures(feature, callback, context);\n  },\n\n  updateFeatures: function (features, callback, context) {\n    // GeoJSON featureCollection or simple feature\n    var featuresArray = features.features ? features.features : [features];\n    this.service.updateFeatures(features, function (error, response) {\n      if (!error) {\n        for (var i = featuresArray.length - 1; i >= 0; i--) {\n          this.removeLayers([featuresArray[i].id], true);\n        }\n        this.createLayers(featuresArray);\n      }\n\n      if (callback) {\n        callback.call(context, error, response);\n      }\n    }, this);\n  },\n\n  deleteFeature: function (id, callback, context) {\n    this.deleteFeatures(id, callback, context);\n  },\n\n  deleteFeatures: function (ids, callback, context) {\n    return this.service.deleteFeatures(ids, function (error, response) {\n      var responseArray = response.length ? response : [response];\n      if (!error && responseArray.length > 0) {\n        for (var i = responseArray.length - 1; i >= 0; i--) {\n          this.removeLayers([responseArray[i].objectId], true);\n        }\n      }\n      if (callback) {\n        callback.call(context, error, response);\n      }\n    }, this);\n  }\n});\n","import { Path, Util, GeoJSON, latLng } from 'leaflet';\nimport { FeatureManager } from './FeatureManager';\nimport { warn } from '../../Util';\n\nexport var FeatureLayer = FeatureManager.extend({\n\n  options: {\n    cacheLayers: true\n  },\n\n  /**\n   * Constructor\n   */\n  initialize: function (options) {\n    FeatureManager.prototype.initialize.call(this, options);\n    this._originalStyle = this.options.style;\n    this._layers = {};\n  },\n\n  /**\n   * Layer Interface\n   */\n\n  onRemove: function (map) {\n    for (var i in this._layers) {\n      map.removeLayer(this._layers[i]);\n      // trigger the event when the entire featureLayer is removed from the map\n      this.fire('removefeature', {\n        feature: this._layers[i].feature,\n        permanent: false\n      }, true);\n    }\n\n    return FeatureManager.prototype.onRemove.call(this, map);\n  },\n\n  createNewLayer: function (geojson) {\n    var layer = GeoJSON.geometryToLayer(geojson, this.options);\n    // trap for GeoJSON without geometry\n    if (layer) {\n      layer.defaultOptions = layer.options;\n    }\n    return layer;\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 || 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 = GeoJSON.coordsToLatLng(geojson.geometry.coordinates);\n        layer.setLatLng(latlngs);\n        break;\n      case 'LineString':\n        latlngs = GeoJSON.coordsToLatLngs(geojson.geometry.coordinates, 0, coordsToLatLng);\n        layer.setLatLngs(latlngs);\n        break;\n      case 'MultiLineString':\n        latlngs = GeoJSON.coordsToLatLngs(geojson.geometry.coordinates, 1, coordsToLatLng);\n        layer.setLatLngs(latlngs);\n        break;\n      case 'Polygon':\n        latlngs = GeoJSON.coordsToLatLngs(geojson.geometry.coordinates, 1, coordsToLatLng);\n        layer.setLatLngs(latlngs);\n        break;\n      case 'MultiPolygon':\n        latlngs = 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      var geojson = features[i];\n\n      var layer = this._layers[geojson.id];\n      var newLayer;\n\n      if (this._visibleZoom() && layer && !this._map.hasLayer(layer)) {\n        this._map.addLayer(layer);\n        this.fire('addfeature', {\n          feature: layer.feature\n        }, true);\n      }\n\n      // update geometry if necessary\n      if (layer && this.options.simplifyFactor > 0 && (layer.setLatLngs || layer.setLatLng)) {\n        this._updateLayer(layer, geojson);\n      }\n\n      if (!layer) {\n        newLayer = this.createNewLayer(geojson);\n\n        if (!newLayer) {\n          warn('invalid GeoJSON encountered');\n        } else {\n          newLayer.feature = geojson;\n\n          // bubble events from individual layers to the feature layer\n          newLayer.addEventParent(this);\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.setFeatureStyle(newLayer.feature.id, this.options.style);\n\n          this.fire('createfeature', {\n            feature: newLayer.feature\n          }, true);\n\n          // add the layer if the current zoom level is inside the range defined for the layer, it is within the current time bounds or our layer is not time enabled\n          if (this._visibleZoom() && (!this.options.timeField || (this.options.timeField && this._featureWithinTimeRange(geojson)))) {\n            this._map.addLayer(newLayer);\n          }\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._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        }, true);\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._visibleZoom() && !this._zooming && this._map) {\n      Util.requestAnimFrame(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      Util.requestAnimFrame(Util.bind(function () {\n        if (this._map) {\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        }\n      }, this));\n    }\n  },\n\n  /**\n   * Styling Methods\n   */\n\n  resetStyle: function () {\n    this.options.style = this._originalStyle;\n    this.eachFeature(function (layer) {\n      this.resetFeatureStyle(layer.feature.id);\n    }, this);\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  resetFeatureStyle: function (id) {\n    var layer = this._layers[id];\n    var style = this._originalStyle || Path.prototype.options;\n    if (layer) {\n      Util.extend(layer.options, layer.defaultOptions);\n      this.setFeatureStyle(id, style);\n    }\n    return this;\n  },\n\n  setFeatureStyle: function (id, style) {\n    var layer = this._layers[id];\n    if (typeof style === 'function') {\n      style = style(layer.feature);\n    }\n    if (layer.setStyle) {\n      layer.setStyle(style);\n    }\n    return this;\n  },\n\n  /**\n   * Utility Methods\n   */\n\n  eachActiveFeature: function (fn, context) {\n    // figure out (roughly) which layers are in view\n    if (this._map) {\n      var activeBounds = this._map.getBounds();\n      for (var i in this._layers) {\n        if (this._currentSnapshot.indexOf(this._layers[i].feature.id) !== -1) {\n          // a simple point in poly test for point geometries\n          if (typeof this._layers[i].getLatLng === 'function' && activeBounds.contains(this._layers[i].getLatLng())) {\n            fn.call(context, this._layers[i]);\n          } else if (typeof this._layers[i].getBounds === 'function' && activeBounds.intersects(this._layers[i].getBounds())) {\n            // intersecting bounds check for polyline and polygon geometries\n            fn.call(context, this._layers[i]);\n          }\n        }\n      }\n    }\n    return this;\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, 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, 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\nexport function featureLayer (options) {\n  return new FeatureLayer(options);\n}\n\nexport default featureLayer;\n","// export version\nexport {version as VERSION} from '../package.json';\n\n// import base\nexport { Support } from './Support';\nexport { options } from './Options';\nexport { EsriUtil as Util } from './Util';\nexport { get, post, request } from './Request';\n\n// export tasks\nexport { Task, task } from './Tasks/Task';\nexport { Query, query } from './Tasks/Query';\nexport { Find, find } from './Tasks/Find';\nexport { Identify, identify } from './Tasks/Identify';\nexport { IdentifyFeatures, identifyFeatures } from './Tasks/IdentifyFeatures';\nexport { IdentifyImage, identifyImage } from './Tasks/IdentifyImage';\n\n// export services\nexport { Service, service } from './Services/Service';\nexport { MapService, mapService } from './Services/MapService';\nexport { ImageService, imageService } from './Services/ImageService';\nexport { FeatureLayerService, featureLayerService } from './Services/FeatureLayerService';\n\n// export layers\nexport { BasemapLayer, basemapLayer } from './Layers/BasemapLayer';\nexport { TiledMapLayer, tiledMapLayer } from './Layers/TiledMapLayer';\nexport { RasterLayer } from './Layers/RasterLayer';\nexport { ImageMapLayer, imageMapLayer } from './Layers/ImageMapLayer';\nexport { DynamicMapLayer, dynamicMapLayer } from './Layers/DynamicMapLayer';\nexport { FeatureManager } from './Layers/FeatureLayer/FeatureManager';\nexport { FeatureLayer, featureLayer } from './Layers/FeatureLayer/FeatureLayer';\n"],"names":["Util","DomUtil","geojsonToArcGIS","g2a","arcgisToGeoJSON","a2g","latLng","latLngBounds","options","LatLngBounds","LatLng","GeoJSON","Class","point","Evented","request","TileLayer","DomEvent","CRS","ImageOverlay","Layer","popup","bounds","setOptions","Path"],"mappings":"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"}