{"version":3,"file":"Control.Geocoder.min.js","sources":["../src/util.js","../src/geocoders/arcgis.js","../src/geocoders/bing.js","../src/geocoders/google.js","../src/geocoders/here.js","../src/geocoders/latlng.js","../src/geocoders/mapbox.js","../src/geocoders/mapquest.js","../src/geocoders/neutrino.js","../src/geocoders/nominatim.js","../src/geocoders/open-location-code.js","../src/geocoders/opencage.js","../src/geocoders/pelias.js","../src/geocoders/photon.js","../src/geocoders/what3words.js","../src/control.js","../src/index.js"],"sourcesContent":["import L from 'leaflet';\nvar lastCallbackId = 0;\n\n// Adapted from handlebars.js\n// https://github.com/wycats/handlebars.js/\nvar badChars = /[&<>\"'`]/g;\nvar possible = /[&<>\"'`]/;\nvar escape = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n};\n\nfunction escapeChar(chr) {\n return escape[chr];\n}\n\nexport function htmlEscape(string) {\n if (string == null) {\n return '';\n } else if (!string) {\n return string + '';\n }\n\n // Force a string conversion as this will be done by the append regardless and\n // the regex test will do this transparently behind the scenes, causing issues if\n // an object's to string has escaped characters in it.\n string = '' + string;\n\n if (!possible.test(string)) {\n return string;\n }\n return string.replace(badChars, escapeChar);\n}\n\nexport function jsonp(url, params, callback, context, jsonpParam) {\n var callbackId = '_l_geocoder_' + lastCallbackId++;\n params[jsonpParam || 'callback'] = callbackId;\n window[callbackId] = L.Util.bind(callback, context);\n var script = document.createElement('script');\n script.type = 'text/javascript';\n script.src = url + getParamString(params);\n script.id = callbackId;\n document.getElementsByTagName('head')[0].appendChild(script);\n}\n\nexport function getJSON(url, params, callback) {\n var xmlHttp = new XMLHttpRequest();\n xmlHttp.onreadystatechange = function() {\n if (xmlHttp.readyState !== 4) {\n return;\n }\n var message;\n if (xmlHttp.status !== 200 && xmlHttp.status !== 304) {\n message = '';\n } else if (typeof xmlHttp.response === 'string') {\n // IE doesn't parse JSON responses even with responseType: 'json'.\n try {\n message = JSON.parse(xmlHttp.response);\n } catch (e) {\n // Not a JSON response\n message = xmlHttp.response;\n }\n } else {\n message = xmlHttp.response;\n }\n callback(message);\n };\n xmlHttp.open('GET', url + getParamString(params), true);\n xmlHttp.responseType = 'json';\n xmlHttp.setRequestHeader('Accept', 'application/json');\n xmlHttp.send(null);\n}\n\nexport function template(str, data) {\n return str.replace(/\\{ *([\\w_]+) *\\}/g, function(str, key) {\n var value = data[key];\n if (value === undefined) {\n value = '';\n } else if (typeof value === 'function') {\n value = value(data);\n }\n return htmlEscape(value);\n });\n}\n\nexport function getParamString(obj, existingUrl, uppercase) {\n var params = [];\n for (var i in obj) {\n var key = encodeURIComponent(uppercase ? i.toUpperCase() : i);\n var value = obj[i];\n if (!L.Util.isArray(value)) {\n params.push(key + '=' + encodeURIComponent(value));\n } else {\n for (var j = 0; j < value.length; j++) {\n params.push(key + '=' + encodeURIComponent(value[j]));\n }\n }\n }\n return (!existingUrl || existingUrl.indexOf('?') === -1 ? '?' : '&') + params.join('&');\n}\n","import L from 'leaflet';\nimport { getJSON } from '../util';\n\nexport var ArcGis = L.Class.extend({\n options: {\n service_url: 'https://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer'\n },\n\n initialize: function(accessToken, options) {\n L.setOptions(this, options);\n this._accessToken = accessToken;\n },\n\n geocode: function(query, cb, context) {\n var params = {\n SingleLine: query,\n outFields: 'Addr_Type',\n forStorage: false,\n maxLocations: 10,\n f: 'json'\n };\n\n if (this._key && this._key.length) {\n params.token = this._key;\n }\n\n getJSON(\n this.options.service_url + '/findAddressCandidates',\n L.extend(params, this.options.geocodingQueryParams),\n function(data) {\n var results = [],\n loc,\n latLng,\n latLngBounds;\n\n if (data.candidates && data.candidates.length) {\n for (var i = 0; i <= data.candidates.length - 1; i++) {\n loc = data.candidates[i];\n latLng = L.latLng(loc.location.y, loc.location.x);\n latLngBounds = L.latLngBounds(\n L.latLng(loc.extent.ymax, loc.extent.xmax),\n L.latLng(loc.extent.ymin, loc.extent.xmin)\n );\n results[i] = {\n name: loc.address,\n bbox: latLngBounds,\n center: latLng\n };\n }\n }\n\n cb.call(context, results);\n }\n );\n },\n\n suggest: function(query, cb, context) {\n return this.geocode(query, cb, context);\n },\n\n reverse: function(location, scale, cb, context) {\n var params = {\n location: encodeURIComponent(location.lng) + ',' + encodeURIComponent(location.lat),\n distance: 100,\n f: 'json'\n };\n\n getJSON(this.options.service_url + '/reverseGeocode', params, function(data) {\n var result = [],\n loc;\n\n if (data && !data.error) {\n loc = L.latLng(data.location.y, data.location.x);\n result.push({\n name: data.address.Match_addr,\n center: loc,\n bounds: L.latLngBounds(loc, loc)\n });\n }\n\n cb.call(context, result);\n });\n }\n});\n\nexport function arcgis(accessToken, options) {\n return new ArcGis(accessToken, options);\n}\n","import L from 'leaflet';\nimport { jsonp } from '../util';\n\nexport var Bing = L.Class.extend({\n initialize: function(key) {\n this.key = key;\n },\n\n geocode: function(query, cb, context) {\n jsonp(\n 'https://dev.virtualearth.net/REST/v1/Locations',\n {\n query: query,\n key: this.key\n },\n function(data) {\n var results = [];\n if (data.resourceSets.length > 0) {\n for (var i = data.resourceSets[0].resources.length - 1; i >= 0; i--) {\n var resource = data.resourceSets[0].resources[i],\n bbox = resource.bbox;\n results[i] = {\n name: resource.name,\n bbox: L.latLngBounds([bbox[0], bbox[1]], [bbox[2], bbox[3]]),\n center: L.latLng(resource.point.coordinates)\n };\n }\n }\n cb.call(context, results);\n },\n this,\n 'jsonp'\n );\n },\n\n reverse: function(location, scale, cb, context) {\n jsonp(\n '//dev.virtualearth.net/REST/v1/Locations/' + location.lat + ',' + location.lng,\n {\n key: this.key\n },\n function(data) {\n var results = [];\n for (var i = data.resourceSets[0].resources.length - 1; i >= 0; i--) {\n var resource = data.resourceSets[0].resources[i],\n bbox = resource.bbox;\n results[i] = {\n name: resource.name,\n bbox: L.latLngBounds([bbox[0], bbox[1]], [bbox[2], bbox[3]]),\n center: L.latLng(resource.point.coordinates)\n };\n }\n cb.call(context, results);\n },\n this,\n 'jsonp'\n );\n }\n});\n\nexport function bing(key) {\n return new Bing(key);\n}\n","import L from 'leaflet';\nimport { getJSON } from '../util';\n\nexport var Google = L.Class.extend({\n options: {\n serviceUrl: 'https://maps.googleapis.com/maps/api/geocode/json',\n geocodingQueryParams: {},\n reverseQueryParams: {}\n },\n\n initialize: function(key, options) {\n this._key = key;\n L.setOptions(this, options);\n // Backwards compatibility\n this.options.serviceUrl = this.options.service_url || this.options.serviceUrl;\n },\n\n geocode: function(query, cb, context) {\n var params = {\n address: query\n };\n\n if (this._key && this._key.length) {\n params.key = this._key;\n }\n\n params = L.Util.extend(params, this.options.geocodingQueryParams);\n\n getJSON(this.options.serviceUrl, params, function(data) {\n var results = [],\n loc,\n latLng,\n latLngBounds;\n if (data.results && data.results.length) {\n for (var i = 0; i <= data.results.length - 1; i++) {\n loc = data.results[i];\n latLng = L.latLng(loc.geometry.location);\n latLngBounds = L.latLngBounds(\n L.latLng(loc.geometry.viewport.northeast),\n L.latLng(loc.geometry.viewport.southwest)\n );\n results[i] = {\n name: loc.formatted_address,\n bbox: latLngBounds,\n center: latLng,\n properties: loc.address_components\n };\n }\n }\n\n cb.call(context, results);\n });\n },\n\n reverse: function(location, scale, cb, context) {\n var params = {\n latlng: encodeURIComponent(location.lat) + ',' + encodeURIComponent(location.lng)\n };\n params = L.Util.extend(params, this.options.reverseQueryParams);\n if (this._key && this._key.length) {\n params.key = this._key;\n }\n\n getJSON(this.options.serviceUrl, params, function(data) {\n var results = [],\n loc,\n latLng,\n latLngBounds;\n if (data.results && data.results.length) {\n for (var i = 0; i <= data.results.length - 1; i++) {\n loc = data.results[i];\n latLng = L.latLng(loc.geometry.location);\n latLngBounds = L.latLngBounds(\n L.latLng(loc.geometry.viewport.northeast),\n L.latLng(loc.geometry.viewport.southwest)\n );\n results[i] = {\n name: loc.formatted_address,\n bbox: latLngBounds,\n center: latLng,\n properties: loc.address_components\n };\n }\n }\n\n cb.call(context, results);\n });\n }\n});\n\nexport function google(key, options) {\n return new Google(key, options);\n}\n","import L from 'leaflet';\nimport { getJSON } from '../util';\nexport var HERE = L.Class.extend({\n options: {\n geocodeUrl: 'https://geocoder.api.here.com/6.2/geocode.json',\n reverseGeocodeUrl: 'https://reverse.geocoder.api.here.com/6.2/reversegeocode.json',\n app_id: '',\n app_code: '',\n geocodingQueryParams: {},\n reverseQueryParams: {},\n reverseGeocodeProxRadius: null\n },\n initialize: function(options) {\n L.setOptions(this, options);\n },\n geocode: function(query, cb, context) {\n var params = {\n searchtext: query,\n gen: 9,\n app_id: this.options.app_id,\n app_code: this.options.app_code,\n jsonattributes: 1\n };\n params = L.Util.extend(params, this.options.geocodingQueryParams);\n this.getJSON(this.options.geocodeUrl, params, cb, context);\n },\n reverse: function(location, scale, cb, context) {\n var _proxRadius = this.options.reverseGeocodeProxRadius\n ? this.options.reverseGeocodeProxRadius\n : null;\n var proxRadius = _proxRadius ? ',' + encodeURIComponent(_proxRadius) : '';\n var params = {\n prox: encodeURIComponent(location.lat) + ',' + encodeURIComponent(location.lng) + proxRadius,\n mode: 'retrieveAddresses',\n app_id: this.options.app_id,\n app_code: this.options.app_code,\n gen: 9,\n jsonattributes: 1\n };\n params = L.Util.extend(params, this.options.reverseQueryParams);\n this.getJSON(this.options.reverseGeocodeUrl, params, cb, context);\n },\n getJSON: function(url, params, cb, context) {\n getJSON(url, params, function(data) {\n var results = [],\n loc,\n latLng,\n latLngBounds;\n if (data.response.view && data.response.view.length) {\n for (var i = 0; i <= data.response.view[0].result.length - 1; i++) {\n loc = data.response.view[0].result[i].location;\n latLng = L.latLng(loc.displayPosition.latitude, loc.displayPosition.longitude);\n latLngBounds = L.latLngBounds(\n L.latLng(loc.mapView.topLeft.latitude, loc.mapView.topLeft.longitude),\n L.latLng(loc.mapView.bottomRight.latitude, loc.mapView.bottomRight.longitude)\n );\n results[i] = {\n name: loc.address.label,\n bbox: latLngBounds,\n center: latLng\n };\n }\n }\n cb.call(context, results);\n });\n }\n});\nexport function here(options) {\n return new HERE(options);\n}\n","import L from 'leaflet';\n\nexport var LatLng = L.Class.extend({\n options: {\n // the next geocoder to use\n next: undefined,\n sizeInMeters: 10000\n },\n\n initialize: function(options) {\n L.Util.setOptions(this, options);\n },\n\n geocode: function(query, cb, context) {\n var match;\n var center;\n // regex from https://github.com/openstreetmap/openstreetmap-website/blob/master/app/controllers/geocoder_controller.rb\n if ((match = query.match(/^([NS])\\s*(\\d{1,3}(?:\\.\\d*)?)\\W*([EW])\\s*(\\d{1,3}(?:\\.\\d*)?)$/))) {\n // [NSEW] decimal degrees\n center = L.latLng(\n (/N/i.test(match[1]) ? 1 : -1) * parseFloat(match[2]),\n (/E/i.test(match[3]) ? 1 : -1) * parseFloat(match[4])\n );\n } else if (\n (match = query.match(/^(\\d{1,3}(?:\\.\\d*)?)\\s*([NS])\\W*(\\d{1,3}(?:\\.\\d*)?)\\s*([EW])$/))\n ) {\n // decimal degrees [NSEW]\n center = L.latLng(\n (/N/i.test(match[2]) ? 1 : -1) * parseFloat(match[1]),\n (/E/i.test(match[4]) ? 1 : -1) * parseFloat(match[3])\n );\n } else if (\n (match = query.match(\n /^([NS])\\s*(\\d{1,3})°?\\s*(\\d{1,3}(?:\\.\\d*)?)?['′]?\\W*([EW])\\s*(\\d{1,3})°?\\s*(\\d{1,3}(?:\\.\\d*)?)?['′]?$/\n ))\n ) {\n // [NSEW] degrees, decimal minutes\n center = L.latLng(\n (/N/i.test(match[1]) ? 1 : -1) * (parseFloat(match[2]) + parseFloat(match[3] / 60)),\n (/E/i.test(match[4]) ? 1 : -1) * (parseFloat(match[5]) + parseFloat(match[6] / 60))\n );\n } else if (\n (match = query.match(\n /^(\\d{1,3})°?\\s*(\\d{1,3}(?:\\.\\d*)?)?['′]?\\s*([NS])\\W*(\\d{1,3})°?\\s*(\\d{1,3}(?:\\.\\d*)?)?['′]?\\s*([EW])$/\n ))\n ) {\n // degrees, decimal minutes [NSEW]\n center = L.latLng(\n (/N/i.test(match[3]) ? 1 : -1) * (parseFloat(match[1]) + parseFloat(match[2] / 60)),\n (/E/i.test(match[6]) ? 1 : -1) * (parseFloat(match[4]) + parseFloat(match[5] / 60))\n );\n } else if (\n (match = query.match(\n /^([NS])\\s*(\\d{1,3})°?\\s*(\\d{1,2})['′]?\\s*(\\d{1,3}(?:\\.\\d*)?)?[\"″]?\\W*([EW])\\s*(\\d{1,3})°?\\s*(\\d{1,2})['′]?\\s*(\\d{1,3}(?:\\.\\d*)?)?[\"″]?$/\n ))\n ) {\n // [NSEW] degrees, minutes, decimal seconds\n center = L.latLng(\n (/N/i.test(match[1]) ? 1 : -1) *\n (parseFloat(match[2]) + parseFloat(match[3] / 60 + parseFloat(match[4] / 3600))),\n (/E/i.test(match[5]) ? 1 : -1) *\n (parseFloat(match[6]) + parseFloat(match[7] / 60) + parseFloat(match[8] / 3600))\n );\n } else if (\n (match = query.match(\n /^(\\d{1,3})°?\\s*(\\d{1,2})['′]?\\s*(\\d{1,3}(?:\\.\\d*)?)?[\"″]\\s*([NS])\\W*(\\d{1,3})°?\\s*(\\d{1,2})['′]?\\s*(\\d{1,3}(?:\\.\\d*)?)?[\"″]?\\s*([EW])$/\n ))\n ) {\n // degrees, minutes, decimal seconds [NSEW]\n center = L.latLng(\n (/N/i.test(match[4]) ? 1 : -1) *\n (parseFloat(match[1]) + parseFloat(match[2] / 60 + parseFloat(match[3] / 3600))),\n (/E/i.test(match[8]) ? 1 : -1) *\n (parseFloat(match[5]) + parseFloat(match[6] / 60) + parseFloat(match[7] / 3600))\n );\n } else if (\n (match = query.match(/^\\s*([+-]?\\d+(?:\\.\\d*)?)\\s*[\\s,]\\s*([+-]?\\d+(?:\\.\\d*)?)\\s*$/))\n ) {\n center = L.latLng(parseFloat(match[1]), parseFloat(match[2]));\n }\n if (center) {\n var results = [\n {\n name: query,\n center: center,\n bbox: center.toBounds(this.options.sizeInMeters)\n }\n ];\n cb.call(context, results);\n } else if (this.options.next) {\n this.options.next.geocode(query, cb, context);\n }\n }\n});\n\nexport function latLng(options) {\n return new LatLng(options);\n}\n","import L from 'leaflet';\nimport { getJSON } from '../util';\n\nexport var Mapbox = L.Class.extend({\n options: {\n serviceUrl: 'https://api.mapbox.com/geocoding/v5/mapbox.places/',\n geocodingQueryParams: {},\n reverseQueryParams: {}\n },\n\n initialize: function(accessToken, options) {\n L.setOptions(this, options);\n this.options.geocodingQueryParams.access_token = accessToken;\n this.options.reverseQueryParams.access_token = accessToken;\n },\n\n geocode: function(query, cb, context) {\n var params = this.options.geocodingQueryParams;\n if (\n params.proximity !== undefined &&\n params.proximity.lat !== undefined &&\n params.proximity.lng !== undefined\n ) {\n params.proximity = params.proximity.lng + ',' + params.proximity.lat;\n }\n getJSON(this.options.serviceUrl + encodeURIComponent(query) + '.json', params, function(data) {\n var results = [],\n loc,\n latLng,\n latLngBounds;\n if (data.features && data.features.length) {\n for (var i = 0; i <= data.features.length - 1; i++) {\n loc = data.features[i];\n latLng = L.latLng(loc.center.reverse());\n if (loc.bbox) {\n latLngBounds = L.latLngBounds(\n L.latLng(loc.bbox.slice(0, 2).reverse()),\n L.latLng(loc.bbox.slice(2, 4).reverse())\n );\n } else {\n latLngBounds = L.latLngBounds(latLng, latLng);\n }\n\n var properties = {\n text: loc.text,\n address: loc.address\n };\n\n for (var j = 0; j < (loc.context || []).length; j++) {\n var id = loc.context[j].id.split('.')[0];\n properties[id] = loc.context[j].text;\n }\n\n results[i] = {\n name: loc.place_name,\n bbox: latLngBounds,\n center: latLng,\n properties: properties\n };\n }\n }\n\n cb.call(context, results);\n });\n },\n\n suggest: function(query, cb, context) {\n return this.geocode(query, cb, context);\n },\n\n reverse: function(location, scale, cb, context) {\n getJSON(\n this.options.serviceUrl +\n encodeURIComponent(location.lng) +\n ',' +\n encodeURIComponent(location.lat) +\n '.json',\n this.options.reverseQueryParams,\n function(data) {\n var results = [],\n loc,\n latLng,\n latLngBounds;\n if (data.features && data.features.length) {\n for (var i = 0; i <= data.features.length - 1; i++) {\n loc = data.features[i];\n latLng = L.latLng(loc.center.reverse());\n if (loc.bbox) {\n latLngBounds = L.latLngBounds(\n L.latLng(loc.bbox.slice(0, 2).reverse()),\n L.latLng(loc.bbox.slice(2, 4).reverse())\n );\n } else {\n latLngBounds = L.latLngBounds(latLng, latLng);\n }\n results[i] = {\n name: loc.place_name,\n bbox: latLngBounds,\n center: latLng\n };\n }\n }\n\n cb.call(context, results);\n }\n );\n }\n});\n\nexport function mapbox(accessToken, options) {\n return new Mapbox(accessToken, options);\n}\n","import L from 'leaflet';\nimport { getJSON } from '../util';\n\nexport var MapQuest = L.Class.extend({\n options: {\n serviceUrl: 'https://www.mapquestapi.com/geocoding/v1'\n },\n\n initialize: function(key, options) {\n // MapQuest seems to provide URI encoded API keys,\n // so to avoid encoding them twice, we decode them here\n this._key = decodeURIComponent(key);\n\n L.Util.setOptions(this, options);\n },\n\n _formatName: function() {\n var r = [],\n i;\n for (i = 0; i < arguments.length; i++) {\n if (arguments[i]) {\n r.push(arguments[i]);\n }\n }\n\n return r.join(', ');\n },\n\n geocode: function(query, cb, context) {\n getJSON(\n this.options.serviceUrl + '/address',\n {\n key: this._key,\n location: query,\n limit: 5,\n outFormat: 'json'\n },\n L.bind(function(data) {\n var results = [],\n loc,\n latLng;\n if (data.results && data.results[0].locations) {\n for (var i = data.results[0].locations.length - 1; i >= 0; i--) {\n loc = data.results[0].locations[i];\n latLng = L.latLng(loc.latLng);\n results[i] = {\n name: this._formatName(loc.street, loc.adminArea4, loc.adminArea3, loc.adminArea1),\n bbox: L.latLngBounds(latLng, latLng),\n center: latLng\n };\n }\n }\n\n cb.call(context, results);\n }, this)\n );\n },\n\n reverse: function(location, scale, cb, context) {\n getJSON(\n this.options.serviceUrl + '/reverse',\n {\n key: this._key,\n location: location.lat + ',' + location.lng,\n outputFormat: 'json'\n },\n L.bind(function(data) {\n var results = [],\n loc,\n latLng;\n if (data.results && data.results[0].locations) {\n for (var i = data.results[0].locations.length - 1; i >= 0; i--) {\n loc = data.results[0].locations[i];\n latLng = L.latLng(loc.latLng);\n results[i] = {\n name: this._formatName(loc.street, loc.adminArea4, loc.adminArea3, loc.adminArea1),\n bbox: L.latLngBounds(latLng, latLng),\n center: latLng\n };\n }\n }\n\n cb.call(context, results);\n }, this)\n );\n }\n});\n\nexport function mapQuest(key, options) {\n return new MapQuest(key, options);\n}\n","import L from 'leaflet';\nimport { getJSON } from '../util';\n\nexport var Neutrino = L.Class.extend({\n options: {\n userId: '',\n apiKey: '',\n serviceUrl: 'https://neutrinoapi.com/'\n },\n\n initialize: function(options) {\n L.Util.setOptions(this, options);\n },\n\n // https://www.neutrinoapi.com/api/geocode-address/\n geocode: function(query, cb, context) {\n getJSON(\n this.options.serviceUrl + 'geocode-address',\n {\n apiKey: this.options.apiKey,\n userId: this.options.userId,\n //get three words and make a dot based string\n address: query.split(/\\s+/).join('.')\n },\n function(data) {\n var results = [],\n latLng,\n latLngBounds;\n if (data.locations) {\n data.geometry = data.locations[0];\n latLng = L.latLng(data.geometry['latitude'], data.geometry['longitude']);\n latLngBounds = L.latLngBounds(latLng, latLng);\n results[0] = {\n name: data.geometry.address,\n bbox: latLngBounds,\n center: latLng\n };\n }\n\n cb.call(context, results);\n }\n );\n },\n\n suggest: function(query, cb, context) {\n return this.geocode(query, cb, context);\n },\n\n // https://www.neutrinoapi.com/api/geocode-reverse/\n reverse: function(location, scale, cb, context) {\n getJSON(\n this.options.serviceUrl + 'geocode-reverse',\n {\n apiKey: this.options.apiKey,\n userId: this.options.userId,\n latitude: location.lat,\n longitude: location.lng\n },\n function(data) {\n var results = [],\n latLng,\n latLngBounds;\n if (data.status.status == 200 && data.found) {\n latLng = L.latLng(location.lat, location.lng);\n latLngBounds = L.latLngBounds(latLng, latLng);\n results[0] = {\n name: data.address,\n bbox: latLngBounds,\n center: latLng\n };\n }\n cb.call(context, results);\n }\n );\n }\n});\n\nexport function neutrino(accessToken) {\n return new Neutrino(accessToken);\n}\n","import L from 'leaflet';\nimport { template, getJSON } from '../util';\n\nexport var Nominatim = L.Class.extend({\n options: {\n serviceUrl: 'https://nominatim.openstreetmap.org/',\n geocodingQueryParams: {},\n reverseQueryParams: {},\n htmlTemplate: function(r) {\n var a = r.address,\n parts = [];\n if (a.road || a.building) {\n parts.push('{building} {road} {house_number}');\n }\n\n if (a.city || a.town || a.village || a.hamlet) {\n parts.push(\n ' 0 ? 'leaflet-control-geocoder-address-detail' : '') +\n '\">{postcode} {city} {town} {village} {hamlet}'\n );\n }\n\n if (a.state || a.country) {\n parts.push(\n ' 0 ? 'leaflet-control-geocoder-address-context' : '') +\n '\">{state} {country}'\n );\n }\n\n return template(parts.join('
'), a, true);\n }\n },\n\n initialize: function(options) {\n L.Util.setOptions(this, options);\n },\n\n geocode: function(query, cb, context) {\n getJSON(\n this.options.serviceUrl + 'search',\n L.extend(\n {\n q: query,\n limit: 5,\n format: 'json',\n addressdetails: 1\n },\n this.options.geocodingQueryParams\n ),\n L.bind(function(data) {\n var results = [];\n for (var i = data.length - 1; i >= 0; i--) {\n var bbox = data[i].boundingbox;\n for (var j = 0; j < 4; j++) bbox[j] = parseFloat(bbox[j]);\n results[i] = {\n icon: data[i].icon,\n name: data[i].display_name,\n html: this.options.htmlTemplate ? this.options.htmlTemplate(data[i]) : undefined,\n bbox: L.latLngBounds([bbox[0], bbox[2]], [bbox[1], bbox[3]]),\n center: L.latLng(data[i].lat, data[i].lon),\n properties: data[i]\n };\n }\n cb.call(context, results);\n }, this)\n );\n },\n\n reverse: function(location, scale, cb, context) {\n getJSON(\n this.options.serviceUrl + 'reverse',\n L.extend(\n {\n lat: location.lat,\n lon: location.lng,\n zoom: Math.round(Math.log(scale / 256) / Math.log(2)),\n addressdetails: 1,\n format: 'json'\n },\n this.options.reverseQueryParams\n ),\n L.bind(function(data) {\n var result = [],\n loc;\n\n if (data && data.lat && data.lon) {\n loc = L.latLng(data.lat, data.lon);\n result.push({\n name: data.display_name,\n html: this.options.htmlTemplate ? this.options.htmlTemplate(data) : undefined,\n center: loc,\n bounds: L.latLngBounds(loc, loc),\n properties: data\n });\n }\n\n cb.call(context, result);\n }, this)\n );\n }\n});\n\nexport function nominatim(options) {\n return new Nominatim(options);\n}\n","import L from 'leaflet';\n\nexport var OpenLocationCode = L.Class.extend({\n options: {\n OpenLocationCode: undefined,\n codeLength: undefined\n },\n\n initialize: function(options) {\n L.setOptions(this, options);\n },\n\n geocode: function(query, cb, context) {\n try {\n var decoded = this.options.OpenLocationCode.decode(query);\n var result = {\n name: query,\n center: L.latLng(decoded.latitudeCenter, decoded.longitudeCenter),\n bbox: L.latLngBounds(\n L.latLng(decoded.latitudeLo, decoded.longitudeLo),\n L.latLng(decoded.latitudeHi, decoded.longitudeHi)\n )\n };\n cb.call(context, [result]);\n } catch (e) {\n console.warn(e); // eslint-disable-line no-console\n cb.call(context, []);\n }\n },\n reverse: function(location, scale, cb, context) {\n try {\n var code = this.options.OpenLocationCode.encode(\n location.lat,\n location.lng,\n this.options.codeLength\n );\n var result = {\n name: code,\n center: L.latLng(location.lat, location.lng),\n bbox: L.latLngBounds(\n L.latLng(location.lat, location.lng),\n L.latLng(location.lat, location.lng)\n )\n };\n cb.call(context, [result]);\n } catch (e) {\n console.warn(e); // eslint-disable-line no-console\n cb.call(context, []);\n }\n }\n});\n\nexport function openLocationCode(options) {\n return new OpenLocationCode(options);\n}\n","import L from 'leaflet';\nimport { getJSON } from '../util';\n\nexport var OpenCage = L.Class.extend({\n options: {\n serviceUrl: 'https://api.opencagedata.com/geocode/v1/json'\n },\n\n initialize: function(apiKey) {\n this._accessToken = apiKey;\n },\n\n geocode: function(query, cb, context) {\n getJSON(\n this.options.serviceUrl,\n {\n key: this._accessToken,\n q: query\n },\n function(data) {\n var results = [],\n latLng,\n latLngBounds,\n loc;\n if (data.results && data.results.length) {\n for (var i = 0; i < data.results.length; i++) {\n loc = data.results[i];\n latLng = L.latLng(loc.geometry);\n if (loc.annotations && loc.annotations.bounds) {\n latLngBounds = L.latLngBounds(\n L.latLng(loc.annotations.bounds.northeast),\n L.latLng(loc.annotations.bounds.southwest)\n );\n } else {\n latLngBounds = L.latLngBounds(latLng, latLng);\n }\n results.push({\n name: loc.formatted,\n bbox: latLngBounds,\n center: latLng\n });\n }\n }\n cb.call(context, results);\n }\n );\n },\n\n suggest: function(query, cb, context) {\n return this.geocode(query, cb, context);\n },\n\n reverse: function(location, scale, cb, context) {\n getJSON(\n this.options.serviceUrl,\n {\n key: this._accessToken,\n q: [location.lat, location.lng].join(',')\n },\n function(data) {\n var results = [],\n latLng,\n latLngBounds,\n loc;\n if (data.results && data.results.length) {\n for (var i = 0; i < data.results.length; i++) {\n loc = data.results[i];\n latLng = L.latLng(loc.geometry);\n if (loc.annotations && loc.annotations.bounds) {\n latLngBounds = L.latLngBounds(\n L.latLng(loc.annotations.bounds.northeast),\n L.latLng(loc.annotations.bounds.southwest)\n );\n } else {\n latLngBounds = L.latLngBounds(latLng, latLng);\n }\n results.push({\n name: loc.formatted,\n bbox: latLngBounds,\n center: latLng\n });\n }\n }\n cb.call(context, results);\n }\n );\n }\n});\n\nexport function opencage(apiKey) {\n return new OpenCage(apiKey);\n}\n","import L from 'leaflet';\nimport { getJSON } from '../util';\n\nexport var Pelias = L.Class.extend({\n options: {\n serviceUrl: 'https://api.geocode.earth/v1',\n geocodingQueryParams: {},\n reverseQueryParams: {}\n },\n\n initialize: function(apiKey, options) {\n L.Util.setOptions(this, options);\n this._apiKey = apiKey;\n this._lastSuggest = 0;\n },\n\n geocode: function(query, cb, context) {\n var _this = this;\n getJSON(\n this.options.serviceUrl + '/search',\n L.extend(\n {\n api_key: this._apiKey,\n text: query\n },\n this.options.geocodingQueryParams\n ),\n function(data) {\n cb.call(context, _this._parseResults(data, 'bbox'));\n }\n );\n },\n\n suggest: function(query, cb, context) {\n var _this = this;\n getJSON(\n this.options.serviceUrl + '/autocomplete',\n L.extend(\n {\n api_key: this._apiKey,\n text: query\n },\n this.options.geocodingQueryParams\n ),\n L.bind(function(data) {\n if (data.geocoding.timestamp > this._lastSuggest) {\n this._lastSuggest = data.geocoding.timestamp;\n cb.call(context, _this._parseResults(data, 'bbox'));\n }\n }, this)\n );\n },\n\n reverse: function(location, scale, cb, context) {\n var _this = this;\n getJSON(\n this.options.serviceUrl + '/reverse',\n L.extend(\n {\n api_key: this._apiKey,\n 'point.lat': location.lat,\n 'point.lon': location.lng\n },\n this.options.reverseQueryParams\n ),\n function(data) {\n cb.call(context, _this._parseResults(data, 'bounds'));\n }\n );\n },\n\n _parseResults: function(data, bboxname) {\n var results = [];\n L.geoJson(data, {\n pointToLayer: function(feature, latlng) {\n return L.circleMarker(latlng);\n },\n onEachFeature: function(feature, layer) {\n var result = {},\n bbox,\n center;\n\n if (layer.getBounds) {\n bbox = layer.getBounds();\n center = bbox.getCenter();\n } else if (layer.feature.bbox) {\n center = layer.getLatLng();\n bbox = L.latLngBounds(\n L.GeoJSON.coordsToLatLng(layer.feature.bbox.slice(0, 2)),\n L.GeoJSON.coordsToLatLng(layer.feature.bbox.slice(2, 4))\n );\n } else {\n center = layer.getLatLng();\n bbox = L.latLngBounds(center, center);\n }\n\n result.name = layer.feature.properties.label;\n result.center = center;\n result[bboxname] = bbox;\n result.properties = layer.feature.properties;\n results.push(result);\n }\n });\n return results;\n }\n});\n\nexport function pelias(apiKey, options) {\n return new Pelias(apiKey, options);\n}\nexport var GeocodeEarth = Pelias;\nexport var geocodeEarth = pelias;\n\nexport var Mapzen = Pelias; // r.i.p.\nexport var mapzen = pelias;\n\nexport var Openrouteservice = Mapzen.extend({\n options: {\n serviceUrl: 'https://api.openrouteservice.org/geocode'\n }\n});\nexport function openrouteservice(apiKey, options) {\n return new Openrouteservice(apiKey, options);\n}\n","import L from 'leaflet';\nimport { getJSON } from '../util';\n\nexport var Photon = L.Class.extend({\n options: {\n serviceUrl: 'https://photon.komoot.de/api/',\n reverseUrl: 'https://photon.komoot.de/reverse/',\n nameProperties: ['name', 'street', 'suburb', 'hamlet', 'town', 'city', 'state', 'country']\n },\n\n initialize: function(options) {\n L.setOptions(this, options);\n },\n\n geocode: function(query, cb, context) {\n var params = L.extend(\n {\n q: query\n },\n this.options.geocodingQueryParams\n );\n\n getJSON(\n this.options.serviceUrl,\n params,\n L.bind(function(data) {\n cb.call(context, this._decodeFeatures(data));\n }, this)\n );\n },\n\n suggest: function(query, cb, context) {\n return this.geocode(query, cb, context);\n },\n\n reverse: function(latLng, scale, cb, context) {\n var params = L.extend(\n {\n lat: latLng.lat,\n lon: latLng.lng\n },\n this.options.reverseQueryParams\n );\n\n getJSON(\n this.options.reverseUrl,\n params,\n L.bind(function(data) {\n cb.call(context, this._decodeFeatures(data));\n }, this)\n );\n },\n\n _decodeFeatures: function(data) {\n var results = [],\n i,\n f,\n c,\n latLng,\n extent,\n bbox;\n\n if (data && data.features) {\n for (i = 0; i < data.features.length; i++) {\n f = data.features[i];\n c = f.geometry.coordinates;\n latLng = L.latLng(c[1], c[0]);\n extent = f.properties.extent;\n\n if (extent) {\n bbox = L.latLngBounds([extent[1], extent[0]], [extent[3], extent[2]]);\n } else {\n bbox = L.latLngBounds(latLng, latLng);\n }\n\n results.push({\n name: this._decodeFeatureName(f),\n html: this.options.htmlTemplate ? this.options.htmlTemplate(f) : undefined,\n center: latLng,\n bbox: bbox,\n properties: f.properties\n });\n }\n }\n\n return results;\n },\n\n _decodeFeatureName: function(f) {\n return (this.options.nameProperties || [])\n .map(function(p) {\n return f.properties[p];\n })\n .filter(function(v) {\n return !!v;\n })\n .join(', ');\n }\n});\n\nexport function photon(options) {\n return new Photon(options);\n}\n","import L from 'leaflet';\nimport { getJSON } from '../util';\n\nexport var What3Words = L.Class.extend({\n options: {\n serviceUrl: 'https://api.what3words.com/v2/'\n },\n\n initialize: function(accessToken) {\n this._accessToken = accessToken;\n },\n\n geocode: function(query, cb, context) {\n //get three words and make a dot based string\n getJSON(\n this.options.serviceUrl + 'forward',\n {\n key: this._accessToken,\n addr: query.split(/\\s+/).join('.')\n },\n function(data) {\n var results = [],\n latLng,\n latLngBounds;\n if (data.geometry) {\n latLng = L.latLng(data.geometry['lat'], data.geometry['lng']);\n latLngBounds = L.latLngBounds(latLng, latLng);\n results[0] = {\n name: data.words,\n bbox: latLngBounds,\n center: latLng\n };\n }\n\n cb.call(context, results);\n }\n );\n },\n\n suggest: function(query, cb, context) {\n return this.geocode(query, cb, context);\n },\n\n reverse: function(location, scale, cb, context) {\n getJSON(\n this.options.serviceUrl + 'reverse',\n {\n key: this._accessToken,\n coords: [location.lat, location.lng].join(',')\n },\n function(data) {\n var results = [],\n latLng,\n latLngBounds;\n if (data.status.status == 200) {\n latLng = L.latLng(data.geometry['lat'], data.geometry['lng']);\n latLngBounds = L.latLngBounds(latLng, latLng);\n results[0] = {\n name: data.words,\n bbox: latLngBounds,\n center: latLng\n };\n }\n cb.call(context, results);\n }\n );\n }\n});\n\nexport function what3words(accessToken) {\n return new What3Words(accessToken);\n}\n","import L from 'leaflet';\nimport { Nominatim } from './geocoders/index';\n\nexport var Geocoder = L.Control.extend({\n options: {\n showUniqueResult: true,\n showResultIcons: false,\n collapsed: true,\n expand: 'touch', // options: touch, click, anythingelse\n position: 'topright',\n placeholder: 'Search...',\n errorMessage: 'Nothing found.',\n queryMinLength: 1,\n suggestMinLength: 3,\n suggestTimeout: 250,\n defaultMarkGeocode: true\n },\n\n includes: L.Evented.prototype || L.Mixin.Events,\n\n initialize: function(options) {\n L.Util.setOptions(this, options);\n if (!this.options.geocoder) {\n this.options.geocoder = new Nominatim();\n }\n\n this._requestCount = 0;\n },\n\n addThrobberClass: function() {\n L.DomUtil.addClass(this._container, 'leaflet-control-geocoder-throbber');\n },\n\n removeThrobberClass: function() {\n L.DomUtil.removeClass(this._container, 'leaflet-control-geocoder-throbber');\n },\n\n onAdd: function(map) {\n var className = 'leaflet-control-geocoder',\n container = L.DomUtil.create('div', className + ' leaflet-bar'),\n icon = L.DomUtil.create('button', className + '-icon', container),\n form = (this._form = L.DomUtil.create('div', className + '-form', container)),\n input;\n\n this._map = map;\n this._container = container;\n\n icon.innerHTML = ' ';\n icon.type = 'button';\n\n input = this._input = L.DomUtil.create('input', '', form);\n input.type = 'text';\n input.placeholder = this.options.placeholder;\n L.DomEvent.disableClickPropagation(input);\n\n this._errorElement = L.DomUtil.create('div', className + '-form-no-error', container);\n this._errorElement.innerHTML = this.options.errorMessage;\n\n this._alts = L.DomUtil.create(\n 'ul',\n className + '-alternatives leaflet-control-geocoder-alternatives-minimized',\n container\n );\n L.DomEvent.disableClickPropagation(this._alts);\n\n L.DomEvent.addListener(input, 'keydown', this._keydown, this);\n if (this.options.geocoder.suggest) {\n L.DomEvent.addListener(input, 'input', this._change, this);\n }\n L.DomEvent.addListener(\n input,\n 'blur',\n function() {\n if (this.options.collapsed && !this._preventBlurCollapse) {\n this._collapse();\n }\n this._preventBlurCollapse = false;\n },\n this\n );\n\n if (this.options.collapsed) {\n if (this.options.expand === 'click') {\n L.DomEvent.addListener(\n container,\n 'click',\n function(e) {\n if (e.button === 0 && e.detail !== 2) {\n this._toggle();\n }\n },\n this\n );\n } else if (L.Browser.touch && this.options.expand === 'touch') {\n L.DomEvent.addListener(\n container,\n 'touchstart mousedown',\n function(e) {\n this._toggle();\n e.preventDefault(); // mobile: clicking focuses the icon, so UI expands and immediately collapses\n e.stopPropagation();\n },\n this\n );\n } else {\n L.DomEvent.addListener(container, 'mouseover', this._expand, this);\n L.DomEvent.addListener(container, 'mouseout', this._collapse, this);\n this._map.on('movestart', this._collapse, this);\n }\n } else {\n this._expand();\n if (L.Browser.touch) {\n L.DomEvent.addListener(\n container,\n 'touchstart',\n function() {\n this._geocode();\n },\n this\n );\n } else {\n L.DomEvent.addListener(\n container,\n 'click',\n function() {\n this._geocode();\n },\n this\n );\n }\n }\n\n if (this.options.defaultMarkGeocode) {\n this.on('markgeocode', this.markGeocode, this);\n }\n\n this.on('startgeocode', this.addThrobberClass, this);\n this.on('finishgeocode', this.removeThrobberClass, this);\n this.on('startsuggest', this.addThrobberClass, this);\n this.on('finishsuggest', this.removeThrobberClass, this);\n\n L.DomEvent.disableClickPropagation(container);\n\n return container;\n },\n\n _geocodeResult: function(results, suggest) {\n if (!suggest && this.options.showUniqueResult && results.length === 1) {\n this._geocodeResultSelected(results[0]);\n } else if (results.length > 0) {\n this._alts.innerHTML = '';\n this._results = results;\n L.DomUtil.removeClass(this._alts, 'leaflet-control-geocoder-alternatives-minimized');\n L.DomUtil.addClass(this._container, 'leaflet-control-geocoder-options-open');\n for (var i = 0; i < results.length; i++) {\n this._alts.appendChild(this._createAlt(results[i], i));\n }\n } else {\n L.DomUtil.addClass(this._container, 'leaflet-control-geocoder-options-error');\n L.DomUtil.addClass(this._errorElement, 'leaflet-control-geocoder-error');\n }\n },\n\n markGeocode: function(result) {\n result = result.geocode || result;\n\n this._map.fitBounds(result.bbox);\n\n if (this._geocodeMarker) {\n this._map.removeLayer(this._geocodeMarker);\n }\n\n this._geocodeMarker = new L.Marker(result.center)\n .bindPopup(result.html || result.name)\n .addTo(this._map)\n .openPopup();\n\n return this;\n },\n\n _geocode: function(suggest) {\n var value = this._input.value;\n if (!suggest && value.length < this.options.queryMinLength) {\n return;\n }\n\n var requestCount = ++this._requestCount,\n mode = suggest ? 'suggest' : 'geocode',\n eventData = { input: value };\n\n this._lastGeocode = value;\n if (!suggest) {\n this._clearResults();\n }\n\n this.fire('start' + mode, eventData);\n this.options.geocoder[mode](\n value,\n function(results) {\n if (requestCount === this._requestCount) {\n eventData.results = results;\n this.fire('finish' + mode, eventData);\n this._geocodeResult(results, suggest);\n }\n },\n this\n );\n },\n\n _geocodeResultSelected: function(result) {\n this.fire('markgeocode', { geocode: result });\n },\n\n _toggle: function() {\n if (L.DomUtil.hasClass(this._container, 'leaflet-control-geocoder-expanded')) {\n this._collapse();\n } else {\n this._expand();\n }\n },\n\n _expand: function() {\n L.DomUtil.addClass(this._container, 'leaflet-control-geocoder-expanded');\n this._input.select();\n this.fire('expand');\n },\n\n _collapse: function() {\n L.DomUtil.removeClass(this._container, 'leaflet-control-geocoder-expanded');\n L.DomUtil.addClass(this._alts, 'leaflet-control-geocoder-alternatives-minimized');\n L.DomUtil.removeClass(this._errorElement, 'leaflet-control-geocoder-error');\n L.DomUtil.removeClass(this._container, 'leaflet-control-geocoder-options-open');\n L.DomUtil.removeClass(this._container, 'leaflet-control-geocoder-options-error');\n this._input.blur(); // mobile: keyboard shouldn't stay expanded\n this.fire('collapse');\n },\n\n _clearResults: function() {\n L.DomUtil.addClass(this._alts, 'leaflet-control-geocoder-alternatives-minimized');\n this._selection = null;\n L.DomUtil.removeClass(this._errorElement, 'leaflet-control-geocoder-error');\n L.DomUtil.removeClass(this._container, 'leaflet-control-geocoder-options-open');\n L.DomUtil.removeClass(this._container, 'leaflet-control-geocoder-options-error');\n },\n\n _createAlt: function(result, index) {\n var li = L.DomUtil.create('li', ''),\n a = L.DomUtil.create('a', '', li),\n icon = this.options.showResultIcons && result.icon ? L.DomUtil.create('img', '', a) : null,\n text = result.html ? undefined : document.createTextNode(result.name),\n mouseDownHandler = function mouseDownHandler(e) {\n // In some browsers, a click will fire on the map if the control is\n // collapsed directly after mousedown. To work around this, we\n // wait until the click is completed, and _then_ collapse the\n // control. Messy, but this is the workaround I could come up with\n // for #142.\n this._preventBlurCollapse = true;\n L.DomEvent.stop(e);\n this._geocodeResultSelected(result);\n L.DomEvent.on(\n li,\n 'click',\n function() {\n if (this.options.collapsed) {\n this._collapse();\n } else {\n this._clearResults();\n }\n },\n this\n );\n };\n\n if (icon) {\n icon.src = result.icon;\n }\n\n li.setAttribute('data-result-index', index);\n\n if (result.html) {\n a.innerHTML = a.innerHTML + result.html;\n } else {\n a.appendChild(text);\n }\n\n // Use mousedown and not click, since click will fire _after_ blur,\n // causing the control to have collapsed and removed the items\n // before the click can fire.\n L.DomEvent.addListener(li, 'mousedown touchstart', mouseDownHandler, this);\n\n return li;\n },\n\n _keydown: function(e) {\n var _this = this,\n select = function select(dir) {\n if (_this._selection) {\n L.DomUtil.removeClass(_this._selection, 'leaflet-control-geocoder-selected');\n _this._selection = _this._selection[dir > 0 ? 'nextSibling' : 'previousSibling'];\n }\n if (!_this._selection) {\n _this._selection = _this._alts[dir > 0 ? 'firstChild' : 'lastChild'];\n }\n\n if (_this._selection) {\n L.DomUtil.addClass(_this._selection, 'leaflet-control-geocoder-selected');\n }\n };\n\n switch (e.keyCode) {\n // Escape\n case 27:\n if (this.options.collapsed) {\n this._collapse();\n } else {\n this._clearResults();\n }\n break;\n // Up\n case 38:\n select(-1);\n break;\n // Up\n case 40:\n select(1);\n break;\n // Enter\n case 13:\n if (this._selection) {\n var index = parseInt(this._selection.getAttribute('data-result-index'), 10);\n this._geocodeResultSelected(this._results[index]);\n this._clearResults();\n } else {\n this._geocode();\n }\n break;\n default:\n return;\n }\n\n L.DomEvent.preventDefault(e);\n },\n _change: function() {\n var v = this._input.value;\n if (v !== this._lastGeocode) {\n clearTimeout(this._suggestTimeout);\n if (v.length >= this.options.suggestMinLength) {\n this._suggestTimeout = setTimeout(\n L.bind(function() {\n this._geocode(true);\n }, this),\n this.options.suggestTimeout\n );\n } else {\n this._clearResults();\n }\n }\n }\n});\n\nexport function geocoder(options) {\n return new Geocoder(options);\n}\n","import L from 'leaflet';\nimport { Geocoder, geocoder } from './control';\nimport * as geocoders from './geocoders/index';\n\nL.Util.extend(Geocoder, geocoders);\nexport default Geocoder;\n\nL.Util.extend(L.Control, {\n Geocoder: Geocoder,\n geocoder: geocoder\n});\n"],"names":["lastCallbackId","badChars","possible","escape","&","<",">","\"","'","`","escapeChar","chr","jsonp","url","params","callback","context","jsonpParam","callbackId","window","L","Util","bind","script","document","createElement","type","src","getParamString","id","getElementsByTagName","appendChild","getJSON","xmlHttp","XMLHttpRequest","onreadystatechange","readyState","message","status","response","JSON","parse","e","open","responseType","setRequestHeader","send","template","str","data","replace","key","value","undefined","string","test","htmlEscape","obj","existingUrl","uppercase","i","encodeURIComponent","toUpperCase","isArray","j","length","push","indexOf","join","ArcGis","Class","extend","options","service_url","initialize","accessToken","setOptions","this","_accessToken","geocode","query","cb","SingleLine","outFields","forStorage","maxLocations","f","_key","token","geocodingQueryParams","loc","latLng","latLngBounds","results","candidates","location","y","x","extent","ymax","xmax","ymin","xmin","name","address","bbox","center","call","suggest","reverse","scale","lng","lat","distance","result","error","Match_addr","bounds","Bing","resourceSets","resources","resource","point","coordinates","Google","serviceUrl","reverseQueryParams","geometry","viewport","northeast","southwest","formatted_address","properties","address_components","latlng","HERE","geocodeUrl","reverseGeocodeUrl","app_id","app_code","reverseGeocodeProxRadius","searchtext","gen","jsonattributes","_proxRadius","proxRadius","prox","mode","view","displayPosition","latitude","longitude","mapView","topLeft","bottomRight","label","LatLng","next","sizeInMeters","match","parseFloat","toBounds","Mapbox","access_token","proximity","features","slice","text","split","place_name","MapQuest","decodeURIComponent","_formatName","r","arguments","limit","outFormat","locations","street","adminArea4","adminArea3","adminArea1","outputFormat","Neutrino","userId","apiKey","found","Nominatim","htmlTemplate","a","parts","road","building","city","town","village","hamlet","state","country","q","format","addressdetails","boundingbox","icon","display_name","html","lon","zoom","Math","round","log","OpenLocationCode","codeLength","decoded","decode","latitudeCenter","longitudeCenter","latitudeLo","longitudeLo","latitudeHi","longitudeHi","console","warn","encode","OpenCage","annotations","formatted","Pelias","_apiKey","_lastSuggest","_this","api_key","_parseResults","geocoding","timestamp","point.lat","point.lon","bboxname","geoJson","pointToLayer","feature","circleMarker","onEachFeature","layer","getBounds","getCenter","getLatLng","GeoJSON","coordsToLatLng","pelias","GeocodeEarth","geocodeEarth","Mapzen","mapzen","Openrouteservice","Photon","reverseUrl","nameProperties","_decodeFeatures","c","_decodeFeatureName","map","p","filter","v","What3Words","addr","words","coords","Geocoder","Control","showUniqueResult","showResultIcons","collapsed","expand","position","placeholder","errorMessage","queryMinLength","suggestMinLength","suggestTimeout","defaultMarkGeocode","includes","Evented","prototype","Mixin","Events","geocoder","_requestCount","addThrobberClass","DomUtil","addClass","_container","removeThrobberClass","removeClass","onAdd","input","className","container","create","form","_form","_map","innerHTML","_input","DomEvent","disableClickPropagation","_errorElement","_alts","addListener","_keydown","_change","_preventBlurCollapse","_collapse","button","detail","_toggle","Browser","touch","preventDefault","stopPropagation","_expand","on","_geocode","markGeocode","_geocodeResult","_geocodeResultSelected","_results","_createAlt","fitBounds","_geocodeMarker","removeLayer","Marker","bindPopup","addTo","openPopup","requestCount","eventData","_lastGeocode","_clearResults","fire","hasClass","select","blur","_selection","index","li","createTextNode","setAttribute","stop","dir","keyCode","parseInt","getAttribute","clearTimeout","_suggestTimeout","setTimeout","geocoders"],"mappings":"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"}