geo-coder
Version:
address lookup/autocomplete/reverse-geolookup for Google, OpenStreet, and Bing
63 lines (54 loc) • 1.52 kB
JavaScript
import {serialize, jsonp} from './util.js';
/**
* Bing geolookup / reverse lookup
*/
export class Bing {
constructor(options) {
this.options = options || {};
}
geolookup(address) {
let url = 'https://dev.virtualearth.net/REST/v1/Locations';
let params = {
query: address,
key: this.options.key,
includeNeighborhood: this.options.includeNeighborhood || 0,
maxResults: this.options.maxResults || 10
};
return fetch(`${url}?${serialize(params)}`)
.then(resp => resp.json())
.then(json => this._handleResponse(json))
}
reverse(lat, lng) {
let url =
`http://dev.virtualearth.net/REST/v1/Locations/${lat},${lng}`;
let params = {
includeNeighborhood: this.options.includeNeighborhood || 0,
key: this.options.key
};
return fetch(`${url}?${serialize(params)}`)
.then(resp => resp.json())
.then(json => {
let address = json['resourceSets'][0]['resources'][0]['name'];
return {
source: 'Bing',
address: address,
raw: json
};
});
}
_handleResponse(json) {
let results = json['resourceSets'][0]['resources'];
return results.map(result => {
return {
source: 'Bing',
lng: parseFloat(result.point.coordinates[1]),
lat: parseFloat(result.point.coordinates[0]),
address: {
name: result.name
},
formatted: result.address.formattedAddress,
raw: result
};
});
}
}