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