我创建了以下脚本来获取丹麦的海岸线
# 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
感谢任何帮助或指示。
答案 0 :(得分:2)
查看您的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
中提供的代码而言,这可以通过dns
和layer
选项来实现。在使用files[grep(".shp$", shpurl)]
的代码中, 195MB 存档中的文件名与URL不对应。你有几个选择:
您可以像下载这些文件并解压缩,列出*.shp
所有文件的名称,获取文件名并将它们循环传递到列表,您可以在其中阅读所有组合(实际上你需要一些文件来读取每一层)
最好,与上面提供的代码类似地指定您想要阅读的图层。