Вернуть листовки GeoJSON, которые пересекают точку с библиотекой Turf JS - PullRequest
0 голосов
/ 19 марта 2019

Листовка и Газон.Я пытаюсь найти все слои на карте Leaflet, которые пересекают точку, когда пользователь нажимает на карту.Я использую библиотеку turf, чтобы проверить это.В консоли, когда я нажимаю на карту, она возвращает эту ошибку:

var c = new L.GeoJSON.AJAX("http://127.0.0.1:8000/childcare_buff_data/",{
        style: color(c, "orange", 0.8)})
        ;
    c.addTo(map);

    map.on('click',function(e){
        lat = e.latlng.lat;
        lon = e.latlng.lng;
        ProcessClick(lat,lon)
    });

    var theMarker;
    var a;

    function ProcessClick(lat,lon){
        theMarker = L.marker([lat,lon]).addTo(map);
        c.eachLayer(function(layer) {
            intersects=turf.intersect(theMarker.toGeoJSON(),layer.toGeoJSON());
            if (intersects){
                a=layer.feature.properties.buff
                console.log(a);
                }
            })};

Я получаю эту ошибку

turf.min.js:1 Uncaught TypeError: Cannot read property 'length' of null
    at turf.min.js:1
    at turf.min.js:1
    at S (turf.min.js:1)
    at Pn (turf.min.js:1)
    at Object.Lo [as intersect] (turf.min.js:1)
    at js2.js:31
    at eachLayer (leaflet.js:5)
    at ProcessClick (js2.js:30)
    at e.<anonymous> (js2.js:22)
    at e.fire (leaflet.js:5)

enter image description here

вот геойсон http://www.mediafire.com/file/9fnbz32ib9n1aaj/childcare.geojson/file

ОБНОВЛЕНИЕ

с использованием

turf.booleanWithin(theMarker.toGeoJSON(),geom.toGeoJSON());

я получаю

turf.min.js:1 Uncaught Error: coordinates must only contain numbers
    at Y (turf.min.js:1)
    at Y (turf.min.js:1)
    at U (turf.min.js:1)
    at Pt (turf.min.js:1)
    at Object.Cn [as booleanWithin] (turf.min.js:1)
    at js2.js:33
    at eachLayer (leaflet.js:5)
    at ProcessClick (js2.js:31)
    at e.<anonymous> (js2.js:22)
    at e.fire (leaflet.js:5)

1 Ответ

0 голосов
/ 19 марта 2019

intersect ожидает два полигона в качестве параметров, но вы задаете ему точку, следовательно, отсутствует свойство length:

Берет два полигона и находит их пересечение

Попробуйте turf.booleanWithin(theMarker.toGeoJSON(), layer.toGeoJSON()) вместо:

Boolean-Within возвращает true, если первая геометрия полностью внутри вторая геометрия.

...