1/* All code copyright David B. Zwiefelhofer. All rights reserved. No parts may be used without explicit written consent. */ 2 3 function init_map() { 4 var image = { 5 url: "http://"+host+"/images/blue-circle.png", 6 size: new google.maps.Size(34, 34), 7 origin: new google.maps.Point(0,0), 8 anchor: new google.maps.Point(15,15), 9 scaledSize: new google.maps.Size(34, 34) 10 }; 11 var image_shadow = { 12 url: "http://"+host+"/images/blue-circle-shadow.png", 13 size: new google.maps.Size(34, 34), 14 origin: new google.maps.Point(0,0), 15 anchor: new google.maps.Point(15,15), 16 scaledSize: new google.maps.Size(34, 34) 17 }; 18 19 var mapOptions = { 20 zoom: zoom, 21 center: init_latlng, 22 draggableCursor:'crosshair', 23 anchorPoint:new google.maps.Point(15, 15), 24 mapTypeId: eval("google.maps.MapTypeId."+map_type), 25 scaleControl: true, 26 overviewMapControl: true, 27 overviewMapControlOptions:{opened:true} 28 } 29 map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions); 30 31 marker = new google.maps.Marker({ 32 position: init_latlng, 33 icon: image, 34 shadow: image_shadow 35 }); 36 37 geocoder = new google.maps.Geocoder(); 38 39 // To add the marker to the map, call setMap(); 40 marker.setMap(map); 41 42 google.maps.event.addListener(map, 'mouseout', function(event) { 43 document.getElementById("dyn_lat_HMS").innerHTML = "<span class=\"label\">Latitude:</span><span class=\"value\">cursor off map</span>"; 44 document.getElementById("dyn_lon_HMS").innerHTML = "<span class=\"label\">Longitude:</span><span class=\"value\">cursor off map</span>"; 45 document.getElementById("dyn_lat_DMD").innerHTML = "<span class=\"label\">Latitude:</span><span class=\"value\"></span>"; 46 document.getElementById("dyn_lon_DMD").innerHTML = "<span class=\"label\">Longitude:</span><span class=\"value\"></span>"; 47 document.getElementById("dyn_lat").innerHTML = "<span class=\"label\">Latitude:</span><span class=\"value\"></span>"; 48 document.getElementById("dyn_lon").innerHTML = "<span class=\"label\">Longitude:</span><span class=\"value\"></span>"; 49 }); 50 51 google.maps.event.addListener(map, 'mousemove', function(event) { 52 document.getElementById("dyn_lat_HMS").innerHTML = "<span class=\"label\">Latitude:</span><span class=\"value redbrown\">"+dec_to_HMS_lat(event.latLng.lat())+"</span>"; 53 document.getElementById("dyn_lon_HMS").innerHTML = "<span class=\"label\">Longitude:</span><span class=\"value redbrown\">"+dec_to_HMS_lon(event.latLng.lng())+"</span>"; 54 document.getElementById("dyn_lat_DMD").innerHTML = "<span class=\"label\">Latitude:</span><span class=\"value olive\">"+dec_to_DMD_lat(event.latLng.lat())+"</span>"; 55 document.getElementById("dyn_lon_DMD").innerHTML = "<span class=\"label\">Longitude:</span><span class=\"value olive\">"+dec_to_DMD_lon(event.latLng.lng())+"</span>"; 56 57 // document.getElementById("dyn_lat").innerHTML = "<span class=\"label\">Latitude:</span><span class=\"value\">" + (Math.round(event.latLng.lat()*1000000)/1000000)+ "°</span>"; 58 var dyn_lat = "<span class=\"label\">Latitude:</span><span class=\"value\">"; 59 dyn_lat += (Math.round(event.latLng.lat()*1000000)/1000000); 60 dyn_lat += "°</span>"; 61 document.getElementById("dyn_lat").innerHTML = dyn_lat; 62 63 // document.getElementById("dyn_lon").innerHTML = "<span class=\"label\">Longitude:</span><span class=\"value\">"+(Math.round(event.latLng.lng()*1000000)/1000000)+"°</span>"; 64 var dyn_lon = "<span class=\"label\">Longitude:</span><span class=\"value\">"; 65 dyn_lon += (Math.round(event.latLng.lng()*1000000)/1000000); 66 dyn_lon += "°</span>"; 67 document.getElementById("dyn_lon").innerHTML = dyn_lon; 68 }); 69 70 google.maps.event.addListener(map, 'click', function(event){ 71 get_address(event.latLng); 72 }); 73 74 google.maps.event.addListener(map, 'zoom_changed', function(oldZoomLevel, newZoomLevel) { 75 var newZoomLevel = map.getZoom(); 76 element = document.getElementById("zoom_display"); 77 element.innerHTML = "<span class=\"label\">Zoom:</span><span class=\"value\">"+newZoomLevel+"</span>"; 78 SetCookie("map1_zoom", newZoomLevel, exp); 79 update_current_link();; 80 }); 81 82 google.maps.event.addListener(map, 'maptypeid_changed', function() { 83 var map_type_name = map.getMapTypeId(); 84 document.getElementById("map_type_span").innerHTML = "<span class=\"label\">Type:</span><span class=\"value\">"+map_type_name+"</span>"; 85 save_map_type(); 86 update_current_link(); 87 }); 88 89 } 90 91 function init_reverse_map() { 92 var image = { 93 url: "http://"+host+"/images/blue-circle.png", 94 size: new google.maps.Size(34, 34), 95 origin: new google.maps.Point(0,0), 96 anchor: new google.maps.Point(15,15), 97 scaledSize: new google.maps.Size(34, 34) 98 }; 99 var image_shadow = { 100 url: "http://"+host+"/images/blue-circle-shadow.png", 101 size: new google.maps.Size(34, 34), 102 origin: new google.maps.Point(0,0), 103 anchor: new google.maps.Point(15,15), 104 scaledSize: new google.maps.Size(34, 34) 105 }; 106 107 var mapOptions = { 108 zoom: zoom, 109 center: init_latlng, 110 draggableCursor:'crosshair', 111 anchorPoint:new google.maps.Point(15, 15), 112 mapTypeId: eval("google.maps.MapTypeId."+map_type), 113 scaleControl: true, 114 overviewMapControl: true, 115 overviewMapControlOptions:{opened:true} 116 } 117 map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions); 118 119 marker = new google.maps.Marker({ 120 position: init_latlng, 121 icon: image, 122 shadow: image_shadow 123 }); 124 125 geocoder = new google.maps.Geocoder(); 126 127 128 // To add the marker to the map, call setMap();
129 marker.setMap(map); 130 131 132 google.maps.event.addListener(map, 'click', function(event){ get_address_rev(event.latLng); }); 133 134 google.maps.event.addListener(map, 'zoom_changed', function(oldZoomLevel, newZoomLevel) { 135 var newZoomLevel = map.getZoom(); 136 SetCookie("map1_zoom", newZoomLevel, exp); 137 }); 138 139 google.maps.event.addListener(map, 'maptypeid_changed', function() { 140 save_map_type(); 141 }); 142 143 } 144 145 function init_search_map() { 146 var image = { 147 url: "http://"+host+"/images/blue-circle.png", 148 size: new google.maps.Size(34, 34), 149 origin: new google.maps.Point(0,0), 150 anchor: new google.maps.Point(15,15), 151 scaledSize: new google.maps.Size(34, 34) 152 }; 153 var image_shadow = { 154 url: "http://"+host+"/images/blue-circle-shadow.png", 155 size: new google.maps.Size(34, 34), 156 origin: new google.maps.Point(0,0), 157 anchor: new google.maps.Point(15,15), 158 scaledSize: new google.maps.Size(34, 34) 159 }; 160 161 var mapOptions = { 162 zoom: zoom, 163 center: init_latlng, 164 draggableCursor:'crosshair', 165 anchorPoint:new google.maps.Point(15, 15), 166 mapTypeId: eval("google.maps.MapTypeId."+map_type), 167 scaleControl: true, 168 overviewMapControl: true, 169 overviewMapControlOptions:{opened:true} 170 } 171 map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions); 172 173 marker = new google.maps.Marker({ 174 position: init_latlng, 175 icon: image, 176 shadow: image_shadow 177 }); 178 179 geocoder = new google.maps.Geocoder(); 180 181 182 // To add the marker to the map, call setMap(); 183 marker.setMap(map); 184 185 google.maps.event.addListener(map, 'click', function(event){ 186 get_address(event.latLng); 187 // set_address_db(event.latlng) 188 // set_point(event.latLng); 189 }); 190 191 google.maps.event.addListener(map, 'zoom_changed', function(oldZoomLevel, newZoomLevel) { 192 var newZoomLevel = map.getZoom(); 193 SetCookie("map1_zoom", newZoomLevel, exp); 194 }); 195 196 google.maps.event.addListener(map, 'maptypeid_changed', function() { 197 save_map_type(); 198 }); 199 200 } 201 202 function fetch_accuracy(str) { 203 var accuracy = 0; 204 switch (str) { 205 case 'ROOFTOP': 206 accuracy = 9; 207 break; 208 209 case 'RANGE_INTERPOLATED': 210 accuracy = 8; 211 break; 212 213 case 'GEOMETRIC_CENTER': 214 accuracy = 6; 215 break; 216 217 case 'APPROXIMATE': 218 accuracy = 5; 219 break; 220 221 default: 222 accuracy = 0; 223 break; 224 } 225 return accuracy; 226 } 227 228 function fetch_status(str){ 229 switch (str) { 230 case 'OK': 231 status = 200; 232 break; 233 234 case 'INVALID_REQUEST': 235 status = 601; 236 break; 237 238 case 'ZERO_RESULTS': 239 status = 602; 240 break; 241 242 case 'OVER_QUERY_LIMIT': 243 status = 620; 244 break; 245 246 case 'REQUEST_DENIED': 247 status = 610; 248 break; 249 250 default: 251 status = 404; 252 break; 253 } 254 return status; 255 } 256 257 function update_current_link(){ 258 if (document.getElementById("current_link_span")) { 259 // var lat = GetCookie("map1_lat"); 260 var lat = Math.round(GetCookie("map1_lat")*1000000)/1000000; 261 // var lon = GetCookie("map1_lon"); 262 var lon = Math.round(GetCookie("map1_lon")*1000000)/1000000; 263 var zoom = GetCookie("map1_zoom"); 264 var map_type = GetCookie("map1_map_type"); 265 var linkstr = "<a href=\"http://"+host+"/?lat="+lat+"&lon="+lon+"&zoom="+zoom+"&map_type="+map_type+"\">link</a>"; 266 document.getElementById("current_link_span").innerHTML = "<span class=\"label\">current link:</span><span class=\"value\">"+linkstr+"</span>"; 267 } 268 } 269 270 function get_geocode_status_text(code){ 271 var code_text = ""; 272 switch(code){ 273 case 200: 274 code_text = "Successful geocode."; 275 break; 276 case 400: 277 code_text = "Bad request."; 278 break; 279 case 500: 280 code_text = "Geocode failed. Reason unknown."; 281 break; 282 case 601: 283 code_text = "Geocode failed. Location empty."; 284 break; 285 case 602: 286 code_text = "Geocode failed. Unknown location."; 287 break; 288 case 603: 289 code_text = "Geocode denied due to legal constraints."; 290 break; 291 case 604: 292 code_text = "Geocode failed. Unknown directions."; 293 break; 294 case 610: 295 code_text = "Geocode failed. Invalid API key."; 296 break; 297 case 620: 298 code_text = "Geocode failed. Request limit exceeded."; 299 break; 300 default: 301 code_text = ""; 302 break; 303 } 304 return code_text; 305 } 306 307 function get_geocode_accuracy_text(code){ 308 var code_text = ""; 309 switch(code){ 310 case 0: 311 code_text = "Unknown location."; 312 break; 313 case 1: 314 code_text = "Country level."; 315 break; 316 case 2: 317 code_text = "Region (state, province, etc.) level."; 318 break; 319 case 3: 320 code_text = "Sub-region (county, municipality, etc.) level."; 321 break; 322 case 4: 323 code_text = "Town (city, village) level."; 324 break; 325 case 5: 326 code_text = "Post code level."; 327 break; 328 case 6: 329 code_text = "Street level."; 330 break; 331 case 7: 332 code_text = "Intersection level."; 333 break; 334 case 8: 335 code_text = "Address level."; 336 break; 337 case 9: 338 code_text = "Premise (building name, property name, etc.) level."; 339 break; 340 default: 341 code_text = ""; 342 break; 343 } 344 return code_text; 345 } 346 347 function good_lat(lat){ 348 if (is_num(lat)){ 349 return ((lat >
349 90) || (lat < -90)) ? false : true; 350 } else { 351 return false; 352 } 353 } 354 355 function good_lon(lon){ 356 if (is_num(lon)){ 357 return ((lon > 180) || (lon < -180)) ? false : true; 358 } else { 359 return false; 360 } 361 } 362 363 function load_latitude_longitude(lat, lon){ 364 var point = new google.maps.LatLng(lat, lon); 365 map.setCenter(point); 366 SetCookie("map1_lat", lat, exp); 367 SetCookie("map1_lon", lon, exp); 368 document.getElementById("lat_HMS").innerHTML = "<span class=\"label\">Latitude:</span><span class=\"value redbrown\">"+dec_to_HMS_lat(lat)+"</span>"; 369 document.getElementById("lon_HMS").innerHTML = "<span class=\"label\">Longitude:</span><span class=\"value redbrown\">"+dec_to_HMS_lon(lon)+"</span>"; 370 document.getElementById("lat_DMD").innerHTML = "<span class=\"label\">Latitude:</span><span class=\"value olive\">"+dec_to_DMD(lat)+"</span>"; 371 document.getElementById("lon_DMD").innerHTML = "<span class=\"label\">Longitude:</span><span class=\"value olive\">"+dec_to_DMD(lon)+"</span>"; 372 document.getElementById("lat_dec").innerHTML = "<span class=\"label\">Latitude:</span><span class=\"value\">"+lat+"°</span>"; 373 document.getElementById("lon_dec").innerHTML = "<span class=\"label\">Longitude:</span><span class=\"value\">"+lon+"°</span>"; 374 375 // move the marker 376 marker.setPosition(point); 377 378 update_current_link(); 379 } 380 381/* First geocode the address, then if we have a valid result, load the resulting lat lon. */ 382 function load_address(address){ 383 if (address.length){ 384 var xmlhttp = create_xmlhttp(); 385 var d = new Date(); 386 387 document.getElementById("load_address_button").src = "http://"+host+"/images/waiting-16.gif"; 388 serverPage = "http://"+host+"/processors/geocode-address-tweet-v3.php?loc="+address+"&time="+d.getTime(); 389 // serverPage = "http://"+host+"/processors/geocode-address.php?loc="+address+"&time="+d.getTime(); 390 391 if (debugging) { 392 document.getElementById("debugging").innerHTML = serverPage+"<br />"+document.getElementById("debugging").innerHTML; 393 } 394 395 xmlhttp.open("GET", serverPage, true); // asynch param set to false for synch requests, true for asynch 396 397 document.getElementById("load_rep").innerHTML = ""; 398 399 // the following is executed when fetch-zip-lat-lon.php returns 400 xmlhttp.onreadystatechange = function() { 401 if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 402 var response = xmlhttp.responseText; 403 if (response.length > 0){ 404 if (debugging){ 405 document.getElementById("debugging").innerHTML = response +"<br />"+document.getElementById("debugging").innerHTML; 406 } 407 eval(response); 408 // document.getElementById("load_rep").innerHTML = "Location successfully loaded."; 409 } else { 410 document.getElementById("load_rep").innerHTML = "Location geocode failed!"; 411 } 412 //document.load_location.load_address_button.src = "http://"+host+"/images/load-button.png"; 413 document.getElementById("load_address_button").src = "http://"+host+"/images/load-button.png"; 414 } else if (xmlhttp.readyState == 4 && xmlhttp.status != 200){ 415 document.getElementById("load_rep").innerHTML = "Error geocoding, status: "+xmlhttp.status; 416 // document.load_location.load_address_button.src = "http://"+host+"/images/load-button.png"; 417 document.getElementById("load_address_button").src = "http://"+host+"/images/load-button.png"; 418 } 419 } 420 421 xmlhttp.send(null); 422 } else { 423 alert("Please provide an address, city or other parameter in the \"Location\" field."); 424 } 425 } 426 427 function load_latlon(lat, lon, store_geocode_in){ 428 var lat_result = good_lat(lat); 429 var lon_result = good_lon(lon); 430 if (lat_result && lon_result){ 431 store_geocode = store_geocode_in; // we only want to save geocodes from explicit lat/lon queries, not clicks, etc. 432 get_address(new google.maps.LatLng(lat, lon)); 433 SetCookie("map1_lat", lat, exp); 434 SetCookie("map1_lon", lon, exp); 435 if (document.getElementById("load_rep")) { 436 document.getElementById("load_rep").innerHTML = "Latitude and longitude loaded."; 437 } 438 } else { 439 var msg = ""; 440 if (!lat_result){ 441 msg += "The latitude must not be less than -90 nor greater than 90. "; 442 } 443 if (!lon_result){ 444 msg += "The longitude must not be less than -180 nor greater than 180. "; 445 } 446 alert("Please enter decimal values for the latitude and longitude. "+msg); 447 } 448 } 449 450 function dispatch_main_form() { 451 var fm = document.load_location; 452 if (fm.address.hasFocus) { 453 load_address(fm.address.value); 454 } else if (fm.zipcode.hasFocus) { 455 load_zipcode(fm.zipcode.value); 456 } else { 457 load_latlon_parse(fm.lat.value, fm.lon.value); 458 } 459 } 460 461 function load_latlon_parse(lat, lon){ 462 var arr = lat.split(","); 463
464 if (arr.length == 2){ 465 lat = parse_lat_lon(trim(arr[0])); 466 lon = parse_lat_lon(trim(arr[1])); 467 } else { 468 lat = parse_lat_lon(lat); 469 lon = parse_lat_lon(lon); 470 } 471 472 load_latlon(lat, lon, true); 473 } 474 475/* */ 476 function load_zipcode(zip){ 477 if (zip.length){ 478 var xmlhttp = create_xmlhttp(); 479 var d = new Date(); 480 document.getElementById("load_zipcode_button").src = "http://"+host+"/images/waiting-16.gif"; 481 serverPage = "http://"+host+"/processors/fetch-zip-lat-lon.php?zip="+zip+"&time="+d.getTime(); 482 xmlhttp.open("GET", serverPage, true); // asynch param set to false for synch requests, true for asynch 483 484 document.getElementById("load_rep").innerHTML = ""; 485 486 // the following is executed when fetch-zip-lat-lon.php returns 487 xmlhttp.onreadystatechange = function() { 488 if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 489 var response = xmlhttp.responseText; 490 if (response.length > 0){ 491 eval(response); 492 document.getElementById("load_rep").innerHTML = "Postal code loaded."; 493 update_current_link(); 494 } else { 495 document.getElementById("load_rep").innerHTML = "Postal code not found!"; 496 } 497 document.getElementById("load_zipcode_button").src = "http://"+host+"/images/load-button.png"; 498 } else if (xmlhttp.readyState == 4 && xmlhttp.status != 200){ 499 document.getElementById("load_rep").innerHTML = "Error loading zip, status: "+xmlhttp.status; 500 document.getElementById("load_zipcode_button").src = "http://"+host+"/images/load-button.png"; 501 } 502 } 503 504 xmlhttp.send(null); 505 } else { 506 alert("Please provide a zip code."); 507 } 508 } 509 510 var exp = new Date(); 511 var oneYearFromNow = exp.getTime() + (365 * 24 * 60 * 60 * 1000); 512 exp.setTime(oneYearFromNow); 513 514 function showAddress(results, status) { 515 var address = ""; 516 var lat_address = ""; 517 var lon_address = ""; 518 var lat_lon = ""; 519 var accuracy = ""; 520 var lat = lon = 0; 521 if ((results) && (typeof results[0] != 'undefined')) { 522 address = results[0].formatted_address; 523 lat_address = (Math.round(results[0].geometry.location.lat()*1000000)/1000000)+"°"; 524 lon_address = (Math.round(results[0].geometry.location.lng()*1000000)/1000000)+"°"; 525 lat = results[0].geometry.location.lat(); 526 lon = results[0].geometry.location.lng(); 527 lat_lon = lat_address+", "+lon_address; 528 accuracy = results[0].types; 529 } 530 var address_el = document.getElementById("address"); 531 if (address_el) { 532 address_el.innerHTML = "<span class=\"label\">Address:</span><span class=\"value\">"+address+"</span>"; 533 } 534 var lat_address_el = document.getElementById("lat_address"); 535 if (lat_address_el) { 536 lat_address_el.innerHTML = "<span class=\"label\">Latitude:</span><span class=\"value\">"+lat_address+"</span>"; 537 } 538 var lon_address_el = document.getElementById("lon_address"); 539 if (lon_address_el) { 540 lon_address_el.innerHTML = "<span class=\"label\">Longitude:</span><span class=\"value\">"+lon_address+"</span>"; 541 } 542 var lat_lon_el = document.getElementById("lat_lon"); 543 if (lat_lon_el) { 544 lat_lon_el.innerHTML = "<span class=\"label\">Lat, Lng:</span><span class=\"value\">"+lat_lon+"</span>"; 545 } 546 var accuracy_el = document.getElementById("accuracy"); 547 if (accuracy_el) { 548 // accuracy_el.innerHTML = "<span class=\"label\">Accuracy:</span><span class=\"value\">"+fetch_accuracy(accuracy)+"</span>"; 549 accuracy_el.innerHTML = "<span class=\"label\">Accuracy:</span><span class=\"value\">"+accuracy+"</span>"; 550 } 551 var status_code_el = document.getElementById("status_code"); 552 if (status_code_el) { 553 status_code_el.innerHTML = "<span class=\"label\">Status:</span><span class=\"value\">"+fetch_status(status)+"</span>"; 554 } 555 556 var when = ""; 557 var when_el = document.getElementById("when"); 558 if (when_el) { 559 when_el.innerHTML = (when.length) ? "<span class=\"label\">When:</span><span class=\"value\">"+when+"</span>" : ""; 560 } 561 562 var IP = ""; 563 var IP_el = document.getElementById("IP"); 564 if (IP_el) { 565 IP_el.innerHTML = (IP.length) ? "<span class=\"label\">IP:</span><span class=\"value\">"+IP+"</span>" : ""; 566 } 567 568 var host = ""; 569 var host_el = document.getElementById("host"); 570 if (host_el) { 571 host_el.innerHTML = (host.length) ? "<span class=\"label\">Host:</span><span class=\"value\">"+host+"</span>" : ""; 572 } 573
574 // update map coordinates report 575 if (document.getElementById("lat_dec_out")) { 576 document.getElementById("lat_dec_out").innerHTML = "<span class=\"label\">Latitude:</span><span class=\"value\">"+(Math.round(lat*1000000)/1000000)+"°</span>"; 577 document.getElementById("lon_dec_out").innerHTML = "<span class=\"label\">Longitude:</span><span class=\"value\">"+(Math.round(lon*1000000)/1000000)+"°</span>"; 578 document.getElementById("lat_HMS_out").innerHTML = "<span class=\"label\">Latitude:</span><span class=\"value redbrown\">"+dec_to_HMS_lat(lat)+"</span>"; 579 document.getElementById("lon_HMS_out").innerHTML = "<span class=\"label\">Longitude:</span><span class=\"value redbrown\">"+dec_to_HMS_lon(lon)+"</span>"; 580 document.getElementById("lat_DMD_out").innerHTML = "<span class=\"label\">Latitude:</span><span class=\"value olive\">"+dec_to_DMD_lat(lat)+"</span>"; 581 document.getElementById("lon_DMD_out").innerHTML = "<span class=\"label\">Longitude:</span><span class=\"value olive\">"+dec_to_DMD_lon(lon)+"</span>"; 582 } 583 } 584 585 586// checks result of reverse geocode (response) and stores if successful, then calls showAddress to display result. 587 function showAndStoreAddress(results, status){ 588 if (status == 'OK' && store_geocode) { 589 // alert(status); 590 store_geocode = false; // clear the flag so we don't save for just any query 591 if (debugging){ 592 document.getElementById("debugging").innerHTML = "In showAndStoreAddress."+"<br />"+document.getElementById("debugging").innerHTML; 593 } 594 var xmlhttp = create_xmlhttp(); 595 var d = new Date(); 596 if (document.getElementById("working")) { 597 document.getElementById("working").src = "http://"+host+"/images/waiting-16.gif"; 598 } 599/* 600results[]: { 601 types[]: string, 602 formatted_address: string, 603 address_components[]: { 604 short_name: string, 605 long_name: string, 606 types[]: string 607 }, 608 geometry: { 609 location: LatLng, 610 location_type: GeocoderLocationType 611 viewport: LatLngBounds, 612 bounds: LatLngBounds 613 } 614} 615*/ 616 // alert(results[0]); 617 // alert(results[0].formatted_address+", "+results[0].geometry.location.lat()+", "+results[0].geometry.location.lng()) 618 619 serverPage = "http://"+host+"/processors/store-reverse-geocode.php?lat_in="+document.load_location.lat.value+"&lon_in="+document.load_location.lon.value+"&lat_out="+results[0].geometry.location.lat()+"&lon_out="+results[0].geometry.location.lng()+"&accuracy="+fetch_accuracy(results[0].geometry.location_type)+"&sescod="+document.load_location.sescod.value+"&status="+fetch_status(status)+"&address="+escape(results[0].formatted_address)+"&time="+d.getTime(); 620 // alert(serverPage); 621 if (debugging){ 622 document.getElementById("debugging").innerHTML = "serverPage: "+serverPage+"<br />"+document.getElementById("debugging").innerHTML; 623 serverPage = serverPage+"&debugging=1" 624 } 625 xmlhttp.open("GET", serverPage, true); // asynch param set to false for synch requests, true for asynch 626 627 // document.getElementById("load_rep").innerHTML = ""; 628 629 // the following is executed when fetch-zip-lat-lon.php returns 630 xmlhttp.onreadystatechange = function() { 631 if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 632 if (xmlhttp.responseText.length > 0){ 633 if (debugging){ 634 document.getElementById("debugging").innerHTML = xmlhttp.responseText+"<br />"+document.getElementById("debugging").innerHTML; 635 } 636 eval(xmlhttp.responseText); 637 // document.getElementById("load_rep").innerHTML = "Location successfully loaded."; 638 } else { 639 // document.getElementById("load_rep").innerHTML = "Location geocode failed!"; 640 } 641 if (debugging){ 642 document.getElementById("debugging").innerHTML = "xmlhttp.responseText: "+xmlhttp.responseText+"<br />"+document.getElementById("debugging").innerHTML; 643 } 644 } else if (xmlhttp.readyState == 4 && xmlhttp.status != 200){ 645 // document.getElementById("load_rep").innerHTML = "Error geocoding, status: "+xmlhttp.status; 646 // document.load_location.load_address_button.src = "http://"+host+"/images/load-button.png"; 647 if (debugging){ 648 document.getElementById("debugging").innerHTML = "xmlhttp.status: "+xmlhttp.status+"<br />"+document.getElementById("debugging").innerHTML; 649 } 650 } 651 if (document.getElementById("working")) { 652 document.getElementById("working").src = "http://"+host+"/images/pix.gif"; 653 document.getElementById("working").width = 16; 654 document.getElementById("working").height = 16; 655 } 656 } 657 658 xmlhttp.send(null); 659 } 660 661 showAddress(results, status); 662 } 663 664// returns true if specified latlng has already been reverse geocoded and stored in db 665// also sets the location display info if true, else returns false 666 function set_address_db(latlng){ 667 if (debugging){
668 document.getElementById("debugging").innerHTML = "In set_address_db(latlng)."+"<br />"+document.getElementById("debugging").innerHTML; 669 } 670 var xmlhttp = create_xmlhttp(); 671 var d = new Date(); 672 var result = false; 673 if (document.getElementById("working")) { 674 document.getElementById("working").src = "http://"+host+"/images/waiting-16.gif"; 675 } 676 serverPage = "http://"+host+"/processors/get-reverse-geocode.php?lat_in="+latlng.lat()+"&lon_in="+latlng.lng()+"&time="+d.getTime(); 677 if (debugging){ 678 document.getElementById("debugging").innerHTML = "serverPage: "+serverPage+"<br />"+document.getElementById("debugging").innerHTML; 679 } 680 xmlhttp.open("GET", serverPage, true); // asynch param set to false for synch requests, true for asynch 681 682 xmlhttp.onreadystatechange = function() { 683 if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 684 if (xmlhttp.responseText.length > 0){ 685 if (debugging){ 686 document.getElementById("debugging").innerHTML = xmlhttp.responseText+"<br />"+document.getElementById("debugging").innerHTML; 687 } 688 eval(xmlhttp.responseText); 689 } else { 690 result = false;
691 } 692 } else if (xmlhttp.readyState == 4 && xmlhttp.status != 200){ 693 if (debugging){ 694 document.getElementById("debugging").innerHTML = "xmlhttp.status: "+xmlhttp.status+"<br />"+document.getElementById("debugging").innerHTML; 695 } 696 result = false; 697 } 698 if (document.getElementById("working")) { 699 document.getElementById("working").src = "http://"+host+"/images/pix.gif"; 700 document.getElementById("working").width = 16; 701 document.getElementById("working").height = 16; 702 } 703 // if we don't have it stored, geocode it. 704 if (!result){ 705 geocoder.geocode({'latLng': latlng}, showAndStoreAddress); 706 } 707 update_current_link(); 708 } 709 710 xmlhttp.send(null); 711 return result; 712 } 713 714 function set_point(latLng) { 715 map.setCenter(latLng); 716 717 // move the marker 718 marker.setPosition(latLng); 719 720 if (debugging) { 721 document.getElementById("debugging").innerHTML = "lat: "+latLng.lat()+"<br />lon:"+latLng.lng()+"<br />"+document.getElementById("debugging").innerHTML; 722 } 723 } 724 725 function get_address(latLng) { 726 // center map on click point 727 map.setCenter(latLng); 728 729 // save point to cookie 730 SetCookie("map1_lat", latLng.lat(), exp); 731 SetCookie("map1_lon", latLng.lng(), exp); 732 733 // update map coordinates report 734 if (document.getElementById("lat_dec")) { 735 document.getElementById("lat_dec").innerHTML = "<span class=\"label\">Latitude:</span><span class=\"value\">"+(Math.round(latLng.lat()*1000000)/1000000)+"°</span>"; 736 document.getElementById("lon_dec").innerHTML = "<span class=\"label\">Longitude:</span><span class=\"value\">"+(Math.round(latLng.lng()*1000000)/1000000)+"°</span>"; 737 document.getElementById("lat_HMS").innerHTML = "<span class=\"label\">Latitude:</span><span class=\"value redbrown\">"+dec_to_HMS_lat(latLng.lat())+"</span>"; 738 document.getElementById("lon_HMS").innerHTML = "<span class=\"label\">Longitude:</span><span class=\"value redbrown\">"+dec_to_HMS_lon(latLng.lng())+"</span>"; 739 document.getElementById("lat_DMD").innerHTML = "<span class=\"label\">Latitude:</span><span class=\"value olive\">"+dec_to_DMD_lat(latLng.lat())+"</span>"; 740 document.getElementById("lon_DMD").innerHTML = "<span class=\"label\">Longitude:</span><span class=\"value olive\">"+dec_to_DMD_lon(latLng.lng())+"</span>"; 741 } 742 743 // move the marker 744 marker.setPosition(latLng); 745 746 // check if we've already reverse geocoded this, if yes return stored result, if not store new result 747 set_address_db(latLng); // will call getLocations and update_current_link if necessary 748 } 749 750 751// sets latitude and longitude fields on find-address-from-latitude-and-longitude.php then calls get_address 752 function get_address_rev(latLng){ 753 if ((document.load_location) && (document.load_location.lat)) { 754 document.load_location.lat.value = latLng.lat(); 755 document.load_location.lon.value = latLng.lng(); 756 } 757 get_address(latLng); 758 } 759 760 761 function reset_map(){ 762 document.getElementById("reset_map_button").src = "http://"+host+"/images/waiting-16.gif"; 763 DeleteCookie("map1_lat"); 764 DeleteCookie("map1_lon"); 765 DeleteCookie("map1_zoom"); 766 DeleteCookie("map1_map_type"); 767 768 location.href = self_pg; 769 } 770 771 function change_map_height(delta) { 772 var el = document.getElementById("map_canvas"); 773 var ht_o = parseInt(el.style.height.substr(0, el.style.height.length-2)); 774 var ht_n = ht_o + delta; 775 ht_n = (ht_n >= 200) ? ht_n : ht_o; 776 el.style.height = ht_n+"px"; 777 update_dim_display(); 778 779 var expdate = new Date(); 780 FixCookieDate(expdate); 781 expdate.setTime(expdate.getTime() + (365*24*60*60*1000)); // expire in one year 782 783 SetCookie("y", ht_n, expdate); 784 } 785 786 function update_dim_display() { 787 var el = document.getElementById("map_dims"); 788 var m_el = document.getElementById("map_canvas"); 789 if ( (el) && (m_el) ) 790 el.innerHTML = (m_el.offsetWidth-2) + " x " + (m_el.offsetHeight-2) + " pixels"; 791 } 792 793 window.onresize = function() { 794 update_dim_display(); 795 // window.onresize = update_dim_display(); 796 } 797 798 function save_map_type() { 799 var map_type_name = map.getMapTypeId(); 800 801 switch (map_type_name){ 802 case 'map': 803 map_type = 'ROADMAP'; 804 break; 805 case 'satellite': 806 map_type = 'SATELLITE'; 807 break; 808 case 'hybrid': 809 map_type = 'HYBRID'; 810 break; 811 case 'terrain': 812 map_type = 'TERRAIN'; 813 break; 814 default: 815 map_type = 'ROADMAP'; 816 break; 817 } 818 SetCookie("map1_map_type", map_type, exp); 819 }
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.