Turfjs Point In Polygon всегда возвращает false - PullRequest
0 голосов
/ 25 января 2019

Я использую API карт Google, который определяет местоположение пользователя и, если он находится в городе Лос-Анджелес, сообщит ему, в каком районе отчетности LAPD они находятся. У меня есть геозонское наложение районов отчетности (RD) загрузка с здесь .

Я хочу получить геолокационные координаты и использовать BooleanPointInPolygon от Turfjs, чтобы определить, находится ли он в RD, и если да, вернуть этот RD.

Но что бы я ни делал, функция turfjs всегда возвращает false, даже если я явно в RD / Polygon.

Я скачал файл geojson и импортировал его локально как обычный файл json. Вот моя функция:

    getRd() {
            const repdist = require("../assets/LAPD_Reporting_Districts.json");
            let point = turf.point([34.05350702472784, -118.24291762202074]);
            var poly;
            repdist.features.forEach(rd => {
                poly = turf.polygon(rd.geometry.coordinates);
                var found = turf.booleanPointInPolygon(point, poly);
                console.log("found: ", found);
            });

Насколько я могу судить, массивы turf.point и turf.polygon сформированы правильно и ошибок при выполнении нет. Я прошел через функцию газона и все выглядело хорошо.

Учитывая координаты в образце кода (LA City Hall, который находится в RD 124), я ожидаю, что результат вернет true, но «found» возвращает 1135 ложных значений.

1 Ответ

0 голосов
/ 25 января 2019

Я бы предложил проверить две вещи:

  • Координата turf.point должна быть Lon, Lat вместо Lat, Lon. Это может быть проблемой, потому что -118 не является допустимой широтой. Lon, Lat - очень распространенное соглашение.

  • Также проверьте значение, переданное в booleanPointInPolygon (Документация) [https://www.npmjs.com/package/@turf/boolean-point-in-polygon] показывает, что координатные массивы обернуты в два массива, а не в один.

...