谷歌地图批量反向地理编码Javascript

谷歌地图批量反向地理编码Javascript,javascript,arrays,google-maps,Javascript,Arrays,Google Maps,所以我知道GoogleAPIv3阻止批处理请求,除非有2秒的延迟-所以我只是尝试使用一个请求来做一个简单的反向地理代码 您可以看到我的数组现在只有一个对象(目前) 问题是我在函数“showAddress()”下返回了一个“未定义”的值。奇怪的是,地址在谷歌地图标记上显示得很好,但它不允许我正确返回值 请忽略这样一个事实,我在不需要的时候使用了额外的函数-我将在以后的完整设置中使用这些函数 这是一个JSBin--> 我认为问题更在于此: .... infowindow.setContent(

所以我知道GoogleAPIv3阻止批处理请求,除非有2秒的延迟-所以我只是尝试使用一个请求来做一个简单的反向地理代码

您可以看到我的数组现在只有一个对象(目前)

问题是我在函数“showAddress()”下返回了一个“未定义”的值。奇怪的是,地址在谷歌地图标记上显示得很好,但它不允许我正确返回值

请忽略这样一个事实,我在不需要的时候使用了额外的函数-我将在以后的完整设置中使用这些函数

这是一个JSBin-->

我认为问题更在于此:

....

  infowindow.setContent(results[0].formatted_address);
  infowindow.open(map, marker);
  return results[0].formatted_address;

...
以下是完整的设置:

Javascript:

var geoArray = [
    {lat: 29.546604, lng: -98.407082}/*,
    {lat: 29.402672, lng: -98.392095},
    {lat: 29.769542, lng: -98.664527},
    {lat: 29.778432, lng: -98.464939},
    {lat: 29.78322, lng: -98.523551},
    {lat: 29.424455, lng: -98.403565},
    {lat: 29.342814, lng: -98.541336},
    {lat: 29.291922, lng: -98.434656},
    {lat: 29.354486, lng: -98.400621},
    {lat: 29.512927, lng: -98.439247},
    {lat: 29.386556, lng: -98.510591},
    {lat: 29.365009, lng: -98.427818},
    {lat: 29.363518, lng: -98.583277},
    {lat: 29.305123, lng: -98.429247},
    {lat: 29.673901, lng: -98.39694},
    {lat: 29.530874, lng: -98.446433}
    {lat: 29.374788, lng: -98.602789} */];

 var geocoder;
  var map;
  var infowindow = new google.maps.InfoWindow();
  var marker;
    function initialize() {
    geocoder = new google.maps.Geocoder();
    var latlng = new google.maps.LatLng(29.4814305,-98.5144044);
    var mapOptions = {
      zoom: 11,
      center: latlng,
      mapTypeId: 'roadmap'
    }
   // alert(mapOptions);
    map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions);
  }




  function codeLatLng(lat, lng) {
    var latlng = new google.maps.LatLng(lat, lng);
    geocoder.geocode({'latLng': latlng}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        if (results[1]) {
          map.setZoom(11);
          marker = new google.maps.Marker({
              position: latlng,
              map: map
          });
          infowindow.setContent(results[0].formatted_address);
          infowindow.open(map, marker);
          return results[0].formatted_address;
        } else {
          alert('No results found');
        }
      } else {
        alert('Geocoder failed due to: ' + status);
      }
    });
  }

  function showAddress() {
    for (var i = 0; i < geoArray.length; i++) {
        var x = 29.546604;
        var y = -98.407082;
        var myval = "address is: " + codeLatLng(x,y) + "<br/>";
        var thediv = document.getElementById('listme');
        thediv.innerHTML = thediv.innerHTML + myval;
    }

  }
var georary=[
{lat:29.546604,lng:-98.407082}/*,
{lat:29.402672,lng:-98.392095},
{lat:29.769542,lng:-98.664527},
{lat:29.778432,lng:-98.464939},
{lat:29.78322,lng:-98.523551},
{lat:29.424455,lng:-98.403565},
{lat:29.342814,lng:-98.541336},
{lat:29.291922,lng:-98.434656},
{lat:29.354486,lng:-98.400621},
{lat:29.512927,lng:-98.439247},
{lat:29.386556,lng:-98.510591},
{lat:29.365009,lng:-98.427818},
{lat:29.363518,lng:-98.583277},
{lat:29.305123,lng:-98.429247},
{lat:29.673901,lng:-98.39694},
{拉丁美洲:29.530874,液化天然气:-98.446433}
{拉丁美洲:29.374788,液化天然气:-98.602789}*/];
var地理编码器;
var映射;
var infowindow=new google.maps.infowindow();
var标记;
函数初始化(){
geocoder=新的google.maps.geocoder();
var latlng=新的google.maps.latlng(29.4814305,-98.5144044);
变量映射选项={
缩放:11,
中心:拉特林,
mapTypeId:“路线图”
}
//警报(地图选项);
map=new google.maps.map(document.getElementById('map_canvas'),mapOptions);
}
功能代码LATLNG(lat,lng){
var latlng=新的google.maps.latlng(lat,lng);
geocoder.geocode({'latLng':latLng},函数(结果,状态){
if(status==google.maps.GeocoderStatus.OK){
如果(结果[1]){
map.setZoom(11);
marker=新的google.maps.marker({
位置:latlng,
地图:地图
});
infowindow.setContent(结果[0]。格式化的\u地址);
信息窗口。打开(地图、标记);
返回结果[0]。格式化的\u地址;
}否则{
警报(“未找到结果”);
}
}否则{
警报('地理编码器因:'+状态而失败);
}
});
}
函数showAddress(){
对于(var i=0;i”;
var thediv=document.getElementById('listme');
thediv.innerHTML=thediv.innerHTML+myval;
}
}
HTML:


谷歌地图JavaScript API v3示例:反向地理编码

我给你修好了:

您的问题是codeLatLng(lat,lng)执行一些异步处理。所以你不能仅仅说从这个过程中返回。这就是为什么您的函数总是返回未定义的

正确的方法是向
codeLatLng(lat,lng)
添加回调,如下所示:

function codeLatLng(lat, lng, callback) {  ///<<-------CHANGE HERE
        var latlng = new google.maps.LatLng(lat, lng);
        geocoder.geocode({'latLng': latlng}, function(results, status) {
          if (status == google.maps.GeocoderStatus.OK) {
            if (results[1]) {
              map.setZoom(11);
              marker = new google.maps.Marker({
                  position: latlng,
                  map: map
              });
              infowindow.setContent(results[0].formatted_address);
              infowindow.open(map, marker);
              callback(results[0].formatted_address);   ///<<-------CHANGE HERE
              //return results[0].formatted_address;   ///<<------- CAN'T DO THIS..
            } else {
              alert('No results found');
            }
          } else {
            alert('Geocoder failed due to: ' + status);
          }
        });
      }
function showAddress() {
        for (var i = 0; i < geoArray.length; i++) {
            var x = 29.546604;
            var y = -98.407082;
            codeLatLng(x,y,function(address){   ///<<-------CHANGE HERE
              var myval = "address is: " + address + "<br/>";
              var thediv = document.getElementById('listme');
              thediv.innerHTML = thediv.innerHTML + myval;
            });
        }

      }

function codeLatLng(lat,lng,callback){///您发布的代码根本没有使用地理编码器。将url发布到Google API是不必要的-查看JSBin。@geocodezip我仍然对您的评论感到困惑。我显然是在使用地理编码器-否则演示会如何(参见JSBin)拉一个地址?你是说别的吗?对不起,它藏起来了,没有看到。哦和@bagofmilk+1来对付你得到的不公正的-1..哇。谢谢!你知道我在哪里可以找到更多关于“回调”的信息吗命令?回调不是命令。它只是代码和JavaScript的工作方式。您可以将函数作为参数传递给另一个函数,并在需要时执行。如果需要,您可以将该“回调”重命名为“大象”。并将调用更改为大象(结果[0]。格式化的\u地址)它仍然可以工作。这里有一个很好的链接,可以阅读更多关于它的信息:
function showAddress() {
        for (var i = 0; i < geoArray.length; i++) {
            var x = 29.546604;
            var y = -98.407082;
            codeLatLng(x,y,function(address){   ///<<-------CHANGE HERE
              var myval = "address is: " + address + "<br/>";
              var thediv = document.getElementById('listme');
              thediv.innerHTML = thediv.innerHTML + myval;
            });
        }

      }