仅将ESRI shapefile的一部分读取到R中


10

我有一个很大的ESRI shapefile(> 8000个多边形,.shp文件> 32MB),我想在Windows 7上读入R。

我熟悉rgdal和readOGR()。但是,对于这种大小的shapefile,将整个shapefile读取到内存中的过程非常缓慢。此外,我只对shapefile中包含的8,000个聚集的多边形(<100个)感兴趣。我需要执行的过程是高度重复的,即shapefile需要加载多次,因此目前非常缓慢。

因此,我想知道是否有可能仅读取shapefile的一部分以加速该过程。加载如此大量的数据然后丢弃其中的大部分似乎不切实际。


您正在使用什么平台?如果您有权访问ArcGIS,我想您可以在ArcPy中编写脚本,以进行子集选择,然后从python脚本执行R进程。绝对有可能...运行Google搜索以从python执行R代码。
GeoJohn '16

3
也许尝试在R.出口到新的shape文件,您的数据的一部分,这是对你很重要,然后它的工作
急性心肌梗死

它可能会与科幻小说一起工作。但是使用saveRDS将其保存为R工作区格式。有一些方法可以通用地存储在SQLite或类似数据库中,但是我怀疑这是必需的
mdsumner

Answers:


8

唯一想到的就是利用新的“ sfr”库及其关联的简单要素类作为子集。该SFR图书馆目前可在GitHub上,这里是一个教程让你开始。

我不认为您可以基于子集查询来流数据,但是,这将大大加快读取时间,并且应该是R空间类未来

另一种选择是将您的空间数据存储在数据库(例如PostGIS)中并从数据库中查询。这可能是处理大数据的极其有效的方法。


2
sf自0.2版(2016-10-26)起,该软件包可在CRAN上使用:cran.r-project.org/web/packages/sf/index.html
rcs

1

我认为使用QGIS之类的GIS并选择所需的功能将是一种不错的方法。
如果需要将结果合并回去,则可以使用不想处理的7900个多边形创建一个文件,然后处理100个多边形,并在处理后重新加入。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.