Геокодирование Javascript от адреса к широте и долготе не работает - PullRequest
55 голосов
/ 13 мая 2011

Я использую следующую функцию геокодирования для преобразования текстового адреса в числа широты и долготы, но она работает неправильно.В предупреждении написано "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>

Ответы [ 3 ]

85 голосов
/ 13 мая 2011

Попробуйте использовать это вместо:

var latitude = results[0].geometry.location.lat();
var longitude = results[0].geometry.location.lng();

Сложно ориентироваться в API Google, но здесь соответствующая документация.

Одна вещь, с которой я столкнулся с трудностями, заключалась в том, как идти в другом направлении. От координат до адреса. Вот код, который мне нужен upp. Пожалуйста, помните, что я также использую jquery.

$.each(results[0].address_components, function(){
    $("#CreateDialog").find('input[name="'+ this.types+'"]').attr('value', this.long_name);
});

То, что я делаю, это перебирает все возвращенные address_components и проверяет, совпадают ли их типы с любыми именами входных элементов, которые у меня есть в форме. И если они делают, я устанавливаю значение элемента в значение address_components.
Если вас интересует только форматированный адрес, вы можете последовать примеру Google

46 голосов
/ 13 мая 2011

Вы неправильно используете широту и долготу.

Попробуйте

<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 голосов
/ 10 сентября 2015

Тег скрипта для 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 + Амфитеатр + Парквей, + Гора + Вид,+ CA (URI в кодировке; вам следует поискать его в Google. Очень полезно)

или просто

1600 Ampitheater 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, который содержит Широта и долгота для города Маунтин-Вью, Калифорния.

{"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 , позволяют нам легко выполнять эти запросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...