получение широты / длины местоположения с помощью google.maps.geocoder - PullRequest
17 голосов
/ 10 января 2012

Я пытался использовать 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;
}

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

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

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

Ответы [ 5 ]

20 голосов
/ 15 января 2012

Это не ответ, но не используйте 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)}
16 голосов
/ 10 января 2012

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

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 голосов
/ 20 февраля 2013

Я изо всех сил боролся с этим и нашел следующее работать.

  1. Перебрать объект и вставить новый массив:

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

    var lat = latLng[newArray[0]];
    
    var lng = latLng[newArray[1]];
    
1 голос
/ 26 октября 2018
function getLatLong(address) 
{
    var geocoder = new google.maps.Geocoder();
    var result = '';
    geocoder.geocode( { 'address': address }, function(results, status{
        if (status == google.maps.GeocoderStatus.OK) {
            // Call the lat/lng functions to return a computed value.
            result[lat] = results[0].geometry.location.lat();
            result[lng] = results[0].geometry.location.lng();
        } else {
            result = 'Unable to find address: ' + status;
        }
    });
    return result;
}

getLatLong('address'); 
0 голосов
/ 27 марта 2014

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

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