2010-08-16 20 views
5

Tengo dificultades para encontrar información relevante actualizada sobre cómo lograr este efecto en los mapas de Google. Tenía la esperanza de que alguien sabe más que yo sobre el tema y me podría apuntar en la dirección correcta ..Google maps - Código postal que traza

El problema:

  • necesito para trazar X cantidad de alfileres en un mapa a través de un código postal.
  • El segundo paso es ingresar mi propio código postal y producto una lista de los 5 códigos postales más cercanos graficados en el paso uno.

Respuesta

18

Este código le dirá el código postal más cercano al que ingrese en el cuadro. Estoy seguro de que puedes adaptarlo para obtener los 5 primeros resultados.

que era capaz de adaptar los Geocoding sample code:

<!DOCTYPE html> 
<html> 
<head> 
<meta name="viewport" content="initial-scale=1.0, user-scalable=no"/> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
<title>Google Maps JavaScript API v3 Example: Geocoding Simple</title> 
<link href="http://code.google.com/apis/maps/documentation/javascript/examples/standard.css" rel="stylesheet" type="text/css" /> 
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 
<script type="text/javascript"> 
    var geocoder; 
    var map; 
    var markers = []; 
    function initialize() { 
     geocoder = new google.maps.Geocoder(); 
     var latlng = new google.maps.LatLng(40.768505,-111.853244); 
     var myOptions = { 
      zoom: 8, 
      center: latlng, 
      mapTypeId: google.maps.MapTypeId.ROADMAP 
     } 
     map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 
     addPostCode('84101'); 
     addPostCode('84102'); 
     addPostCode('84103'); 
     addPostCode('84104'); 
     addPostCode('84105'); 
    } 

    function addPostCode(zip) { 
     geocoder.geocode({ 'address': zip}, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) 
     { 
      map.setCenter(results[0].geometry.location); 
      var marker = new google.maps.Marker({ 
      map: map, 
      position: results[0].geometry.location, 
      name: zip 
     }); 
     markers.push(marker); 
     } else { 
      alert("Geocode was not successful for the following reason: " + status); 
     } 
     }); 
    } 

    function checkZip(zip) 
    { 
     var distance = Number.MAX_VALUE; 
     var index = 0; 
     geocoder.geocode({ 'address': zip}, function(results, status) 
     { 
      if (status == google.maps.GeocoderStatus.OK) 
      { 
       for(ix=0; ix< markers.length; ix++) 
       { 
        var tmp = getDistance(results[0].geometry.location, markers[ix].position); 
        if (tmp < distance) 
        { 
         distance = tmp; 
         index = ix; 
        } 
       } 
       alert('nearest zipcode is :' + markers[index].name); 
      } 
     }); 
    } 

    function getDistance(latlng1, latlng2) 
    { 
     var R = 6371; // Radius of the earth in km 
     var dLat = (latlng2.lat()-latlng1.lat()) * Math.PI/180; // Javascript functions in radians 
     var dLon = (latlng2.lng()-latlng1.lng()) * Math.PI/180; 
     var a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
      Math.cos(latlng1.lat() * Math.PI/180) * Math.cos(latlng2.lat() * Math.PI/180) * 
      Math.sin(dLon/2) * Math.sin(dLon/2); 
     var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
     var d = R * c; // Distance in km 
     d = d * 0.621371192; // convert to miles 
     return d; 
    } 
</script> 
</head> 
<body onload="initialize()"> 
    <div> 
    <input id="address" type="textbox" value=""> 
    <input type="button" value="Geocode" onclick="checkZip(getElementById('address').value)"> 
    </div> 
<div id="map_canvas" style="height:90%"></div> 
</body> 
</html> 
+0

Gracias por esto, es muy útil .. Lo siento cuando digo código postal, quiero decir el código postal del Reino Unido .. :) Ill buscar el docs un poco mas usando tu base. – Lee

+0

nm funciona igual que con los códigos postales del Reino Unido ... gracias por la ayuda otra vez ... básicamente lo has hecho por mí ... – Lee

+0

Imagino que funcionará con cualquier código postal que reconozca Google. –

Cuestiones relacionadas