在使用maptools的readShapePoly函数读取R中的SHP文件时出错

19

我是R的新手,正在按照这里找到的ggplot2包教程进行学习:here。但是当我尝试加载基本的shapefile时,readShapePoly()函数会抛出错误。我使用了以下代码:

library("ggplot2")
library("gpclib")
library("maptools")
setwd("~/Documents/R Projects/Intro to ggplot2") 
#Intro to ggplot 2 contains the .shp file and associated data
sport <- readShapePoly("london_sport.shp")

这让我感到:

Error in getinfo.shape(filen) : Error opening SHP file

我已经尝试省略文件扩展名。我也尝试下载其他的 .shp 文件,但这些文件也会出现相同的错误。我还尝试使用完整的文件路径调用 readShapePoly,但也不起作用。我正在使用 R Studio (mac OSX),但是在标准的 R 窗口中也遇到了相同的错误。我尝试了之前关闭的威胁“在Rstudio中打开SHP文件时出错”的建议,但没有成功。

编辑:问题出在缺少 .dbf 文件上。感谢 @Spacedman 的修复。


你确定这个shape文件能用吗?你试过使用readOGR函数吗? - Ari B. Friedman
尝试使用 list.files() 并查看返回的内容。你的 shapefile 是否在其中,并以正确的名称命名?当尝试使用 readShapePoly 读取时,绝对不要添加扩展名。 - Simon O'Hanlon
9
你的文件夹里也有 london_sport.shxlondon_sport.dbf 文件吗?你需要这三个文件才能制作一个“Shapefile”。 - Spacedman
@Spacedman - 不错的提示,.dbf文件丢失了。我已经找到它并解决了问题。对于这个基本错误感到抱歉。现在有点尴尬了。谢谢大家。 - Steve Senior
对我来说,这个链接提供的简单解决方案有效:https://gis.stackexchange.com/questions/21533/api-to-reverse-geocode-latitude-longitude-to-census-tract - krishna kumar
7个回答

16

我曾经遇到过类似的问题,原因是我下载的压缩包中包含了 '*.shp' 形状文件以外的其他文件。当我只把形状文件移动到另一个文件夹时它无法正常工作。但是当我将所有文件一起包括在内时,就能够正常地使用 readShapeSpatial() 函数。


哎呀,我正在解决一个很酷的问题。我尝试从一个干净的板子开始。 - miles2know
2
这解决了我遇到的类似问题。根据文档,你需要的不仅仅是.shp文件:shapefile layer name, when writing omitting the extensions *.shp, *.shx and *.dbf, which are added in the function - Mikko

6
忘记使用ggplot和gpcclib,而应该使用maptools和rgdal来读取shapefile。这些工具提供了实际的读取shapefile的方法。
不要只是说你已经尝试了“这个和那个”,请详细说明。例如,file.exists("london_sport.shp")是否返回TRUE?
此外,你为什么认为readShapePoly()是正确的函数?它只能读取多边形shapefile,请尝试使用readShapePoints()和readShapeLines()。
如果可以的话,尝试使用readOGR,它可以读取shapefile,尽管存在许多注意事项(包括几何类型)。
library(rgdal)
readOGR("~/Documents/R Projects/Intro to ggplot2", "london_sport")

如果你能报告所有这些内容,很可能会有人提供帮助。

1
谢谢您的建议,问题出在缺少.dbf文件上。我会把rgdal添加到我的(很长的)学习清单中。 - Steve Senior
是的,这很糟糕。这个领域真是个混蛋,所有的文件都很烂。 - mdsumner

2

还有一种自动化的解决方案,但效果不是很好,它帮助了我:

file<- readShapePoly(file.choose())

然后只需找到你的*.shp文件并运行它。

2

请将这三个文件(扩展名为dbf、shp和shx)放在同一个文件夹中。


1

如果对任何人有帮助:

我遇到了同样的问题,但是没有一种解决方案起作用。更糟糕的是,我确认过之前运行正常的脚本也是同样的情况。

结果发现,这可能是因为shapefile文件已经损坏。显然,这可能会在文件被操作时发生(或者我的地理学朋友们就是这么说),因此下次尝试打开它时,它将无法工作,原因不明。重新下载它可以解决问题,但这让我想要为珍贵的文件保留备份以防万一。


0

我曾经遇到过同样的问题。后来我发现你需要这三个文件:.shp、.shx和.dbf。


0

我刚刚通过输入以下内容成功解决了我尝试读取的一个shapefile文件的问题:

file<- readShapeSpatial("filename.shp")

不用输入完整的文件路径。

之前,我尝试了所有建议,包括确保 .dbf.shx 文件也存在。不知道为什么要这样做。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接