Как обобщить SpatialPolygons и сохранить топологию в R?

18

Я хотел бы обобщить SpatialPolygonsDataFrame в R, чтобы сделать построение графиков более эффективным. Полигоны, которые я имею, приводят к огромным pdf-графикам, которые медленно загружаются и трудно интегрируются в документ.

Я попытался использовать gSimplifyфункцию из rgeosпакета, но, к сожалению, она не сохраняет топологию полигонов.

Есть ли альтернатива, которую я могу использовать?

yellowcap
источник
не совсем решение, но вы могли бы вместо этого построить растр (jpg / png)? Этот вопрос stackoverflow, который обсуждает уменьшение размера pdfs, может быть
полезен
Построение карт в виде растровых изображений является опцией, но по возможности я бы хотел использовать векторную графику. Качество изображения лучше при использовании векторной графики, особенно при просмотре цифровых версий документов.
желтая шапка
gSimplify()имеет необязательный параметр, topologyPreserveкоторый по умолчанию равен FALSE. Вы пытались установить это TRUE?
krlmlr

Ответы:

7

Об этом идет дискуссия на r-sig-geo . Для окончательного ответа вы должны спросить там, потому что есть люди, которые знают идеи пространственного R.

Но вы также можете сделать это в настольных ГИС-приложениях (экспортируйте фигуру с помощью команды writeOGR из rgdal или writePolyShape () из maptools), например, QuantumGIS, GRASS или SAGA.

Для QuantumGIS используйте Vector / Geometry Tools / Упростить геометрию (я протестировал и не сохраняю топологию, но применительно к шейп-файлу admin1 в Румынии, отлично смотрится с 2000 узлами).

Для GRASS используйте v.generalize (см. Руководство для получения информации об алгоритмах, некоторые из них).

Для SAGA вы должны сначала преобразовать полигон в линию (Shapes - Lines / Convert Polygons to Lines), затем упростить линии (Shapes Lines / Line Simplification) и, наконец, преобразовать линии в полигоны (Shapes - Polygons / Convert Lines в Polygons). Я проверил это, и результаты сохранили топологию.

Ура и удачи,

Никулита Михай
источник
Тем временем я также нашел онлайн-сервис, который выполняет упрощение при сохранении топологий: mapshaper.org . Я использовал его как альтернативу, так как кажется, что это невозможно в R напрямую (QGis на самом деле не сохраняет топологию, и я не знаю других программных пакетов)
yellowcap
1
Я проверил ваши наблюдения с помощью Saga 2.0.8, и результат не сохранил топологию!
Фабиан Цейндль
2

Теперь есть замечательный rmapshaperпакет от Andy Teucher, который включает в себя функцию упрощения, которая «выполняет топологически-упрощенное многоугольное упрощение».

Из их репозитория github, пример использования:

states_simp <- ms_simplify(states_sp)

где states_spявляется spatialPolygons*объектом.

См. Пакет README для получения дополнительной информации: https://github.com/ateucher/rmapshaper

Фил
источник
0

это должно помочь:

  • gSimplify(..., topologyPreserve=T)из GEOSпакета
petermeissner
источник
2
К сожалению, опция сохранения топологии в gSimplifyдействительности не сохраняет топологию для нескольких полигонов. Я думаю, что это больше относится к топологии одиночных или мультиполигонов. Для шейп-файла со многими полигонами топология не сохраняется.
yellowcap