UNPKG

leaflet-control-geocoder

Version:

Extendable geocoder with builtin support for Nominatim, Bing, Google, Mapbox, Photon, What3Words, MapQuest, Mapzen

65 lines (57 loc) 1.65 kB
var L = require('leaflet'), Util = require('../util'); module.exports = { class: L.Class.extend({ options: { serviceUrl: 'http://api.what3words.com/' }, initialize: function(accessToken) { this._accessToken = accessToken; }, geocode: function(query, cb, context) { //get three words and make a dot based string Util.getJSON(this.options.serviceUrl +'w3w', { key: this._accessToken, string: query.split(/\s+/).join('.'), }, function(data) { var results = [], loc, latLng, latLngBounds; if (data.position && data.position.length) { loc = data.words; latLng = L.latLng(data.position[0],data.position[1]); latLngBounds = L.latLngBounds(latLng, latLng); results[0] = { name: loc.join('.'), 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) { Util.getJSON(this.options.serviceUrl +'position', { key: this._accessToken, position: [location.lat,location.lng].join(',') }, function(data) { var results = [],loc,latLng,latLngBounds; if (data.position && data.position.length) { loc = data.words; latLng = L.latLng(data.position[0],data.position[1]); latLngBounds = L.latLngBounds(latLng, latLng); results[0] = { name: loc.join('.'), bbox: latLngBounds, center: latLng }; } cb.call(context, results); }); } }), factory: function(accessToken) { return new L.Control.Geocoder.What3Words(accessToken); } };