Подтвердить что ты не робот

Получение lat/long местоположения с помощью google.maps.geocoder

Я пытался использовать некоторый ajax для сохранения места размещения в моем приложении и наткнулся на следующий код при переполнении стека

function getLatLong(address) 
{
    var geocoder = new google.maps.Geocoder();
    var result = "";
    geocoder.geocode( { 'address': address, 'region': 'uk' }, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            result[lat] = results[0].geometry.location.Pa;
            result[lng] = results[0].geometry.location.Qa;
        } else {
            result = "Unable to find address: " + status;
        }
    });
    return result;
}

моя проблема в том, что когда я вызываю функцию, она ничего не возвращает, и когда я отлаживаю и устанавливаю точки останова в хром, он ломается на результат возврата перед тем, как он разбивает результат [lat] = results [0].geometry.location.Pa;

Я знаю, что массив должен быть объявлен как массив типов, но даже когда я просто возвращал результаты [0].geometry.location object ничего не возвращался

что я могу сделать, чтобы вернуть lat/long из местоположения, чтобы я мог хранить в своем db?

4b9b3361

Ответ 1

Проблема, с которой вы сталкиваетесь, заключается в том, что вы обрабатываете функцию geocoder.geocode как немедленно завершающуюся, прежде чем вы получите результат возврата. Что действительно происходит, так это то, что geocoder.geocode запускается, а затем вы получаете немедленное возвращение результата. Поскольку асинхронный результат, скорее всего, не возвращен, ваш результат пуст. Подумайте о результате геокодирования в качестве толчка, а не тяги. Функция storeResult, не показана, представляет собой код, который вам нужно сделать для сохранения информации. Поскольку вы комбинируете результат с строкой ошибки, вы должны обращаться с этим в функции storeResult. В качестве альтернативы вы можете иметь статус в результате, который указывает на succcess или failure.

function getLatLong(address) {
var geocoder = new google.maps.Geocoder();
var result = "";
geocoder.geocode( { 'address': address, 'region': 'uk' }, function(results, status) {
     if (status == google.maps.GeocoderStatus.OK) {
         result[lat] = results[0].geometry.location.Pa;
         result[lng] = results[0].geometry.location.Qa;
     } else {
         result = "Unable to find address: " + status;
     }
     storeResult(result);
    });
}

Ответ 2

Это не ответ, но не используйте Pa и Qa, всегда используйте функции lng() и lat():

 place.geometry.location
{...}
    Pa: 56.240477
    Qa: -0.902655999999979
    toString: function(){return"("+this.lat()+", "+this.lng()+")"}
    equals: function(a){return!a?k:Cd(this.lat(),a.lat())&&Cd(this.lng(),a.lng())}
    lat: function(){return this[a]}
    lng: function(){return this[a]}
    toUrlValue: function(a){a=Hd(a)?a:6;return $d(this.lat(),a)+","+$d(this.lng(),a)}

Ответ 3

Я с трудом справился с этим и нашел следующее, чтобы работать.

  • Прокрутите объект и введите новый массив:

    var newArray = [];
    
    for (var key in latLng) {
    
       newArray.push(key);
    
    }
    
  • Вызовите свой объект с переменными значениями с помощью синтаксиса с квадратной скобкой, разметка точек:

    var lat = latLng[newArray[0]];
    
    var lng = latLng[newArray[1]];
    

Ответ 4

В моем случае простейшим решением для получения широты и долготы из объекта места был:

  var latitude=place.geometry.location['k'];
  var longitude=place.geometry.location['A'];