打开shapefile时出错

4
我正在尝试在R中打开一个shapefile文件,但是我收到了以下错误信息:
Error in getinfo.shape(filen) : Error opening SHP file

我查看了其他回答,大多数问题似乎已经通过确保.dbf和.shx文件在同一个文件夹中解决。我把它们都放在同一个文件夹中(以及一些其他扩展名),但我仍然收到错误消息。我使用的是Mac电脑。 这是我的代码:

getinfo.shape("/Users/Suz/Desktop/DWH satellite maps/20100517_Composite.shp")

我已经尝试过不带.shp扩展名的方式,以及其他命令,比如readShapePoints等。到目前为止,没有任何效果。请帮忙,我是R和地图制作方面的新手,在广泛搜索和阅读论坛后仍然无法解决问题。


readOGR("/Users/Suz/Desktop/DWH satellite maps", "20100517_Composite") 这个命令可以运行吗? (readOGRrgdal 包中的一个函数。) - jbaums
另外,您能否在帖子中包含 list.files('/Users/Suz/Desktop/DWH satellite maps') 的输出?其次,请尝试使用可信的shapefile,例如这里。最后,您是否知道 getinfo.shape 仅读取shapefile的标头,并且实际上不会读取数据 - 这是您想要的吗? - jbaums
我尝试了你建议的shapefile:getinfo.shape("/Users/Suz/Desktop/ne_110m_admin_1_states_provinces.shp"),但仍然出现相同的错误信息。我开始觉得我的问题可能是因为某些愚蠢的原因,我没有打开所有必要的库或其他东西..?我已经安装了sp,map tools,rgdal和rgeos。 - user3281487
1
list.files命令会列出目录中的所有文件(共174个),因此输出结果很大,难以发布。但我的文件都在那里。 - user3281487
我设法让它工作了。谢谢你的建议! - user3281487
1
很高兴听到这个消息。如果您能找出自己做错了什么,请将解决方案添加为答案并接受它,以造福未来的人们。 - jbaums
6个回答

1
我刚遇到了同样的问题。通常,您的SHP文件会带有其他文件。如果它们缺失,则无法加载该文件。因此,请检查源文件中是否存在任何其他扩展名为“20100517_Composite”的文件。如果这是问题,我想让人们节省时间,但我还不能发表评论。

0
在R中读取shapefile的简单方法是:
要么(获取一个Spatial*对象)
library(raster)
x <- shapefile("/Users/Suz/Desktop/DWH satellite maps/20100517_Composite.shp")

或(获取一个 sf 对象)

library(sf)
st_read("/Users/Suz/Desktop/DWH satellite maps/20100517_Composite.shp")

(但不要使用已弃用(不完整和过时)的函数readShapeSpatial

实际应用:

library(raster)
library(sf)

f <- system.file("external/lux.shp", package="raster")
s1 <- shapefile(f) 
s2 <- st_read(f)

如果这不起作用,您需要检查文件是否存在:
file.exists(f)

获取一个目录中的 shapefile 列表,你可以执行以下操作:
path <- "c:/temp"  # change with your directory name
ff <- list.files(path, pattern='\\.shp$', full.names=TRUE)

0

我曾经也遇到过相同的问题,后来我移除了 .shp 扩展名。

所以现在应该是这样的

readShapeSpatial("/Users/Suz/Desktop/DWH satellite maps/20100517_Composite.shp")

跟随

readShapeSpatial("/Users/Suz/Desktop/DWH satellite maps/20100517_Composite")

如果您将所有文件放在工作目录中,它应该能够完美运行。

0

这仍然是一个问题。我更直接地通过使用file.choose()手动选择文件来调用shapefile来解决它。希望这对任何人有所帮助。

library (rgdal)
a = readOGR (file.choose()) #then selecting the shape file manually 

0

你可以尝试使用getinfo.shape(file.choose())通过弹出窗口选择文件。如果这样能正常工作,那么可能是你输入的字符串有问题。

注意:我用的是Linux系统,但我认为file.choose()在Mac上也应该可以工作。


0

在遇到相同的问题后,我进行了一些调查,并找到了一个不错的帖子[这里]。1 结果发现,在检查了 list.files() 命令并发现我的文件不在那里之后, 即使我在原始代码中包含了文件路径,它仍然会产生问题中显示的错误。然后我将所有文件移动到工作目录中,然后下面的命令就可以正常运行了。

readShapeSpatial()

同样,只需更改wd也可以。

setwd("directory_path")

我想把这个放在这里,就像@jbaums建议的那样,因为这会节省我解决这个问题的时间。


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