根据shapefile映射原始数据和平均数据

时间:2012-04-04 19:39:11

标签: r gis

我有这样的数据集(pts):

x <- seq(-124.25,length=115,by=0.5)    
y <- seq(26.25,length=46,by=0.5)
z = 1:5290

longlat <- expand.grid(x = x, y = y)  # Create an X,Y grid
pts=data.frame(longlat,z) 
names(pts) <- c( "x","y","data")

我知道我可以通过执行以下操作将数据框(pts)映射到地图中:

library(sp)
library(rgdal)
library(raster)
library(maps)
coordinates(pts)=~x+y
proj4string(pts)=CRS("+init=epsg:4326") # set it to long, lat
pts = spTransform(pts,CRS(" +init=epsg:4326 +proj=longlat +ellps=WGS84 +datum=WGS84    +no_defs +towgs84=0,0,0"))
pts <- as(pts, "SpatialPixelsDataFrame")
r = raster(pts)
projection(r) = CRS(" +init=epsg:4326 +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs +towgs84=0,0,0")

plot(r)
map("usa",add=T)

现在我想创建一个单独的地图,显示不同地区的pts方式。我想使用的shapefile来自ftp://ftp.epa.gov/wed/ecoregions/cec_na/NA_CEC_Eco_Level2.zip,但这是一张北美地图。如何根据此北美地图创建仅显示美国的地图?或者还有另一种更好的方法吗?非常感谢。

1 个答案:

答案 0 :(得分:0)

我认为单独根据shapefile中的数据删除非美国数据会很困难,因为这些地区不符合政治边界 - 可以用rgeos完成。

假设&#34; eco&#34;是SpatialPolygonsDataFramergdal::readOGR读取的maptools::readShapeSpatial,请参阅索引的可用关键数据:

sapply(as.data.frame(eco), function(x) if(!is.numeric(x)) unique(x) else NULL)

如果您只想绘制它,请设置一个仅包含美国地区的地图,然后打印过来。

library(maps)
map("usa", col = "transparent")

我们看到数据位于Lambert Azimuthal Equal Area:

proj4string(eco)
[1] " +proj=laea +lat_0=45 +lon_0=-100 +x_0=0 +y_0=0 +a=6370997 +b=6370997 +units=m +no_defs"

所以     需要(rgdal)     eco.laea&lt; - spTransform(eco,CRS(&#34; + proj = longlat + ellpse = WGS84&#34;))     情节(eco.laea,add = TRUE)

如果你想在原始的Lambert Azimuthal Equal Area中进行绘图,你需要获得该投影中的边界框并基于此开始绘图,我只是使用现有数据做一个简单的例子。我非常确定数据也可以用rgeos裁剪到另一个边界,但取决于你真正想要的。