Совокупные линии на основе расстояния между сегментами


12

У меня есть базовая карта VectorTile, которую я оптимизирую (работая над уменьшением размера отдельных плиток), основной кусок размера плиток - это дорожные данные (геометрия и атрибуты). Я работаю над упрощением геометрии отдельных дорог на основе уровня масштабирования , а также агрегирования дорог на основе уровней масштабирования.

Дороги хранятся в таблице Postgis (отдельная таблица для каждого уровня масштабирования), и я хочу объединить дороги на основе уровня масштабирования, на котором они будут отображаться. Например, в таблице «Уровень масштабирования 5» я хочу объединить дороги, которые находятся на определенном расстоянии друг от друга, и сделать одну линию для сегментов дороги: введите описание изображения здесь

Поскольку на этом уровне масштабирования невозможно различить отдельные дороги: введите описание изображения здесь

Как я могу агрегировать геометрию дороги в зависимости от расстояния между участками дороги?

PS: я работаю над PostGIS и QGIS для Linux, но я открыт для решений, использующих любую платформу или технологию с открытым исходным кодом.


Есть ли у дорог общий идентификатор, например, две полосы на уровне зума 5 на A50 представлены двумя линиями, а на уровне 4 - одной линией, и все они имеют «A50» в качестве атрибута?
AnserGIS

Они представлены двумя линиями на всех уровнях масштабирования. У них автомагистрали и автомагистрали будут иметь общий атрибут, такой как «М-2» для автомагистралей.
Хасан Мустафа,

Ответы:


5

Вы можете попробовать поискать в этой опции ОС Skeletron :

обобщает наборы линий для определенного сферического уровня масштабирования меркатора и точности пикселей с использованием полигонального буфера и диаграммы вороного

Он основан на статье Алноора Ладака и Роберто Б. Мартинеса 1996 года «Автоматизированный вывод высокоточных дорожных осевых линий Техники полигонов Тиссена»

Требуются некоторые зависимости:

Требуемые зависимости:
- Qhull бинарная ( http://www.qhull.org )
- стройные 1.2+ ( http://pypi.python.org/pypi/Shapely )
- pyproj ( http://code.google.com/p / pyproj )
- networkx 1.5+ ( http://networkx.lanl.gov )
- StreetNames 0.1+ ( https://github.com/nvkelso/map-label-style-manual/tree/master/tools/street_names )

Примечание. Это более старая модель / инструмент, который можно применять, просто как справочник для изучения.


1
Я думаю, что скелетон может быть подходящим вариантом, но ваш ответ - просто копия прошлого файла readme, а ссылка на сайт esri мертва. Вот ссылка, чтобы показать, что он делает для карт: kartographie.geo.tu-dresden.de/downloads/ica-gen/workshop2004/… . это выглядит действительно здорово, но когда я пытался использовать его, я не знал, как его использовать. Я не нашел документации, за исключением некоторых взяток с помощью команды use или setup.py --help ... Если кто-то объяснит, как использовать эту библиотеку, я дам ему награду.
Уго Руссаффа - GeoDatup

Также, насколько я вижу, он использует OSM-пути, поэтому я хочу найти решение, которое может работать на любом типе линий. Тем не менее, я действительно люблю науку, стоящую за этим, хотел бы применить это и к другим сценариям.
Хасан Мустафа,

Я обновил свой пост, чтобы отразить ваши комментарии, я ценю отзывы.
Whyzar

4

ArcGIS является самым простым, если это вообще вариант. Я знаю, что в ОП указана ОС, но я упоминаю об этом, поскольку параметры ОС выглядят не очень полезными по сравнению с: http://resources.arcgis.com/en/help/main/10.1/index.html#/Merge_Divided_Roads/00700000000w000000 /

Ответы на этот вопрос дают некоторые варианты с открытым исходным кодом: Как я могу объединить / свернуть близлежащие и параллельные дороги (например, проезжую часть с двумя проезжими частями) в одну линию?

Если вы кодируете, вы можете рассчитать среднее положение координат на основе вершин, если нет, то:

  1. буферизуйте дороги с помощью опции «объединить все» на выходе.
  2. Получить осевую линию многоугольника
  3. Разбить линии на стыках с помощью JUMP Split Lines на пересечении других линий
  4. Пространственное Присоединение атрибутов обратно

Похоже, не существует хорошей ОС, эквивалентной инструменту ArcGIS 'Polygon to Center line'. Я мог бы предложить:

а. Создайте вороной диаграмму и возьмите скелет.
б. Создать евклидово растровое расстояние, извлечь центральное значение и преобразовать в линию

... возможно, некоторые другие.

Наконец, в зависимости от масштаба и области применения ... может также стоить просто удалить одну из двух строк - будет ли иметь значение неточность?


Опция ArcGIS выглядит неплохо, я попробую, но я бы предпочел решение для ОС. Расчет средней координаты на основе вершин - моя запасная стратегия. Я попробую все методы, которые вы перечислили, и посмотрю, работают ли они на меня, спасибо!
Хасан Мустафа,

Инструмент ArcGIS 'Merge Divided Roads (Cartography)' - это именно то, что я ищу, но вся обработка, которую я делаю, - это Linux, использующая Postgres и QGIS, чтобы использовать инструмент, который мне понадобится для переключения на окна. ,
Хасан Мустафа
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.