Google Maps Geocoder - 获取值回调

时间:2015-12-10 12:20:28

标签: asynchronous callback geocoding currying

我在谷歌地图上遇到了Geocoder的麻烦。

主要的想法是,我有一个包含屋苑(公寓,房屋,......)的清单,我想在一些屋村附近寻找兴趣点(POIs;大学,咖啡馆等)给定范围。没问题,工作正常。

但我现在要做的是,“删除”,或者更好地说,使标记不可见,在附近的给定范围内没有兴趣点。 在下面的代码中,您将看到,我在for循环中拥有地理编码,并且对于它获得的每个属性,它都设置了POI。现在我想放弃它此时使用的庄园,检查附近是否有结果,如果没有,它应该将地图上的庄园标记设置为空。问题是,我不能放弃庄园的id,所以我可以用这个特定的ID将标记设置为null。

现在它部分工作,但它总是随机删除标记。 (目前用一些计数器来删除索引...但我想用id删除它。)

所以,主要的问题是,如何将for循环中的当前ID移交给回调并删除具有相同ID的标记?

为了理解代码,我应该说“immo”或“immobilien”是庄园的德语单词。

以下是代码:

function geocodePoi(geocoder, resultsMap) {
    var poiCat = document.getElementById("poi").value;
    poiList.push(poiCat);
    var address = document.getElementById('address').value;
    var poi = document.getElementById('poi').value;
    var radius = document.getElementById('range').value;

    var poiArray = [];
    poiArray.push(poi);

    var latlng;

    geocoder.geocode({'address': address}, function (results, status) {
        if (status === google.maps.GeocoderStatus.OK) {
            resultsMap.setCenter(results[0].geometry.location);
            latlng = results[0].geometry.location;
            latlngDic = {lat: latlng.lat(), lng: latlng.lng()};
            infowindow = new google.maps.InfoWindow();
            for (i = 0; i < immobilien.length; i++) {
                currentImmo = immobilien[i].id;
                currentImmoList.push(currentImmo);
                var service = new google.maps.places.PlacesService(map);
                    service.nearbySearch({
                        location: new google.maps.LatLng(immobilien[i].longitude,
                                                         immobilien[i].latitude),
                        radius: radius,
                        types: poiArray
                    }, callback);
            }
        }
        else {
            alert('Geocode was not successful for the following reason: ' + status);
        }
        });
    }
    function callback(results, status) {

    if (status === "ZERO_RESULTS") {
        setMapOnAllImmo(null, count);
        count = count + 1;
    }

    if (status === google.maps.places.PlacesServiceStatus.OK) {
        for (var i = 0; i < results.length; i++) {
            createMarker(results[i]);
        }
        count += 1;
    }
}

0 个答案:

没有答案