【问题标题】:Geocoding output 3 times the same lat/lng地理编码输出 3 倍相同的 lat/lng
【发布时间】:2016-07-18 11:23:57
【问题描述】:

我使用基于服务器的地理编码对一些硬编码地址进行了地理编码:

for (var x = 0; x < addresses.length; x++) {

    $.getJSON('http://maps.googleapis.com/maps/api/geocode/json?address='+addresses[x]+'&sensor=false', null, function (data) {

        var lat = data.results[0].geometry.location.lat;
        var lng = data.results[0].geometry.location.lng;

        latlng = {lat: lat, lng: lng};
        markerLocations.push(latlng);

        //}
        for (var b=0; b < markerLocations.length; b++)
        {
            markers.push(new google.maps.Marker({
                position: new google.maps.LatLng(markerLocations[b].lat, markerLocations[b].lng),
                map: map,
            }))
        };
    });
}

硬编码地址:

var addresses = [
    ['Hamburg'],
    ['The Grand Bhagwati,ahmedabad'],
    ['Global Pagoda Road, Gorai Island, Borivali West, Mumbai, Maharashtra'],
    ['583 Orchard Rd, B1-25, Singapore'],
    ['Norway, Oslo']
];

我的问题是现在我得到了数组相乘,因为插入了 2 个 for 循环。我想在最后从 lat、lng 得到输出 1 次,而不是 3 或 4 次相同的 lat/lng 坐标。

【问题讨论】:

    标签: javascript google-maps geocoding


    【解决方案1】:

    问题在于,每个循环都会从markerLocations 数组中再次添加所有标记。您可以使用一个简单的函数来解决这个问题,如下所示-

    for (var x = 0; x < addresses.length; x++) {
    
        $.getJSON('http://maps.googleapis.com/maps/api/geocode/json?address='+addresses[x]+'&sensor=false', null, function (data) {
            var lat = data.results[0].geometry.location.lat;
            var lng = data.results[0].geometry.location.lng;
    
            latlng = {lat: lat, lng: lng};
            addMarker(latlng);
        });
    }
    
    function addMarker(latlng) {
        var marker = new google.maps.Marker({ position: new google.maps.LatLng(latlng.lat, latlng.lng), 
                            map: map }));
        markers.push(marker);
    }
    

    希望这会有所帮助!

    【讨论】:

    • 冗余数据的问题停止了,但现在我不能再使用我的距离计算器了。函数之间的计算距离不会将我的固定标记与您可以设置的标记进行比较。因为我得到了一个 TypeError,markers.getPosition 不再是一个函数。
    • 请分享您用来计算距离的代码。
    • for (var i=0; i
    • @Shadog 请更新您在上述问题中的代码,还请说明您在哪里定义了markers 数组和您在for 循环中使用的marker 对象。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多