R 加载形状文件:"Error in plot.window(...) : need finite 'ylim' values"

R load shapefile: "Error in plot.window(...) : need finite 'ylim' values"

我创建了以下脚本来获取丹麦的海岸线

# Get Shapefiles for Coastline
shpurl <- "http://download.geofabrik.de/europe/denmark-latest.shp.zip"
tmp <- tempfile(fileext=".zip")
download.file(shpurl, destfile = tmp)
files <- unzip(tmp, exdir=getwd())

# Load & plot shapefile
library(maptools)
shp <- readShapePoly(files[grep(".shp$", shpurl)])
plot(shp)

这应该给我丹麦的轮廓,但是,我不断收到以下错误:

Error in plot.window(...) : need finite 'ylim' values
In addition: Warning messages:
1: In xy.coords(x, y, xlabel, ylabel, log) : NAs introduced by coercion
2: In min(x) : no non-missing arguments to min; returning Inf
3: In max(x) : no non-missing arguments to max; returning -Inf

如有任何帮助或指示,我们将不胜感激。

看看你的 files 值:

> length(files)
[1] 41

您正在下载的文件包含多个不同地区的形状文件。例如代码:

require(rgdal)
shp <- readOGR(dsn = "whereIsavedyourStuff/Stacks", layer = "roads")

会正常执行。但是您需要指定要读取的源形状文件。


附带一点,关于从网上读取文件,我建议您看一下这段代码:

# Download an read US state shapefiles
tmp_shps <- tempfile(); tmp_dir <- tempdir()
download.file("http://www2.census.gov/geo/tiger/GENZ2014/shp/cb_2014_us_state_20m.zip",
              tmp_shps)
unzip(tmp_shps, exdir = tmp_dir)

# Libs
require(rgdal)

# Read
us_shps <- readOGR(dsn = tmp_dir, layer = "cb_2014_us_state_20m")

无论您决定使用何种方法读取形状文件,您都必须指定路径和文件名。根据 readOGR 中提供的代码,这是由 dnslayer 选项实现的。在您的代码中,您使用了 files[grep(".shp$", shpurl)]195MB 存档中的文件名与 URL 不对应。您在这里有几个选择:

  1. 您可以下载这些文件并解压,列出所有 *.shp 文件的名称,获取文件名并在循环中将它们传递到您所在的列表会读取所有组合(实际上你需要一些文件才能读取每一层)

  2. 更好的是,与上面提供的代码类似地指定要读取的层。