19. Методы вычисления весов полигональных объектов в ГИС для способа репрезентативных точек
№ п/п | Способ обработки | Точность представл. (0.176) | Сложность реализ. (S1) (0.118) | Производит. (S1) (0.50) | Объем данных (0.059) | Пригодность для S2 (тек.) (0.147) | Общий рейтинг |
---|---|---|---|---|---|---|---|
1 | Использование pyosmium для вычисления репрезентативных точек | 4 (0.704) | 3 (0.354) | 5 (2.500) | 5 (0.295) | 5 (0.735) | 4.588 |
2 | Использование osmium export для получения центроидов (вкл. relation) | 3.5 (0.616) | 3 (0.354) | 4 (2.000) | 5 (0.295) | 4.5 (0.662) | 3.927 |
3 | Репрезентативная точка way (representative_point()) | 4 (0.704) | 4 (0.472) | 4 (2.000) | 5 (0.295) | 4 (0.588) | 3.859 |
4 | Центроид геометрии way (текущий для полигонов) | 2 (0.352) | 5 (0.590) | 5 (2.500) | 5 (0.295) | 3 (0.441) | 3.737 |
5 | Игнорирование relation, обработка только way как отдельных объектов | 1 (0.176) | 5 (0.590) | 5 (2.500) | 5 (0.295) | 3 (0.441) | 3.561 |
6 | Обработка relation (мультиполигон) -> репрезент. точка (Python/XML) | 3 (0.528) | 2 (0.236) | 2 (1.000) | 5 (0.295) | 4 (0.588) | 2.647 |
7 | Извлечение геометрии relation/way и взятие точек всех вершин | 3 (0.528) | 3 (0.354) | 3 (1.500) | 2 (0.118) | 2 (0.294) | 2.440 |
8 | Сегментация линий (way для дорог, рек) на N точек | 3 (0.528) | 3 (0.354) | 3 (1.500) | 2 (0.118) | 2 (0.294) | 2.440 |
9 | Присвоение атрибута объекту всем H3-гексагонам, которые он покрывает | 5 (0.880) | 2 (0.236) | 1 (0.500) | 1 (0.059) | 1 (0.147) | 1.822 |
Представьте, что у нас есть огромная карта OpenStreetMap. Нам не нужны все объекты, а только некоторые: школы, дороги, парки, берега моря.
-
Проблема: Некоторые объекты на карте – это просто точки (например, маленький магазинчик). А другие – это линии (дорога) или целые фигуры (парк, озеро, здание школы). Для наших расчетов нам удобнее, если каждый такой объект будет представлен одной главной точкой.
-
Как мы находим эту "главную точку" для разных объектов?
-
Для точечных объектов (например, фонарный столб): Все просто, его точка на карте и есть главная точка.
-
Для линий (например, дорога) и простых фигур (например, небольшое прямоугольное здание школы): Мы находим специальную точку, которая как бы "хорошо представляет" эту линию или фигуру. Это не всегда точно центр, а такая точка, которая точно лежит на дороге или внутри фигуры школы. Назовем ее "представительная точка".
- Пример: Для дороги – это будет какая-то точка на этой дороге. Для здания школы – точка внутри этого здания.
-
Для сложных фигур (например, большой парк с извилистыми границами, или берег моря, или больница из нескольких корпусов): Это самое трудное. Нам нужно как-то "объединить" все части этого сложного объекта и найти одну "представительную точку" для всего объекта целиком.
- Пример: Для большого парка – это будет точка где-то внутри парка, которая хорошо его характеризует. Для берега моря (если мы его считаем объектом) – это может быть точка, символизирующая "доступ к воде" или "центр пляжной зоны".
-
-
Результат Шага 1: Для каждого нужного нам объекта (школа, участок дороги, парк, кусок берега) мы получаем одну "главную" или "представительную" точку с её координатами (широта, долгота). Плюс сохраняем, что это за объект (школа, парк и т.д.).
ТОП-3 Способа найти "главную точку" (из нашей таблицы):
-
Супер-умный помощник pyosmium (Способ 1 в таблице):
-
Мы используем специальный Python-инструмент (pyosmium), который очень быстро читает карту OSM.
-
Мы ему говорим: "Найди все школы, парки и т.д."
-
Для каждой найденной школы (даже если это большое здание или несколько зданий), для каждого парка (даже сложной формы) этот инструмент помогает нам вычислить одну хорошую "представительную точку".
-
Плюсы: Очень быстро, очень точно (даже для сложных объектов).
-
Минусы: Чуть сложнее научить этого помощника всем трюкам.
-
-
Внешний эксперт osmium-tool (Способ 2 в таблице):
-
Мы просим другую программу (osmium-tool): "Эй, эксперт, найди все школы и дай мне для каждой её главную точку. Сделай то же для парков и т.д."
-
Этот эксперт сам разбирается со сложными фигурами и выдает нам готовый список объектов с их "главными точками".
-
Плюсы: Эксперт делает сложную работу за нас, это довольно быстро.
-
Минусы: Мы должны точно объяснить эксперту, что нам нужно, и он может дать точку не совсем так, как мы бы хотели в редких случаях.
-
-
Улучшенный старый метод (Способ 3 в таблице):
-
Мы сначала просим osmium-tool просто вырезать нам все школы, парки и т.д. в отдельные маленькие карты (в формате XML).
-
Потом наш Python-скрипт смотрит на эти маленькие карты.
-
Если это простое здание школы (одна фигура) или простая дорога (одна линия), он находит для них "представительную точку".
-
Проблема: Если парк очень сложный (много отдельных кусочков, островов) или больница из многих корпусов, этот метод может запутаться и не найти хорошую "главную точку" для всего сложного объекта целиком. Он хорошо работает только для простых фигур.
-
Шаг 2: Оцениваем влияние объектов на разные места (Скрипт 2)
Теперь у нас есть список "главных точек" для всех интересующих нас школ, парков, участков дорог и т.д. Мы хотим понять, как они влияют на разные шестиугольные участочки земли (наши H3-гексагоны).
-
Берем один шестиугольник на карте.
-
Смотрим, какие "главные точки" объектов (школ, парков) находятся рядом с ним.
- Например, рядом со шестиугольником есть "главная точка" школы и "главная точка" парка.
-
Для каждого объекта рядом оцениваем его влияние:
-
Расстояние: Чем ближе "главная точка" объекта к нашему шестиугольнику, тем сильнее влияние.
-
Тип объекта: Школа может влиять по-своему (например, хорошо для семей), парк – по-своему (хорошо для отдыха). У каждого типа объекта есть свой "базовый балл влияния" и "радиус действия".
-
Сила влияния: Если "главная точка" школы очень близко, её влияние на шестиугольник будет почти максимальным. Если она на границе "радиуса действия", влияние будет слабым. Если дальше радиуса – влияния нет.
-
-
Суммируем: Складываем баллы влияния от всех объектов (одного типа), которые влияют на наш шестиугольник.
- Пример: Если на шестиугольник влияют две школы, их баллы сложатся. Отдельно посчитаем влияние от парков.
Примеры:
-
Школа:
-
Шаг 1: Находим "представительную точку" для здания школы (или для всего школьного комплекса, если он большой и сложный – тут лучшие способы 1 или 2 справятся лучше).
-
Шаг 2: Если эта точка школы близко к нашему шестиугольнику, шестиугольник получает "школьные" баллы. Это может означать, что место в шестиугольнике хорошо подходит для семей с детьми.
-
-
Дорога (например, шоссе):
-
Шаг 1: Для участка дороги находится "представительная точка". (Способы 1 или 2 постараются дать осмысленную точку. Способ 3 для длинной дороги даст просто точку где-то на ней, может, не самую удачную).
-
Шаг 2: Если эта точка дороги близко к шестиугольнику, он получает "дорожные" баллы. Это может означать хорошую транспортную доступность (если это плюс) или шум (если это минус – это уже мы сами решаем знаком "базового балла").
-
-
Берег моря:
-
Шаг 1: Если мы рассматриваем "пляжную зону" как полигон, то способы 1 или 2 найдут для нее "представительную точку".
-
Шаг 2: Шестиугольники рядом с этой точкой получат баллы "близости к морю".
-
-
Парк:
-
Шаг 1: Для парка (даже большого и сложной формы) способы 1 или 2 найдут хорошую "представительную точку" внутри парка.
-
Шаг 2: Шестиугольники рядом с этой точкой получат "парковые" баллы, что хорошо для отдыха.
-
В итоге: Мы получаем карту, где каждый шестиугольник имеет разные оценки (баллы) по влиянию от школ, парков, дорог и т.д. Это помогает нам понять, насколько каждый участок земли "хорош" по разным критериям.
Главное, что точность всего этого зависит от того, насколько хорошо мы на Шаге 1 смогли представить каждый реальный объект (особенно большой или сложный) одной-единственной "главной точкой". И самые продвинутые способы (1 и 2 в нашей таблице) делают это лучше всего.