Leaflet:layer.getLatLng不使用.eachLayer函数

时间:2015-06-28 15:52:51

标签: javascript maps leaflet radius

我试图做一些非常类似于Chris Essig所做的事情here。因为我需要知道在距离用户放置“垃圾标记”的20米范围内有多少数据点。

到目前为止,我已经获得了此代码:

// Create the FeatureGroup and add it to the map
var jsonGroup = new L.FeatureGroup();
mapOverview.addLayer(jsonGroup)

//Retrieve all data and add to map
$.each(datalistObject['idlist'], function(key, value) { 
    $.getJSON('http://mydata.com' + value['id'], function(data) {
        textbox = value['name'];

        var dataid = L.geoJson([data], {
            style: function (feature) {
                return feature.properties && feature.properties.style;
            },
            onEachFeature: onEachFeature,
            pointToLayer: function (feature, latlng) {
                return L.marker(latlng, {
                    icon: value['icon']
                });
            }
        }).addTo(jsonGroup);

    },function(xhr) { console.error(xhr); });
});

//Code to find the markers within a 20 meter radius of trashMarker
function markersInRadius() {

        // Lat, long of trash marker on overview map
        var trashMarkerLat_long = trashMarkerOverview.getLatLng();

        // counter of the amount of markers that are within a 20 meter radius
        var counter_markers_in_radius = 0;

        console.log(jsonGroup);

        // Loop through each point in JSON file
        jsonGroup.eachLayer(function (layer) {

            // Lat, long of current point
            layerLatLong = layer.getLatLng();

            // Distance from our circle marker
            // To current point in meters
            distance_from_layer_circle = layerLatLong.distanceTo(trashMarker_lat_long);

            // See if meters is within raduis
            // The user has selected
            if (distance_from_layer_circle <= 20) {
                counter_markers_in_radius += 1;
            };

            console.log(counter_markers_in_radius);
        });
// Close pointsInCircle
};

当我运行此代码时,我收到错误,说layer.getLatLng不是函数。

在jsonGroup FeatureGroup上执行console.log之后,我发现该组中有两个对象,其中的图层选项卡没有任何latlng信息,而是一个自己的图层选项卡,包含所有数据点 latlng info ...也许这就是问题所在?

1 个答案:

答案 0 :(得分:0)

通过在jsonGroup变量上运行eachLayer函数两次来管理修复它,如下所示:

function markersInRadius() {

    // Lat, long of trash marker on overview map
    var trashMarkerLatLng = trashMarkerOverview.getLatLng();

    // counter of the amount of markers that are within a 20 meter radius
    var pointsInRadius  = 0;

    console.log(jsonGroup);

    // Loop through each point in JSON file
    jsonGroup.eachLayer(function (layer) {

        layer.eachLayer(function (layer) {

                // Lat, long of current point
                layerLatLong = layer.getLatLng();

                // Distance from trashMarker
                // To current point in meters
                distanceFromTrashMarker = layerLatLong.distanceTo(trashMarkerLatLng);

                // See if meters is within radius
                if (distanceFromTrashMarker <= 20) {
                    pointsInRadius += 1;
                };
            });
        });
    console.log(pointsInRadius);

    // Close pointsInCircle
    };