93 lines
2.5 KiB
JavaScript
93 lines
2.5 KiB
JavaScript
mxn.register('cloudmade', {
|
|
|
|
Geocoder : {
|
|
|
|
init : function() {
|
|
throw new Error('The cloudmade Maps API is now obsolete and no longer supported by Mapstraction, as Leaflet now supercedes it.');
|
|
/*
|
|
this.geocoders[this.api] = new CM.Geocoder(
|
|
cloudmade_key);
|
|
*/
|
|
},
|
|
|
|
geocode : function(query, rowlimit) {
|
|
var me = this;
|
|
var reverseGeocode = false;
|
|
// result
|
|
var geocode_request_object = {};
|
|
if (typeof (query) == 'object') {
|
|
// query is a LatLonPoint object (reverse
|
|
// geocode)
|
|
if (query.hasOwnProperty('lat')
|
|
&& query.hasOwnProperty('lon')) {
|
|
reverseGeocode = true;
|
|
geocode_request_object = new CM.LatLng(
|
|
query.toProprietary(this.api));
|
|
}
|
|
// query is an address object
|
|
else {
|
|
geocode_request_object.address = query.locality
|
|
|| query.region; // use locality
|
|
// if pesent or
|
|
// just region
|
|
}
|
|
}
|
|
|
|
// query is an address string
|
|
else {
|
|
geocode_request_object.address = query;
|
|
// If the query contains numbers then interpret
|
|
// it as a postcode perhaps?
|
|
var matches = query.match(/\d+/g);
|
|
if (matches !== null) {
|
|
isPostCode = true;
|
|
}
|
|
}
|
|
|
|
// add optios to set the max results: resultsNumber
|
|
var options = {
|
|
resultsNumber : rowlimit
|
|
};
|
|
this.geocoders[this.api].getLocations(
|
|
reverseGeocode ? geocode_request_object
|
|
: geocode_request_object.address,
|
|
function(results) {
|
|
me.geocode_callback(results);
|
|
}, options);
|
|
},
|
|
|
|
geocode_callback : function(results) {
|
|
var places = [];
|
|
|
|
for (i = 0; i < results.features.length; i++) {
|
|
place = results.features[i];
|
|
var streetparts = [];
|
|
var return_location = {};
|
|
|
|
if (place.properties.place == "city") {
|
|
return_location.locality = place.properties["name:en"]
|
|
|| place.properties.name;
|
|
}
|
|
// What about things that dont come back as
|
|
// city? Newcastle, UK or Bardon Mill,
|
|
// springfield, USA, greenwich, uk , St Omar,
|
|
// France
|
|
|
|
return_location.postal_code = place.properties.postal_code;
|
|
return_location.country = place.properties["is_in:country"];
|
|
return_location.region = place.properties["is_in:county"]
|
|
|| place.properties["is_in:state"]
|
|
|| place.properties["is_in:province"]
|
|
|| place.properties.code_departement;
|
|
|
|
return_location.point = new mxn.LatLonPoint(
|
|
place.centroid.coordinates[0],
|
|
place.centroid.coordinates[1]);
|
|
places.push(return_location);
|
|
}
|
|
|
|
this.callback(places);
|
|
}
|
|
}
|
|
|
|
}); |