- Geocode forward and reverse.
- Autocomplete addresses.
- Available both in the browser and node.
Using npm:
$ npm install simple-multi-geocoder
Using yarn:
$ yarn add simple-multi-geocoder
Using pnpm:
$ pnpm add simple-multi-geocoder
Once the package has been installed, import the library using either import
or require
:
import { geocode, autocomplete } from "simple-multi-geocoder";
Besides traditionnal API Key, Here provider supports OAuth 2.0 authentication, see here documentation for more information.
This package provides a helper function to generate the access token.
import { generateHereAccessToken } from "simple-multi-geocoder";
const accessToken = await generateHereAccessToken({
clientId: "...",
clientSecret: "...",
});
In that case, you should pass the bearerToken
instead of apiKey
in the options object.
const response = await geocode.forward("here", {
credentials: { bearerToken: accessToken },
query: "Rue du Belvédère 23, 1050 Ixelles, Belgique",
country: "BE",
language: "fr",
limit: 1,
raw: true,
});
geocode.forward(provider, options)
import { geocode } from "simple-multi-geocoder";
const API_KEY = "..."; // get it from secure environment
const address = "Rue du Belvédère 23, 1050 Ixelles, Belgique";
const response = await geocode.forward("here", {
credentials: { apiKey: API_KEY },
query: address,
country: "BE",
language: "fr",
limit: 1,
});
console.log(response);
/*
{
formattedAddress: "Rue du Belvédère 23, 1050 Ixelles, Belgique",
latitude: 50.82679,
longitude: 4.37359,
components: {
streetNumber: "23",
streetName: "Rue du Belvédère",
zipcode: "1050",
city: "Ixelles",
county: "Bruxelles",
state: "Bruxelles",
district: "Flagey - Malibran",
country: "Belgique",
countryCode: "BE",
},
extra: {
id: "here:af:streetsection:NEk2q66IKlrCDNB4JhoMOC:CggIBCCc4o62ARABGgIyMw",
confidence: 1,
},
}
*/
Parameter |
Description |
provider (required) |
Provider (google, here, mapbox) token |
options (required) |
Options object (see below) |
Parameter |
Type |
Description |
credentials (required) |
object |
Provider access token (see below) |
query (required) |
string |
Complete address in string format (e.g. Rue du Belvédère 23, 1050 Ixelles, Belgique) |
address |
StructuredAddress |
Structured address object to geocode (see below) |
language |
string |
Language of the returned result (IETF BCP 47 format) |
countryCode |
string |
Limit the search to a specific country (ISO_3166-1_alpha-2 format) |
limit |
number |
Maximum number of results to be returned (default: 1) (not supported by Google) |
raw |
boolean |
Return the raw result |
params |
object |
Params object specific to the provider (see below) |
Only available for Here provider for now, you can pass an object with the following fields:
import { StructuredAddress } from "simple-multi-geocoder";
const address: StructuredAddress = {
street: "Rue du chemin",
number: "123",
zip: "1234",
city: "City",
countryCode: "Country Code (in ISO 3166-1 alpha-2 format)",
};
You should provide one of the following fields:
Parameter |
Type |
Description |
apiKey |
string |
Provider api key |
bearerToken |
string |
Provider bearer token (only available for Here) |
You can check the official API documentation from providers to see which options you can pass the geocoder
We always return an array of object with the following fields
Field |
Type |
Description |
formattedAddress |
string |
The complete formatted address |
latitude |
number |
The latitude of the result |
longitude |
number |
The longitude of the result |
components |
object |
The address components (see below) |
extra |
object |
An object with additional informations (see below) |
Field |
Type |
Description |
country |
string |
The country where is located the result |
countryCode |
string |
The country code of the result (ISO 3166-1 alpha-2 format) |
state |
string |
The state where is located the result |
region |
string |
The region where is located the result |
city |
string |
The city where is located the result |
zipCode |
string |
The postal code of the city |
streetName |
string |
The street name where is located the result |
streetNumber |
string |
The street number where is located the result |
extra
Field |
Type |
Description |
id |
string |
The unique identifier of the result provided by the provider |
bbox |
object |
The bounding box of the result |
confidence |
number |
A number between 0 and 1 indicating how the result location correspond to our query |
geocode.reverse(provider, options)
import { geocode } from "simple-multi-geocoder";
const API_KEY = ... // get it from secure environment
const address = "Rue du Belvédère 23, 1050 Ixelles, Belgique"
const coordinates = {
latitude: 50.82679,
longitude: 4.37359
}
const response = await geocode.reverse(
"here",
{ apiKey: API_KEY, coordinates: coordinates, country: "BE", language: "fr", limit: 1 }
)
console.log(response)
/*
{
formattedAddress: "Rue du Belvédère 23, 1050 Ixelles, Belgique",
latitude: 50.82679,
longitude: 4.37359,
components: {
streetNumber: "23",
streetName: "Rue du Belvédère",
zipcode: "1050",
city: "Ixelles",
county: "Bruxelles",
state: "Bruxelles",
district: "Flagey - Malibran",
country: "Belgique",
countryCode: "BE",
},
extra: {
id: "here:af:streetsection:NEk2q66IKlrCDNB4JhoMOC:CggIBCCc4o62ARABGgIyMw",
confidence: 1,
},
}
*/
Parameter |
Description |
provider (required) |
Provider (google, here, mapbox) token |
options (required) |
Options object (see below) |
Parameter |
Type |
Description |
credentials (required) |
object |
Provider access token (see above) |
coordinates (required) |
object |
coordinates of the point to reverse geocode |
language |
string |
Language of the returned result (IETF BCP 47 format) |
countryCode |
string |
Limit the search to a specific country (ISO_3166-1_alpha-2 format) |
limit |
number |
Maximum number of results to be returned (default: 1) (not supported by Google) |
raw |
boolean |
Return the raw result |
params |
object |
Params object specific to the provider (see below) |
Field |
Type |
Description |
latitude |
number |
Latitude of the point |
longitude |
number |
Longitude of the point |
You can check the official API documentation from providers to see which options you can pass the geocoder
We always return an array of object with the following fields
Field |
Type |
Description |
formattedAddress |
string |
The complete formatted address |
latitude |
number |
The latitude of the result |
longitude |
number |
The longitude of the result |
components |
object |
The address components (see below) |
extra |
object |
An object with additional informations (see below) |
Field |
Type |
Description |
country |
string |
The country where is located the result |
countryCode |
string |
The country code of the result (ISO 3166-1 alpha-2 format) |
state |
string |
The state where is located the result |
region |
string |
The region where is located the result |
city |
string |
The city where is located the result |
zipCode |
string |
The postal code of the city |
streetName |
string |
The street name where is located the result |
streetNumber |
string |
The street number where is located the result |
extra
Field |
Type |
Description |
id |
string |
The unique identifier of the result provided by the provider |
bbox |
object |
The bounding box of the result |
confidence |
number |
A number between 0 and 1 indicating how the result location correspond to our query |
autocomplete(provider, options)
import { autocomplete } from "simple-multi-geocoder";
const API_KEY = ... // get it from secure environment
const address = "Rue du Belvédère 23, 1050 Ixelles, Belgique"
const response = await autocomplete(
"here",
{ apiKey: API_KEY, query: address, country: "BE", language: "fr", limit: 1 }
)
console.log(response)
/*
{
formattedAddress: "Rue du Belvédère 23",
components: {
streetNumber: "23",
streetName: "Rue du Belvédère",
zipcode: "1050",
city: "Ixelles",
county: "Bruxelles",
state: "Bruxelles",
district: "Flagey - Malibran",
country: "Belgique",
countryCode: "BE",
},
extra: {
id: "here:af:streetsection:NEk2q66IKlrCDNB4JhoMOC:CggIBCCc4o62ARABGgIyMw"
},
}
*/
Parameter |
Description |
provider (required) |
Provider (google, here, mapbox) token |
options (required) |
Options object (see below) |
Parameter |
Type |
Description |
credentials (required) |
object |
Provider access token (see above) |
query (required) |
string |
Partial address in string format (e.g. Rue du Belvédère 23) |
language |
string |
Language of the returned result (IETF BCP 47 format) |
countryCode |
string |
Limit the search to a specific country (ISO_3166-1_alpha-2 format) |
limit |
number |
Maximum number of results to be returned (default: 1) (not supported by Google) |
raw |
boolean |
Return the raw result |
params |
object |
Params object specific to the provider (see below) |
You can check the official API documentation from providers to see which options you can pass the geocoder
We always return an array of object with the following fields
Field |
Type |
Description |
formattedAddress |
string |
The complete formatted address |
components (optional) |
object |
The address components (see below) |
extra |
object |
An object with additional informations (see below) |
Field |
Type |
Description |
country |
string |
The country where is located the result |
countryCode |
string |
The country code of the result (ISO 3166-1 alpha-2 format) |
state |
string |
The state where is located the result |
region |
string |
The region where is located the result |
city |
string |
The city where is located the result |
zipCode |
string |
The postal code of the city |
streetName |
string |
The street name where is located the result |
streetNumber |
string |
The street number where is located the result |
extra
Field |
Type |
Description |
id |
string |
The unique identifier of the result provided by the provider |