diff --git a/README.md b/README.md
index 45d5865..24dcd8a 100644
--- a/README.md
+++ b/README.md
@@ -18,7 +18,7 @@ This package contains following packages:
- [Leaflet-omnivore 0.3.4](https://github.com/mapbox/leaflet-omnivore)
- [Leaflet.loading 0.1.24](https://github.com/ebrelsford/Leaflet.loading)
- [Leaflet.Control.FullScreen 1.4.5](https://github.com/brunob/leaflet.fullscreen)
- - [Leaflet Control Geocoder 1.6.0](https://github.com/perliedman/leaflet-control-geocoder)
+ - [Leaflet Control Geocoder 1.13.0](https://github.com/perliedman/leaflet-control-geocoder)
- [Leaflet.ExtraMarkers 1.0.8](https://github.com/coryasilva/Leaflet.ExtraMarkers)
- [leaflet.pm 0.25.0](https://github.com/codeofsumit/leaflet.pm)
- [osmtogeojson 2.2.12](https://github.com/tyrasd/osmtogeojson)
diff --git a/assets/control-geocoder/Control.Geocoder.js b/assets/control-geocoder/Control.Geocoder.js
index 78408d4..dcbd4b7 100644
--- a/assets/control-geocoder/Control.Geocoder.js
+++ b/assets/control-geocoder/Control.Geocoder.js
@@ -1,540 +1,210 @@
+/* @preserve
+ * Leaflet Control Geocoder 1.13.0
+ * https://github.com/perliedman/leaflet-control-geocoder
+ *
+ * Copyright (c) 2012 sa3m (https://github.com/sa3m)
+ * Copyright (c) 2018 Per Liedman
+ * All rights reserved.
+ */
+
this.L = this.L || {};
this.L.Control = this.L.Control || {};
this.L.Control.Geocoder = (function (L) {
-'use strict';
+ 'use strict';
-L = L && L.hasOwnProperty('default') ? L['default'] : L;
+ L = L && L.hasOwnProperty('default') ? L['default'] : L;
-var lastCallbackId = 0;
+ var lastCallbackId = 0;
-// Adapted from handlebars.js
-// https://github.com/wycats/handlebars.js/
-var badChars = /[&<>"'`]/g;
-var possible = /[&<>"'`]/;
-var escape = {
- '&': '&',
- '<': '<',
- '>': '>',
- '"': '"',
- "'": ''',
- '`': '`'
-};
-
-function escapeChar(chr) {
- return escape[chr];
-}
-
-function htmlEscape(string) {
- if (string == null) {
- return '';
- } else if (!string) {
- return string + '';
- }
-
- // Force a string conversion as this will be done by the append regardless and
- // the regex test will do this transparently behind the scenes, causing issues if
- // an object's to string has escaped characters in it.
- string = '' + string;
-
- if (!possible.test(string)) {
- return string;
- }
- return string.replace(badChars, escapeChar);
-}
-
-function jsonp(url, params, callback, context, jsonpParam) {
- var callbackId = '_l_geocoder_' + lastCallbackId++;
- params[jsonpParam || 'callback'] = callbackId;
- window[callbackId] = L.Util.bind(callback, context);
- var script = document.createElement('script');
- script.type = 'text/javascript';
- script.src = url + L.Util.getParamString(params);
- script.id = callbackId;
- document.getElementsByTagName('head')[0].appendChild(script);
-}
-
-function getJSON(url, params, callback) {
- var xmlHttp = new XMLHttpRequest();
- xmlHttp.onreadystatechange = function() {
- if (xmlHttp.readyState !== 4) {
- return;
- }
- if (xmlHttp.status !== 200 && xmlHttp.status !== 304) {
- callback('');
- return;
- }
- callback(JSON.parse(xmlHttp.response));
+ // Adapted from handlebars.js
+ // https://github.com/wycats/handlebars.js/
+ var badChars = /[&<>"'`]/g;
+ var possible = /[&<>"'`]/;
+ var escape = {
+ '&': '&',
+ '<': '<',
+ '>': '>',
+ '"': '"',
+ "'": ''',
+ '`': '`'
};
- xmlHttp.open('GET', url + L.Util.getParamString(params), true);
- xmlHttp.setRequestHeader('Accept', 'application/json');
- xmlHttp.send(null);
-}
-function template(str, data) {
- return str.replace(/\{ *([\w_]+) *\}/g, function(str, key) {
- var value = data[key];
- if (value === undefined) {
- value = '';
- } else if (typeof value === 'function') {
- value = value(data);
+ function escapeChar(chr) {
+ return escape[chr];
+ }
+
+ function htmlEscape(string) {
+ if (string == null) {
+ return '';
+ } else if (!string) {
+ return string + '';
}
- return htmlEscape(value);
- });
-}
-var Nominatim = {
- class: L.Class.extend({
- options: {
- serviceUrl: 'https://nominatim.openstreetmap.org/',
- geocodingQueryParams: {},
- reverseQueryParams: {},
- htmlTemplate: function(r) {
- var a = r.address,
- parts = [];
- if (a.road || a.building) {
- parts.push('{building} {road} {house_number}');
- }
+ // Force a string conversion as this will be done by the append regardless and
+ // the regex test will do this transparently behind the scenes, causing issues if
+ // an object's to string has escaped characters in it.
+ string = '' + string;
- if (a.city || a.town || a.village || a.hamlet) {
- parts.push(
- '{postcode} {city} {town} {village} {hamlet}'
- );
- }
+ if (!possible.test(string)) {
+ return string;
+ }
+ return string.replace(badChars, escapeChar);
+ }
- if (a.state || a.country) {
- parts.push(
- '{state} {country}'
- );
- }
+ function jsonp(url, params, callback, context, jsonpParam) {
+ var callbackId = '_l_geocoder_' + lastCallbackId++;
+ params[jsonpParam || 'callback'] = callbackId;
+ window[callbackId] = L.Util.bind(callback, context);
+ var script = document.createElement('script');
+ script.type = 'text/javascript';
+ script.src = url + getParamString(params);
+ script.id = callbackId;
+ document.getElementsByTagName('head')[0].appendChild(script);
+ }
- return template(parts.join('
'), a, true);
+ function getJSON(url, params, callback) {
+ var xmlHttp = new XMLHttpRequest();
+ xmlHttp.onreadystatechange = function() {
+ if (xmlHttp.readyState !== 4) {
+ return;
}
+ var message;
+ if (xmlHttp.status !== 200 && xmlHttp.status !== 304) {
+ message = '';
+ } else if (typeof xmlHttp.response === 'string') {
+ // IE doesn't parse JSON responses even with responseType: 'json'.
+ try {
+ message = JSON.parse(xmlHttp.response);
+ } catch (e) {
+ // Not a JSON response
+ message = xmlHttp.response;
+ }
+ } else {
+ message = xmlHttp.response;
+ }
+ callback(message);
+ };
+ xmlHttp.open('GET', url + getParamString(params), true);
+ xmlHttp.responseType = 'json';
+ xmlHttp.setRequestHeader('Accept', 'application/json');
+ xmlHttp.send(null);
+ }
+
+ function template(str, data) {
+ return str.replace(/\{ *([\w_]+) *\}/g, function(str, key) {
+ var value = data[key];
+ if (value === undefined) {
+ value = '';
+ } else if (typeof value === 'function') {
+ value = value(data);
+ }
+ return htmlEscape(value);
+ });
+ }
+
+ function getParamString(obj, existingUrl, uppercase) {
+ var params = [];
+ for (var i in obj) {
+ var key = encodeURIComponent(uppercase ? i.toUpperCase() : i);
+ var value = obj[i];
+ if (!L.Util.isArray(value)) {
+ params.push(key + '=' + encodeURIComponent(value));
+ } else {
+ for (var j = 0; j < value.length; j++) {
+ params.push(key + '=' + encodeURIComponent(value[j]));
+ }
+ }
+ }
+ return (!existingUrl || existingUrl.indexOf('?') === -1 ? '?' : '&') + params.join('&');
+ }
+
+ var ArcGis = L.Class.extend({
+ options: {
+ service_url: 'https://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer'
},
- initialize: function(options) {
- L.Util.setOptions(this, options);
+ initialize: function(accessToken, options) {
+ L.setOptions(this, options);
+ this._accessToken = accessToken;
},
geocode: function(query, cb, context) {
+ var params = {
+ SingleLine: query,
+ outFields: 'Addr_Type',
+ forStorage: false,
+ maxLocations: 10,
+ f: 'json'
+ };
+
+ if (this._key && this._key.length) {
+ params.token = this._key;
+ }
+
getJSON(
- this.options.serviceUrl + 'search',
- L.extend(
- {
- q: query,
- limit: 5,
- format: 'json',
- addressdetails: 1
- },
- this.options.geocodingQueryParams
- ),
- L.bind(function(data) {
- var results = [];
- for (var i = data.length - 1; i >= 0; i--) {
- var bbox = data[i].boundingbox;
- for (var j = 0; j < 4; j++) bbox[j] = parseFloat(bbox[j]);
- results[i] = {
- icon: data[i].icon,
- name: data[i].display_name,
- html: this.options.htmlTemplate ? this.options.htmlTemplate(data[i]) : undefined,
- bbox: L.latLngBounds([bbox[0], bbox[2]], [bbox[1], bbox[3]]),
- center: L.latLng(data[i].lat, data[i].lon),
- properties: data[i]
- };
+ this.options.service_url + '/findAddressCandidates',
+ L.extend(params, this.options.geocodingQueryParams),
+ function(data) {
+ var results = [],
+ loc,
+ latLng,
+ latLngBounds;
+
+ if (data.candidates && data.candidates.length) {
+ for (var i = 0; i <= data.candidates.length - 1; i++) {
+ loc = data.candidates[i];
+ latLng = L.latLng(loc.location.y, loc.location.x);
+ latLngBounds = L.latLngBounds(
+ L.latLng(loc.extent.ymax, loc.extent.xmax),
+ L.latLng(loc.extent.ymin, loc.extent.xmin)
+ );
+ results[i] = {
+ name: loc.address,
+ bbox: latLngBounds,
+ center: latLng
+ };
+ }
}
+
cb.call(context, results);
- }, this)
+ }
);
},
+ suggest: function(query, cb, context) {
+ return this.geocode(query, cb, context);
+ },
+
reverse: function(location, scale, cb, context) {
- getJSON(
- this.options.serviceUrl + 'reverse',
- L.extend(
- {
- lat: location.lat,
- lon: location.lng,
- zoom: Math.round(Math.log(scale / 256) / Math.log(2)),
- addressdetails: 1,
- format: 'json'
- },
- this.options.reverseQueryParams
- ),
- L.bind(function(data) {
- var result = [],
- loc;
+ var params = {
+ location: encodeURIComponent(location.lng) + ',' + encodeURIComponent(location.lat),
+ distance: 100,
+ f: 'json'
+ };
- if (data && data.lat && data.lon) {
- loc = L.latLng(data.lat, data.lon);
- result.push({
- name: data.display_name,
- html: this.options.htmlTemplate ? this.options.htmlTemplate(data) : undefined,
- center: loc,
- bounds: L.latLngBounds(loc, loc),
- properties: data
- });
- }
+ getJSON(this.options.service_url + '/reverseGeocode', params, function(data) {
+ var result = [],
+ loc;
- cb.call(context, result);
- }, this)
- );
+ if (data && !data.error) {
+ loc = L.latLng(data.location.y, data.location.x);
+ result.push({
+ name: data.address.Match_addr,
+ center: loc,
+ bounds: L.latLngBounds(loc, loc)
+ });
+ }
+
+ cb.call(context, result);
+ });
}
- }),
+ });
- factory: function(options) {
- return new L.Control.Geocoder.Nominatim(options);
+ function arcgis(accessToken, options) {
+ return new ArcGis(accessToken, options);
}
-};
-var Control = {
- class: L.Control.extend({
- options: {
- showResultIcons: false,
- collapsed: true,
- expand: 'touch', // options: touch, click, anythingelse
- position: 'topright',
- placeholder: 'Search...',
- errorMessage: 'Nothing found.',
- suggestMinLength: 3,
- suggestTimeout: 250,
- defaultMarkGeocode: true
- },
-
- includes: L.Evented.prototype || L.Mixin.Events,
-
- initialize: function(options) {
- L.Util.setOptions(this, options);
- if (!this.options.geocoder) {
- this.options.geocoder = new Nominatim.class();
- }
-
- this._requestCount = 0;
- },
-
- onAdd: function(map) {
- var className = 'leaflet-control-geocoder',
- container = L.DomUtil.create('div', className + ' leaflet-bar'),
- icon = L.DomUtil.create('button', className + '-icon', container),
- form = (this._form = L.DomUtil.create('div', className + '-form', container)),
- input;
-
- this._map = map;
- this._container = container;
-
- icon.innerHTML = ' ';
- icon.type = 'button';
-
- input = this._input = L.DomUtil.create('input', '', form);
- input.type = 'text';
- input.placeholder = this.options.placeholder;
-
- this._errorElement = L.DomUtil.create('div', className + '-form-no-error', container);
- this._errorElement.innerHTML = this.options.errorMessage;
-
- this._alts = L.DomUtil.create(
- 'ul',
- className + '-alternatives leaflet-control-geocoder-alternatives-minimized',
- container
- );
- L.DomEvent.disableClickPropagation(this._alts);
-
- L.DomEvent.addListener(input, 'keydown', this._keydown, this);
- if (this.options.geocoder.suggest) {
- L.DomEvent.addListener(input, 'input', this._change, this);
- }
- L.DomEvent.addListener(
- input,
- 'blur',
- function() {
- if (this.options.collapsed && !this._preventBlurCollapse) {
- this._collapse();
- }
- this._preventBlurCollapse = false;
- },
- this
- );
-
- if (this.options.collapsed) {
- if (this.options.expand === 'click') {
- L.DomEvent.addListener(
- container,
- 'click',
- function(e) {
- if (e.button === 0 && e.detail !== 2) {
- this._toggle();
- }
- },
- this
- );
- } else if (L.Browser.touch && this.options.expand === 'touch') {
- L.DomEvent.addListener(
- container,
- 'touchstart mousedown',
- function(e) {
- this._toggle();
- e.preventDefault(); // mobile: clicking focuses the icon, so UI expands and immediately collapses
- e.stopPropagation();
- },
- this
- );
- } else {
- L.DomEvent.addListener(container, 'mouseover', this._expand, this);
- L.DomEvent.addListener(container, 'mouseout', this._collapse, this);
- this._map.on('movestart', this._collapse, this);
- }
- } else {
- this._expand();
- if (L.Browser.touch) {
- L.DomEvent.addListener(
- container,
- 'touchstart',
- function() {
- this._geocode();
- },
- this
- );
- } else {
- L.DomEvent.addListener(
- container,
- 'click',
- function() {
- this._geocode();
- },
- this
- );
- }
- }
-
- if (this.options.defaultMarkGeocode) {
- this.on('markgeocode', this.markGeocode, this);
- }
-
- this.on(
- 'startgeocode',
- function() {
- L.DomUtil.addClass(this._container, 'leaflet-control-geocoder-throbber');
- },
- this
- );
- this.on(
- 'finishgeocode',
- function() {
- L.DomUtil.removeClass(this._container, 'leaflet-control-geocoder-throbber');
- },
- this
- );
-
- L.DomEvent.disableClickPropagation(container);
-
- return container;
- },
-
- _geocodeResult: function(results, suggest) {
- if (!suggest && results.length === 1) {
- this._geocodeResultSelected(results[0]);
- } else if (results.length > 0) {
- this._alts.innerHTML = '';
- this._results = results;
- L.DomUtil.removeClass(this._alts, 'leaflet-control-geocoder-alternatives-minimized');
- for (var i = 0; i < results.length; i++) {
- this._alts.appendChild(this._createAlt(results[i], i));
- }
- } else {
- L.DomUtil.addClass(this._errorElement, 'leaflet-control-geocoder-error');
- }
- },
-
- markGeocode: function(result) {
- result = result.geocode || result;
-
- this._map.fitBounds(result.bbox);
-
- if (this._geocodeMarker) {
- this._map.removeLayer(this._geocodeMarker);
- }
-
- this._geocodeMarker = new L.Marker(result.center)
- .bindPopup(result.html || result.name)
- .addTo(this._map)
- .openPopup();
-
- return this;
- },
-
- _geocode: function(suggest) {
- var requestCount = ++this._requestCount,
- mode = suggest ? 'suggest' : 'geocode',
- eventData = { input: this._input.value };
-
- this._lastGeocode = this._input.value;
- if (!suggest) {
- this._clearResults();
- }
-
- this.fire('start' + mode, eventData);
- this.options.geocoder[mode](
- this._input.value,
- function(results) {
- if (requestCount === this._requestCount) {
- eventData.results = results;
- this.fire('finish' + mode, eventData);
- this._geocodeResult(results, suggest);
- }
- },
- this
- );
- },
-
- _geocodeResultSelected: function(result) {
- this.fire('markgeocode', { geocode: result });
- },
-
- _toggle: function() {
- if (L.DomUtil.hasClass(this._container, 'leaflet-control-geocoder-expanded')) {
- this._collapse();
- } else {
- this._expand();
- }
- },
-
- _expand: function() {
- L.DomUtil.addClass(this._container, 'leaflet-control-geocoder-expanded');
- this._input.select();
- this.fire('expand');
- },
-
- _collapse: function() {
- L.DomUtil.removeClass(this._container, 'leaflet-control-geocoder-expanded');
- L.DomUtil.addClass(this._alts, 'leaflet-control-geocoder-alternatives-minimized');
- L.DomUtil.removeClass(this._errorElement, 'leaflet-control-geocoder-error');
- this._input.blur(); // mobile: keyboard shouldn't stay expanded
- this.fire('collapse');
- },
-
- _clearResults: function() {
- L.DomUtil.addClass(this._alts, 'leaflet-control-geocoder-alternatives-minimized');
- this._selection = null;
- L.DomUtil.removeClass(this._errorElement, 'leaflet-control-geocoder-error');
- },
-
- _createAlt: function(result, index) {
- var li = L.DomUtil.create('li', ''),
- a = L.DomUtil.create('a', '', li),
- icon = this.options.showResultIcons && result.icon ? L.DomUtil.create('img', '', a) : null,
- text = result.html ? undefined : document.createTextNode(result.name),
- mouseDownHandler = function mouseDownHandler(e) {
- // In some browsers, a click will fire on the map if the control is
- // collapsed directly after mousedown. To work around this, we
- // wait until the click is completed, and _then_ collapse the
- // control. Messy, but this is the workaround I could come up with
- // for #142.
- this._preventBlurCollapse = true;
- L.DomEvent.stop(e);
- this._geocodeResultSelected(result);
- L.DomEvent.on(
- li,
- 'click',
- function() {
- if (this.options.collapsed) {
- this._collapse();
- } else {
- this._clearResults();
- }
- },
- this
- );
- };
-
- if (icon) {
- icon.src = result.icon;
- }
-
- li.setAttribute('data-result-index', index);
-
- if (result.html) {
- a.innerHTML = a.innerHTML + result.html;
- } else {
- a.appendChild(text);
- }
-
- // Use mousedown and not click, since click will fire _after_ blur,
- // causing the control to have collapsed and removed the items
- // before the click can fire.
- L.DomEvent.addListener(li, 'mousedown touchstart', mouseDownHandler, this);
-
- return li;
- },
-
- _keydown: function(e) {
- var _this = this,
- select = function select(dir) {
- if (_this._selection) {
- L.DomUtil.removeClass(_this._selection, 'leaflet-control-geocoder-selected');
- _this._selection = _this._selection[dir > 0 ? 'nextSibling' : 'previousSibling'];
- }
- if (!_this._selection) {
- _this._selection = _this._alts[dir > 0 ? 'firstChild' : 'lastChild'];
- }
-
- if (_this._selection) {
- L.DomUtil.addClass(_this._selection, 'leaflet-control-geocoder-selected');
- }
- };
-
- switch (e.keyCode) {
- // Escape
- case 27:
- if (this.options.collapsed) {
- this._collapse();
- }
- break;
- // Up
- case 38:
- select(-1);
- break;
- // Up
- case 40:
- select(1);
- break;
- // Enter
- case 13:
- if (this._selection) {
- var index = parseInt(this._selection.getAttribute('data-result-index'), 10);
- this._geocodeResultSelected(this._results[index]);
- this._clearResults();
- } else {
- this._geocode();
- }
- break;
- }
- },
- _change: function() {
- var v = this._input.value;
- if (v !== this._lastGeocode) {
- clearTimeout(this._suggestTimeout);
- if (v.length >= this.options.suggestMinLength) {
- this._suggestTimeout = setTimeout(
- L.bind(function() {
- this._geocode(true);
- }, this),
- this.options.suggestTimeout
- );
- } else {
- this._clearResults();
- }
- }
- }
- }),
- factory: function(options) {
- return new L.Control.Geocoder(options);
- }
-};
-
-var Bing = {
- class: L.Class.extend({
+ var Bing = L.Class.extend({
initialize: function(key) {
this.key = key;
},
@@ -589,280 +259,13 @@ var Bing = {
'jsonp'
);
}
- }),
+ });
- factory: function(key) {
- return new L.Control.Geocoder.Bing(key);
+ function bing(key) {
+ return new Bing(key);
}
-};
-var MapQuest = {
- class: L.Class.extend({
- options: {
- serviceUrl: 'https://www.mapquestapi.com/geocoding/v1'
- },
-
- initialize: function(key, options) {
- // MapQuest seems to provide URI encoded API keys,
- // so to avoid encoding them twice, we decode them here
- this._key = decodeURIComponent(key);
-
- L.Util.setOptions(this, options);
- },
-
- _formatName: function() {
- var r = [],
- i;
- for (i = 0; i < arguments.length; i++) {
- if (arguments[i]) {
- r.push(arguments[i]);
- }
- }
-
- return r.join(', ');
- },
-
- geocode: function(query, cb, context) {
- getJSON(
- this.options.serviceUrl + '/address',
- {
- key: this._key,
- location: query,
- limit: 5,
- outFormat: 'json'
- },
- L.bind(function(data) {
- var results = [],
- loc,
- latLng;
- if (data.results && data.results[0].locations) {
- for (var i = data.results[0].locations.length - 1; i >= 0; i--) {
- loc = data.results[0].locations[i];
- latLng = L.latLng(loc.latLng);
- results[i] = {
- name: this._formatName(loc.street, loc.adminArea4, loc.adminArea3, loc.adminArea1),
- bbox: L.latLngBounds(latLng, latLng),
- center: latLng
- };
- }
- }
-
- cb.call(context, results);
- }, this)
- );
- },
-
- reverse: function(location, scale, cb, context) {
- getJSON(
- this.options.serviceUrl + '/reverse',
- {
- key: this._key,
- location: location.lat + ',' + location.lng,
- outputFormat: 'json'
- },
- L.bind(function(data) {
- var results = [],
- loc,
- latLng;
- if (data.results && data.results[0].locations) {
- for (var i = data.results[0].locations.length - 1; i >= 0; i--) {
- loc = data.results[0].locations[i];
- latLng = L.latLng(loc.latLng);
- results[i] = {
- name: this._formatName(loc.street, loc.adminArea4, loc.adminArea3, loc.adminArea1),
- bbox: L.latLngBounds(latLng, latLng),
- center: latLng
- };
- }
- }
-
- cb.call(context, results);
- }, this)
- );
- }
- }),
-
- factory: function(key, options) {
- return new L.Control.Geocoder.MapQuest(key, options);
- }
-};
-
-var Mapbox = {
- class: L.Class.extend({
- options: {
- serviceUrl: 'https://api.tiles.mapbox.com/v4/geocode/mapbox.places-v1/',
- geocodingQueryParams: {},
- reverseQueryParams: {}
- },
-
- initialize: function(accessToken, options) {
- L.setOptions(this, options);
- this.options.geocodingQueryParams.access_token = accessToken;
- this.options.reverseQueryParams.access_token = accessToken;
- },
-
- geocode: function(query, cb, context) {
- var params = this.options.geocodingQueryParams;
- if (
- typeof params.proximity !== 'undefined' &&
- params.proximity.hasOwnProperty('lat') &&
- params.proximity.hasOwnProperty('lng')
- ) {
- params.proximity = params.proximity.lng + ',' + params.proximity.lat;
- }
- getJSON(this.options.serviceUrl + encodeURIComponent(query) + '.json', params, function(
- data
- ) {
- var results = [],
- loc,
- latLng,
- latLngBounds;
- if (data.features && data.features.length) {
- for (var i = 0; i <= data.features.length - 1; i++) {
- loc = data.features[i];
- latLng = L.latLng(loc.center.reverse());
- if (loc.hasOwnProperty('bbox')) {
- latLngBounds = L.latLngBounds(
- L.latLng(loc.bbox.slice(0, 2).reverse()),
- L.latLng(loc.bbox.slice(2, 4).reverse())
- );
- } else {
- latLngBounds = L.latLngBounds(latLng, latLng);
- }
- results[i] = {
- name: loc.place_name,
- bbox: latLngBounds,
- center: latLng
- };
- }
- }
-
- cb.call(context, results);
- });
- },
-
- suggest: function(query, cb, context) {
- return this.geocode(query, cb, context);
- },
-
- reverse: function(location, scale, cb, context) {
- getJSON(
- this.options.serviceUrl +
- encodeURIComponent(location.lng) +
- ',' +
- encodeURIComponent(location.lat) +
- '.json',
- this.options.reverseQueryParams,
- function(data) {
- var results = [],
- loc,
- latLng,
- latLngBounds;
- if (data.features && data.features.length) {
- for (var i = 0; i <= data.features.length - 1; i++) {
- loc = data.features[i];
- latLng = L.latLng(loc.center.reverse());
- if (loc.hasOwnProperty('bbox')) {
- latLngBounds = L.latLngBounds(
- L.latLng(loc.bbox.slice(0, 2).reverse()),
- L.latLng(loc.bbox.slice(2, 4).reverse())
- );
- } else {
- latLngBounds = L.latLngBounds(latLng, latLng);
- }
- results[i] = {
- name: loc.place_name,
- bbox: latLngBounds,
- center: latLng
- };
- }
- }
-
- cb.call(context, results);
- }
- );
- }
- }),
-
- factory: function(accessToken, options) {
- return new L.Control.Geocoder.Mapbox(accessToken, options);
- }
-};
-
-var What3Words = {
- class: L.Class.extend({
- options: {
- serviceUrl: 'https://api.what3words.com/v2/'
- },
-
- initialize: function(accessToken) {
- this._accessToken = accessToken;
- },
-
- geocode: function(query, cb, context) {
- //get three words and make a dot based string
- getJSON(
- this.options.serviceUrl + 'forward',
- {
- key: this._accessToken,
- addr: query.split(/\s+/).join('.')
- },
- function(data) {
- var results = [],
- latLng,
- latLngBounds;
- if (data.hasOwnProperty('geometry')) {
- latLng = L.latLng(data.geometry['lat'], data.geometry['lng']);
- latLngBounds = L.latLngBounds(latLng, latLng);
- results[0] = {
- name: data.words,
- bbox: latLngBounds,
- center: latLng
- };
- }
-
- cb.call(context, results);
- }
- );
- },
-
- suggest: function(query, cb, context) {
- return this.geocode(query, cb, context);
- },
-
- reverse: function(location, scale, cb, context) {
- getJSON(
- this.options.serviceUrl + 'reverse',
- {
- key: this._accessToken,
- coords: [location.lat, location.lng].join(',')
- },
- function(data) {
- var results = [],
- latLng,
- latLngBounds;
- if (data.status.status == 200) {
- latLng = L.latLng(data.geometry['lat'], data.geometry['lng']);
- latLngBounds = L.latLngBounds(latLng, latLng);
- results[0] = {
- name: data.words,
- bbox: latLngBounds,
- center: latLng
- };
- }
- cb.call(context, results);
- }
- );
- }
- }),
-
- factory: function(accessToken) {
- return new L.Control.Geocoder.What3Words(accessToken);
- }
-};
-
-var Google = {
- class: L.Class.extend({
+ var Google = L.Class.extend({
options: {
serviceUrl: 'https://maps.googleapis.com/maps/api/geocode/json',
geocodingQueryParams: {},
@@ -947,118 +350,709 @@ var Google = {
cb.call(context, results);
});
}
- }),
+ });
- factory: function(key, options) {
- return new L.Control.Geocoder.Google(key, options);
+ function google(key, options) {
+ return new Google(key, options);
}
-};
-var Photon = {
- class: L.Class.extend({
+ var HERE = L.Class.extend({
options: {
- serviceUrl: 'https://photon.komoot.de/api/',
- reverseUrl: 'https://photon.komoot.de/reverse/',
- nameProperties: ['name', 'street', 'suburb', 'hamlet', 'town', 'city', 'state', 'country']
+ geocodeUrl: 'https://geocoder.api.here.com/6.2/geocode.json',
+ reverseGeocodeUrl: 'https://reverse.geocoder.api.here.com/6.2/reversegeocode.json',
+ app_id: '',
+ app_code: '',
+ geocodingQueryParams: {},
+ reverseQueryParams: {},
+ reverseGeocodeProxRadius: null
},
-
initialize: function(options) {
L.setOptions(this, options);
},
+ geocode: function(query, cb, context) {
+ var params = {
+ searchtext: query,
+ gen: 9,
+ app_id: this.options.app_id,
+ app_code: this.options.app_code,
+ jsonattributes: 1
+ };
+ params = L.Util.extend(params, this.options.geocodingQueryParams);
+ this.getJSON(this.options.geocodeUrl, params, cb, context);
+ },
+ reverse: function(location, scale, cb, context) {
+ var _proxRadius = this.options.reverseGeocodeProxRadius
+ ? this.options.reverseGeocodeProxRadius
+ : null;
+ var proxRadius = _proxRadius ? ',' + encodeURIComponent(_proxRadius) : '';
+ var params = {
+ prox: encodeURIComponent(location.lat) + ',' + encodeURIComponent(location.lng) + proxRadius,
+ mode: 'retrieveAddresses',
+ app_id: this.options.app_id,
+ app_code: this.options.app_code,
+ gen: 9,
+ jsonattributes: 1
+ };
+ params = L.Util.extend(params, this.options.reverseQueryParams);
+ this.getJSON(this.options.reverseGeocodeUrl, params, cb, context);
+ },
+ getJSON: function(url, params, cb, context) {
+ getJSON(url, params, function(data) {
+ var results = [],
+ loc,
+ latLng,
+ latLngBounds;
+ if (data.response.view && data.response.view.length) {
+ for (var i = 0; i <= data.response.view[0].result.length - 1; i++) {
+ loc = data.response.view[0].result[i].location;
+ latLng = L.latLng(loc.displayPosition.latitude, loc.displayPosition.longitude);
+ latLngBounds = L.latLngBounds(
+ L.latLng(loc.mapView.topLeft.latitude, loc.mapView.topLeft.longitude),
+ L.latLng(loc.mapView.bottomRight.latitude, loc.mapView.bottomRight.longitude)
+ );
+ results[i] = {
+ name: loc.address.label,
+ properties: loc.address,
+ bbox: latLngBounds,
+ center: latLng
+ };
+ }
+ }
+ cb.call(context, results);
+ });
+ }
+ });
+ function here(options) {
+ return new HERE(options);
+ }
+
+ var LatLng = L.Class.extend({
+ options: {
+ // the next geocoder to use
+ next: undefined,
+ sizeInMeters: 10000
+ },
+
+ initialize: function(options) {
+ L.Util.setOptions(this, options);
+ },
geocode: function(query, cb, context) {
- var params = L.extend(
- {
- q: query
- },
- this.options.geocodingQueryParams
- );
+ var match;
+ var center;
+ // regex from https://github.com/openstreetmap/openstreetmap-website/blob/master/app/controllers/geocoder_controller.rb
+ if ((match = query.match(/^([NS])\s*(\d{1,3}(?:\.\d*)?)\W*([EW])\s*(\d{1,3}(?:\.\d*)?)$/))) {
+ // [NSEW] decimal degrees
+ center = L.latLng(
+ (/N/i.test(match[1]) ? 1 : -1) * parseFloat(match[2]),
+ (/E/i.test(match[3]) ? 1 : -1) * parseFloat(match[4])
+ );
+ } else if (
+ (match = query.match(/^(\d{1,3}(?:\.\d*)?)\s*([NS])\W*(\d{1,3}(?:\.\d*)?)\s*([EW])$/))
+ ) {
+ // decimal degrees [NSEW]
+ center = L.latLng(
+ (/N/i.test(match[2]) ? 1 : -1) * parseFloat(match[1]),
+ (/E/i.test(match[4]) ? 1 : -1) * parseFloat(match[3])
+ );
+ } else if (
+ (match = query.match(
+ /^([NS])\s*(\d{1,3})°?\s*(\d{1,3}(?:\.\d*)?)?['′]?\W*([EW])\s*(\d{1,3})°?\s*(\d{1,3}(?:\.\d*)?)?['′]?$/
+ ))
+ ) {
+ // [NSEW] degrees, decimal minutes
+ center = L.latLng(
+ (/N/i.test(match[1]) ? 1 : -1) * (parseFloat(match[2]) + parseFloat(match[3] / 60)),
+ (/E/i.test(match[4]) ? 1 : -1) * (parseFloat(match[5]) + parseFloat(match[6] / 60))
+ );
+ } else if (
+ (match = query.match(
+ /^(\d{1,3})°?\s*(\d{1,3}(?:\.\d*)?)?['′]?\s*([NS])\W*(\d{1,3})°?\s*(\d{1,3}(?:\.\d*)?)?['′]?\s*([EW])$/
+ ))
+ ) {
+ // degrees, decimal minutes [NSEW]
+ center = L.latLng(
+ (/N/i.test(match[3]) ? 1 : -1) * (parseFloat(match[1]) + parseFloat(match[2] / 60)),
+ (/E/i.test(match[6]) ? 1 : -1) * (parseFloat(match[4]) + parseFloat(match[5] / 60))
+ );
+ } else if (
+ (match = query.match(
+ /^([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*)?)?["″]?$/
+ ))
+ ) {
+ // [NSEW] degrees, minutes, decimal seconds
+ center = L.latLng(
+ (/N/i.test(match[1]) ? 1 : -1) *
+ (parseFloat(match[2]) + parseFloat(match[3] / 60 + parseFloat(match[4] / 3600))),
+ (/E/i.test(match[5]) ? 1 : -1) *
+ (parseFloat(match[6]) + parseFloat(match[7] / 60) + parseFloat(match[8] / 3600))
+ );
+ } else if (
+ (match = query.match(
+ /^(\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])$/
+ ))
+ ) {
+ // degrees, minutes, decimal seconds [NSEW]
+ center = L.latLng(
+ (/N/i.test(match[4]) ? 1 : -1) *
+ (parseFloat(match[1]) + parseFloat(match[2] / 60 + parseFloat(match[3] / 3600))),
+ (/E/i.test(match[8]) ? 1 : -1) *
+ (parseFloat(match[5]) + parseFloat(match[6] / 60) + parseFloat(match[7] / 3600))
+ );
+ } else if (
+ (match = query.match(/^\s*([+-]?\d+(?:\.\d*)?)\s*[\s,]\s*([+-]?\d+(?:\.\d*)?)\s*$/))
+ ) {
+ center = L.latLng(parseFloat(match[1]), parseFloat(match[2]));
+ }
+ if (center) {
+ var results = [
+ {
+ name: query,
+ center: center,
+ bbox: center.toBounds(this.options.sizeInMeters)
+ }
+ ];
+ cb.call(context, results);
+ } else if (this.options.next) {
+ this.options.next.geocode(query, cb, context);
+ }
+ }
+ });
+ function latLng(options) {
+ return new LatLng(options);
+ }
+
+ var Mapbox = L.Class.extend({
+ options: {
+ serviceUrl: 'https://api.mapbox.com/geocoding/v5/mapbox.places/',
+ geocodingQueryParams: {},
+ reverseQueryParams: {}
+ },
+
+ initialize: function(accessToken, options) {
+ L.setOptions(this, options);
+ this.options.geocodingQueryParams.access_token = accessToken;
+ this.options.reverseQueryParams.access_token = accessToken;
+ },
+
+ geocode: function(query, cb, context) {
+ var params = this.options.geocodingQueryParams;
+ if (
+ params.proximity !== undefined &&
+ params.proximity.lat !== undefined &&
+ params.proximity.lng !== undefined
+ ) {
+ params.proximity = params.proximity.lng + ',' + params.proximity.lat;
+ }
+ getJSON(this.options.serviceUrl + encodeURIComponent(query) + '.json', params, function(data) {
+ var results = [],
+ loc,
+ latLng,
+ latLngBounds;
+ if (data.features && data.features.length) {
+ for (var i = 0; i <= data.features.length - 1; i++) {
+ loc = data.features[i];
+ latLng = L.latLng(loc.center.reverse());
+ if (loc.bbox) {
+ latLngBounds = L.latLngBounds(
+ L.latLng(loc.bbox.slice(0, 2).reverse()),
+ L.latLng(loc.bbox.slice(2, 4).reverse())
+ );
+ } else {
+ latLngBounds = L.latLngBounds(latLng, latLng);
+ }
+
+ var properties = {
+ text: loc.text,
+ address: loc.address
+ };
+
+ for (var j = 0; j < (loc.context || []).length; j++) {
+ var id = loc.context[j].id.split('.')[0];
+ properties[id] = loc.context[j].text;
+
+ // Get country code when available
+ if (loc.context[j].short_code) {
+ properties['countryShortCode'] = loc.context[j].short_code;
+ }
+ }
+
+ results[i] = {
+ name: loc.place_name,
+ bbox: latLngBounds,
+ center: latLng,
+ properties: properties
+ };
+ }
+ }
+
+ cb.call(context, results);
+ });
+ },
+
+ suggest: function(query, cb, context) {
+ return this.geocode(query, cb, context);
+ },
+
+ reverse: function(location, scale, cb, context) {
getJSON(
- this.options.serviceUrl,
- params,
+ this.options.serviceUrl +
+ encodeURIComponent(location.lng) +
+ ',' +
+ encodeURIComponent(location.lat) +
+ '.json',
+ this.options.reverseQueryParams,
+ function(data) {
+ var results = [],
+ loc,
+ latLng,
+ latLngBounds;
+ if (data.features && data.features.length) {
+ for (var i = 0; i <= data.features.length - 1; i++) {
+ loc = data.features[i];
+ latLng = L.latLng(loc.center.reverse());
+ if (loc.bbox) {
+ latLngBounds = L.latLngBounds(
+ L.latLng(loc.bbox.slice(0, 2).reverse()),
+ L.latLng(loc.bbox.slice(2, 4).reverse())
+ );
+ } else {
+ latLngBounds = L.latLngBounds(latLng, latLng);
+ }
+ results[i] = {
+ name: loc.place_name,
+ bbox: latLngBounds,
+ center: latLng
+ };
+ }
+ }
+
+ cb.call(context, results);
+ }
+ );
+ }
+ });
+
+ function mapbox(accessToken, options) {
+ return new Mapbox(accessToken, options);
+ }
+
+ var MapQuest = L.Class.extend({
+ options: {
+ serviceUrl: 'https://www.mapquestapi.com/geocoding/v1'
+ },
+
+ initialize: function(key, options) {
+ // MapQuest seems to provide URI encoded API keys,
+ // so to avoid encoding them twice, we decode them here
+ this._key = decodeURIComponent(key);
+
+ L.Util.setOptions(this, options);
+ },
+
+ _formatName: function() {
+ var r = [],
+ i;
+ for (i = 0; i < arguments.length; i++) {
+ if (arguments[i]) {
+ r.push(arguments[i]);
+ }
+ }
+
+ return r.join(', ');
+ },
+
+ geocode: function(query, cb, context) {
+ getJSON(
+ this.options.serviceUrl + '/address',
+ {
+ key: this._key,
+ location: query,
+ limit: 5,
+ outFormat: 'json'
+ },
L.bind(function(data) {
- cb.call(context, this._decodeFeatures(data));
+ var results = [],
+ loc,
+ latLng;
+ if (data.results && data.results[0].locations) {
+ for (var i = data.results[0].locations.length - 1; i >= 0; i--) {
+ loc = data.results[0].locations[i];
+ latLng = L.latLng(loc.latLng);
+ results[i] = {
+ name: this._formatName(loc.street, loc.adminArea4, loc.adminArea3, loc.adminArea1),
+ bbox: L.latLngBounds(latLng, latLng),
+ center: latLng
+ };
+ }
+ }
+
+ cb.call(context, results);
}, this)
);
},
+ reverse: function(location, scale, cb, context) {
+ getJSON(
+ this.options.serviceUrl + '/reverse',
+ {
+ key: this._key,
+ location: location.lat + ',' + location.lng,
+ outputFormat: 'json'
+ },
+ L.bind(function(data) {
+ var results = [],
+ loc,
+ latLng;
+ if (data.results && data.results[0].locations) {
+ for (var i = data.results[0].locations.length - 1; i >= 0; i--) {
+ loc = data.results[0].locations[i];
+ latLng = L.latLng(loc.latLng);
+ results[i] = {
+ name: this._formatName(loc.street, loc.adminArea4, loc.adminArea3, loc.adminArea1),
+ bbox: L.latLngBounds(latLng, latLng),
+ center: latLng
+ };
+ }
+ }
+
+ cb.call(context, results);
+ }, this)
+ );
+ }
+ });
+
+ function mapQuest(key, options) {
+ return new MapQuest(key, options);
+ }
+
+ var Neutrino = L.Class.extend({
+ options: {
+ userId: '',
+ apiKey: '',
+ serviceUrl: 'https://neutrinoapi.com/'
+ },
+
+ initialize: function(options) {
+ L.Util.setOptions(this, options);
+ },
+
+ // https://www.neutrinoapi.com/api/geocode-address/
+ geocode: function(query, cb, context) {
+ getJSON(
+ this.options.serviceUrl + 'geocode-address',
+ {
+ apiKey: this.options.apiKey,
+ userId: this.options.userId,
+ //get three words and make a dot based string
+ address: query.split(/\s+/).join('.')
+ },
+ function(data) {
+ var results = [],
+ latLng,
+ latLngBounds;
+ if (data.locations) {
+ data.geometry = data.locations[0];
+ latLng = L.latLng(data.geometry['latitude'], data.geometry['longitude']);
+ latLngBounds = L.latLngBounds(latLng, latLng);
+ results[0] = {
+ name: data.geometry.address,
+ bbox: latLngBounds,
+ center: latLng
+ };
+ }
+
+ cb.call(context, results);
+ }
+ );
+ },
+
suggest: function(query, cb, context) {
return this.geocode(query, cb, context);
},
- reverse: function(latLng, scale, cb, context) {
- var params = L.extend(
- {
- lat: latLng.lat,
- lon: latLng.lng
- },
- this.options.reverseQueryParams
- );
-
+ // https://www.neutrinoapi.com/api/geocode-reverse/
+ reverse: function(location, scale, cb, context) {
getJSON(
- this.options.reverseUrl,
- params,
+ this.options.serviceUrl + 'geocode-reverse',
+ {
+ apiKey: this.options.apiKey,
+ userId: this.options.userId,
+ latitude: location.lat,
+ longitude: location.lng
+ },
+ function(data) {
+ var results = [],
+ latLng,
+ latLngBounds;
+ if (data.status.status == 200 && data.found) {
+ latLng = L.latLng(location.lat, location.lng);
+ latLngBounds = L.latLngBounds(latLng, latLng);
+ results[0] = {
+ name: data.address,
+ bbox: latLngBounds,
+ center: latLng
+ };
+ }
+ cb.call(context, results);
+ }
+ );
+ }
+ });
+
+ function neutrino(accessToken) {
+ return new Neutrino(accessToken);
+ }
+
+ var Nominatim = L.Class.extend({
+ options: {
+ serviceUrl: 'https://nominatim.openstreetmap.org/',
+ geocodingQueryParams: {},
+ reverseQueryParams: {},
+ htmlTemplate: function(r) {
+ var a = r.address,
+ className,
+ parts = [];
+ if (a.road || a.building) {
+ parts.push('{building} {road} {house_number}');
+ }
+
+ if (a.city || a.town || a.village || a.hamlet) {
+ className = parts.length > 0 ? 'leaflet-control-geocoder-address-detail' : '';
+ parts.push(
+ '{postcode} {city} {town} {village} {hamlet}'
+ );
+ }
+
+ if (a.state || a.country) {
+ className = parts.length > 0 ? 'leaflet-control-geocoder-address-context' : '';
+ parts.push('{state} {country}');
+ }
+
+ return template(parts.join('
'), a, true);
+ }
+ },
+
+ initialize: function(options) {
+ L.Util.setOptions(this, options);
+ },
+
+ geocode: function(query, cb, context) {
+ getJSON(
+ this.options.serviceUrl + 'search',
+ L.extend(
+ {
+ q: query,
+ limit: 5,
+ format: 'json',
+ addressdetails: 1
+ },
+ this.options.geocodingQueryParams
+ ),
L.bind(function(data) {
- cb.call(context, this._decodeFeatures(data));
+ var results = [];
+ for (var i = data.length - 1; i >= 0; i--) {
+ var bbox = data[i].boundingbox;
+ for (var j = 0; j < 4; j++) bbox[j] = parseFloat(bbox[j]);
+ results[i] = {
+ icon: data[i].icon,
+ name: data[i].display_name,
+ html: this.options.htmlTemplate ? this.options.htmlTemplate(data[i]) : undefined,
+ bbox: L.latLngBounds([bbox[0], bbox[2]], [bbox[1], bbox[3]]),
+ center: L.latLng(data[i].lat, data[i].lon),
+ properties: data[i]
+ };
+ }
+ cb.call(context, results);
}, this)
);
},
- _decodeFeatures: function(data) {
- var results = [],
- i,
- f,
- c,
- latLng,
- extent,
- bbox;
+ reverse: function(location, scale, cb, context) {
+ getJSON(
+ this.options.serviceUrl + 'reverse',
+ L.extend(
+ {
+ lat: location.lat,
+ lon: location.lng,
+ zoom: Math.round(Math.log(scale / 256) / Math.log(2)),
+ addressdetails: 1,
+ format: 'json'
+ },
+ this.options.reverseQueryParams
+ ),
+ L.bind(function(data) {
+ var result = [],
+ loc;
- if (data && data.features) {
- for (i = 0; i < data.features.length; i++) {
- f = data.features[i];
- c = f.geometry.coordinates;
- latLng = L.latLng(c[1], c[0]);
- extent = f.properties.extent;
-
- if (extent) {
- bbox = L.latLngBounds([extent[1], extent[0]], [extent[3], extent[2]]);
- } else {
- bbox = L.latLngBounds(latLng, latLng);
+ if (data && data.lat && data.lon) {
+ loc = L.latLng(data.lat, data.lon);
+ result.push({
+ name: data.display_name,
+ html: this.options.htmlTemplate ? this.options.htmlTemplate(data) : undefined,
+ center: loc,
+ bounds: L.latLngBounds(loc, loc),
+ properties: data
+ });
}
- results.push({
- name: this._deocodeFeatureName(f),
- html: this.options.htmlTemplate ? this.options.htmlTemplate(f) : undefined,
- center: latLng,
- bbox: bbox,
- properties: f.properties
- });
- }
- }
+ cb.call(context, result);
+ }, this)
+ );
+ }
+ });
- return results;
+ function nominatim(options) {
+ return new Nominatim(options);
+ }
+
+ var OpenLocationCode = L.Class.extend({
+ options: {
+ OpenLocationCode: undefined,
+ codeLength: undefined
},
- _deocodeFeatureName: function(f) {
- var j, name;
- for (j = 0; !name && j < this.options.nameProperties.length; j++) {
- name = f.properties[this.options.nameProperties[j]];
+ initialize: function(options) {
+ L.setOptions(this, options);
+ },
+
+ geocode: function(query, cb, context) {
+ try {
+ var decoded = this.options.OpenLocationCode.decode(query);
+ var result = {
+ name: query,
+ center: L.latLng(decoded.latitudeCenter, decoded.longitudeCenter),
+ bbox: L.latLngBounds(
+ L.latLng(decoded.latitudeLo, decoded.longitudeLo),
+ L.latLng(decoded.latitudeHi, decoded.longitudeHi)
+ )
+ };
+ cb.call(context, [result]);
+ } catch (e) {
+ console.warn(e); // eslint-disable-line no-console
+ cb.call(context, []);
+ }
+ },
+ reverse: function(location, scale, cb, context) {
+ try {
+ var code = this.options.OpenLocationCode.encode(
+ location.lat,
+ location.lng,
+ this.options.codeLength
+ );
+ var result = {
+ name: code,
+ center: L.latLng(location.lat, location.lng),
+ bbox: L.latLngBounds(
+ L.latLng(location.lat, location.lng),
+ L.latLng(location.lat, location.lng)
+ )
+ };
+ cb.call(context, [result]);
+ } catch (e) {
+ console.warn(e); // eslint-disable-line no-console
+ cb.call(context, []);
}
-
- return name;
}
- }),
+ });
- factory: function(options) {
- return new L.Control.Geocoder.Photon(options);
+ function openLocationCode(options) {
+ return new OpenLocationCode(options);
}
-};
-var Mapzen = {
- class: L.Class.extend({
+ var OpenCage = L.Class.extend({
options: {
- serviceUrl: 'https://search.mapzen.com/v1',
+ serviceUrl: 'https://api.opencagedata.com/geocode/v1/json',
+ geocodingQueryParams: {},
+ reverseQueryParams: {}
+ },
+
+ initialize: function(apiKey, options) {
+ L.setOptions(this, options);
+ this._accessToken = apiKey;
+ },
+
+ geocode: function(query, cb, context) {
+ var params = {
+ key: this._accessToken,
+ q: query
+ };
+ params = L.extend(params, this.options.geocodingQueryParams);
+ getJSON(this.options.serviceUrl, params, function(data) {
+ var results = [],
+ latLng,
+ latLngBounds,
+ loc;
+ if (data.results && data.results.length) {
+ for (var i = 0; i < data.results.length; i++) {
+ loc = data.results[i];
+ latLng = L.latLng(loc.geometry);
+ if (loc.annotations && loc.annotations.bounds) {
+ latLngBounds = L.latLngBounds(
+ L.latLng(loc.annotations.bounds.northeast),
+ L.latLng(loc.annotations.bounds.southwest)
+ );
+ } else {
+ latLngBounds = L.latLngBounds(latLng, latLng);
+ }
+ results.push({
+ name: loc.formatted,
+ bbox: latLngBounds,
+ center: latLng
+ });
+ }
+ }
+ cb.call(context, results);
+ });
+ },
+
+ suggest: function(query, cb, context) {
+ return this.geocode(query, cb, context);
+ },
+
+ reverse: function(location, scale, cb, context) {
+ var params = {
+ key: this._accessToken,
+ q: [location.lat, location.lng].join(',')
+ };
+ params = L.extend(params, this.options.reverseQueryParams);
+ getJSON(this.options.serviceUrl, params, function(data) {
+ var results = [],
+ latLng,
+ latLngBounds,
+ loc;
+ if (data.results && data.results.length) {
+ for (var i = 0; i < data.results.length; i++) {
+ loc = data.results[i];
+ latLng = L.latLng(loc.geometry);
+ if (loc.annotations && loc.annotations.bounds) {
+ latLngBounds = L.latLngBounds(
+ L.latLng(loc.annotations.bounds.northeast),
+ L.latLng(loc.annotations.bounds.southwest)
+ );
+ } else {
+ latLngBounds = L.latLngBounds(latLng, latLng);
+ }
+ results.push({
+ name: loc.formatted,
+ bbox: latLngBounds,
+ center: latLng
+ });
+ }
+ }
+ cb.call(context, results);
+ });
+ }
+ });
+
+ function opencage(apiKey, options) {
+ return new OpenCage(apiKey, options);
+ }
+
+ var Pelias = L.Class.extend({
+ options: {
+ serviceUrl: 'https://api.geocode.earth/v1',
geocodingQueryParams: {},
reverseQueryParams: {}
},
@@ -1138,6 +1132,12 @@ var Mapzen = {
if (layer.getBounds) {
bbox = layer.getBounds();
center = bbox.getCenter();
+ } else if (layer.feature.bbox) {
+ center = layer.getLatLng();
+ bbox = L.latLngBounds(
+ L.GeoJSON.coordsToLatLng(layer.feature.bbox.slice(0, 2)),
+ L.GeoJSON.coordsToLatLng(layer.feature.bbox.slice(2, 4))
+ );
} else {
center = layer.getLatLng();
bbox = L.latLngBounds(center, center);
@@ -1152,106 +1152,31 @@ var Mapzen = {
});
return results;
}
- }),
+ });
- factory: function(apiKey, options) {
- return new L.Control.Geocoder.Mapzen(apiKey, options);
+ function pelias(apiKey, options) {
+ return new Pelias(apiKey, options);
}
-};
+ var GeocodeEarth = Pelias;
+ var geocodeEarth = pelias;
-var ArcGis = {
- class: L.Class.extend({
+ var Mapzen = Pelias; // r.i.p.
+ var mapzen = pelias;
+
+ var Openrouteservice = Mapzen.extend({
options: {
- service_url: 'http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer'
- },
-
- initialize: function(accessToken, options) {
- L.setOptions(this, options);
- this._accessToken = accessToken;
- },
-
- geocode: function(query, cb, context) {
- var params = {
- SingleLine: query,
- outFields: 'Addr_Type',
- forStorage: false,
- maxLocations: 10,
- f: 'json'
- };
-
- if (this._key && this._key.length) {
- params.token = this._key;
- }
-
- getJSON(this.options.service_url + '/findAddressCandidates', params, function(data) {
- var results = [],
- loc,
- latLng,
- latLngBounds;
-
- if (data.candidates && data.candidates.length) {
- for (var i = 0; i <= data.candidates.length - 1; i++) {
- loc = data.candidates[i];
- latLng = L.latLng(loc.location.y, loc.location.x);
- latLngBounds = L.latLngBounds(
- L.latLng(loc.extent.ymax, loc.extent.xmax),
- L.latLng(loc.extent.ymin, loc.extent.xmin)
- );
- results[i] = {
- name: loc.address,
- bbox: latLngBounds,
- center: latLng
- };
- }
- }
-
- cb.call(context, results);
- });
- },
-
- suggest: function(query, cb, context) {
- return this.geocode(query, cb, context);
- },
-
- reverse: function(location, scale, cb, context) {
- var params = {
- location: encodeURIComponent(location.lng) + ',' + encodeURIComponent(location.lat),
- distance: 100,
- f: 'json'
- };
-
- getJSON(this.options.service_url + '/reverseGeocode', params, function(data) {
- var result = [],
- loc;
-
- if (data && !data.error) {
- loc = L.latLng(data.location.y, data.location.x);
- result.push({
- name: data.address.Match_addr,
- center: loc,
- bounds: L.latLngBounds(loc, loc)
- });
- }
-
- cb.call(context, result);
- });
+ serviceUrl: 'https://api.openrouteservice.org/geocode'
}
- }),
-
- factory: function(accessToken, options) {
- return new L.Control.Geocoder.ArcGis(accessToken, options);
+ });
+ function openrouteservice(apiKey, options) {
+ return new Openrouteservice(apiKey, options);
}
-};
-var HERE = {
- class: L.Class.extend({
+ var Photon = L.Class.extend({
options: {
- geocodeUrl: 'http://geocoder.api.here.com/6.2/geocode.json',
- reverseGeocodeUrl: 'http://reverse.geocoder.api.here.com/6.2/reversegeocode.json',
- app_id: '',
- app_code: '',
- geocodingQueryParams: {},
- reverseQueryParams: {}
+ serviceUrl: 'https://photon.komoot.de/api/',
+ reverseUrl: 'https://photon.komoot.de/reverse/',
+ nameProperties: ['name', 'street', 'suburb', 'hamlet', 'town', 'city', 'state', 'country']
},
initialize: function(options) {
@@ -1259,90 +1184,581 @@ var HERE = {
},
geocode: function(query, cb, context) {
- var params = {
- searchtext: query,
- gen: 9,
- app_id: this.options.app_id,
- app_code: this.options.app_code,
- jsonattributes: 1
- };
- params = L.Util.extend(params, this.options.geocodingQueryParams);
- this.getJSON(this.options.geocodeUrl, params, cb, context);
+ var params = L.extend(
+ {
+ q: query
+ },
+ this.options.geocodingQueryParams
+ );
+
+ getJSON(
+ this.options.serviceUrl,
+ params,
+ L.bind(function(data) {
+ cb.call(context, this._decodeFeatures(data));
+ }, this)
+ );
},
- reverse: function(location, scale, cb, context) {
- var params = {
- prox: encodeURIComponent(location.lat) + ',' + encodeURIComponent(location.lng),
- mode: 'retrieveAddresses',
- app_id: this.options.app_id,
- app_code: this.options.app_code,
- gen: 9,
- jsonattributes: 1
- };
- params = L.Util.extend(params, this.options.reverseQueryParams);
- this.getJSON(this.options.reverseGeocodeUrl, params, cb, context);
+ suggest: function(query, cb, context) {
+ return this.geocode(query, cb, context);
},
- getJSON: function(url, params, cb, context) {
- getJSON(url, params, function(data) {
- var results = [],
- loc,
- latLng,
- latLngBounds;
- if (data.response.view && data.response.view.length) {
- for (var i = 0; i <= data.response.view[0].result.length - 1; i++) {
- loc = data.response.view[0].result[i].location;
- latLng = L.latLng(loc.displayPosition.latitude, loc.displayPosition.longitude);
- latLngBounds = L.latLngBounds(
- L.latLng(loc.mapView.topLeft.latitude, loc.mapView.topLeft.longitude),
- L.latLng(loc.mapView.bottomRight.latitude, loc.mapView.bottomRight.longitude)
- );
- results[i] = {
- name: loc.address.label,
+ reverse: function(latLng, scale, cb, context) {
+ var params = L.extend(
+ {
+ lat: latLng.lat,
+ lon: latLng.lng
+ },
+ this.options.reverseQueryParams
+ );
+
+ getJSON(
+ this.options.reverseUrl,
+ params,
+ L.bind(function(data) {
+ cb.call(context, this._decodeFeatures(data));
+ }, this)
+ );
+ },
+
+ _decodeFeatures: function(data) {
+ var results = [],
+ i,
+ f,
+ c,
+ latLng,
+ extent,
+ bbox;
+
+ if (data && data.features) {
+ for (i = 0; i < data.features.length; i++) {
+ f = data.features[i];
+ c = f.geometry.coordinates;
+ latLng = L.latLng(c[1], c[0]);
+ extent = f.properties.extent;
+
+ if (extent) {
+ bbox = L.latLngBounds([extent[1], extent[0]], [extent[3], extent[2]]);
+ } else {
+ bbox = L.latLngBounds(latLng, latLng);
+ }
+
+ results.push({
+ name: this._decodeFeatureName(f),
+ html: this.options.htmlTemplate ? this.options.htmlTemplate(f) : undefined,
+ center: latLng,
+ bbox: bbox,
+ properties: f.properties
+ });
+ }
+ }
+
+ return results;
+ },
+
+ _decodeFeatureName: function(f) {
+ return (this.options.nameProperties || [])
+ .map(function(p) {
+ return f.properties[p];
+ })
+ .filter(function(v) {
+ return !!v;
+ })
+ .join(', ');
+ }
+ });
+
+ function photon(options) {
+ return new Photon(options);
+ }
+
+ var What3Words = L.Class.extend({
+ options: {
+ serviceUrl: 'https://api.what3words.com/v2/'
+ },
+
+ initialize: function(accessToken) {
+ this._accessToken = accessToken;
+ },
+
+ geocode: function(query, cb, context) {
+ //get three words and make a dot based string
+ getJSON(
+ this.options.serviceUrl + 'forward',
+ {
+ key: this._accessToken,
+ addr: query.split(/\s+/).join('.')
+ },
+ function(data) {
+ var results = [],
+ latLng,
+ latLngBounds;
+ if (data.geometry) {
+ latLng = L.latLng(data.geometry['lat'], data.geometry['lng']);
+ latLngBounds = L.latLngBounds(latLng, latLng);
+ results[0] = {
+ name: data.words,
bbox: latLngBounds,
center: latLng
};
}
+
+ cb.call(context, results);
}
- cb.call(context, results);
- });
+ );
+ },
+
+ suggest: function(query, cb, context) {
+ return this.geocode(query, cb, context);
+ },
+
+ reverse: function(location, scale, cb, context) {
+ getJSON(
+ this.options.serviceUrl + 'reverse',
+ {
+ key: this._accessToken,
+ coords: [location.lat, location.lng].join(',')
+ },
+ function(data) {
+ var results = [],
+ latLng,
+ latLngBounds;
+ if (data.status.status == 200) {
+ latLng = L.latLng(data.geometry['lat'], data.geometry['lng']);
+ latLngBounds = L.latLngBounds(latLng, latLng);
+ results[0] = {
+ name: data.words,
+ bbox: latLngBounds,
+ center: latLng
+ };
+ }
+ cb.call(context, results);
+ }
+ );
}
- }),
+ });
- factory: function(options) {
- return new L.Control.Geocoder.HERE(options);
+ function what3words(accessToken) {
+ return new What3Words(accessToken);
}
-};
-var Geocoder = L.Util.extend(Control.class, {
- Nominatim: Nominatim.class,
- nominatim: Nominatim.factory,
- Bing: Bing.class,
- bing: Bing.factory,
- MapQuest: MapQuest.class,
- mapQuest: MapQuest.factory,
- Mapbox: Mapbox.class,
- mapbox: Mapbox.factory,
- What3Words: What3Words.class,
- what3words: What3Words.factory,
- Google: Google.class,
- google: Google.factory,
- Photon: Photon.class,
- photon: Photon.factory,
- Mapzen: Mapzen.class,
- mapzen: Mapzen.factory,
- ArcGis: ArcGis.class,
- arcgis: ArcGis.factory,
- HERE: HERE.class,
- here: HERE.factory
-});
-L.Util.extend(L.Control, {
- Geocoder: Geocoder,
- geocoder: Control.factory
-});
-return Geocoder;
+ var geocoders = /*#__PURE__*/Object.freeze({
+ ArcGis: ArcGis,
+ arcgis: arcgis,
+ Bing: Bing,
+ bing: bing,
+ Google: Google,
+ google: google,
+ HERE: HERE,
+ here: here,
+ LatLng: LatLng,
+ latLng: latLng,
+ Mapbox: Mapbox,
+ mapbox: mapbox,
+ MapQuest: MapQuest,
+ mapQuest: mapQuest,
+ Neutrino: Neutrino,
+ neutrino: neutrino,
+ Nominatim: Nominatim,
+ nominatim: nominatim,
+ OpenLocationCode: OpenLocationCode,
+ openLocationCode: openLocationCode,
+ OpenCage: OpenCage,
+ opencage: opencage,
+ Pelias: Pelias,
+ pelias: pelias,
+ GeocodeEarth: GeocodeEarth,
+ geocodeEarth: geocodeEarth,
+ Mapzen: Mapzen,
+ mapzen: mapzen,
+ Openrouteservice: Openrouteservice,
+ openrouteservice: openrouteservice,
+ Photon: Photon,
+ photon: photon,
+ What3Words: What3Words,
+ what3words: what3words
+ });
+
+ var Geocoder = L.Control.extend({
+ options: {
+ showUniqueResult: true,
+ showResultIcons: false,
+ collapsed: true,
+ expand: 'touch', // options: touch, click, anythingelse
+ position: 'topright',
+ placeholder: 'Search...',
+ errorMessage: 'Nothing found.',
+ iconLabel: 'Initiate a new search',
+ queryMinLength: 1,
+ suggestMinLength: 3,
+ suggestTimeout: 250,
+ defaultMarkGeocode: true
+ },
+
+ includes: L.Evented.prototype || L.Mixin.Events,
+
+ initialize: function(options) {
+ L.Util.setOptions(this, options);
+ if (!this.options.geocoder) {
+ this.options.geocoder = new Nominatim();
+ }
+
+ this._requestCount = 0;
+ },
+
+ addThrobberClass: function() {
+ L.DomUtil.addClass(this._container, 'leaflet-control-geocoder-throbber');
+ },
+
+ removeThrobberClass: function() {
+ L.DomUtil.removeClass(this._container, 'leaflet-control-geocoder-throbber');
+ },
+
+ onAdd: function(map) {
+ var className = 'leaflet-control-geocoder',
+ container = L.DomUtil.create('div', className + ' leaflet-bar'),
+ icon = L.DomUtil.create('button', className + '-icon', container),
+ form = (this._form = L.DomUtil.create('div', className + '-form', container)),
+ input;
+
+ this._map = map;
+ this._container = container;
+
+ icon.innerHTML = ' ';
+ icon.type = 'button';
+ icon.setAttribute('aria-label', this.options.iconLabel);
+
+ input = this._input = L.DomUtil.create('input', '', form);
+ input.type = 'text';
+ input.value = this.options.query || '';
+ input.placeholder = this.options.placeholder;
+ L.DomEvent.disableClickPropagation(input);
+
+ this._errorElement = L.DomUtil.create('div', className + '-form-no-error', container);
+ this._errorElement.innerHTML = this.options.errorMessage;
+
+ this._alts = L.DomUtil.create(
+ 'ul',
+ className + '-alternatives leaflet-control-geocoder-alternatives-minimized',
+ container
+ );
+ L.DomEvent.disableClickPropagation(this._alts);
+
+ L.DomEvent.addListener(input, 'keydown', this._keydown, this);
+ if (this.options.geocoder.suggest) {
+ L.DomEvent.addListener(input, 'input', this._change, this);
+ }
+ L.DomEvent.addListener(
+ input,
+ 'blur',
+ function() {
+ if (this.options.collapsed && !this._preventBlurCollapse) {
+ this._collapse();
+ }
+ this._preventBlurCollapse = false;
+ },
+ this
+ );
+
+ if (this.options.collapsed) {
+ if (this.options.expand === 'click') {
+ L.DomEvent.addListener(
+ container,
+ 'click',
+ function(e) {
+ if (e.button === 0 && e.detail !== 2) {
+ this._toggle();
+ }
+ },
+ this
+ );
+ } else if (this.options.expand === 'touch') {
+ L.DomEvent.addListener(
+ container,
+ L.Browser.touch ? 'touchstart mousedown' : 'mousedown',
+ function(e) {
+ this._toggle();
+ e.preventDefault(); // mobile: clicking focuses the icon, so UI expands and immediately collapses
+ e.stopPropagation();
+ },
+ this
+ );
+ } else {
+ L.DomEvent.addListener(container, 'mouseover', this._expand, this);
+ L.DomEvent.addListener(container, 'mouseout', this._collapse, this);
+ this._map.on('movestart', this._collapse, this);
+ }
+ } else {
+ this._expand();
+ if (L.Browser.touch) {
+ L.DomEvent.addListener(
+ container,
+ 'touchstart',
+ function() {
+ this._geocode();
+ },
+ this
+ );
+ } else {
+ L.DomEvent.addListener(
+ container,
+ 'click',
+ function() {
+ this._geocode();
+ },
+ this
+ );
+ }
+ }
+
+ if (this.options.defaultMarkGeocode) {
+ this.on('markgeocode', this.markGeocode, this);
+ }
+
+ this.on('startgeocode', this.addThrobberClass, this);
+ this.on('finishgeocode', this.removeThrobberClass, this);
+ this.on('startsuggest', this.addThrobberClass, this);
+ this.on('finishsuggest', this.removeThrobberClass, this);
+
+ L.DomEvent.disableClickPropagation(container);
+
+ return container;
+ },
+
+ setQuery: function(string) {
+ this._input.value = string;
+ return this;
+ },
+
+ _geocodeResult: function(results, suggest) {
+ if (!suggest && this.options.showUniqueResult && results.length === 1) {
+ this._geocodeResultSelected(results[0]);
+ } else if (results.length > 0) {
+ this._alts.innerHTML = '';
+ this._results = results;
+ L.DomUtil.removeClass(this._alts, 'leaflet-control-geocoder-alternatives-minimized');
+ L.DomUtil.addClass(this._container, 'leaflet-control-geocoder-options-open');
+ for (var i = 0; i < results.length; i++) {
+ this._alts.appendChild(this._createAlt(results[i], i));
+ }
+ } else {
+ L.DomUtil.addClass(this._container, 'leaflet-control-geocoder-options-error');
+ L.DomUtil.addClass(this._errorElement, 'leaflet-control-geocoder-error');
+ }
+ },
+
+ markGeocode: function(result) {
+ result = result.geocode || result;
+
+ this._map.fitBounds(result.bbox);
+
+ if (this._geocodeMarker) {
+ this._map.removeLayer(this._geocodeMarker);
+ }
+
+ this._geocodeMarker = new L.Marker(result.center)
+ .bindPopup(result.html || result.name)
+ .addTo(this._map)
+ .openPopup();
+
+ return this;
+ },
+
+ _geocode: function(suggest) {
+ var value = this._input.value;
+ if (!suggest && value.length < this.options.queryMinLength) {
+ return;
+ }
+
+ var requestCount = ++this._requestCount,
+ mode = suggest ? 'suggest' : 'geocode',
+ eventData = { input: value };
+
+ this._lastGeocode = value;
+ if (!suggest) {
+ this._clearResults();
+ }
+
+ this.fire('start' + mode, eventData);
+ this.options.geocoder[mode](
+ value,
+ function(results) {
+ if (requestCount === this._requestCount) {
+ eventData.results = results;
+ this.fire('finish' + mode, eventData);
+ this._geocodeResult(results, suggest);
+ }
+ },
+ this
+ );
+ },
+
+ _geocodeResultSelected: function(result) {
+ this.fire('markgeocode', { geocode: result });
+ },
+
+ _toggle: function() {
+ if (L.DomUtil.hasClass(this._container, 'leaflet-control-geocoder-expanded')) {
+ this._collapse();
+ } else {
+ this._expand();
+ }
+ },
+
+ _expand: function() {
+ L.DomUtil.addClass(this._container, 'leaflet-control-geocoder-expanded');
+ this._input.select();
+ this.fire('expand');
+ },
+
+ _collapse: function() {
+ L.DomUtil.removeClass(this._container, 'leaflet-control-geocoder-expanded');
+ L.DomUtil.addClass(this._alts, 'leaflet-control-geocoder-alternatives-minimized');
+ L.DomUtil.removeClass(this._errorElement, 'leaflet-control-geocoder-error');
+ L.DomUtil.removeClass(this._container, 'leaflet-control-geocoder-options-open');
+ L.DomUtil.removeClass(this._container, 'leaflet-control-geocoder-options-error');
+ this._input.blur(); // mobile: keyboard shouldn't stay expanded
+ this.fire('collapse');
+ },
+
+ _clearResults: function() {
+ L.DomUtil.addClass(this._alts, 'leaflet-control-geocoder-alternatives-minimized');
+ this._selection = null;
+ L.DomUtil.removeClass(this._errorElement, 'leaflet-control-geocoder-error');
+ L.DomUtil.removeClass(this._container, 'leaflet-control-geocoder-options-open');
+ L.DomUtil.removeClass(this._container, 'leaflet-control-geocoder-options-error');
+ },
+
+ _createAlt: function(result, index) {
+ var li = L.DomUtil.create('li', ''),
+ a = L.DomUtil.create('a', '', li),
+ icon = this.options.showResultIcons && result.icon ? L.DomUtil.create('img', '', a) : null,
+ text = result.html ? undefined : document.createTextNode(result.name),
+ mouseDownHandler = function mouseDownHandler(e) {
+ // In some browsers, a click will fire on the map if the control is
+ // collapsed directly after mousedown. To work around this, we
+ // wait until the click is completed, and _then_ collapse the
+ // control. Messy, but this is the workaround I could come up with
+ // for #142.
+ this._preventBlurCollapse = true;
+ L.DomEvent.stop(e);
+ this._geocodeResultSelected(result);
+ L.DomEvent.on(
+ li,
+ 'click touchend',
+ function() {
+ if (this.options.collapsed) {
+ this._collapse();
+ } else {
+ this._clearResults();
+ }
+ },
+ this
+ );
+ };
+
+ if (icon) {
+ icon.src = result.icon;
+ }
+
+ li.setAttribute('data-result-index', index);
+
+ if (result.html) {
+ a.innerHTML = a.innerHTML + result.html;
+ } else {
+ a.appendChild(text);
+ }
+
+ // Use mousedown and not click, since click will fire _after_ blur,
+ // causing the control to have collapsed and removed the items
+ // before the click can fire.
+ L.DomEvent.addListener(li, 'mousedown touchstart', mouseDownHandler, this);
+
+ return li;
+ },
+
+ _keydown: function(e) {
+ var _this = this,
+ select = function select(dir) {
+ if (_this._selection) {
+ L.DomUtil.removeClass(_this._selection, 'leaflet-control-geocoder-selected');
+ _this._selection = _this._selection[dir > 0 ? 'nextSibling' : 'previousSibling'];
+ }
+ if (!_this._selection) {
+ _this._selection = _this._alts[dir > 0 ? 'firstChild' : 'lastChild'];
+ }
+
+ if (_this._selection) {
+ L.DomUtil.addClass(_this._selection, 'leaflet-control-geocoder-selected');
+ }
+ };
+
+ switch (e.keyCode) {
+ // Escape
+ case 27:
+ if (this.options.collapsed) {
+ this._collapse();
+ } else {
+ this._clearResults();
+ }
+ break;
+ // Up
+ case 38:
+ select(-1);
+ break;
+ // Up
+ case 40:
+ select(1);
+ break;
+ // Enter
+ case 13:
+ if (this._selection) {
+ var index = parseInt(this._selection.getAttribute('data-result-index'), 10);
+ this._geocodeResultSelected(this._results[index]);
+ this._clearResults();
+ } else {
+ this._geocode();
+ }
+ break;
+ default:
+ return;
+ }
+
+ L.DomEvent.preventDefault(e);
+ },
+ _change: function() {
+ var v = this._input.value;
+ if (v !== this._lastGeocode) {
+ clearTimeout(this._suggestTimeout);
+ if (v.length >= this.options.suggestMinLength) {
+ this._suggestTimeout = setTimeout(
+ L.bind(function() {
+ this._geocode(true);
+ }, this),
+ this.options.suggestTimeout
+ );
+ } else {
+ this._clearResults();
+ }
+ }
+ }
+ });
+
+ function geocoder(options) {
+ return new Geocoder(options);
+ }
+
+ L.Util.extend(Geocoder, geocoders);
+
+ L.Util.extend(L.Control, {
+ Geocoder: Geocoder,
+ geocoder: geocoder
+ });
+
+ return Geocoder;
}(L));
//# sourceMappingURL=Control.Geocoder.js.map
diff --git a/assets/control-geocoder/Control.Geocoder.js.map b/assets/control-geocoder/Control.Geocoder.js.map
index d655362..0f426c0 100644
--- a/assets/control-geocoder/Control.Geocoder.js.map
+++ b/assets/control-geocoder/Control.Geocoder.js.map
@@ -1 +1 @@
-{"version":3,"file":"Control.Geocoder.js","sources":["../src/util.js","../src/geocoders/nominatim.js","../src/control.js","../src/geocoders/bing.js","../src/geocoders/mapquest.js","../src/geocoders/mapbox.js","../src/geocoders/what3words.js","../src/geocoders/google.js","../src/geocoders/photon.js","../src/geocoders/mapzen.js","../src/geocoders/arcgis.js","../src/geocoders/here.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 + L.Util.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 if (xmlHttp.status !== 200 && xmlHttp.status !== 304) {\n callback('');\n return;\n }\n callback(JSON.parse(xmlHttp.response));\n };\n xmlHttp.open('GET', url + L.Util.getParamString(params), true);\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","import L from 'leaflet';\nimport { template, getJSON } from '../util';\n\nexport default {\n class: 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\n factory: function(options) {\n return new L.Control.Geocoder.Nominatim(options);\n }\n};\n","import L from 'leaflet';\nimport Nominatim from './geocoders/nominatim';\n\nexport default {\n class: L.Control.extend({\n options: {\n showResultIcons: false,\n collapsed: true,\n expand: 'touch', // options: touch, click, anythingelse\n position: 'topright',\n placeholder: 'Search...',\n errorMessage: 'Nothing found.',\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.class();\n }\n\n this._requestCount = 0;\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\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(\n 'startgeocode',\n function() {\n L.DomUtil.addClass(this._container, 'leaflet-control-geocoder-throbber');\n },\n this\n );\n this.on(\n 'finishgeocode',\n function() {\n L.DomUtil.removeClass(this._container, 'leaflet-control-geocoder-throbber');\n },\n this\n );\n\n L.DomEvent.disableClickPropagation(container);\n\n return container;\n },\n\n _geocodeResult: function(results, suggest) {\n if (!suggest && 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 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._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 requestCount = ++this._requestCount,\n mode = suggest ? 'suggest' : 'geocode',\n eventData = { input: this._input.value };\n\n this._lastGeocode = this._input.value;\n if (!suggest) {\n this._clearResults();\n }\n\n this.fire('start' + mode, eventData);\n this.options.geocoder[mode](\n this._input.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 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 },\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 }\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 }\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 factory: function(options) {\n return new L.Control.Geocoder(options);\n }\n};\n","import L from 'leaflet';\nimport { jsonp } from '../util';\n\nexport default {\n class: 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\n factory: function(key) {\n return new L.Control.Geocoder.Bing(key);\n }\n};\n","import L from 'leaflet';\nimport { getJSON } from '../util';\n\nexport default {\n class: 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\n factory: function(key, options) {\n return new L.Control.Geocoder.MapQuest(key, options);\n }\n};\n","import L from 'leaflet';\nimport { getJSON } from '../util';\n\nexport default {\n class: L.Class.extend({\n options: {\n serviceUrl: 'https://api.tiles.mapbox.com/v4/geocode/mapbox.places-v1/',\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 typeof params.proximity !== 'undefined' &&\n params.proximity.hasOwnProperty('lat') &&\n params.proximity.hasOwnProperty('lng')\n ) {\n params.proximity = params.proximity.lng + ',' + params.proximity.lat;\n }\n getJSON(this.options.serviceUrl + encodeURIComponent(query) + '.json', params, function(\n data\n ) {\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.hasOwnProperty('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 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.hasOwnProperty('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\n factory: function(accessToken, options) {\n return new L.Control.Geocoder.Mapbox(accessToken, options);\n }\n};\n","import L from 'leaflet';\nimport { getJSON } from '../util';\n\nexport default {\n class: 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.hasOwnProperty('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\n factory: function(accessToken) {\n return new L.Control.Geocoder.What3Words(accessToken);\n }\n};\n","import L from 'leaflet';\nimport { getJSON } from '../util';\n\nexport default {\n class: 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\n factory: function(key, options) {\n return new L.Control.Geocoder.Google(key, options);\n }\n};\n","import L from 'leaflet';\nimport { getJSON } from '../util';\n\nexport default {\n class: 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._deocodeFeatureName(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 _deocodeFeatureName: function(f) {\n var j, name;\n for (j = 0; !name && j < this.options.nameProperties.length; j++) {\n name = f.properties[this.options.nameProperties[j]];\n }\n\n return name;\n }\n }),\n\n factory: function(options) {\n return new L.Control.Geocoder.Photon(options);\n }\n};\n","import L from 'leaflet';\nimport { getJSON } from '../util';\n\nexport default {\n class: L.Class.extend({\n options: {\n serviceUrl: 'https://search.mapzen.com/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 {\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\n factory: function(apiKey, options) {\n return new L.Control.Geocoder.Mapzen(apiKey, options);\n }\n};\n","import L from 'leaflet';\nimport { getJSON } from '../util';\n\nexport default {\n class: L.Class.extend({\n options: {\n service_url: 'http://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(this.options.service_url + '/findAddressCandidates', params, 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 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\n factory: function(accessToken, options) {\n return new L.Control.Geocoder.ArcGis(accessToken, options);\n }\n};\n","import L from 'leaflet';\nimport { getJSON } from '../util';\n\nexport default {\n class: L.Class.extend({\n options: {\n geocodeUrl: 'http://geocoder.api.here.com/6.2/geocode.json',\n reverseGeocodeUrl: 'http://reverse.geocoder.api.here.com/6.2/reversegeocode.json',\n app_id: '',\n app_code: '',\n geocodingQueryParams: {},\n reverseQueryParams: {}\n },\n\n initialize: function(options) {\n L.setOptions(this, options);\n },\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\n reverse: function(location, scale, cb, context) {\n var params = {\n prox: encodeURIComponent(location.lat) + ',' + encodeURIComponent(location.lng),\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\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 }),\n\n factory: function(options) {\n return new L.Control.Geocoder.HERE(options);\n }\n};\n","import L from 'leaflet';\nimport Control from './control';\nimport Nominatim from './geocoders/nominatim';\nimport Bing from './geocoders/bing';\nimport MapQuest from './geocoders/mapquest';\nimport Mapbox from './geocoders/mapbox';\nimport What3Words from './geocoders/what3words';\nimport Google from './geocoders/google';\nimport Photon from './geocoders/photon';\nimport Mapzen from './geocoders/mapzen';\nimport ArcGis from './geocoders/arcgis';\nimport HERE from './geocoders/here';\n\nvar Geocoder = L.Util.extend(Control.class, {\n Nominatim: Nominatim.class,\n nominatim: Nominatim.factory,\n Bing: Bing.class,\n bing: Bing.factory,\n MapQuest: MapQuest.class,\n mapQuest: MapQuest.factory,\n Mapbox: Mapbox.class,\n mapbox: Mapbox.factory,\n What3Words: What3Words.class,\n what3words: What3Words.factory,\n Google: Google.class,\n google: Google.factory,\n Photon: Photon.class,\n photon: Photon.factory,\n Mapzen: Mapzen.class,\n mapzen: Mapzen.factory,\n ArcGis: ArcGis.class,\n arcgis: ArcGis.factory,\n HERE: HERE.class,\n here: HERE.factory\n});\n\nexport default Geocoder;\n\nL.Util.extend(L.Control, {\n Geocoder: Geocoder,\n geocoder: Control.factory\n});\n"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"Control.Geocoder.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 properties: loc.address,\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 // Get country code when available\n if (loc.context[j].short_code) {\n properties['countryShortCode'] = loc.context[j].short_code\n }\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 className,\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 className = parts.length > 0 ? 'leaflet-control-geocoder-address-detail' : '';\n parts.push(\n '{postcode} {city} {town} {village} {hamlet}'\n );\n }\n\n if (a.state || a.country) {\n className = parts.length > 0 ? 'leaflet-control-geocoder-address-context' : '';\n parts.push('{state} {country}');\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 geocodingQueryParams: {},\n reverseQueryParams: {}\n },\n\n initialize: function(apiKey, options) {\n L.setOptions(this, options);\n this._accessToken = apiKey;\n },\n\n geocode: function(query, cb, context) {\n var params = {\n key: this._accessToken,\n q: query\n };\n params = L.extend(params, this.options.geocodingQueryParams);\n getJSON(this.options.serviceUrl, params, 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 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 key: this._accessToken,\n q: [location.lat, location.lng].join(',')\n };\n params = L.extend(params, this.options.reverseQueryParams);\n getJSON(this.options.serviceUrl, params, 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\nexport function opencage(apiKey, options) {\n return new OpenCage(apiKey, options);\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 iconLabel: 'Initiate a new search',\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 icon.setAttribute('aria-label', this.options.iconLabel);\n\n input = this._input = L.DomUtil.create('input', '', form);\n input.type = 'text';\n input.value = this.options.query || '';\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 (this.options.expand === 'touch') {\n L.DomEvent.addListener(\n container,\n L.Browser.touch ? 'touchstart mousedown' : '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 setQuery: function(string) {\n this._input.value = string;\n return this;\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 touchend',\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":[],"mappings":"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"}
\ No newline at end of file
diff --git a/assets/control-geocoder/Control.Geocoder.min.js b/assets/control-geocoder/Control.Geocoder.min.js
index c6d1b35..3c5c4ff 100644
--- a/assets/control-geocoder/Control.Geocoder.min.js
+++ b/assets/control-geocoder/Control.Geocoder.min.js
@@ -1 +1,10 @@
-this.L=this.L||{},this.L.Control=this.L.Control||{},this.L.Control.Geocoder=function(l){"use strict";l=l&&l.hasOwnProperty("default")?l.default:l;var a=0,i=/[&<>"'`]/g,r=/[&<>"'`]/,t={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"};function c(e){return t[e]}function o(e,t,o,s,n){var i="_l_geocoder_"+a++;t[n||"callback"]=i,window[i]=l.Util.bind(o,s);var r=document.createElement("script");r.type="text/javascript",r.src=e+l.Util.getParamString(t),r.id=i,document.getElementsByTagName("head")[0].appendChild(r)}function d(e,t,o){var s=new XMLHttpRequest;s.onreadystatechange=function(){4===s.readyState&&(200===s.status||304===s.status?o(JSON.parse(s.response)):o(""))},s.open("GET",e+l.Util.getParamString(t),!0),s.setRequestHeader("Accept","application/json"),s.send(null)}function s(e,n){return e.replace(/\{ *([\w_]+) *\}/g,function(e,t){var o,s=n[t];return void 0===s?s="":"function"==typeof s&&(s=s(n)),null==(o=s)?"":o?(o=""+o,r.test(o)?o.replace(i,c):o):o+""})}var n={class:l.Class.extend({options:{serviceUrl:"https://nominatim.openstreetmap.org/",geocodingQueryParams:{},reverseQueryParams:{},htmlTemplate:function(e){var t=e.address,o=[];return(t.road||t.building)&&o.push("{building} {road} {house_number}"),(t.city||t.town||t.village||t.hamlet)&&o.push('{postcode} {city} {town} {village} {hamlet}'),(t.state||t.country)&&o.push('{state} {country}'),s(o.join("
"),t)}},initialize:function(e){l.Util.setOptions(this,e)},geocode:function(e,i,r){d(this.options.serviceUrl+"search",l.extend({q:e,limit:5,format:"json",addressdetails:1},this.options.geocodingQueryParams),l.bind(function(e){for(var t=[],o=e.length-1;0<=o;o--){for(var s=e[o].boundingbox,n=0;n<4;n++)s[n]=parseFloat(s[n]);t[o]={icon:e[o].icon,name:e[o].display_name,html:this.options.htmlTemplate?this.options.htmlTemplate(e[o]):void 0,bbox:l.latLngBounds([s[0],s[2]],[s[1],s[3]]),center:l.latLng(e[o].lat,e[o].lon),properties:e[o]}}i.call(r,t)},this))},reverse:function(e,t,s,n){d(this.options.serviceUrl+"reverse",l.extend({lat:e.lat,lon:e.lng,zoom:Math.round(Math.log(t/256)/Math.log(2)),addressdetails:1,format:"json"},this.options.reverseQueryParams),l.bind(function(e){var t,o=[];e&&e.lat&&e.lon&&(t=l.latLng(e.lat,e.lon),o.push({name:e.display_name,html:this.options.htmlTemplate?this.options.htmlTemplate(e):void 0,center:t,bounds:l.latLngBounds(t,t),properties:e})),s.call(n,o)},this))}}),factory:function(e){return new l.Control.Geocoder.Nominatim(e)}},e={class:l.Control.extend({options:{showResultIcons:!1,collapsed:!0,expand:"touch",position:"topright",placeholder:"Search...",errorMessage:"Nothing found.",suggestMinLength:3,suggestTimeout:250,defaultMarkGeocode:!0},includes:l.Evented.prototype||l.Mixin.Events,initialize:function(e){l.Util.setOptions(this,e),this.options.geocoder||(this.options.geocoder=new n.class),this._requestCount=0},onAdd:function(e){var t,o="leaflet-control-geocoder",s=l.DomUtil.create("div",o+" leaflet-bar"),n=l.DomUtil.create("button",o+"-icon",s),i=this._form=l.DomUtil.create("div",o+"-form",s);return this._map=e,this._container=s,n.innerHTML=" ",n.type="button",(t=this._input=l.DomUtil.create("input","",i)).type="text",t.placeholder=this.options.placeholder,this._errorElement=l.DomUtil.create("div",o+"-form-no-error",s),this._errorElement.innerHTML=this.options.errorMessage,this._alts=l.DomUtil.create("ul",o+"-alternatives leaflet-control-geocoder-alternatives-minimized",s),l.DomEvent.disableClickPropagation(this._alts),l.DomEvent.addListener(t,"keydown",this._keydown,this),this.options.geocoder.suggest&&l.DomEvent.addListener(t,"input",this._change,this),l.DomEvent.addListener(t,"blur",function(){this.options.collapsed&&!this._preventBlurCollapse&&this._collapse(),this._preventBlurCollapse=!1},this),this.options.collapsed?"click"===this.options.expand?l.DomEvent.addListener(s,"click",function(e){0===e.button&&2!==e.detail&&this._toggle()},this):l.Browser.touch&&"touch"===this.options.expand?l.DomEvent.addListener(s,"touchstart mousedown",function(e){this._toggle(),e.preventDefault(),e.stopPropagation()},this):(l.DomEvent.addListener(s,"mouseover",this._expand,this),l.DomEvent.addListener(s,"mouseout",this._collapse,this),this._map.on("movestart",this._collapse,this)):(this._expand(),l.Browser.touch?l.DomEvent.addListener(s,"touchstart",function(){this._geocode()},this):l.DomEvent.addListener(s,"click",function(){this._geocode()},this)),this.options.defaultMarkGeocode&&this.on("markgeocode",this.markGeocode,this),this.on("startgeocode",function(){l.DomUtil.addClass(this._container,"leaflet-control-geocoder-throbber")},this),this.on("finishgeocode",function(){l.DomUtil.removeClass(this._container,"leaflet-control-geocoder-throbber")},this),l.DomEvent.disableClickPropagation(s),s},_geocodeResult:function(e,t){if(t||1!==e.length)if(0=this.options.suggestMinLength?this._suggestTimeout=setTimeout(l.bind(function(){this._geocode(!0)},this),this.options.suggestTimeout):this._clearResults())}}),factory:function(e){return new l.Control.Geocoder(e)}},u={class:l.Class.extend({initialize:function(e){this.key=e},geocode:function(e,i,r){o("https://dev.virtualearth.net/REST/v1/Locations",{query:e,key:this.key},function(e){var t=[];if(0this._lastSuggest&&(this._lastSuggest=e.geocoding.timestamp,t.call(o,s._parseResults(e,"bbox")))},this))},reverse:function(e,t,o,s){var n=this;d(this.options.serviceUrl+"/reverse",l.extend({api_key:this._apiKey,"point.lat":e.lat,"point.lon":e.lng},this.options.reverseQueryParams),function(e){o.call(s,n._parseResults(e,"bounds"))})},_parseResults:function(e,i){var r=[];return l.geoJson(e,{pointToLayer:function(e,t){return l.circleMarker(t)},onEachFeature:function(e,t){var o,s,n={};t.getBounds?s=(o=t.getBounds()).getCenter():(s=t.getLatLng(),o=l.latLngBounds(s,s)),n.name=t.feature.properties.label,n.center=s,n[i]=o,n.properties=t.feature.properties,r.push(n)}}),r}}),factory:function(e,t){return new l.Control.Geocoder.Mapzen(e,t)}},_={class:l.Class.extend({options:{service_url:"http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer"},initialize:function(e,t){l.setOptions(this,t),this._accessToken=e},geocode:function(e,r,a){var t={SingleLine:e,outFields:"Addr_Type",forStorage:!1,maxLocations:10,f:"json"};this._key&&this._key.length&&(t.token=this._key),d(this.options.service_url+"/findAddressCandidates",t,function(e){var t,o,s,n=[];if(e.candidates&&e.candidates.length)for(var i=0;i<=e.candidates.length-1;i++)t=e.candidates[i],o=l.latLng(t.location.y,t.location.x),s=l.latLngBounds(l.latLng(t.extent.ymax,t.extent.xmax),l.latLng(t.extent.ymin,t.extent.xmin)),n[i]={name:t.address,bbox:s,center:o};r.call(a,n)})},suggest:function(e,t,o){return this.geocode(e,t,o)},reverse:function(e,t,s,n){var o={location:encodeURIComponent(e.lng)+","+encodeURIComponent(e.lat),distance:100,f:"json"};d(this.options.service_url+"/reverseGeocode",o,function(e){var t,o=[];e&&!e.error&&(t=l.latLng(e.location.y,e.location.x),o.push({name:e.address.Match_addr,center:t,bounds:l.latLngBounds(t,t)})),s.call(n,o)})}}),factory:function(e,t){return new l.Control.Geocoder.ArcGis(e,t)}},y={class:l.Class.extend({options:{geocodeUrl:"http://geocoder.api.here.com/6.2/geocode.json",reverseGeocodeUrl:"http://reverse.geocoder.api.here.com/6.2/reversegeocode.json",app_id:"",app_code:"",geocodingQueryParams:{},reverseQueryParams:{}},initialize:function(e){l.setOptions(this,e)},geocode:function(e,t,o){var s={searchtext:e,gen:9,app_id:this.options.app_id,app_code:this.options.app_code,jsonattributes:1};s=l.Util.extend(s,this.options.geocodingQueryParams),this.getJSON(this.options.geocodeUrl,s,t,o)},reverse:function(e,t,o,s){var n={prox:encodeURIComponent(e.lat)+","+encodeURIComponent(e.lng),mode:"retrieveAddresses",app_id:this.options.app_id,app_code:this.options.app_code,gen:9,jsonattributes:1};n=l.Util.extend(n,this.options.reverseQueryParams),this.getJSON(this.options.reverseGeocodeUrl,n,o,s)},getJSON:function(e,t,r,a){d(e,t,function(e){var t,o,s,n=[];if(e.response.view&&e.response.view.length)for(var i=0;i<=e.response.view[0].result.length-1;i++)t=e.response.view[0].result[i].location,o=l.latLng(t.displayPosition.latitude,t.displayPosition.longitude),s=l.latLngBounds(l.latLng(t.mapView.topLeft.latitude,t.mapView.topLeft.longitude),l.latLng(t.mapView.bottomRight.latitude,t.mapView.bottomRight.longitude)),n[i]={name:t.address.label,bbox:s,center:o};r.call(a,n)})}}),factory:function(e){return new l.Control.Geocoder.HERE(e)}},b=l.Util.extend(e.class,{Nominatim:n.class,nominatim:n.factory,Bing:u.class,bing:u.factory,MapQuest:h.class,mapQuest:h.factory,Mapbox:p.class,mapbox:p.factory,What3Words:g.class,what3words:g.factory,Google:m.class,google:m.factory,Photon:f.class,photon:f.factory,Mapzen:v.class,mapzen:v.factory,ArcGis:_.class,arcgis:_.factory,HERE:y.class,here:y.factory});return l.Util.extend(l.Control,{Geocoder:b,geocoder:e.factory}),b}(L);
\ No newline at end of file
+/* @preserve
+ * Leaflet Control Geocoder 1.13.0
+ * https://github.com/perliedman/leaflet-control-geocoder
+ *
+ * Copyright (c) 2012 sa3m (https://github.com/sa3m)
+ * Copyright (c) 2018 Per Liedman
+ * All rights reserved.
+ */
+this.L=this.L||{},this.L.Control=this.L.Control||{},this.L.Control.Geocoder=function(d){"use strict";d=d&&d.hasOwnProperty("default")?d.default:d;var a=0,i=/[&<>"'`]/g,r=/[&<>"'`]/,t={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"};function l(e){return t[e]}function o(e,t,o,s,n){var i="_l_geocoder_"+a++;t[n||"callback"]=i,window[i]=d.Util.bind(o,s);var r=document.createElement("script");r.type="text/javascript",r.src=e+c(t),r.id=i,document.getElementsByTagName("head")[0].appendChild(r)}function u(e,t,o){var s=new XMLHttpRequest;s.onreadystatechange=function(){if(4===s.readyState){var t;if(200!==s.status&&304!==s.status)t="";else if("string"==typeof s.response)try{t=JSON.parse(s.response)}catch(e){t=s.response}else t=s.response;o(t)}},s.open("GET",e+c(t),!0),s.responseType="json",s.setRequestHeader("Accept","application/json"),s.send(null)}function n(e,n){return e.replace(/\{ *([\w_]+) *\}/g,function(e,t){var o,s=n[t];return void 0===s?s="":"function"==typeof s&&(s=s(n)),null==(o=s)?"":o?(o=""+o,r.test(o)?o.replace(i,l):o):o+""})}function c(e,t,o){var s=[];for(var n in e){var i=encodeURIComponent(o?n.toUpperCase():n),r=e[n];if(d.Util.isArray(r))for(var a=0;a",app_code:"",geocodingQueryParams:{},reverseQueryParams:{},reverseGeocodeProxRadius:null},initialize:function(e){d.setOptions(this,e)},geocode:function(e,t,o){var s={searchtext:e,gen:9,app_id:this.options.app_id,app_code:this.options.app_code,jsonattributes:1};s=d.Util.extend(s,this.options.geocodingQueryParams),this.getJSON(this.options.geocodeUrl,s,t,o)},reverse:function(e,t,o,s){var n=this.options.reverseGeocodeProxRadius?this.options.reverseGeocodeProxRadius:null,i=n?","+encodeURIComponent(n):"",r={prox:encodeURIComponent(e.lat)+","+encodeURIComponent(e.lng)+i,mode:"retrieveAddresses",app_id:this.options.app_id,app_code:this.options.app_code,gen:9,jsonattributes:1};r=d.Util.extend(r,this.options.reverseQueryParams),this.getJSON(this.options.reverseGeocodeUrl,r,o,s)},getJSON:function(e,t,r,a){u(e,t,function(e){var t,o,s,n=[];if(e.response.view&&e.response.view.length)for(var i=0;i<=e.response.view[0].result.length-1;i++)t=e.response.view[0].result[i].location,o=d.latLng(t.displayPosition.latitude,t.displayPosition.longitude),s=d.latLngBounds(d.latLng(t.mapView.topLeft.latitude,t.mapView.topLeft.longitude),d.latLng(t.mapView.bottomRight.latitude,t.mapView.bottomRight.longitude)),n[i]={name:t.address.label,properties:t.address,bbox:s,center:o};r.call(a,n)})}});var m=d.Class.extend({options:{next:void 0,sizeInMeters:1e4},initialize:function(e){d.Util.setOptions(this,e)},geocode:function(e,t,o){var s,n;if((s=e.match(/^([NS])\s*(\d{1,3}(?:\.\d*)?)\W*([EW])\s*(\d{1,3}(?:\.\d*)?)$/))?n=d.latLng((/N/i.test(s[1])?1:-1)*parseFloat(s[2]),(/E/i.test(s[3])?1:-1)*parseFloat(s[4])):(s=e.match(/^(\d{1,3}(?:\.\d*)?)\s*([NS])\W*(\d{1,3}(?:\.\d*)?)\s*([EW])$/))?n=d.latLng((/N/i.test(s[2])?1:-1)*parseFloat(s[1]),(/E/i.test(s[4])?1:-1)*parseFloat(s[3])):(s=e.match(/^([NS])\s*(\d{1,3})°?\s*(\d{1,3}(?:\.\d*)?)?['′]?\W*([EW])\s*(\d{1,3})°?\s*(\d{1,3}(?:\.\d*)?)?['′]?$/))?n=d.latLng((/N/i.test(s[1])?1:-1)*(parseFloat(s[2])+parseFloat(s[3]/60)),(/E/i.test(s[4])?1:-1)*(parseFloat(s[5])+parseFloat(s[6]/60))):(s=e.match(/^(\d{1,3})°?\s*(\d{1,3}(?:\.\d*)?)?['′]?\s*([NS])\W*(\d{1,3})°?\s*(\d{1,3}(?:\.\d*)?)?['′]?\s*([EW])$/))?n=d.latLng((/N/i.test(s[3])?1:-1)*(parseFloat(s[1])+parseFloat(s[2]/60)),(/E/i.test(s[6])?1:-1)*(parseFloat(s[4])+parseFloat(s[5]/60))):(s=e.match(/^([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=d.latLng((/N/i.test(s[1])?1:-1)*(parseFloat(s[2])+parseFloat(s[3]/60+parseFloat(s[4]/3600))),(/E/i.test(s[5])?1:-1)*(parseFloat(s[6])+parseFloat(s[7]/60)+parseFloat(s[8]/3600))):(s=e.match(/^(\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=d.latLng((/N/i.test(s[4])?1:-1)*(parseFloat(s[1])+parseFloat(s[2]/60+parseFloat(s[3]/3600))),(/E/i.test(s[8])?1:-1)*(parseFloat(s[5])+parseFloat(s[6]/60)+parseFloat(s[7]/3600))):(s=e.match(/^\s*([+-]?\d+(?:\.\d*)?)\s*[\s,]\s*([+-]?\d+(?:\.\d*)?)\s*$/))&&(n=d.latLng(parseFloat(s[1]),parseFloat(s[2]))),n){var i=[{name:e,center:n,bbox:n.toBounds(this.options.sizeInMeters)}];t.call(o,i)}else this.options.next&&this.options.next.geocode(e,t,o)}});var v=d.Class.extend({options:{serviceUrl:"https://api.mapbox.com/geocoding/v5/mapbox.places/",geocodingQueryParams:{},reverseQueryParams:{}},initialize:function(e,t){d.setOptions(this,t),this.options.geocodingQueryParams.access_token=e,this.options.reverseQueryParams.access_token=e},geocode:function(e,l,c){var t=this.options.geocodingQueryParams;void 0!==t.proximity&&void 0!==t.proximity.lat&&void 0!==t.proximity.lng&&(t.proximity=t.proximity.lng+","+t.proximity.lat),u(this.options.serviceUrl+encodeURIComponent(e)+".json",t,function(e){var t,o,s,n=[];if(e.features&&e.features.length)for(var i=0;i<=e.features.length-1;i++){t=e.features[i],o=d.latLng(t.center.reverse()),s=t.bbox?d.latLngBounds(d.latLng(t.bbox.slice(0,2).reverse()),d.latLng(t.bbox.slice(2,4).reverse())):d.latLngBounds(o,o);for(var r={text:t.text,address:t.address},a=0;a<(t.context||[]).length;a++){r[t.context[a].id.split(".")[0]]=t.context[a].text,t.context[a].short_code&&(r.countryShortCode=t.context[a].short_code)}n[i]={name:t.place_name,bbox:s,center:o,properties:r}}l.call(c,n)})},suggest:function(e,t,o){return this.geocode(e,t,o)},reverse:function(e,t,r,a){u(this.options.serviceUrl+encodeURIComponent(e.lng)+","+encodeURIComponent(e.lat)+".json",this.options.reverseQueryParams,function(e){var t,o,s,n=[];if(e.features&&e.features.length)for(var i=0;i<=e.features.length-1;i++)t=e.features[i],o=d.latLng(t.center.reverse()),s=t.bbox?d.latLngBounds(d.latLng(t.bbox.slice(0,2).reverse()),d.latLng(t.bbox.slice(2,4).reverse())):d.latLngBounds(o,o),n[i]={name:t.place_name,bbox:s,center:o};r.call(a,n)})}});var f=d.Class.extend({options:{serviceUrl:"https://www.mapquestapi.com/geocoding/v1"},initialize:function(e,t){this._key=decodeURIComponent(e),d.Util.setOptions(this,t)},_formatName:function(){var e,t=[];for(e=0;e",apiKey:"",serviceUrl:"https://neutrinoapi.com/"},initialize:function(e){d.Util.setOptions(this,e)},geocode:function(e,n,i){u(this.options.serviceUrl+"geocode-address",{apiKey:this.options.apiKey,userId:this.options.userId,address:e.split(/\s+/).join(".")},function(e){var t,o,s=[];e.locations&&(e.geometry=e.locations[0],t=d.latLng(e.geometry.latitude,e.geometry.longitude),o=d.latLngBounds(t,t),s[0]={name:e.geometry.address,bbox:o,center:t}),n.call(i,s)})},suggest:function(e,t,o){return this.geocode(e,t,o)},reverse:function(n,e,i,r){u(this.options.serviceUrl+"geocode-reverse",{apiKey:this.options.apiKey,userId:this.options.userId,latitude:n.lat,longitude:n.lng},function(e){var t,o,s=[];200==e.status.status&&e.found&&(t=d.latLng(n.lat,n.lng),o=d.latLngBounds(t,t),s[0]={name:e.address,bbox:o,center:t}),i.call(r,s)})}});var b=d.Class.extend({options:{serviceUrl:"https://nominatim.openstreetmap.org/",geocodingQueryParams:{},reverseQueryParams:{},htmlTemplate:function(e){var t,o=e.address,s=[];return(o.road||o.building)&&s.push("{building} {road} {house_number}"),(o.city||o.town||o.village||o.hamlet)&&(t=0{postcode} {city} {town} {village} {hamlet}')),(o.state||o.country)&&(t=0{state} {country}')),n(s.join("
"),o)}},initialize:function(e){d.Util.setOptions(this,e)},geocode:function(e,i,r){u(this.options.serviceUrl+"search",d.extend({q:e,limit:5,format:"json",addressdetails:1},this.options.geocodingQueryParams),d.bind(function(e){for(var t=[],o=e.length-1;0<=o;o--){for(var s=e[o].boundingbox,n=0;n<4;n++)s[n]=parseFloat(s[n]);t[o]={icon:e[o].icon,name:e[o].display_name,html:this.options.htmlTemplate?this.options.htmlTemplate(e[o]):void 0,bbox:d.latLngBounds([s[0],s[2]],[s[1],s[3]]),center:d.latLng(e[o].lat,e[o].lon),properties:e[o]}}i.call(r,t)},this))},reverse:function(e,t,s,n){u(this.options.serviceUrl+"reverse",d.extend({lat:e.lat,lon:e.lng,zoom:Math.round(Math.log(t/256)/Math.log(2)),addressdetails:1,format:"json"},this.options.reverseQueryParams),d.bind(function(e){var t,o=[];e&&e.lat&&e.lon&&(t=d.latLng(e.lat,e.lon),o.push({name:e.display_name,html:this.options.htmlTemplate?this.options.htmlTemplate(e):void 0,center:t,bounds:d.latLngBounds(t,t),properties:e})),s.call(n,o)},this))}});var y=d.Class.extend({options:{OpenLocationCode:void 0,codeLength:void 0},initialize:function(e){d.setOptions(this,e)},geocode:function(e,t,o){try{var s=this.options.OpenLocationCode.decode(e),n={name:e,center:d.latLng(s.latitudeCenter,s.longitudeCenter),bbox:d.latLngBounds(d.latLng(s.latitudeLo,s.longitudeLo),d.latLng(s.latitudeHi,s.longitudeHi))};t.call(o,[n])}catch(e){console.warn(e),t.call(o,[])}},reverse:function(e,t,o,s){try{var n={name:this.options.OpenLocationCode.encode(e.lat,e.lng,this.options.codeLength),center:d.latLng(e.lat,e.lng),bbox:d.latLngBounds(d.latLng(e.lat,e.lng),d.latLng(e.lat,e.lng))};o.call(s,[n])}catch(e){console.warn(e),o.call(s,[])}}});var L=d.Class.extend({options:{serviceUrl:"https://api.opencagedata.com/geocode/v1/json",geocodingQueryParams:{},reverseQueryParams:{}},initialize:function(e,t){d.setOptions(this,t),this._accessToken=e},geocode:function(e,r,a){var t={key:this._accessToken,q:e};t=d.extend(t,this.options.geocodingQueryParams),u(this.options.serviceUrl,t,function(e){var t,o,s,n=[];if(e.results&&e.results.length)for(var i=0;ithis._lastSuggest&&(this._lastSuggest=e.geocoding.timestamp,t.call(o,s._parseResults(e,"bbox")))},this))},reverse:function(e,t,o,s){var n=this;u(this.options.serviceUrl+"/reverse",d.extend({api_key:this._apiKey,"point.lat":e.lat,"point.lon":e.lng},this.options.reverseQueryParams),function(e){o.call(s,n._parseResults(e,"bounds"))})},_parseResults:function(e,i){var r=[];return d.geoJson(e,{pointToLayer:function(e,t){return d.circleMarker(t)},onEachFeature:function(e,t){var o,s,n={};t.getBounds?s=(o=t.getBounds()).getCenter():o=t.feature.bbox?(s=t.getLatLng(),d.latLngBounds(d.GeoJSON.coordsToLatLng(t.feature.bbox.slice(0,2)),d.GeoJSON.coordsToLatLng(t.feature.bbox.slice(2,4)))):(s=t.getLatLng(),d.latLngBounds(s,s)),n.name=t.feature.properties.label,n.center=s,n[i]=o,n.properties=t.feature.properties,r.push(n)}}),r}});function e(e,t){return new x(e,t)}var U=x,C=e,k=x,w=e,D=k.extend({options:{serviceUrl:"https://api.openrouteservice.org/geocode"}});var P=d.Class.extend({options:{serviceUrl:"https://photon.komoot.de/api/",reverseUrl:"https://photon.komoot.de/reverse/",nameProperties:["name","street","suburb","hamlet","town","city","state","country"]},initialize:function(e){d.setOptions(this,e)},geocode:function(e,t,o){var s=d.extend({q:e},this.options.geocodingQueryParams);u(this.options.serviceUrl,s,d.bind(function(e){t.call(o,this._decodeFeatures(e))},this))},suggest:function(e,t,o){return this.geocode(e,t,o)},reverse:function(e,t,o,s){var n=d.extend({lat:e.lat,lon:e.lng},this.options.reverseQueryParams);u(this.options.reverseUrl,n,d.bind(function(e){o.call(s,this._decodeFeatures(e))},this))},_decodeFeatures:function(e){var t,o,s,n,i,r,a=[];if(e&&e.features)for(t=0;t=this.options.suggestMinLength?this._suggestTimeout=setTimeout(d.bind(function(){this._geocode(!0)},this),this.options.suggestTimeout):this._clearResults())}});return d.Util.extend(T,R),d.Util.extend(d.Control,{Geocoder:T,geocoder:function(e){return new T(e)}}),T}(L);
+//# sourceMappingURL=Control.Geocoder.min.js.map
diff --git a/assets/control-geocoder/Control.Geocoder.min.js.map b/assets/control-geocoder/Control.Geocoder.min.js.map
new file mode 100644
index 0000000..84c1d46
--- /dev/null
+++ b/assets/control-geocoder/Control.Geocoder.min.js.map
@@ -0,0 +1 @@
+{"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 properties: loc.address,\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 // Get country code when available\n if (loc.context[j].short_code) {\n properties['countryShortCode'] = loc.context[j].short_code\n }\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 className,\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 className = parts.length > 0 ? 'leaflet-control-geocoder-address-detail' : '';\n parts.push(\n '{postcode} {city} {town} {village} {hamlet}'\n );\n }\n\n if (a.state || a.country) {\n className = parts.length > 0 ? 'leaflet-control-geocoder-address-context' : '';\n parts.push('{state} {country}');\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 geocodingQueryParams: {},\n reverseQueryParams: {}\n },\n\n initialize: function(apiKey, options) {\n L.setOptions(this, options);\n this._accessToken = apiKey;\n },\n\n geocode: function(query, cb, context) {\n var params = {\n key: this._accessToken,\n q: query\n };\n params = L.extend(params, this.options.geocodingQueryParams);\n getJSON(this.options.serviceUrl, params, 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 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 key: this._accessToken,\n q: [location.lat, location.lng].join(',')\n };\n params = L.extend(params, this.options.reverseQueryParams);\n getJSON(this.options.serviceUrl, params, 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\nexport function opencage(apiKey, options) {\n return new OpenCage(apiKey, options);\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 iconLabel: 'Initiate a new search',\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 icon.setAttribute('aria-label', this.options.iconLabel);\n\n input = this._input = L.DomUtil.create('input', '', form);\n input.type = 'text';\n input.value = this.options.query || '';\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 (this.options.expand === 'touch') {\n L.DomEvent.addListener(\n container,\n L.Browser.touch ? 'touchstart mousedown' : '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 setQuery: function(string) {\n this._input.value = string;\n return this;\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 touchend',\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","string","value","undefined","test","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","short_code","place_name","MapQuest","decodeURIComponent","_formatName","r","arguments","limit","outFormat","locations","street","adminArea4","adminArea3","adminArea1","outputFormat","Neutrino","userId","apiKey","found","Nominatim","htmlTemplate","className","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","iconLabel","queryMinLength","suggestMinLength","suggestTimeout","defaultMarkGeocode","includes","Evented","prototype","Mixin","Events","geocoder","_requestCount","addThrobberClass","DomUtil","addClass","_container","removeThrobberClass","removeClass","onAdd","input","container","create","form","_form","_map","innerHTML","setAttribute","_input","DomEvent","disableClickPropagation","_errorElement","_alts","addListener","_keydown","_change","_preventBlurCollapse","_collapse","button","detail","_toggle","Browser","touch","preventDefault","stopPropagation","_expand","on","_geocode","markGeocode","setQuery","_geocodeResult","_geocodeResultSelected","_results","_createAlt","fitBounds","_geocodeMarker","removeLayer","Marker","bindPopup","addTo","openPopup","requestCount","eventData","_lastGeocode","_clearResults","fire","hasClass","select","blur","_selection","index","li","createTextNode","stop","dir","keyCode","parseInt","getAttribute","clearTimeout","_suggestTimeout","setTimeout","geocoders"],"mappings":"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"}
\ No newline at end of file
diff --git a/assets/control-geocoder/README.md b/assets/control-geocoder/README.md
index ca58b2b..6fa2a62 100755
--- a/assets/control-geocoder/README.md
+++ b/assets/control-geocoder/README.md
@@ -6,28 +6,35 @@ I strongly believe that it is my — and your — duty to make the open
While I can't force anyone to do anything, if you happen to disagree with this, I ask of you not to use any of the open source I have published. Nor am I interested in contributions from people who can't accept or act respectfully towards other humans regardless of gender identity, sexual orientation, disability, ethnicity, religion, age, physical appearance, body size, race, or similar personal characteristics. If you think feminism, anti-racism or the LGBT movement is somehow wrong, disturbing or irrelevant, I ask you to go elsewhere to find software.
-Leaflet Control Geocoder [](https://www.npmjs.com/package/leaflet-control-geocoder) 
-=============================
+# Leaflet Control Geocoder [](https://www.npmjs.com/package/leaflet-control-geocoder) 
-A simple geocoder for [Leaflet](http://leafletjs.com/) that by default uses [OSM](https://www.openstreetmap.org/)/[Nominatim](https://wiki.openstreetmap.org/wiki/Nominatim).
+A simple geocoder for [Leaflet](https://leafletjs.com/) that by default uses [OSM](https://www.openstreetmap.org/)/[Nominatim](https://wiki.openstreetmap.org/wiki/Nominatim).
The plugin supports many different data providers:
-* [OSM](https://www.openstreetmap.org/)/[Nominatim](https://wiki.openstreetmap.org/wiki/Nominatim)
-* [Bing Locations API](http://msdn.microsoft.com/en-us/library/ff701715.aspx)
-* [Google Geocoding API](https://developers.google.com/maps/documentation/geocoding/)
-* [Mapbox Geocoding](https://www.mapbox.com/developers/api/geocoding/)
-* [MapQuest Geocoding API](http://developer.mapquest.com/web/products/dev-services/geocoding-ws)
-* [What3Words](http://what3words.com/)
-* [Photon](http://photon.komoot.de/)
-* [Mapzen Search](https://mapzen.com/projects/search)
-* [HERE Geocoder API](https://developer.here.com/documentation/geocoder/topics/introduction.html)
+- LatLng to parse basic latitude/longitude strings
+- [OSM](https://www.openstreetmap.org/)/[Nominatim](https://wiki.openstreetmap.org/wiki/Nominatim)
+- [Bing Locations API](http://msdn.microsoft.com/en-us/library/ff701715.aspx)
+- [Google Geocoding API](https://developers.google.com/maps/documentation/geocoding/)
+- [Mapbox Geocoding](https://www.mapbox.com/api-documentation/#geocoding)
+- [MapQuest Geocoding API](http://developer.mapquest.com/web/products/dev-services/geocoding-ws)
+- [What3Words](http://what3words.com/)
+- [Photon](http://photon.komoot.de/)
+- [Pelias](https://pelias.io/), [geocode.earth](https://geocode.earth/) (formerly Mapzen Search), [Openrouteservice](https://openrouteservice.org/dev/#/api-docs/geocode)
+- [HERE Geocoder API](https://developer.here.com/documentation/geocoder/topics/introduction.html)
+- [Neutrino API](https://www.neutrinoapi.com/api/geocode-address/)
+- [Plus codes](https://plus.codes/) (formerly OpenLocationCode) (requires [open-location-code](https://www.npmjs.com/package/open-location-code))
The plugin can easily be extended to support other providers. Current extensions:
-* [DAWA Geocoder](https://github.com/kjoller/leaflet-control-geocoder-dawa/tree/new) - support for Danish Address Web API by [Niels Kjøller Hansen](https://github.com/kjoller)
+- [DAWA Geocoder](https://github.com/kjoller/leaflet-control-geocoder-dawa/tree/new) - support for Danish Address Web API by [Niels Kjøller Hansen](https://github.com/kjoller)
-See the [Leaflet Control Geocoder Demo](http://perliedman.github.com/leaflet-control-geocoder/).
+# Demos
+
+- [Leaflet Control Geocoder Demo](https://www.liedman.net/leaflet-control-geocoder/) hosted on liedman.net
+- See [demo/](https://github.com/perliedman/leaflet-control-geocoder/tree/master/demo)
+- See [demo-rollup/](https://github.com/perliedman/leaflet-control-geocoder/tree/master/demo-rollup) using the [rollup.js](https://rollupjs.org/) bundler
+- See [demo-webpack/](https://github.com/perliedman/leaflet-control-geocoder/tree/master/demo-rollup) using the [webpack](https://webpack.js.org/) bundler
# Usage
@@ -42,8 +49,8 @@ Add the control to a map instance:
```javascript
var map = L.map('map').setView([0, 0], 2);
-L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
- attribution: '© OpenStreetMap contributors'
+L.tileLayer('https://{s}.tile.osm.org/{z}/{x}/{y}.png', {
+ attribution: '© OpenStreetMap contributors'
}).addTo(map);
L.Control.geocoder().addTo(map);
```
@@ -59,19 +66,19 @@ For example:
```javascript
var geocoder = L.Control.geocoder({
- defaultMarkGeocode: false
- })
- .on('markgeocode', function(e) {
- var bbox = e.geocode.bbox;
- var poly = L.polygon([
- bbox.getSouthEast(),
- bbox.getNorthEast(),
- bbox.getNorthWest(),
- bbox.getSouthWest()
- ]).addTo(map);
- map.fitBounds(poly.getBounds());
- })
- .addTo(map);
+ defaultMarkGeocode: false
+})
+ .on('markgeocode', function(e) {
+ var bbox = e.geocode.bbox;
+ var poly = L.polygon([
+ bbox.getSouthEast(),
+ bbox.getNorthEast(),
+ bbox.getNorthWest(),
+ bbox.getSouthWest()
+ ]).addTo(map);
+ map.fitBounds(poly.getBounds());
+ })
+ .addTo(map);
```
This will add a polygon representing the result's boundingbox when a result is selected.
@@ -84,80 +91,129 @@ This is the geocoder control. It works like any other Leaflet control, and is ad
### Constructor
-This plugin supports the standard JavaScript constructor (to be invoked using `new`) as well as the [class factory methods](http://leafletjs.com/reference.html#class-class-factories) known from Leaflet:
+This plugin supports the standard JavaScript constructor (to be invoked using `new`) as well as the [class factory methods](https://leafletjs.com/reference.html#class-class-factories) known from Leaflet:
```js
-new L.Control.Geocoder(options)
+new L.Control.Geocoder(options);
// or
-L.Control.geocoder(options)
+L.Control.geocoder(options);
```
### Options
-| Option | Type | Default | Description |
-| ----------------- | ---------------- | ------------------- | ----------- |
-| `collapsed` | Boolean | `true` | Collapse control unless hovered/clicked |
-| `expand` | String | `"touch"` | How to expand a collapsed control: `touch` or `click` or `hover` |
-| `position` | String | `"topright"` | Control [position](http://leafletjs.com/reference.html#control-positions) |
-| `placeholder` | String | `"Search..."` | Placeholder text for text input
-| `errorMessage` | String | `"Nothing found."` | Message when no result found / geocoding error occurs |
-| `geocoder` | IGeocoder | `new L.Control.Geocoder.Nominatim()` | Object to perform the actual geocoding queries |
-| `showResultIcons` | Boolean | `false` | Show icons for geocoding results (if available); supported by Nominatim |
+| Option | Type | Default | Description |
+| ------------------ | --------- | ------------------------------------ | ------------------------------------------------------------------------------------------------------------- |
+| `collapsed` | Boolean | `true` | Collapse control unless hovered/clicked |
+| `expand` | String | `"touch"` | How to expand a collapsed control: `touch` or `click` or `hover` |
+| `position` | String | `"topright"` | Control [position](https://leafletjs.com/reference.html#control-positions) |
+| `placeholder` | String | `"Search..."` | Placeholder text for text input |
+| `errorMessage` | String | `"Nothing found."` | Message when no result found / geocoding error occurs |
+| `iconLabel` | String | `"Initiate a new search"` | Accessibility label for the search icon used by screen readers |
+| `geocoder` | IGeocoder | `new L.Control.Geocoder.Nominatim()` | Object to perform the actual geocoding queries |
+| `showUniqueResult` | Boolean | `true` | Immediately show the unique result without prompting for alternatives |
+| `showResultIcons` | Boolean | `false` | Show icons for geocoding results (if available); supported by Nominatim |
+| `suggestMinLength` | Number | `3` | Minimum number characters before suggest functionality is used (if available from geocoder) |
+| `suggestTimeout` | Number | `250` | Number of milliseconds after typing stopped before suggest functionality is used (if available from geocoder) |
+| `query` | String | `""` | Initial query string for text input |
+| `queryMinLength` | Number | `1` | Minimum number of characters in search text before performing a query |
### Methods
-| Method | Returns | Description |
-| ------------------------------------- | ------------------- | ----------------- |
-| `markGeocode( result)` | `this` | Marks a geocoding result on the map |
+| Method | Returns | Description |
+| --------------------------------------- | ------- | --------------------------------------- |
+| `markGeocode( result)` | `this` | Marks a geocoding result on the map |
+| `setQuery( query)` | `this` | Sets the query string on the text input |
## L.Control.Geocoder.Nominatim
Uses [Nominatim](https://wiki.openstreetmap.org/wiki/Nominatim) to respond to geocoding queries. This is the default
-geocoding service used by the control, unless otherwise specified in the options. Implements ```IGeocoder```.
+geocoding service used by the control, unless otherwise specified in the options. Implements `IGeocoder`.
Unless using your own Nominatim installation, please refer to the [Nominatim usage policy](https://operations.osmfoundation.org/policies/nominatim/).
### Constructor
```js
-new L.Control.Geocoder.Nominatim(options)
+new L.Control.Geocoder.Nominatim(options);
// or
-L.Control.Geocoder.nominatim(options)
+L.Control.Geocoder.nominatim(options);
```
-## Options
+### Options
-| Option | Type | Default | Description |
-| --------------- | ---------------- | ----------------- | ----------- |
-| `serviceUrl` | String | `"https://nominatim.openstreetmap.org/"` | URL of the service |
-| `geocodingQueryParams` | Object | `{}` | Additional URL parameters (strings) that will be added to geocoding requests; can be used to restrict results to a specific country for example, by providing the [`countrycodes`](https://wiki.openstreetmap.org/wiki/Nominatim#Parameters) parameter to Nominatim |
-| `reverseQueryParams` | Object | `{}` | Additional URL parameters (strings) that will be added to reverse geocoding requests |
-| `htmlTemplate` | function | special | A function that takes an GeocodingResult as argument and returns an HTML formatted string that represents the result. Default function breaks up address in parts from most to least specific, in attempt to increase readability compared to Nominatim's naming
+| Option | Type | Default | Description |
+| ---------------------- | -------- | ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `serviceUrl` | String | `"https://nominatim.openstreetmap.org/"` | URL of the service |
+| `geocodingQueryParams` | Object | `{}` | Additional URL parameters (strings) that will be added to geocoding requests; can be used to restrict results to a specific country for example, by providing the [`countrycodes`](https://wiki.openstreetmap.org/wiki/Nominatim#Parameters) parameter to Nominatim |
+| `reverseQueryParams` | Object | `{}` | Additional URL parameters (strings) that will be added to reverse geocoding requests |
+| `htmlTemplate` | function | special | A function that takes an GeocodingResult as argument and returns an HTML formatted string that represents the result. Default function breaks up address in parts from most to least specific, in attempt to increase readability compared to Nominatim's naming |
## L.Control.Geocoder.Bing
-Uses [Bing Locations API](http://msdn.microsoft.com/en-us/library/ff701715.aspx) to respond to geocoding queries. Implements ```IGeocoder```.
+Uses [Bing Locations API](http://msdn.microsoft.com/en-us/library/ff701715.aspx) to respond to geocoding queries. Implements `IGeocoder`.
Note that you need an API key to use this service.
### Constructor
```ts
-new L.Control.Geocoder.Bing( key)
+new L.Control.Geocoder.Bing(key);
// or
-L.Control.Geocoder.bing( key)
+L.Control.Geocoder.bing(key);
```
+## L.Control.Geocoder.OpenCage
+
+Uses [OpenCage Data API](https://opencagedata.com/) to respond to geocoding queries. Implements `IGeocoder`.
+
+Note that you need an API key to use this service.
+
+### Constructor
+
+```ts
+new L.Control.Geocoder.OpenCage(key, options);
+// or
+L.Control.Geocoder.opencage(key, options);
+```
+
+### Options
+
+| Option | Type | Default | Description |
+| ---------------------- | ------ | ------------------------------------------------ | ------------------------------------------------------------------------------------ |
+| `serviceUrl` | String | `"https://api.opencagedata.com/geocode/v1/json"` | URL of the service |
+| `geocodingQueryParams` | Object | `{}` | Additional URL parameters (strings) that will be added to geocoding requests |
+| `reverseQueryParams` | Object | `{}` | Additional URL parameters (strings) that will be added to reverse geocoding requests |
+
+## L.Control.Geocoder.LatLng
+
+Parses basic latitude/longitude strings such as `'50.06773 14.37742'`, `'N50.06773 W14.37742'`, `'S 50° 04.064 E 014° 22.645'`, or `'S 50° 4′ 03.828″, W 14° 22′ 38.712″'`.
+
+### Constructor
+
+```ts
+new L.Control.Geocoder.LatLng(options);
+// or
+L.Control.Geocoder.latLng(options);
+```
+
+### Options
+
+| Option | Type | Default | Description |
+| -------------- | --------- | ------- | --------------------------------------------------------- |
+| `next` | IGeocoder | | The next geocoder to use for non-supported queries. |
+| `sizeInMeters` | Number | 10000 | The size in meters used for passing to `LatLng.toBounds`. |
+
## IGeocoder
An interface implemented to respond to geocoding queries.
### Methods
-| Method | Returns | Description |
-| ------------------------------------- | ------------------- | ----------------- |
-| `geocode( query, callback, context)` | `GeocodingResult[]` | Performs a geocoding query and returns the results to the callback in the provided context |
-| `reverse( location, scale, callback, context)` | `GeocodingResult[]` | Performs a reverse geocoding query and returns the results to the callback in the provided context |
+| Method | Returns | Description |
+| ----------------------------------------------------------------- | ------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
+| `geocode( query, callback, context)` | `GeocodingResult[]` | Performs a geocoding query and returns the results to the callback in the provided context |
+| `suggest( query, callback, context)` | `GeocodingResult[]` | Performs a geocoding query suggestion (this happens while typing) and returns the results to the callback in the provided context |
+| `reverse( location, scale, callback, context)` | `GeocodingResult[]` | Performs a reverse geocoding query and returns the results to the callback in the provided context |
## GeocodingResult
@@ -165,10 +221,10 @@ An object that represents a result from a geocoding query.
### Properties
-| Property | Type | Description |
-| ------------ | ---------------- | ------------------------------------- |
-| `name` | String | Name of found location |
-| `bbox` | L.LatLngBounds | The bounds of the location |
-| `center` | L.LatLng | The center coordinate of the location |
-| `icon` | String | URL for icon representing result; optional |
-| `html` | String | (optional) HTML formatted representation of the name |
+| Property | Type | Description |
+| -------- | -------------- | ---------------------------------------------------- |
+| `name` | String | Name of found location |
+| `bbox` | L.LatLngBounds | The bounds of the location |
+| `center` | L.LatLng | The center coordinate of the location |
+| `icon` | String | URL for icon representing result; optional |
+| `html` | String | (optional) HTML formatted representation of the name |
diff --git a/assets/control-geocoder/package.json b/assets/control-geocoder/package.json
index 605d863..fa9564c 100644
--- a/assets/control-geocoder/package.json
+++ b/assets/control-geocoder/package.json
@@ -1,40 +1,63 @@
{
"name": "leaflet-control-geocoder",
- "version": "1.6.0",
- "description": "Extendable geocoder with builtin support for Nominatim, Bing, Google, Mapbox, Photon, What3Words, MapQuest, Mapzen, HERE",
+ "version": "1.13.0",
+ "description": "Extendable geocoder with builtin support for OpenStreetMap Nominatim, Bing, Google, Mapbox, MapQuest, What3Words, Photon, Pelias, HERE, Neutrino, Plus codes",
"main": "dist/Control.Geocoder.js",
+ "module": "src/index.js",
"scripts": {
"prepare": "npm run build",
- "build": "npm run build:js && npm run build:css && npm run build:img",
- "build:js": "rollup --output.format=iife --name=L.Control.Geocoder --globals=leaflet:L src/index.js --output.file=dist/Control.Geocoder.js --sourcemap",
- "build:css": "cpr Control.Geocoder.css dist/ --overwrite",
+ "build": "npm run build:js && npm run build:css && npm run build:img && npm run build:demo-rollup && npm run build:demo-webpack",
+ "build:js": "rollup -c",
+ "build:css": "cpr Control.Geocoder.css dist/Control.Geocoder.css --overwrite",
"build:img": "cpr images/ dist/images/ --overwrite",
- "test": "npm run lint",
- "lint": "npm run lint:js && npm run lint:css",
- "lint:js": "eslint 'src/**'",
- "lint:css": "prettier --list-different '*.css'",
- "publish": "sh ./scripts/publish.sh",
- "postpublish": "sh ./scripts/postpublish.sh"
+ "build:demo-rollup": "cd demo-rollup && npm install && npm run build",
+ "build:demo-webpack": "cd demo-rollup && npm install && npm run build",
+ "test": "npm run test:karma -- --single-run && npm run lint",
+ "test:karma": "karma start spec/karma.conf.js",
+ "lint": "npm run lint:js && npm run lint:style",
+ "lint:js": "eslint .",
+ "lint:style": "prettier --check $(npm run ls-files)",
+ "fix:style": "prettier --write $(npm run ls-files)",
+ "ls-files": "git ls-files '*.js' '*.json' '*.css' '*.html' '*.yaml' '*.yml' '*.md'"
},
"repository": {
"type": "git",
"url": "git://github.com/perliedman/leaflet-control-geocoder.git"
},
+ "files": [
+ "LICENCE",
+ "dist/**",
+ "demo/**",
+ "images/**",
+ "src/**",
+ "*.css"
+ ],
"keywords": [
"leaflet",
"geocoder",
"locations",
+ "openstreetmap",
"nominatim",
"bing",
- "google",
+ "bingmaps",
+ "googlemaps",
+ "google-maps",
"mapbox",
- "photon",
- "what3words",
"mapquest",
+ "opencage",
+ "what3words",
+ "photon",
"mapzen",
- "here"
+ "pelias",
+ "here",
+ "neutrino",
+ "pluscodes",
+ "open location code"
],
"author": "Per Liedman ",
+ "contributors": [
+ "Simon Legner "
+ ],
"license": "BSD-2-Clause",
"bugs": {
"url": "https://github.com/perliedman/leaflet-control-geocoder/issues"
@@ -42,9 +65,23 @@
"dependencies": {},
"devDependencies": {
"cpr": "^3.0.1",
- "eslint": "^4.15.0",
- "eslint-plugin-prettier": "^2.4.0",
- "prettier": "^1.9.2",
- "rollup": "^0.53.2"
+ "eslint": "^6.8.0",
+ "eslint-plugin-prettier": "^3.1.2",
+ "karma": "^4.4.1",
+ "karma-expect": "^1.1.3",
+ "karma-mocha": "^1.3.0",
+ "karma-phantomjs-launcher": "^1.0.4",
+ "karma-sinon": "^1.0.5",
+ "leaflet": "^1.6.0",
+ "mocha": "^6.2.2",
+ "phantomjs-prebuilt": "^2.1.16",
+ "prettier": "^1.19.1",
+ "rollup": "^0.65.2",
+ "rollup-plugin-uglify": "^5.0.2",
+ "sinon": "^7.5.0",
+ "uglify-js": "^3.7.5"
+ },
+ "optionalDependencies": {
+ "open-location-code": "^1.0.0"
}
}
diff --git a/module/config/config.php b/module/config/config.php
index a4773cb..b071d23 100644
--- a/module/config/config.php
+++ b/module/config/config.php
@@ -75,7 +75,7 @@ $GLOBALS['LEAFLET_LIBRARIES']['leaflet-fullscreen'] = array
$GLOBALS['LEAFLET_LIBRARIES']['leaflet-control-geocoder'] = array
(
'name' => 'Leaflet Control Geocoder',
- 'version' => '1.6.0',
+ 'version' => '1.13.0',
'license' => 'BSD-2-Clause',
'homepage' => 'https://github.com/perliedman/leaflet-control-geocoder',
'css' => 'assets/leaflet/libs/control-geocoder/Control.Geocoder.min.css',