npmap.js
Version:
A JavaScript web mapping library, built as a Leaflet plugin, for the National Park Service.
223 lines (196 loc) • 6.3 kB
JavaScript
/* globals L */
/* jshint camelcase: false */
;
var reqwest = require('reqwest'),
util = require('../util/util');
module.exports = ({
_formatBingResult: function(result) {
var bbox = result.bbox,
coordinates = result.geocodePoints[0].coordinates;
return {
bounds: [
[bbox[0], bbox[1]],
[bbox[2], bbox[3]]
],
latLng: [coordinates[0], coordinates[1]],
name: result.name
};
},
_formatEsriResult: function(result) {
var extent = result.extent,
geometry = result.feature.geometry;
return {
bounds: [
[extent.ymin, extent.xmin],
[extent.ymax, extent.xmax]
],
latLng: [geometry.y, geometry.x],
name: result.name
};
},
_formatMapquestResult: function(result) {
var city = result.adminArea5 || null,
county = result.adminArea4 || null,
country = result.adminArea1 || null,
postal = result.postalCode || null,
street = result.street || null,
state = result.adminArea3 || null,
name = (street ? street + ', ' : '') + (city ? city : county) + ', ' + state + ' ' + country;
return {
bounds: null,
latLng: [result.latLng.lat, result.latLng.lng],
name: name
};
},
_formatNominatimResult: function(result) {
var bbox = result.boundingbox;
return {
bounds: [
[bbox[0], bbox[3]],
[bbox[1], bbox[2]]
],
latLng: [result.lat, result.lon],
name: result.display_name
};
},
bing: function(value, callback) {
var me = this,
options = {
include: 'queryParse',
includeNeighborhood: 1,
key: 'Ag4-2f0g7bcmcVgKeNYvH_byJpiPQSx4F9l0aQaz9pDYMORbeBFZ0N3C3A5LSf65',
query: value
};
reqwest({
error: function() {
callback({
message: 'The location search failed. Please check your network connection.',
success: false
});
},
jsonpCallback: 'jsonp',
success: function(response) {
var obj = {};
if (response) {
var results = [];
for (var i = 0; i < response.resourceSets[0].resources.length; i++) {
results.push(me._formatBingResult(response.resourceSets[0].resources[i]));
}
obj.results = results;
obj.success = true;
} else {
obj.message = 'The response from the Bing service was invalid. Please try again.';
obj.success = false;
}
callback(obj);
},
type: 'jsonp',
url: util.buildUrl('https://dev.virtualearth.net/REST/v1/Locations', options)
});
},
esri: function(value, callback, options) {
var me = this,
defaults = {
//bbox: options && options.bbox ? options.bbox : null,
//center: me._map.getCenter(),
//distance: Math.min(Math.max(center.distanceTo(ne), 2000), 50000),
f: 'json',
//location: options && options.center ? options.center.lat + ',' + options.center.lng : null,
//maxLocations: 5,
//outFields: 'Subregion, Region, PlaceName, Match_addr, Country, Addr_type, City',
text: value
};
options = options ? L.extend(defaults, options) : defaults;
reqwest({
error: function() {
callback({
message: 'The location search failed. Please check your network connection.',
success: false
});
},
success: function(response) {
var obj = {};
if (response) {
var results = [];
for (var i = 0; i < response.locations.length; i++) {
results.push(me._formatEsriResult(response.locations[i]));
}
obj.results = results;
obj.success = true;
} else {
obj.message = 'The response from the Esri service was invalid. Please try again.';
obj.success = false;
}
callback(obj);
},
type: 'jsonp',
url: util.buildUrl('https://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer/find', options)
});
},
mapquest: function(value, callback) {
var me = this;
reqwest({
error: function() {
callback({
message: 'The location search failed. Please check your network connection.',
success: false
});
},
success: function(response) {
if (response) {
if (response.results && response.results[0] && response.results[0].locations && response.results[0].locations.length) {
var results = [];
for (var i = 0; i < response.results[0].locations.length; i++) {
results.push(me._formatMapquestResult(response.results[0].locations[i]));
}
callback({
results: results,
success: true
});
} else {
callback({
message: 'No locations found.',
success: true
});
}
} else {
callback({
message: 'The geocode failed. Please try again.',
success: false
});
}
},
type: 'jsonp',
url: 'https://www.mapquestapi.com/geocoding/v1/address?location=' + value + '&key=Gmjtd%7Cluubn1u1nq%2C85%3Do5-lr7x9&thumbMaps=false'
});
},
nominatim: function(value, callback) {
var me = this;
reqwest({
error: function() {
callback({
message: 'The location search failed. Please check your network connection.',
success: false
});
},
jsonpCallback: 'json_callback',
success: function(response) {
var obj = {};
if (response) {
var results = [];
for (var i = 0; i < response.length; i++) {
results.push(me._formatNominatimResult(response[i]));
}
obj.results = results;
obj.success = true;
} else {
obj.message = 'The response from the Nominatim service was invalid. Please try again.';
obj.success = false;
}
callback(obj);
},
type: 'jsonp',
url: 'https://open.mapquestapi.com/nominatim/v1/search.php?format=json&addressdetails=1&dedupe=1&q=' + value + '&key=Gmjtd%7Cluubn1u1nq%2C85%3Do5-lr7x9'
});
}
});