home *** CD-ROM | disk | FTP | other *** search
-
- if (GBrowserIsCompatible()) {
-
- var map;
- var geo;
- var reasons=[];
- var marker;
-
- function load() {
- map = new GMap2(document.getElementById("map"));
-
- // ====== Restricting the range of Zoom Levels =====
- // Get the list of map types
- var mt = map.getMapTypes();
- // Overwrite the getMinimumResolution() and getMaximumResolution() methods
- for (var i = 0; i < mt.length; i++) {
- mt[i].getMinimumResolution = function() { return 2; }
- //mt[i].getMaximumResolution = function() { return 11; }
- }
-
- map.addControl(new GLargeMapControl());
- map.addControl(new GMapTypeControl());
- map.setCenter(new GLatLng(38.892091, -77.024055), 2);
- mapOverlaysCrossIcon();
-
-
- // Register an event listener to display the latitude and longitude
- GEvent.addListener(map, "zoomend", function() {
- if (marker == 0)
- return;
- var point = marker.getLatLng(); //mapOverlaysCrossIcon();
- map.setCenter(point);
-
- });
-
- // Register an event listener to display the latitude and longitude
- GEvent.addListener(map, "moveend", function() {
- mapOverlaysCrossIcon();
- });
-
- // ====== Create a Client Geocoder ======
- geo = new GClientGeocoder();
-
- // ====== Array for decoding the failure codes ======
- reasons[G_GEO_SUCCESS] = "Success";
- reasons[G_GEO_MISSING_ADDRESS] = "Missing Address: The address was either missing or had no value.";
- reasons[G_GEO_UNKNOWN_ADDRESS] = "Unknown Address: No corresponding geographic location could be found for the specified address.";
- reasons[G_GEO_UNAVAILABLE_ADDRESS]= "Unavailable Address: The geocode for the given address cannot be returned due to legal or contractual reasons.";
- reasons[G_GEO_BAD_KEY] = "Bad Key: The API key is either invalid or does not match the domain for which it was given";
- reasons[G_GEO_TOO_MANY_QUERIES] = "Too Many Queries: The daily geocoding quota for this site has been exceeded.";
- reasons[G_GEO_SERVER_ERROR] = "Server error: The geocoding request could not be successfully processed.";
- }
-
-
- // ===== list of words to be standardized =====
- var standards = [ ["road","rd"],
- ["street","st"],
- ["avenue","ave"],
- ["av","ave"],
- ["drive","dr"],
- ["saint","st"],
- ["north","n"],
- ["south","s"],
- ["east","e"],
- ["west","w"],
- ["expressway","expy"],
- ["parkway","pkwy"],
- ["terrace","ter"],
- ["turnpike","tpke"],
- ["highway","hwy"],
- ["lane","ln"]
- ];
-
- // ===== convert words to standard versions =====
- function standardize(a) {
- for (var i=0; i<standards.length; i++) {
- if (a == standards[i][0]) {a = standards[i][1];}
- }
- return a;
- }
-
- // ===== check if two addresses are sufficiently different =====
- function different(a,b) {
- // only interested in the bit before the first comma in the reply
- var c = b.split(",");
- b = c[0];
- // convert to lower case
- a = a.toLowerCase();
- b = b.toLowerCase();
- // remove apostrophies
- a = a.replace(/'/g ,"");
- b = b.replace(/'/g ,"");
- // replace all other punctuation with spaces
- a = a.replace(/\W/g," ");
- b = b.replace(/\W/g," ");
- // replace all multiple spaces with a single space
- a = a.replace(/\s+/g," ");
- b = b.replace(/\s+/g," ");
- // split into words
- awords = a.split(" ");
- bwords = b.split(" ");
- // perform the comparison
- var reply = false;
- for (var i=0; i<bwords.length; i++) {
- //GLog.write (standardize(awords[i])+" "+standardize(bwords[i]))
- if (standardize(awords[i]) != standardize(bwords[i])) {reply = true}
- }
- //GLog.write(reply);
- return (reply);
- }
-
-
- // ====== Plot a marker after positive reponse to "did you mean" ======
-
- function place(lat, lng) {
- var point = new GLatLng(lat, lng);
-
- map.setCenter(point, 14);
- mapOverlaysCrossIcon();
- }
-
- // ====== Geocoding ======
- function showAddress() {
- var search = document.getElementById("search").value;
- // ====== Perform the Geocoding ======
- geo.getLocations(search, function(result) {
- map.clearOverlays();
- marker = 0;
- if (result.Status.code == G_GEO_SUCCESS) {
- // ===== If there was more than one result, "ask did you mean" on them all =====
- if (result.Placemark.length > 1) {
- document.getElementById("message").innerHTML = "Did you mean:";
- // Loop through the results
- for (var i = 0; i < result.Placemark.length; i++) {
- var p = result.Placemark[i].Point.coordinates;
- document.getElementById("message").innerHTML += "<br>" + (i + 1) + ": <a href='javascript:place(" + p[1] + "," + p[0] + ")'>" + result.Placemark[i].address + "<\/a>";
- }
- }
- // ===== If there was a single marker, is the returned address significantly different =====
- else {
- document.getElementById("message").innerHTML = "";
- if (different(search, result.Placemark[0].address)) {
- document.getElementById("message").innerHTML = "Did you mean: ";
- var p = result.Placemark[0].Point.coordinates;
- document.getElementById("message").innerHTML += "<a href='javascript:place(" + p[1] + "," + p[0] + ")'>" + result.Placemark[0].address + "<\/a>";
- } else {
- var p = result.Placemark[0].Point.coordinates;
- document.getElementById("message").innerHTML = "<a href='javascript:place(" + p[1] + "," + p[0] + ")'>" + "Set Location: " + result.Placemark[0].address + "<\/a>";
- }
- }
- }
- // ====== Decode the error status ======
- else {
- var reason = "Code " + result.Status.code;
- if (reasons[result.Status.code]) {
- reason = reasons[result.Status.code]
- }
- alert('Could not find "' + search + '" ' + reason);
- }
- }
- );
- }
-
- // Creating icon which are always shown at center of the gmap2
- function mapOverlaysCrossIcon() {
- map.clearOverlays();
- marker = 0;
- var icon = new GIcon();
- icon.image = "images/geotag_center.png";
- icon.iconSize = new GSize(21, 26);
- icon.iconAnchor = new GPoint(10, 25);
- var p = map.getCenter();
- var lat = p.lat();
- var lng = p.lng();
- //update display with the new coords
- document.getElementById("message").innerHTML = p.toString();
-
- //update the app for the "Apply" functionality
- var setLocate = "HLGEOCHANGED:(" + lat + "," + lng + ")";
- window.location.href = setLocate;
- marker = new GMarker(p, { icon: icon, draggable: true, bouncy: true });
-
- //show new cooridnates:
- var center = map.getCenter();
- document.getElementById("message").innerHTML = center.toString();
-
- map.addOverlay(marker);
- marker.enableDragging();
-
- GEvent.addListener(marker, "click", function() {
- var p = marker.getPoint();
- var lat = p.lat();
- var lng = p.lng();
- var msg = "<div class='apply'><a href='HLGEOSAVE:(" + lat + "," + lng + ")'>" + "Apply!" + "<\/a>";
- msg += "<br><a href='HLGEOSAVEALL:(" + lat + "," + lng + ")'>" + "Apply to all!" + "<\/a><\/div>";
- map.openInfoWindowHtml(p, msg);
- });
-
- GEvent.addListener(marker, "dragend", function() {
- var p = marker.getPoint();
- var lat = p.lat();
- var lng = p.lng();
- //update display with the new coords
- document.getElementById("message").innerHTML = p.toString();
-
- var setLocate = "HLGEOCHANGED:(" + lat + "," + lng + ")";
- window.location.href = setLocate;
- });
-
- }
-
- }
-
-
- // display a warning if the browser was not compatible
- else {
- alert("Sorry, the Google Maps API is not compatible with this browser");
- }
-
-