address-complete
v1.1.6
Published
What are you looking for?
Downloads
7
Maintainers
Readme
address-complete
What are you looking for? Or how?
Address-complete provide unified way to perform address autocomplete using 3 geo-data providers:
- Google autocomplete + places API
- MapZen (Pelias) autocomplete API
- Yandex Geocoder
This library provides both basic address autocompete features, and extended address details extraction to enable complex forms to shine.
Setup
npm install address-autocomplete
API
%provider_name%.search(term): Promise %provider_name%.getDetails(term): Promise
MAPZEN all the things.
Nor google, nor yandex will NOT work in browser due to CORS limitations.
Use mapzen instead.
Example
there is live example at codesandbox - https://codesandbox.io/s/y382k7n61j
import mapzen, {configure} from 'address-autocomplete/mapzen';
import google, {configure} from 'address-autocomplete/google';
import yandex, {configure} from 'address-autocomplete/yandex';
// Google and MapZen does require an API key;
configure('YOUR_API_KEY');
mapzen
.search('something')
.then(autocompletedData => async {
// array of objects with .text field
const fullData = await Promise.all(autocompletedData.map(mapzen.getDetails));
// array of object with coordinates as AddressDetails data
})
PS: To say they truth - you have to call getDetails only for Google API. All other API just mimic Google's behavior.
mapzen
.search('something')
.then(fullData => {
// hooray! I've already got everything!
})
google
.search('something')
.then(fullData => {
// only fullData[0].text
// noooo :( :(
})
Types
This library comes with TS and Flow definition, but anyway
Response from Google.search is AddressResponse
interface AddressResponse {
id: number,
text: string,
}
Response and any other API, or from google.getDetails
interface DetailedAddressResponse extends AddressResponse {
point: number[],
addressDetails: {
country: {
name: string,
code?: string // as iso3166-1
},
region: {
name: string,
code?: string, // as iso3166-2
},
locality: {
name: string
},
street: {
name: string,
house: string,
label: string,
},
postalcode: string
}
}
Country list
Hey! How to get list of countries or list of states for a country?
Just use iso3166-2-db
import listOfCountries from 'iso3166-2-db/countryList/UN/en';
address complete uses iso3166-2-db to extract iso3166-2 regions names from MapZen answers.
Which API to use?
I could recommend:
- MapZen - it is almost free, and high quality.
- Google is a standard defacto.
- Yandex, for Europe.
License
MIT