// Some internal state vars
var dfMapMapObj = '';
var dfMapMarker = '';
var dfMapResponse = '';
var dfMapPlacemarkNo = '';
var dfMapZoomLevel = '';
var dfMapMetaObj = '';
var dragged = false;
// Display users current position on map if browser supports geolocation object
function displayCurrentPosition() {
/*if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
document.getElementById("dfMapAddress").value = position.coords.latitude + ',' + position.coords.longitude;
dfMapReset();
}
)
}*/
}
// Process returned data
function getLocationsResponse(response) {
setLoadingState(false);
// Internal api error
if (response && (response.Status.code == G_GEO_SERVER_ERROR || response.Status.code == G_GEO_BAD_KEY || response.Status.code == G_GEO_TOO_MANY_QUERIES)) {
alert("An internal error occured, please try again later!");
// Successfuly reply
} else if (response && (response.Status.code == G_GEO_SUCCESS)) {
dfMapResponse = response;
// Check if there are more multiple results
if (response.Placemark.length > 1 ) {
// Display input layer
document.body.style.overflow = 'hidden';
document.getElementById('inputScreenContent').innerHTML = '';
document.getElementById('inputScreenBG').style.visibility = 'visible';
document.getElementById('inputScreenBG').style.display = 'block';
document.getElementById('inputScreen').style.visibility = 'visible';
document.getElementById('inputScreen').style.display = 'block';
// Write down possible locations
for (var i = 0; i < response.Placemark.length; i++) {
var placemark = response.Placemark[i];
var address = '';
var country = '';
var administrativeArea = '';
var subAdministrativeArea = '';
var locality = '';
var dependentLocality= '';
if (response && placemark) {
address = placemark.address;
if (placemark.AddressDetails.Country) {
country = placemark.AddressDetails.Country.CountryNameCode;
if (placemark.AddressDetails.Country.AdministrativeArea) {
administrativeArea = placemark.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName;
if (placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea) {
subAdministrativeArea = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.SubAdministrativeAreaName;
if (placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality) {
locality = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName;
if (placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.DependentLocality) {
dependentLocality = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.DependentLocality.DependentLocalityName;
}
}
}
}
}
}
document.getElementById('inputScreenContent').innerHTML += '
';
}
// Just draw the result if there was only one
} else {
dfMapPlacemarkNo = 0;
dfMapDrawPlacemark();
}
// Location not found
} else {
alert("The requested address could not be found!");
}
}
// Draw placemark
function dfMapDrawPlacemark() {
// Hide input layer if it has been on display
document.getElementById('inputScreen').style.visibility = 'hidden';
document.getElementById('inputScreen').style.display = 'none';
document.getElementById('inputScreenBG').style.visibility = 'hidden';
document.getElementById('inputScreenBG').style.display = 'none';
document.body.style.overflow = 'auto';
// Get location data
var placemark = dfMapResponse.Placemark[dfMapPlacemarkNo];
var point = new GLatLng(placemark.Point.coordinates[1], placemark.Point.coordinates[0]);
// Center map
dfMapMapObj.setCenter(point, 14, G_NORMAL_MAP);
// Add marker to map
dfMapMarker = new GMarker(point, {draggable: true});
GEvent.addListener(dfMapMarker, "click", function() {
dfMapFillMarker();
}, this);
GEvent.addListener(dfMapMarker, "dragend", function() {
dragged = true;
dfMapFillMarker();
}, this);
dfMapMapObj.addOverlay(dfMapMarker);
dfMapFillMarker();
}
// Returns a points rounded latitude
function dfMapGetPointLat(point) {
var accuracy = document.getElementById('dfMapAccuracy').options[document.getElementById('dfMapAccuracy').selectedIndex].value;
var value = point.lat();
return dfMapGeoAccuracy(value, accuracy);
}
// Returns a points rounded longitude
function dfMapGetPointLng(point) {
var accuracy = document.getElementById('dfMapAccuracy').options[document.getElementById('dfMapAccuracy').selectedIndex].value;
var value = point.lng();
return dfMapGeoAccuracy(value, accuracy);
}
// Round a lng/lat value
function dfMapGeoAccuracy(value, accuracy) {
return value.toFixed(accuracy);
}
// Calculates a degree value
function dfMapPosToDegree(position, type) {
var result = '';
var degree = Math.floor(Math.abs(position));
var minutes = Math.floor((Math.abs(position) - degree) * 60);
var seconds = (((Math.abs(position) - degree) * 60 - minutes) * 60).toFixed(2);
var extension;
if (type == 'lat') {
if (position > 0 ) {
extension = 'N';
} else {
extension = 'S';
}
} else {
if (position > 0 ) {
extension = 'O';
} else {
extension = 'W';
}
}
return degree + '° ' + minutes + '\' ' + seconds + '\'\' ' + extension;
}
// Draw address position and zoom in there
function dfMapFillMarker() {
// Abort if no response so far
if (!dfMapResponse) {
return;
}
var placemark = dfMapResponse.Placemark[dfMapPlacemarkNo];
var accuracy = '?';
var address = '';
var country = '';
var administrativeArea = '';
var subAdministrativeArea = '';
var locality = '';
var thoroughfare = '';
var postalCode = '';
var dependentLocality = '';
var dependentLocalityThoroughfare = '';
var dependentLocalityPostalCode = '';
var GGeoAddressAccuracy = new Array(
'Unknown',
'Country level',
'Region level',
'Sub-region level',
'Town level',
'Post code level',
'Street level',
'Intersection level',
'Adress level'
);
// Get placemark data
if (placemark && !dfMapMetaObj && !isGeoCoord(getAddress())) {
address = placemark.address;
if (placemark.AddressDetails.Country) {
country = placemark.AddressDetails.Country.CountryNameCode;
accuracy = placemark.AddressDetails.Accuracy;
if (placemark.AddressDetails.Country.AdministrativeArea) {
administrativeArea = placemark.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName;
if (placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea) {
subAdministrativeArea = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.SubAdministrativeAreaName;
if (placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality) {
locality = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName;
if (placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.Thoroughfare) {
thoroughfare = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.Thoroughfare.ThoroughfareName;
}
if (placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.PostalCode) {
postalCode = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.PostalCode.PostalCodeNumber;
}
if (placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.DependentLocality) {
dependentLocality = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.DependentLocality.DependentLocalityName;
if (placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.DependentLocality.Thoroughfare) {
thoroughfare = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.DependentLocality.Thoroughfare.ThoroughfareName;
}
if (placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.DependentLocality.PostalCode) {
postalCode = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.DependentLocality.PostalCode.PostalCodeNumber;
}
}
}
}
}
}
}
// Zoom in only if not dragged since last result
if (!dragged) {
var zoomLevel = 10;
if (dfMapZoomLevel > 0) {
zoomLevel = dfMapZoomLevel;
} else if (accuracy == 0) {
zoomLevel = 0;
} else if (accuracy == 1) {
zoomLevel = 3;
} else if (accuracy == 2) {
zoomLevel = 6;
} else if (accuracy == 3) {
zoomLevel = 8;
} else if (accuracy == 4) {
zoomLevel = 12;
} else if (accuracy == 5) {
zoomLevel = 13;
} else if (accuracy == 6) {
zoomLevel = 15;
} else if (accuracy == 7) {
zoomLevel = 16;
} else if (accuracy == 8) {
zoomLevel = 17;
}
dfMapMapObj.setZoom(zoomLevel);
}
var thisAddress = (dfMapMetaObj ? dfMapMetaObj.geoPlacename : (address ? address : getAddress()));
var thisRegion = (dfMapMetaObj ? dfMapMetaObj.geoRegion : (country && administrativeArea ? country + '-' + administrativeArea : ''));
var lng = dfMapGetPointLng(dfMapMarker.getPoint());
var lat = dfMapGetPointLat(dfMapMarker.getPoint());
var lngDeg = dfMapPosToDegree(lng, 'lng');
var latDeg = dfMapPosToDegree(lat, 'lat');
var zoomLevel = dfMapMapObj.getZoom();
var mapType = '';
// Fill marker
dfMapMarker.openInfoWindowHtml('Latitude: ' + lat + ' (' + latDeg + ')
Longitude: ' + lng + ' (' + lngDeg + ')
| Address: | ' + thisAddress + ' |
|---|---|
| Latitude: | ' + lat + ' (' + latDeg + ') |
| Longitude: | ' + lng + ' (' + lngDeg + ') |
| Country: | ' + country + ' |
| Administrative Area: | ' + administrativeArea + ' |
| Sub-Administrative Area: | ' + subAdministrativeArea + ' |
| Locality: | ' + locality + ' |
| Thoroughfare: | ' + thoroughfare + ' |
| Postal code: | ' + postalCode + ' |
| Locality: | ' + dependentLocality + ' |
| Thoroughfare: | ' + dependentLocalityThoroughfare + ' |
| Postal code: | ' + dependentLocalityPostalCode + ' |
| Accuracy: | ' + GGeoAddressAccuracy[accuracy] + ' (' + accuracy + ' out of 8) |
' : '') + "" + (ps ? '
' : '')); } } // Dump a var or object function dump(arr,level) { var dumped_text = ""; if(!level) level = 0; //The padding given at the beginning of the line. var level_padding = ""; for(var j=0;j