Геокодирование Javascript от адресов до широты и долготы не работает
Я использую следующую функцию геокодирования для преобразования текстового адреса в широту и долготу, но он не работает правильно. Предупреждение пишет "undefined".
Может ли кто-нибудь сказать, что неправильно?
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
var geocoder = new google.maps.Geocoder();
var address = "new york";
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var latitude = results[0].geometry.location.latitude;
var longitude = results[0].geometry.location.longitude;
alert(latitude);
}
});
</script>
Ответы
Ответ 1
Попробуйте использовать это вместо:
var latitude = results[0].geometry.location.lat();
var longitude = results[0].geometry.location.lng();
Немного сложно перемещаться по Google api, но вот соответствующая документация.
Одна вещь, с которой я столкнулся, заключалась в том, как идти в другом направлении. От координат до адреса. Вот код, который я использовал upp, используя. Пожалуйста, не используйте jquery.
$.each(results[0].address_components, function(){
$("#CreateDialog").find('input[name="'+ this.types+'"]').attr('value', this.long_name);
});
То, что я делаю, - это перебрать все возвращенные address_components
и проверить, соответствуют ли их типы любым именам входных элементов, которые у меня есть в форме. И если они это сделают, я устанавливаю значение элемента в значение address_components
.
Если вас интересуют только весь сформированный адрес, вы можете следовать примеру Google
Ответ 2
Вы неправильно используете широту и долготу.
Try
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
var geocoder = new google.maps.Geocoder();
var address = "new york";
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var latitude = results[0].geometry.location.lat();
var longitude = results[0].geometry.location.lng();
alert(latitude);
}
});
</script>
Ответ 3
Тег script для api недавно изменился.
Используйте что-то подобное, чтобы запросить API геокодирования и вернуть объект JSON
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/geocode/json?address=THE_ADDRESS_YOU_WANT_TO_GEOCODE&key=YOUR_API_KEY"></script>
Адрес может быть что-то вроде
1600 + Amphitheater + Parkway, + Mountain + View, + CA (URI Encoded, вы должны использовать его в Google. Очень полезно)
или просто
1600 Amphitheatre Parkway, Mountain View, CA
Введя этот адрес https://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&key=YOUR_API_KEY
внутри браузера вместе с моим API-ключом, я возвращаю объект JSON, который содержит широту и долготу для города Moutain view, CA.
{"results" : [
{
"address_components" : [
{
"long_name" : "1600",
"short_name" : "1600",
"types" : [ "street_number" ]
},
{
"long_name" : "Amphitheatre Parkway",
"short_name" : "Amphitheatre Pkwy",
"types" : [ "route" ]
},
{
"long_name" : "Mountain View",
"short_name" : "Mountain View",
"types" : [ "locality", "political" ]
},
{
"long_name" : "Santa Clara County",
"short_name" : "Santa Clara County",
"types" : [ "administrative_area_level_2", "political" ]
},
{
"long_name" : "California",
"short_name" : "CA",
"types" : [ "administrative_area_level_1", "political" ]
},
{
"long_name" : "United States",
"short_name" : "US",
"types" : [ "country", "political" ]
},
{
"long_name" : "94043",
"short_name" : "94043",
"types" : [ "postal_code" ]
}
],
"formatted_address" : "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA",
"geometry" : {
"location" : {
"lat" : 37.4222556,
"lng" : -122.0838589
},
"location_type" : "ROOFTOP",
"viewport" : {
"northeast" : {
"lat" : 37.4236045802915,
"lng" : -122.0825099197085
},
"southwest" : {
"lat" : 37.4209066197085,
"lng" : -122.0852078802915
}
}
},
"place_id" : "ChIJ2eUgeAK6j4ARbn5u_wAGqWA",
"types" : [ "street_address" ]
}],"status" : "OK"}
Веб-структуры, такие как AngularJS, позволяют нам легко выполнять эти запросы.