address-complete

What are you looking for?

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
address-complete
611.1.66 years ago6 years agoMinified + gzip package size for address-complete in KB

Readme

address-complete
What are you looking for? Or how?
Address-complete provide unified way to perform address autocomplete using 3 geo-data providers:
  1. Google autocomplete + places API
  2. MapZen (Pelias) autocomplete API
  3. 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

%providername%.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