UNPKG

node-geocoder

Version:

Node Geocoder, node geocoding library, supports google maps, mapquest, open street map, tom tom, promise

60 lines (59 loc) 2.18 kB
"use strict"; var util = require('util'), net = require('net'), AbstractGeocoder = require('./abstractgeocoder'); /** * Constructor */ var DataScienceToolkitGeocoder = function DataScienceToolkitGeocoder(httpAdapter, options) { this.options = ['host']; this.supportIPv4 = true; DataScienceToolkitGeocoder.super_.call(this, httpAdapter, options); }; util.inherits(DataScienceToolkitGeocoder, AbstractGeocoder); /** * Build DSTK endpoint, allows for local DSTK installs * @param <string> value Value to geocode (Address or IPv4) */ DataScienceToolkitGeocoder.prototype._endpoint = function (value) { var ep = {}; var host = 'www.datasciencetoolkit.org'; if (this.options.host) { host = this.options.host; } ep.ipv4Endpoint = 'http://' + host + '/ip2coordinates/'; ep.street2coordinatesEndpoint = 'http://' + host + '/street2coordinates/'; return net.isIPv4(value) ? ep.ipv4Endpoint : ep.street2coordinatesEndpoint; }; /** * Geocode * @param <string> value Value to geocode (Address or IPv4) * @param <function> callback Callback method */ DataScienceToolkitGeocoder.prototype._geocode = function (value, callback) { var ep = this._endpoint(value); this.httpAdapter.get(ep + value, {}, function (err, result) { if (err) { return callback(err); } else { result = result[value]; if (!result) { return callback(new Error('Could not geocode "' + value + '".')); } var results = []; results.push({ 'latitude': result.latitude, 'longitude': result.longitude, 'country': result.country_name, 'city': result.city || result.locality, 'state': result.state || result.region, 'zipcode': result.postal_code, 'streetName': result.street_name, 'streetNumber': result.street_number, 'countryCode': result.country_code }); results.raw = result; callback(false, results); } }); }; module.exports = DataScienceToolkitGeocoder;