2015-12-14 15 views
2

我想在特定位置提取shapefile值。我正在使用的shapefile可以找到here,點擊Download IHO Sea Areas下載。形狀文件包含所有可能的海域。提取shapefile值以指向R

我可以閱讀和使用繪製它:

require("maptools") 
require(rgdal) 
require(sp) 

ogrListLayers("World_Seas.shp") 
shape <- readOGR("World_Seas.shp", layer="World_Seas") 

不過,我想提取特定位置的海價值,說

p <- c(-20, 40) 
+0

你希望在這一點上是什麼樣的 '價值'?海拔?但根據定義,這應該是零。任何其他價值? – Felix

回答

2

還有一個可能是一個更簡單的方法但這裏是我的

require("maptools") 
require(rgdal) 
require(sp) 
library(plyr) 
library(dplyr) 

setwd("/Users/drisk/Downloads/seas") 
ogrListLayers("World_Seas.shp") 
shape=readOGR("World_Seas.shp", layer="World_Seas") 

datapol <- data.frame(shape) 
pointtoplot <- data.frame(x=-20, y=40) 
coordinates(pointtoplot) <- ~ x + y 
proj4string(pointtoplot) <- CRS("+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0") 
# 
#function over from package sp 
test <- data.frame(xx=over(shape, pointtoplot)) 
combine <- cbind(test, datapol) 
combine <- na.omit(combine) #only one point left 

輸出爲你的觀點x = -20,y = 40

xx     NAME ID Gazetteer_ id 
35 1 North Atlantic Ocean 23  1912 35 
0

你可以使用從spover功能:

library(rgdal) 
library(sp) 
library(raster) 

shape <- shapefile("~/tmp/World_Seas.shp") 
head(shape) 

plot(shape[shape$ID == 35, ], axes = TRUE) 
points(pts) 

pts <- SpatialPoints(cbind(-20, 40), 
        proj4string = CRS(proj4string(shape))) 
over(pts, shape) 

甚至更​​短:

pts %over% shape