Читать только часть шейп-файла ESRI в R

10

У меня есть очень большой шейп-файл ESRI (> 8000 полигонов, файл .shp> 32 МБ), который я хочу прочитать в R в Windows 7.

Я знаком с rgdal и readOGR (). Однако при таком размере шейп-файла считывание всего шейп-файла в память является очень медленным процессом. Кроме того, меня интересуют только несколько кластерных полигонов (<100) из 8000, которые содержатся в шейп-файле. Процесс, для которого мне нужно это сделать, является очень повторяющимся, то есть шейп-файл должен загружаться много раз, поэтому в настоящее время он очень медленный.

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

БМЗ
источник
Какую платформу вы используете? Если у вас есть доступ к ArcGIS, я полагаю, вы могли бы написать скрипт в ArcPy, который делает выбор подмножества, а затем выполняет процесс R из скрипта python. Это определенно возможно ... Запустите поиск Google для выполнения кода R из python.
GeoJohn
3
Возможно, попытайтесь экспортировать в новый шейп-файл ту часть ваших данных, которая важна для вас, а затем поработайте с ней в R.
ami
это, вероятно, будет работать с SF. Но сохраните его в формате рабочей области R с помощью saveRDS. Существуют способы хранения в целом в SQLite или аналогичные, но я сомневаюсь, что это требуется
mdsumner

Ответы:

8

Единственное, что приходит на ум, - это использовать новую библиотеку "sfr" и связанный с ней простой класс пространственных объектов для поднабора. Библиотека sfr в настоящее время доступна на GitHub, и вот руководство для начала.

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

Другим вариантом будет сохранение ваших пространственных данных в базе данных (например, PostGIS) и запрос из базы данных. Это может быть чрезвычайно эффективным способом работы с большими данными.

Джеффри Эванс
источник
2
sfПакет доступен на CRAN начиная с версии 0.2 (2016-10-26): cran.r-project.org/web/packages/sf/index.html
RCS
1

Я думаю, что использование ГИС, такой как QGIS, и выбор необходимых вам функций было бы хорошим подходом.
Если вам нужно объединить результаты, вы можете создать один файл с 7900 полигонами, которые вы не хотите обрабатывать, затем обработать 100 полигонов и вернуться после обработки.

MichaelStoner
источник
0

Вы можете создать подмножество шейп-файла с помощью org2ogrкоманды, как показано здесь:

ogr2ogr выбор объектов по атрибутам

Вам нужно будет выяснить условие для выбора функций, которые вы хотите, хотя.

Spacedman
источник