2016-03-15 2 views
0

У меня есть простая карта с 17 точками (GeoJSON) в листе, и с помощью инструмента рисования я создаю многоугольник, чтобы использовать для выбора точек внутри этого многоугольника.Лист и Turf.js Точки в пределах поля

map.on('draw:created', function (e) { //from draw tool 
    var type = e.layerType, 
     layer = e.layer; 
     editableLayers.addLayer(layer); 
     GetSelection(editableLayers); 
}); 

function GetSelection(layer){ 
    var count = allPoints.getLayers().length; 
    console.log(count +" Sites"); //says 17 
    var drawList = editableLayers.getLayers().length; 
    console.log(drawList +" Polys"); //Says 1 

    if (editableLayers.getLayers().length >0){ 
     var fcpt = turf.featurecollection(allPoints); 
     console.log(fcpt); // says 17 
     var fcpoly = turf.featurecollection(editableLayers); 
     console.log(fcpoly); // fails as undefined 
      //var ptsWithin = turf.within(fcpt,editableLayers); 
     var ptsWithin = turf.within(fcpt,fcpoly); 
     console.log(ptsWithin); //never gets this far. 

    }; 
}; 

Любые идеи или предложения?

+0

Опечатка в 'fcpolyn', должен был' fcpoly'? – ghybs

+0

@ghybs, спасибо, я исправил опечатку и все еще имею ту же проблему, коллекцию функций без функций. –

ответ

1

turf.featurecollection ожидает массив GeoJSON Особенность, а не листовка группы слоев, как ваши allPoints и editableLayers переменных.

Аналогичным образом, turf.within ожидает 2 коллекции функций GeoJSON в качестве аргументов, а не групп слоев листового слоя.

Таким образом, вы, вероятно, можете попробовать прямо:

var ptsWithin = turf.within(allPoints.toGeoJSON(), editableLayers.toGeoJSON()); 
+0

У меня недостаточно очков, чтобы проголосовать за ваш ответ. Я был на правильном пути сегодня днем, но у меня были проблемы с поиском правильного кода, у вас было простое исправление. Благодарю. –

1

@ghybs был прав, это была разница между листовкой и дерном, а точки были в порядке, многоугольник не подошел. Передавая дерн, информация о многоугольнике GeoJson позволила ему работать.

Рабочая копия:

map.on('draw:created', function (e) { 
    featureGroup.clearLayers(); 
    layer = e.layer; 
    featureGroup.addLayer(layer); 
    GetSelection(featureGroup); 
}); 

function GetSelection(layer){ 

    var shape2 = allPoints.toGeoJSON() //All facilities 
    var ptsWithin = turf.within(shape2, layer.toGeoJSON()); 

     alert('Found ' + ptsWithin.features.length + ' features'); 
     alert("results "+JSON.stringify(ptsWithin)); 
}; 
+0

Приятно поделиться своими результатами и решением! :-) – ghybs