在我的地理编码器地理编码回调中,如何确定结果对应的请求?

时间:2017-12-01 19:20:49

标签: javascript google-maps google-maps-api-3 google-geocoder

我循环浏览了大约60个地址,以便对它们进行地理编码,以便在Google地图上使用。我的回调(下面)似乎适用于收集位置,但我需要知道如何将它们与我循环的地址对象联系起来。我无法在地理编码响应中找到任何可以告诉我它来自哪个请求的内容。'

有办法吗?

这是我的功能:

  geocode() {
    var lv_location;
    var geocoder = new google.maps.Geocoder();

    if (geocoder) {
        geocoder.geocode({'address' : this.address}, 
          function(results, status) {
                if (status == google.maps.GeocoderStatus.OK) {
                    // what data in results can be used to relate the location to the address?
                    lv_location = results[0].geometry.location;
                } 
                markerCounter++;
                if (markerCounter >= 60) finishSurnames();
        });
    }

1 个答案:

答案 0 :(得分:1)

在JavaScript中,您可以使用Immediately-invoked function expression来创建一个也称为闭包的函数作用域。您应该将功能更改为类似于

的功能
geocode() {
    var lv_location;
    var geocoder = new google.maps.Geocoder();

    if (geocoder) {
        geocoder.geocode({'address' : this.address}, (function(originalAddress){
            return function(results, status) {
                if (status == google.maps.GeocoderStatus.OK) {
                    // what data in results can be used to relate the location to the address?
                    //You can use the originalAddress variable here to relate result to request
                    lv_location = results[0].geometry.location;

                } 
                markerCounter++;
                if (markerCounter >= 60) finishSurnames();
            };
        })(this.address));
    }
}

看看我的例子,它对3个地址进行地理编码并在控制台结果和相应的请求字符串中打印

var addresses = [
    'av Diagonal 197, Barcelona',
    'av Lucas Vega 53, San Cristobal de La Laguna',
    'Metrologichna 14, Kiev'
];

function initMap() {
  var map = new google.maps.Map(document.getElementById('map'), {
    zoom: 8,
    center: {lat: -34.397, lng: 150.644}
  });
  var geocoder = new google.maps.Geocoder();

  addresses.forEach( function(address) {
     geocode(geocoder, address);
  });
}

function geocode(geocoder, address) {
  geocoder.geocode({'address': address}, (function(originalAddress) {
    return function(results, status) {
      if (status === 'OK') {
        console.log("Search: " + originalAddress + "->" + results[0].geometry.location.toString());
      } else {
        console.log("Search: " + originalAddress + "->" + status);
      }
    };
  })(address));
}
#map {
  height: 100%;
}
html, body {
  height: 100%;
  margin: 0;
  padding: 0;
}
<div id="map"></div>
<script async defer
    src="https://maps.googleapis.com/maps/api/js?v=3&key=AIzaSyDztlrk_3CnzGHo7CFvLFqE_2bUKEq1JEU&callback=initMap">
    </script>

我希望这有帮助!