11

我想知道是否可以使用 googlemaps api 同步地对某些内容进行地理编码,因此它不会等待调用回调函数,而是等待返回值。有没有人找到一种方法来做这样的事情。

PS:我使用的是第 3 版的 api

4

3 回答 3

7

是的,您尝试实现的目标是可能的,尽管不需要同步请求。

看看这段代码

function StoreGeo()
 {
        var address =  $('input[name=zipcode]').val() + ', ' + $('input[name=city]').val();
 geocoder.geocode( { 'address': address}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        var ll = results[0].geometry.location.toString();

            llarr = ll.replace(/[\(\) ]/g, '').split(',');

                for(i = 0; i < llarr.length;i++)
                {
                    $('#form').append($('<input type="hidden" name="'+(i == 0 ? 'lat' : 'long')+'">').val(llarr[i]));
                }

                $('#form').submit();
      } 
      else
      {
        alert(status);
      }
    });

    $('#form').unbind('submit');
    return false;
 }

$(document).ready(function () { 

    //init maps
    geocoder = new google.maps.Geocoder();

    $('#form').bind('submit',function() {
        StoreGeo();
    });

}); 

因此,将提交处理程序附加到表单,提交时根据表单中的地址信息执行地理请求。但同时通过在处理程序中返回 false 来推迟提交。响应处理程序将创建 2 个隐藏的文本字段“lat”和“long”并存储响应。最后表单由客户端脚本提交,包括两个新字段。在服务器端,您可以将它们存储在数据库中。

!!请注意,这是可能的,但可能违反谷歌条款,如上所述。

于 2010-09-12T17:11:33.973 回答
2

地理编码器使用该值调用您的回调函数。这是唯一的方法。如果它是同步的,您的脚本将在等待地理编码处理时冻​​结。真的没有任何理由这样做。

你到底想完成什么?

于 2009-08-21T05:44:54.590 回答
1

我只是在表单提交期间使用一个标志来知道何时提交应该通过或何时应该等待地理编码。地理编码完成后,它将再次重新提交表单。

    var hasGeocoded = false;

    searchFrom.on('submit', function(){
        //If not geocoded yet
        if (!hasGeocoded) {
            var geocoder = new google.maps.Geocoder();
            var location = locationEl.val();
            geocoder.geocode({'address': location}, function (results, status) {
                hasGeocoded = true;

                if (status == google.maps.GeocoderStatus.OK) {
                    $('#coords').val(
                        results[0].geometry.location.lat() + ',' + results[0].geometry.location.lng()
                    );
                }

                searchFrom.submit();
            });

            return false; //wait for geocoder to finish and re-submit the form
        }

        return true;
    });
于 2016-06-01T07:14:48.603 回答