mapstraction-geocode.js
Summary
No overview generated for 'mapstraction-geocode.js'
function MapstractionGeocoder(callback, api, error_callback) {
this.api = api;
this.callback = callback;
this.geocoders = new Object();
if(error_callback == null) {
this.error_callback = this.geocode_error
} else {
this.error_callback = error_callback;
}
this.svn_revision_string = '$Revision: 107 $';
this.addAPI(api);
}
MapstractionGeocoder.prototype.addAPI = function(api) {
me = this;
switch (api) {
case 'google':
this.geocoders[api] = new GClientGeocoder();
break;
case 'mapquest':
var proxyServerName = "";
var proxyServerPort = "";
var ProxyServerPath = "mapquest_proxy/JSReqHandler.php";
var serverName = "geocode.access.mapquest.com";
var serverPort = "80";
var serverPath = "mq";
this.geocoders[api] = new MQExec(serverName, serverPath, serverPort, proxyServerName,
ProxyServerPath, proxyServerPort );
break;
default:
alert(api + ' not supported by mapstraction-geocoder');
}
}
MapstractionGeocoder.prototype.swap = function(api) {
if (this.api == api) { return; }
this.api = api;
if (this.geocoders[this.api] == undefined) {
this.addAPI($(element),api);
}
}
MapstractionGeocoder.prototype.geocode_error = function(response) {
alert("Sorry, we were unable to geocode that address");
}
MapstractionGeocoder.prototype.geocode_callback = function(response, mapstraction_geocoder) {
var return_location = new Object();
switch (mapstraction_geocoder.api) {
case 'google':
if (!response || response.Status.code != 200) {
mapstraction_geocoder.error_callback(response);
} else {
return_location.street = "";
return_location.locality = "";
return_location.region = "";
return_location.country = "";
var place = response.Placemark[0];
if(place.AddressDetails.Country.AdministrativeArea != null) {
return_location.region = place.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName;
if(place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea != null) {
if(place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality != null) {
return_location.locality = place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName;
if(place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.Thoroughfare != null)
return_location.street = place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.Thoroughfare.ThoroughfareName;
}
}
}
return_location.country = place.AddressDetails.Country.CountryNameCode;
return_location.point = new LatLonPoint(place.Point.coordinates[1],
place.Point.coordinates[0]);
mapstraction_geocoder.callback(return_location);
}
break;
case 'mapquest':
break;
}
}
MapstractionGeocoder.prototype.geocode = function(address) {
var return_location = new Object();
var mapstraction_geocoder = this;
switch (this.api) {
case 'google':
if (address.address == null || address.address == "")
address.address = address.street + ", " + address.locality + ", " + address.region + ", " + address.country
this.geocoders[this.api].getLocations(address.address, function(response) { mapstraction_geocoder.geocode_callback(response, mapstraction_geocoder); });
break;
case 'mapquest':
var mqaddress = new MQAddress();
var gaCollection = new MQLocationCollection("MQGeoAddress");
mqaddress.setStreet(address.street);
mqaddress.setCity(address.locality);
mqaddress.setState(address.region);
mqaddress.setPostalCode(address.postalcode);
mqaddress.setCountry(address.country);
this.geocoders[this.api].geocode(mqaddress, gaCollection);
var geoAddr = gaCollection.get(0);
var mqpoint = geoAddr.getMQLatLng();
return_location.street = geoAddr.getStreet();
return_location.locality = geoAddr.getCity();
return_location.region = geoAddr.getState();
return_location.country = geoAddr.getCountry();
return_location.point = new LatLonPoint(mqpoint.getLatitude(), mqpoint.getLongitude());
this.callback(return_location, this);
break;
default:
alert(api + ' not supported by mapstraction-geocoder');
break;
}
}
Documentation generated by
JSDoc on Mon Dec 15 20:12:04 2008