地理编码输出是相同lat/lng的3倍

Geocoding output 3 times the same lat/lng

本文关键字:lat lng 3倍 编码 输出      更新时间:2023-09-26

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

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次,而不是相同的lat/lng坐标3或4次。

问题是,在每个循环中,所有标记都会从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);
}

希望这能有所帮助!