Google maps 谷歌地图API地理代码同步

Google maps 谷歌地图API地理代码同步,google-maps,geolocation,geocoding,Google Maps,Geolocation,Geocoding,我想知道是否有可能使用googlemaps api同步地对某些东西进行地理编码,这样它就不会等待回调函数被调用,而是等待返回值。有没有人找到这样的方法 注意:我使用的是api的第3版,地理编码器使用该值调用您的回调函数。这是唯一的办法。如果它是同步的,那么脚本将在等待地理代码处理时冻结。真的没有任何理由那样做 您到底想要实现什么?是的,您想要实现的是可能的,尽管不需要同步请求 看看这个代码 function StoreGeo() { var address = $('inpu

我想知道是否有可能使用googlemaps api同步地对某些东西进行地理编码,这样它就不会等待回调函数被调用,而是等待返回值。有没有人找到这样的方法


注意:我使用的是api的第3版,地理编码器使用该值调用您的回调函数。这是唯一的办法。如果它是同步的,那么脚本将在等待地理代码处理时冻结。真的没有任何理由那样做


您到底想要实现什么?

是的,您想要实现的是可能的,尽管不需要同步请求

看看这个代码

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();
    });

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


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

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

    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;
    });

我有一张包括地址的表格。作为验证表单数据的一部分,我考虑使用Google geocoder检查地址。我还需要纬度、经度值来输入数据库。我知道我可以使用回调函数来实现这一点,但这看起来像是一种黑客行为,而且会更加复杂。地理编码器完全是为了与回调函数一起使用。别担心,这不是黑客攻击这是你唯一的选择。但是,请务必记住,如果您使用地理编码器而不在谷歌地图上显示结果,您将违反谷歌地图的服务条款。据我所知,您不能在内部系统或特定受众中使用谷歌api。您使用地图的页面应向整个互联网开放-阅读合同条款。很好@B Chris@Chris Bstop说真的没有任何理由做X。总是有理由的。在这种情况下,用户可能会在地理编码器答复之前用“提交”按钮浏览。@GoTo没有任何理由完全冻结浏览器。如果您确实需要阻止他们在等待回调时执行某些操作,您可以手动执行。用户应该仍然能够滚动或访问其他功能。回答得很好!我想补充一点,你可以在用户提供所需的信息后或在之后的一段时间内完成geo请求。因此,当他完成表单的其余部分时,地理编码器有时间发送回复。如果用户不断改变主意,你会提出更多类似这样的地理位置请求。至于谷歌术语,我认为如果你只是将答案存储在数据库中,你不会破坏它们。除了一个简单的例子之外,几乎任何一种webapp都需要将答案存储在数据库中。如果您在没有谷歌地图的情况下使用答案,或者在封闭/内部系统中使用答案,则会破坏它们。