Уменьшите разрешение шейп-файла в R (или QGIS, если необходимо)

12

Я использую шейп-файлы истории Государственные границы США от NHGIS для создания карт в R. Эти шейп-файлы имеют гораздо более высокое разрешение, чем мне нужно при создании карт в масштабе страны: более 2 миллионов наблюдений для одного файла. Есть ли способ уменьшить разрешение этих шейп-файлов в R? При необходимости я могу сделать это в QGIS.

Линкольн Маллен
источник
Можешь объяснить больше? Разрешение связано с изображениями. Вы имеете в виду, что в многоугольнике слишком много узлов, предоставляющих слишком много деталей? Или слишком много точек в шейп-файле точек?
Райан Гарнетт
2
@Ryan Хотя разрешение действительно связано с изображениями, оно также имеет смысл для векторных данных. Для объектов полилинии и многоугольника это можно оценить с точки зрения количества вершин, используемых на единицу длины дуги. Разрешение не всегда может быть точно определено путем проверки векторных данных (например, рассмотрим набор точек с высоким разрешением, но широко разнесенных точечных объектов), поэтому разрешение обычно определяется путем обращения к соответствующим метаданным.
whuber
Я имею в виду, что в шейп-файле гораздо больше точек, чем необходимо для составления карты нации. Я хотел бы получить этот уровень детализации, например, для составления карты города. Причина, по которой это важно для меня, состоит в том, что это делает генерацию графиков медленной и, следовательно, отнимает много времени для итерации.
Линкольн Маллен

Ответы:

9

Вы можете использовать gSimplifyиз rgeosпакета, и если вы добавите topologyPreserve=TRUEфлаг, он сохранит топологию.

Обратите внимание, что вы все равно можете получить перекрывающиеся линии - нам нужна реализация этого надежного алгоритма DP в R:

http://www.sciencedirect.com/science/article/pii/S0098300413002380

[эта ссылка, возможно, за платным экраном]

Spacedman
источник
+1 Приятно знать. В rgeosдокументах находятся на cran.r-project.org/web/packages/rgeos/rgeos.pdf .
whuber
1

Стандартным методом «прореживания» линейных форм (включая границы многоугольников) является алгоритм Дугласа-Пекера . По крайней мере два Rпакета реализуют это: dpв пакете shapefiles и thinnedSpatialPolyв пакете Guerry .

Обратите внимание, что прореживание смежных полигонов обычно создает небольшие разрывы и перекрытия на их границах: оно не учитывает топологические отношения между ними. Я не знаю ни одного Rпакета, который бы поддерживал топологию при прореживании. Для небольших картографических целей, подобных этим, это не должно быть серьезной проблемой.


Кстати, поскольку никто больше не знает, как произносить немецкий язык :-), Том Пойкер изменил написание своего имени некоторое время назад.

Whuber
источник
Вы хотите быть очень осторожным, когда вы «прореживаете» геометрию. Если у вас есть несколько слоев с общими границами, прореживание может создать пропуски, вызывая визуальные ошибки и ошибки точности. Чрезмерное истончение может сделать границы неровными и слишком упрощенными. Вам захочется поиграть и протестировать с допусками в рамках упрощения.
Райан Гарнетт