UNPKG

leaflet-geosearch

Version:

Adds support for address lookup (a.k.a. geocoding / geosearching) to Leaflet.

53 lines 1.79 kB
import AbstractProvider from './provider'; import { Loader } from '@googlemaps/js-api-loader'; export default class GoogleProvider extends AbstractProvider { loader = null; geocoder = null; constructor(options) { super(options); if (typeof window !== 'undefined') { this.loader = new Loader(options).load().then((google) => { const geocoder = new google.maps.Geocoder(); this.geocoder = geocoder; return geocoder; }); } } endpoint({ query }) { throw new Error('Method not implemented.'); } parse(response) { return response.data.results.map((r) => { const { lat, lng } = r.geometry.location.toJSON(); const { east, north, south, west } = r.geometry.viewport.toJSON(); return { x: lng, y: lat, label: r.formatted_address, bounds: [ [south, west], [north, east], ], raw: r, }; }); } async search(options) { const geocoder = this.geocoder || (await this.loader); if (!geocoder) { throw new Error('GoogleMaps GeoCoder is not loaded. Are you trying to run this server side?'); } const response = await geocoder .geocode({ address: options.query }, (response) => ({ results: response, })) .catch((e) => { if (e.code !== 'ZERO_RESULTS') { console.error(`${e.code}: ${e.message}`); } return { results: [] }; }); return this.parse({ data: response }); } } //# sourceMappingURL=googleProvider.js.map