10

我正在尝试使用以下代码通过地址获取纬度和经度:

 function initialize() {
    directionsDisplay = new google.maps.DirectionsRenderer();
    geocoder = new google.maps.Geocoder();
    var address = "HaYarkon 100 TelAviv Israel";
    geocoder.geocode( { 'address': address}, function(results, status) {
    if (status == google.maps.GeocoderStatus.OK)
       {
            TelAviv = new google.maps.LatLng(results[0].geometry.location.latitude,results[0].geometry.location.longitude);             
       }
    });

    var myOptions = {
        zoom:7,
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        center: TelAviv
    }
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
    directionsDisplay.setMap(map);
}

问题是 results[0].geomety.location.latitude 和 longitude 是未定义的。

我在控制台的结果中看到的是下一个:

 location: O

   $a: 51.5414691

   ab: -0.11492010000006303

为什么它显示 $a 和 ab 而不是纬度和经度

4

2 回答 2

21

使用以下函数而不是直接访问属性:

results[0].geometry.location.lat()

results[0].geometry.location.lng()

Google 代码是经过混淆处理的,并且在内部使用了短变量名,这些变量名可以从一天到另一天更改。

于 2012-05-07T12:26:52.733 回答
1

你必须使用

results[0].geometry.location.lat()
results[0].geometry.location.lng()

使用

results[0].geometry.location[0]
results[0].geometry.location[1]

返回未定义。

这让我很困惑,因为 API 有时会返回一个名为“ab”的字段,而有时它会返回“Za”。通过元素的语义值(使用 .lat 和 .lng)而不是确切的字符串名称来访问元素要安全得多,也更易读。

于 2012-07-25T16:06:01.727 回答