2015-06-28 2 views
1

Я пытаюсь сделать что-то очень похожее на то, что сделал Крис Эссиг here. Потому что мне нужно знать, сколько точек данных находится в радиусе 20 метров от того места, где пользователь подал «trashMarker».Листовка: layer.getLatLng не работает с функцией .eachLayer

До сих пор я получил этот код:

// 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 не является функцией.

После выполнения console.log в группе FeatureGroup jsonGroup я обнаружил, что группа имеет два объекта на вкладке слоев без какой-либо latlng-информации, но вместо этого представляет собой вкладку слоев, содержащую все точки данных с latlng info ... Может быть, это проблема?

+0

Вы, возможно, придется разобрать слой до получения широты и долготы от него? –

+0

Думаю, что да. Попытка выяснить, как это происходит сейчас, спасибо. – Yonker

+0

Вы можете увидеть FeatureGroup, зарегистрированную в консоли, здесь: http://casperjonker.nl/kijk_radius/ – Yonker

ответ

0

Управляемый, чтобы исправить это, выполнив функцию eachLayer дважды по переменной jsonGroup как так:

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 
    }; 
Смежные вопросы