Node library for geocoding and reverse geocoding. Can be used as a nodejs library
npm install node-geocoder
vargeocoderProvider='google';varhttpAdapter='http';// optionnalvarextra={apiKey: 'YOUR_API_KEY',// for Mapquest, OpenCage, Google Premierformatter: null// 'gpx', 'string', ...};vargeocoder=require('node-geocoder')(geocoderProvider,httpAdapter,extra);// Using callbackgeocoder.geocode('29 champs elysée paris',function(err,res){console.log(res);});// Or using Promisegeocoder.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',administrativeLevels:
{level1long: 'Île-de-France',level1short: 'IDF',level2long: 'Paris',level2short: '75'}}]geocoder.geocode({address: '29 champs elysée',country: 'France',zipcode: '75008'},function(err,res){console.log(res);});// OpenCage advanced usage examplegeocoder.geocode({address: '29 champs elysée',countryCode: 'fr',minConfidence: 0.5,limit: 5},function(err,res){console.log(res);});// Reverse example// Using callbackgeocoder.reverse({lat:45.767,lon:4.833},function(err,res){console.log(res);});// Or using Promisegeocoder.reverse({lat:45.767,lon:4.833}).then(function(res){console.log(res);}).catch(function(err){console.log(err);});// Batch geocodegeocoder.batchGeocode(['13 rue sainte catherine','another adress'],function(results){// Return an array of type {error: false, value: []}console.log(results);});// Set specific http request headers:varHttpsAdapter=require('node-geocoder/lib/httpadapter/httpsadapter.js')varhttpAdapter=newHttpsAdapter(null,{headers: {'user-agent': 'My application <email@domain.com>','X-Specific-Header': 'Specific value'}})vargeocoder=require('node-geocoder')(geocoderProvider,httpAdapter,extra);
...google: GoogleGeocoder. Supports address geocoding and reverse geocoding. Useextra.clientIdandextra.apiKey(privateKey) for business licence. You can also useextra.languageandextra.regionto specify language and region, respectively. Note that 'https' is required when using an apiKeyhere: HereGeocoder. Supports address geocoding and reverse geocoding. You must specifyextra.appIdandextra.appCodewith your license keys. You can also useextra.language,extra.politicalView(read about political views here),extra.country, andextra.state.freegeoip: FreegeoipGeocoder. Supports IP geocodingdatasciencetoolkit: DataScienceToolkitGeocoder. Supports IPv4 geocoding and address geocoding. Useextra.hostto specify a local instanceopenstreetmap: OpenStreetMapGeocoder. Supports address geocoding and reverse geocoding. You can useextra.languageandextra.emailto specify a language and a contact email address.- For
geocode, you can use an object as value, specifying one or several parameters from https://wiki.openstreetmap.org/wiki/Nominatim#Parameters - For
reverse, you can use additional parameters from https://wiki.openstreetmap.org/wiki/Nominatim#Parameters_2 - You should specify a specific
user-agentorreferrerheader field as required by https://wiki.openstreetmap.org/wiki/Nominatim_usage_policy
- For
mapquest: 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_secret and 'https' http adaptertomtom: TomTomGeocoder. Supports address geocoding. You need to specifyextra.apiKeynominatimmapquest: Same geocoder asopenstreetmap, but queries the MapQuest servers. You need to specifyextra.apiKeyopencage: OpenCage Geocoder. Uses multiple open sources. Supports address and reverse geocoding. You need to specifyextra.apiKeysmartyStreet: Smarty street geocoder (US only), you need to specifyextra.auth_idandextra.auth_tokengeocodio: Geocodio, Supports address geocoding and reverse geocoding (US only)yandex: Yandex support address geocoding, you can useextra.languageto specify languageteleport: Teleport supports city and urban area forward and reverse geocoding; for more information, see Teleport API documentation
https: This adapter uses the Https nodejs library (default)http: This adapter uses the Http nodejs library
gpx: format result using GPX formatstring: format result to an String array (you need to specifyextra.formatterPatternkey)%Pcountry%pcountry code%nstreet number%Sstreet name%zzip code%TState%tstate code
node-geocoder-cli You can use node-geocoder-cli to geocode in shell
You can add new geocoders by implementing the two methods geocode and reverse:
vargeocoder={geocode: function(value,callback){ ... },reverse: function(query,callback){varlat=query.lat;varlon=query.lon; ... }}You can also add formatter implementing the following interface
varformatter={format: function(data){returnformattedData;},}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.

