2010-08-16 28 views
33

Tengo un cuadro de texto en mi página que obtiene un nombre de ubicación y un botón con el texto getLat&Long. Ahora al hacer clic en mi botón, tengo que mostrar una alerta de latitude y longitude de la ubicación en el cuadro de texto. ¿Cualquier sugerencia?Obtener latitud y longitud según el nombre de la ubicación con Google Autocompletar API

+0

http://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+ CA & sensor = cierto más información aquí https://developers.google.com/maps/documentation/geocoding/ – zzart

Respuesta

37

Puede usar el Google Geocoder service en el Google Maps API para convertir desde el nombre de su ubicación a una latitud y longitud. Así que hay algo de código como:

var geocoder = new google.maps.Geocoder(); 
var address = document.getElementById("address").value; 
geocoder.geocode({ 'address': address}, function(results, status) { 
    if (status == google.maps.GeocoderStatus.OK) 
    { 
     // do something with the geocoded result 
     // 
     // results[0].geometry.location.latitude 
     // results[0].geometry.location.longitude 
    } 
}); 

actualización

¿Está incluyendo el API de JavaScript v3?

<script type="text/javascript" 
    src="http://maps.google.com/maps/api/js?sensor=set_to_true_or_false"> 
</script> 
+0

Error-'google.maps.Geocoder(); 'no es un constructor. – Chandra

+0

¿Cómo puedo usarlo para fuente y destino, me refiero a dos campos? – Wearybands

+0

¿cuál es la diferencia del sensor verdadero o falso? – Serge

8

La continuación es el código que he usado. Está funcionando perfectamente.

var geo = new google.maps.Geocoder; 
geo.geocode({'address':address},function(results, status){ 
    if (status == google.maps.GeocoderStatus.OK) {    
     var myLatLng = results[0].geometry.location; 

     // Add some code to work with myLatLng    

    } else { 
     alert("Geocode was not successful for the following reason: " + status); 
    } 
}); 

Espero que esto ayude.

2

Sugeriría el siguiente código, puede usar este <script language="JavaScript" src="http://j.maxmind.com/app/geoip.js"></script> para obtener la latitud y la longitud de una ubicación, aunque puede no ser tan precisa, sin embargo, funcionó para mí;

fragmento de código a continuación

<!DOCTYPE html> 
<html> 
<head> 
<title>Using Javascript's Geolocation API</title> 

<script type="text/javascript" src="http://j.maxmind.com/app/geoip.js"></script> 
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
</head> 
<body> 
<div id="mapContainer"></div> 

<script type="text/javascript"> 

     var lat = geoip_latitude(); 
     var long = geoip_longitude(); 
     document.write("Latitude: "+lat+"</br>Longitude: "+long); 

</script> 
</body> 
</html> 
31

espero que esto puede ayudar a alguien en el futuro.

Puede utilizar el Google Geocoding API, como se dijo antes, que tenía que hacer algún trabajo con esto recientemente, espero que esto ayuda a:

<!DOCTYPE html> 
<html> 
    <head> 
     <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&libraries=places"></script> 
     <script type="text/javascript"> 
     function initialize() { 
     var address = (document.getElementById('my-address')); 
     var autocomplete = new google.maps.places.Autocomplete(address); 
     autocomplete.setTypes(['geocode']); 
     google.maps.event.addListener(autocomplete, 'place_changed', function() { 
      var place = autocomplete.getPlace(); 
      if (!place.geometry) { 
       return; 
      } 

     var address = ''; 
     if (place.address_components) { 
      address = [ 
       (place.address_components[0] && place.address_components[0].short_name || ''), 
       (place.address_components[1] && place.address_components[1].short_name || ''), 
       (place.address_components[2] && place.address_components[2].short_name || '') 
       ].join(' '); 
     } 
     }); 
} 
function codeAddress() { 
    geocoder = new google.maps.Geocoder(); 
    var address = document.getElementById("my-address").value; 
    geocoder.geocode({ 'address': address}, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 

     alert("Latitude: "+results[0].geometry.location.lat()); 
     alert("Longitude: "+results[0].geometry.location.lng()); 
     } 

     else { 
     alert("Geocode was not successful for the following reason: " + status); 
     } 
    }); 
    } 
google.maps.event.addDomListener(window, 'load', initialize); 

     </script> 
    </head> 
    <body> 
     <input type="text" id="my-address"> 
     <button id="getCords" onClick="codeAddress();">getLat&Long</button> 
    </body> 
</html> 

Ahora bien, esto ha también una función autocomlpete que se puede ver en el código , obtiene la dirección de la entrada y se completa automáticamente por la API al escribir.

Una vez que tenga su dirección, presione el botón y obtendrá los resultados mediante alerta según sea necesario. Tenga en cuenta también que utiliza la API más reciente y carga la biblioteca de "lugares" (cuando llama a la API utiliza el parámetro "bibliotecas").

Espero que esto ayude, y lea la documentación para obtener más información, saludos.

Edición # 1: Fiddle

+1

sí, ¡gracias! el lat() lng() es perfecto porque parece cambiar de solicitud a solicitud aleatoriamente con propiedades reales como "k" y "A" u otras más raras como la de lat lng. Estás coool. –

+0

muy útil. Has hecho un trabajo increíble. Gracias – Randhir

+0

¿Requiere esto una clave de API? – Supertecnoboff

6

espero que esto será más útil para el futuro ámbito contiene completa función API de Google automático con latitud y longitud

var latitude = place.geometry.location.lat(); 
var longitude = place.geometry.location.lng(); 

Ver completo

<!DOCTYPE html> 
<html> 
    <head> 
    <title>Place Autocomplete With Latitude & Longitude </title> 
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no"> 
    <meta charset="utf-8"> 
    <style> 
#pac-input { 
    background-color: #fff; 
    padding: 0 11px 0 13px; 
    width: 400px; 
    font-family: Roboto; 
    font-size: 15px; 
    font-weight: 300; 
    text-overflow: ellipsis; 
} 
#pac-input:focus { 
    border-color: #4d90fe; 
    margin-left: -1px; 
    padding-left: 14px; /* Regular padding-left + 1. */ 
    width: 401px; 
} 
} 
</style> 
    <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&libraries=places"></script> 
    <script> 


    function initialize() { 
     var address = (document.getElementById('pac-input')); 
     var autocomplete = new google.maps.places.Autocomplete(address); 
     autocomplete.setTypes(['geocode']); 
     google.maps.event.addListener(autocomplete, 'place_changed', function() { 
      var place = autocomplete.getPlace(); 
      if (!place.geometry) { 
       return; 
      } 

     var address = ''; 
     if (place.address_components) { 
      address = [ 
       (place.address_components[0] && place.address_components[0].short_name || ''), 
       (place.address_components[1] && place.address_components[1].short_name || ''), 
       (place.address_components[2] && place.address_components[2].short_name || '') 
       ].join(' '); 
     } 
     /*********************************************************************/ 
     /* var address contain your autocomplete address *********************/ 
     /* place.geometry.location.lat() && place.geometry.location.lat() ****/ 
     /* will be used for current address latitude and longitude************/ 
     /*********************************************************************/ 
     document.getElementById('lat').innerHTML = place.geometry.location.lat(); 
     document.getElementById('long').innerHTML = place.geometry.location.lng(); 
     }); 
    } 

    google.maps.event.addDomListener(window, 'load', initialize); 

    </script> 
    </head> 
    <body> 
<input id="pac-input" class="controls" type="text" 
     placeholder="Enter a location"> 
<div id="lat"></div> 
<div id="long"></div> 
</body> 
</html> 
0

Ente r la ubicación por Autocompletar y el resto de todos los campos: los valores de latitud y longitud larga se llenan automáticamente.
Reemplazar API KEY con su API de Google clave

<html> 
<head> 
<meta name="viewport" content="initial-scale=1.0, user-scalable=no"> 
<meta charset="utf-8"> 
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&libraries=places"></script> 

<link type="text/css" rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500"> 
</head> 

<body> 
<textarea placeholder="Enter Area name to populate Latitude and Longitude" name="address" onFocus="initializeAutocomplete()" id="locality" ></textarea><br> 

<input type="text" name="city" id="city" placeholder="City" value="" ><br> 
<input type="text" name="latitude" id="latitude" placeholder="Latitude" value="" ><br> 
<input type="text" name="longitude" id="longitude" placeholder="Longitude" value="" ><br> 
<input type="text" name="place_id" id="location_id" placeholder="Location Ids" value="" ><br> 

<script type="text/javascript"> 
    function initializeAutocomplete(){ 
    var input = document.getElementById('locality'); 
    // var options = { 
    // types: ['(regions)'], 
    // componentRestrictions: {country: "IN"} 
    // }; 
    var options = {} 

    var autocomplete = new google.maps.places.Autocomplete(input, options); 

    google.maps.event.addListener(autocomplete, 'place_changed', function() { 
     var place = autocomplete.getPlace(); 
     var lat = place.geometry.location.lat(); 
     var lng = place.geometry.location.lng(); 
     var placeId = place.place_id; 
     // to set city name, using the locality param 
     var componentForm = { 
     locality: 'short_name', 
     }; 
     for (var i = 0; i < place.address_components.length; i++) { 
     var addressType = place.address_components[i].types[0]; 
     if (componentForm[addressType]) { 
      var val = place.address_components[i][componentForm[addressType]]; 
      document.getElementById("city").value = val; 
     } 
     } 
     document.getElementById("latitude").value = lat; 
     document.getElementById("longitude").value = lng; 
     document.getElementById("location_id").value = placeId; 
    }); 
    } 
</script> 
</body> 
</html> 

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
<script src="//maps.googleapis.com/maps/api/js?libraries=places&key=API KEY"></script> 


<script src="https://fonts.googleapis.com/css?family=Roboto:300,400,500></script> 
Cuestiones relacionadas