0

下午好:我学习 R 已经有一段时间了,但是现在我正在处理大型 shapefile,这些文件的大小超过 600 Mb。我有一台 200GB 可用内存和 12GB 内存的计算机,我想问是否有人知道如何处理这些文件?我真的很感谢你的帮助。

4

2 回答 2

2

使用最新版本的 64-bit R,最新版本的rgdal只需尝试阅读:

library(rgdal)
shpdata <- readOGR("/path/to/shpfolder/", "shpfilename")

其中“shpfilename”是不带扩展名的文件名。

如果失败,请使用您所做的、您看到的、文件大小的详细信息更新您的问题 - 每个“shpfilename.*”文件、您的 R 版本、操作系统和 rgdal 版本的详细信息。

于 2011-06-09T00:26:17.153 回答
1

好的,所以问题更多是关于处理大文件的策略,而不是“如何在 R 中读取 shapefile”。

这篇文章展示了如何通过对 shapefile 进行子集化来使用划分-应用-重组方法作为解决方案。

从当前答案开始,假设您有一个名为 shpdata 的 SpatialPolygonsDataFrame。shpdata 将有一个数据属性(通过@data 访问),每个多边形都有某种标识符(对于Tiger shapefile,它通常类似于'GEOID')。然后,您可以在组中循环这些标识符,并为每个小批量多边形子集/处理/导出 shpdata。我建议要么将中间文件编写为 .csv,要么将它们插入到 sqlite 之类的数据库中。

一些示例代码

library(rgdal)
shpdata <- readOGR("/path/to/shpfolder/", "shpfilename")

# assuming the geo id var is 'geo_id'
lapply(unique(shpdata@data$geo_id), function(id_var){
   shp_sub = subset(shpdata, geo_id == id_var)
   ### do something to the shapefile subset here ###
   ### output results here ###

   ### clean up memory !!! ###
   rm(shp_sub)
   gc()
})
于 2015-06-11T00:36:25.340 回答