node-geocoder
Node library for geocoding and reverse geocoding. Can be used as a nodejs library or on command line
Installation and usage (geocoder command line)
npm install -g node-geocoder
geocoder --provider google 'Fornino, 187 Bedford Ave, Brooklyn, NY 11211'
Installation (nodejs library)
npm install node-geocoder
Usage example
var geocoderProvider = 'google';
var httpAdapter = 'http';
// optionnal
var extra = {
apiKey: 'YOUR_API_KEY', // for Mapquest, OpenCage, Google Premier
formatter: null // 'gpx', 'string', ...
};
var geocoder = require('node-geocoder').getGeocoder(geocoderProvider, httpAdapter, extra);
// Using callback
geocoder.geocode('29 champs elysée paris', function(err, res) {
console.log(res);
});
// Or using Promise
geocoder.geocode('29 champs elysée paris')
.then(function(res) {
console.log(res);
})
.catch(function(err) {
console.log(err);
});
// output :
[{
latitude: 48.8698679,
longitude: 2.3072976,
country: 'France',
countryCode: 'FR',
city: 'Paris',
zipcode: '75008',
streetName: 'Champs-Élysées',
streetNumber: '29',
state: 'Île de France',
stateCode: 'IDF'
}]
## Advanced usage (only google provider)
geocoder.geocode({address: '29 champs elysée', country: 'France', zipcode: '75008'}, function(err, res) {
console.log(res);
});
// Reverse example
// Using callback
geocoder.reverse(45.767, 4.833, function(err, res) {
console.log(res);
});
// Or using Promise
geocoder.reverse(45.767, 4.833)
.then(function(res) {
console.log(res);
})
.catch(function(err) {
console.log(err);
});
Geocoder Provider
google
: GoogleGeocoder. Supports address geocoding and reverse geocoding. Useextra.clientId
andextra.apiKey
(privateKey) for business licence. You can also useextra.language
to specify language. Note that 'https' is required when using an apiKeyfreegeoip
: FreegeoipGeocoder. Supports IP geocodingdatasciencetoolkit
: DataScienceToolkitGeocoder. Supports IPv4 geocoding and address geocoding. Useextra.host
to specify a local instanceopenstreetmap
: OpenStreetMapGeocoder. Supports address geocoding and reverse geocodingmapquest
: MapQuestGeocoder. Supports address geocoding and reverse geocoding. Needs an apiKeyopenmapquest
: Open MapQuestGeocoder (based on OpenStreetMapGeocoder). Supports address geocoding and reverse geocoding. Needs an apiKeyagol
: ArcGis Online Geocoding service. Supports geocoding and reverse. Requires a client_id & client_secrettomtom
: TomTomGeocoder. Supports address geocoding. You need to specifyextra.apiKey
nominatimmapquest
: OpenStreetMap Nominatim geocoder. Support address and reverse geocodingopencage
: OpenCage Geocoder. Uses multiple open sources. Supports address and reverse geocoding. You need to specifyextra.apiKey
smartyStreet
: Smarty street geocoder (US only), you need to specifyextra.auth_id
andextra.auth_token
Http adapter
http
: This adapter uses the Http nodejs library (default)https
: This adapter uses the Https nodejs library
Formatter
gpx
: format result using GPX formatstring
: format result to an String array (you need to specifyextra.formatterPattern
key)%P
country%p
country code%n
street number%S
street name%z
zip code%T
State%t
state code
More
You can improve this project by adding new geocoders or http adapters.
To run tests just npm test
.
To check code style install jshint
and just run jshint lib test
.
Extending node geocoder
You can add new geocoders by implementing the two methods geocode
and reverse
:
var geocoder = {
geocode: function(value, callback) { },
reverse: function(lat, lng, callback) { }
}
You can also add formatter implementing the following interface
var formatter = {
format: function(data) { return formattedData; },
}