Точки в полигонах: подсчёт и пространственное соединение
Сопоставьте файл точек с границами районов, зон или участков: посчитайте точки и значения в каждом полигоне и добавьте к каждой точке атрибуты полигона, в который она попадает.
1 Точки
2 Полигоны
Файлы обрабатываются в браузере, их содержимое не отправляется на сервер. Загружаются только тайлы карты (Esri, OpenStreetMap) и библиотеки (jsDelivr).
Столбцы точек
Атрибуты полигонов
Карта
Подготовка файлов
В первой строке таблицы точек должны быть названия столбцов. Полигоны могут быть в GeoJSON (WGS84), шейп-файлом в zip с файлом .prj или KML. Для координат точек в метрах выберите систему координат.
Похожие инструменты
Зачем считать точки в полигонах
Многие организации хранят записи с адресом или координатами, а решения принимают по кварталам, районам, торговым территориям, участкам или зонам обслуживания. Пространственное соединение связывает одно с другим: находит полигон, в котором лежит каждая точка, и делает результат пригодным в обе стороны. Муниципальные службы считают обращения по кварталам, розничные сети распределяют клиентов по территориям, логисты группируют точки доставки по зонам.
Инструмент выдаёт три результата. Первый: сводка по полигонам с числом точек, плотностью на км² и, для выбранного числового столбца, суммой, средним, минимумом и максимумом. Второй: сама таблица точек, в каждую строку которой добавлены название и выбранные атрибуты полигона; это и есть ответ на вопрос «в каком районе находится каждая строка». Третий: список точек, не попавших ни в один полигон, быстрый способ найти ошибочные координаты или записи вне зоны обслуживания.
Как пользоваться
- Загрузите файл точек: CSV, Excel, GeoJSON или KML. В таблицах столбцы широты и долготы распознаются по названиям; при необходимости исправьте выбор. Если координаты в метрах, выберите систему координат.
- Загрузите файл полигонов: GeoJSON, шейп-файл в zip или KML. Как только оба файла готовы, анализ запускается сам.
- Для сумм и средних выберите столбец в списке «Числовое поле» (сумма, длительность, количество и т. п.).
- «Поле названия» задаёт имя полигона в таблицах и на карте. Отметьте только те атрибуты, которые нужно добавить к точкам, чтобы не перегружать результат.
- Полигоны раскрашиваются по выбранному показателю. Щёлкните по полигону, чтобы увидеть его сводку, или нажмите «Показать» в таблице. Красные точки лежат вне всех полигонов.
- Скачайте результаты: полигоны в GeoJSON и сводку в CSV, точки в CSV и GeoJSON, точки вне полигонов в CSV. CSV точек сохраняет разделитель исходного файла.
Данные и метод
Точки проверяются функцией booleanPointInPolygon библиотеки Turf.js 7.2.0 (лицензия MIT); полигоны с дырами и составные полигоны поддерживаются. Чтобы не сравнивать каждую точку с тысячами полигонов по очереди, ограничивающие прямоугольники полигонов помещаются в R-дерево RBush 3.0.1 (MIT), и точка сравнивается только с теми полигонами, чей прямоугольник её содержит. Точка ровно на границе считается внутренней. Площадь полигона рассчитывается сферическим методом Turf, плотность равна числу точек, делённому на эту площадь.
Файлы читаются в браузере: CSV библиотекой PapaParse 5.4.1 (MIT), Excel библиотекой SheetJS xlsx 0.18.5 (Apache-2.0), шейп-файлы библиотекой shpjs 6.1.0 (MIT), KML библиотекой @tmcw/togeojson 5.8.0 (BSD-2-Clause), KMZ библиотекой JSZip 3.10.1 (MIT). Координаты точек в метрах переводятся в WGS84 с помощью proj4js 2.9.0 (MIT); для ED50 применяется преобразование EPSG:1784 (ED50 to WGS 84 (30)), заданное для Турции. Подложки принадлежат Esri и участникам OpenStreetMap. Содержимое файлов никогда не отправляется на сервер; загружаются только тайлы карты и эти библиотеки. Если вы согласились на аналитические cookie, анонимно учитываются только названия событий, например «анализ выполнен». Используемые библиотеки с открытым исходным кодом и их лицензии: Источники данных.
Ограничения точности
- Результат надёжен настолько, насколько точны координаты точек и границы. Если геокодированная координата попадает в центр улицы или квартала, записи у границы могут отойти к соседнему полигону.
- В границах из разных источников между соседними полигонами бывают небольшие зазоры и наложения. Точка в зазоре остаётся снаружи, точка в наложении учитывается дважды; столбец pip_matches показывает такие случаи.
- Если для точек выбрана неверная система координат, они окажутся далеко от полигонов. Когда не совпала ни одна точка, инструмент предупреждает об этом.
- В нашем тесте на настольном компьютере с 50 000 точек и 400 полигонами сопоставление заняло меньше 0,1 секунды, а вместе с чтением файла и отрисовкой около 1 секунды. На телефонах и при сложных границах с тысячами вершин времени нужно больше.
Для организаций
Управление адресами, геокодирование и массовое сопоставление адресных списков с границами входят в круг задач, которыми занимается Rodosto. Подробнее на сайте rodostoteknoloji.com, вопрос можно задать через страницу контактов.
Частые вопросы
Как узнать, в каком районе находится каждый адрес из таблицы?
Сначала для каждого адреса нужны широта и долгота; адреса без координат переводятся в координаты геокодированием. Затем загрузите таблицу как файл точек, а границы районов (GeoJSON, шейп-файл или KML) как файл полигонов. Инструмент добавит к каждой строке название и другие атрибуты района, в который она попадает.
Как учитываются точки на границе полигона?
Точка ровно на границе считается лежащей внутри полигона. Поэтому точка на общей границе двух соседних полигонов может быть учтена в обоих; тогда в столбце pip_matches будет 2, а точке присваиваются атрибуты первого по порядку в файле полигона.
Что проверить при загрузке шейп-файла?
Шейп-файл загружается одним zip-архивом с файлами .shp, .shx, .dbf и .prj. Файл .prj описывает систему координат, по нему полигоны переводятся в WGS84; без него полигоны в метрах прочитать нельзя.
Загружаются ли мои файлы на сервер?
Нет. Файлы точек и полигонов читаются и сопоставляются в браузере, их содержимое никуда не отправляется. Из интернета загружаются только тайлы карты (Esri, OpenStreetMap) и библиотеки с открытым кодом (jsDelivr).