2015-11-19 9 views
7

Можно ли определить, находится ли точка GeoJSON в заданном логе, lon лежит в пределах заданного многоугольника GeoJSON, используя только JavaScript (либо через d3, topojson, либо любым другим способом)?Можно ли определить, находится ли точка GeoJSON внутри полигона GeoJSON с использованием JavasScript?

Например, я могу нарисовать карту, показывающую страны в Великобритании на основе учебника here.

У меня тогда есть некоторые точки, у которых есть координаты, но нет указаний относительно того, в какой стране они находятся.

Я бы хотел показать общее количество очков для каждой страны.

Могу ли я определить, в какой стране содержится каждая точка в браузере, или мне нужно предварительно обработать данные о точках на сервере с помощью PostGIS или аналогичного?

+1

См. [* "Node.js/Библиотека Javascript, чтобы проверить, находится ли точка в многопользовательском режиме geojson" *] (/ q/20379194). – altocumulus

+0

@altocumulus - Ваш комментарий привел меня к [JavaScript Clipper] (http://sourceforge.net/projects/jsclipper/) - выглядит интересно. Кроме того, мне никогда не приходило в голову, что «point-in-polygon» будет тегом. – user5325596

+0

Согласен, что тег [tag: point-in-polygon] полностью меня убедил ;-) И есть почти 120 вопросов, связанных с ним. Если вы сами придумаете решение своей проблемы, отправьте ответ на этот вопрос. – altocumulus

ответ

6

Похоже d3 покрывали Вас: https://github.com/d3/d3-geo#geoContains

d3.geoContains (объект, точка)

Возвращает истину, если и только если указанный объект GeoJSON содержит указанную точку, или ложь, если объект не содержит точки. Точка должна быть указана как двухэлементный массив [долгота, широта] в градусах. Для геометрий Point и MultiPoint используется точный тест; для сферы всегда возвращается true; для других геометрий применяется порог эпсилона.

+1

Это правильно. Было бы справедливо отметить, однако, что это новый метод D3 ** v4 ** и не был доступен на момент публикации вопроса. Однако, поскольку вопрос не нацелен на какую-либо конкретную версию, этот ответ полностью закончен. – altocumulus

+0

Я не могу получить эту работу. 'geoContains' возвращает' false' для точки, которая на самом деле является центром области. Я проверил geoJson этой области (он действителен) и проверен на картах Google, если данная точка принадлежит этой области (она принадлежит). – surfrider

+1

Таким образом, мой полигон работает против часовой стрелки, но 'd3' ожидает по часовой стрелке. Я протестировал библиотеку 'turf' (thx к комментарию Джонатаса Уокера для прицеливания), и он« съедает »полигон против часовой стрелки. – surfrider

0

Раскладывая @thedude ответ вы также можете использовать geojson-lookup, если вам нужно сделать, это проверить несколько раз на данном GeoJSON.

+1

Лучше использовать ссылку в качестве ссылки и поместить ключевые моменты в свой ответ. –