【问题标题】:Map raw data and mean data based on the shapefile根据 shapefile 映射原始数据和平均数据
【发布时间】:2012-04-05 06:12:39
【问题描述】:

我有这样的数据集(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,但是,这是一张北美地图。如何根据这张北美地图创建仅显示美国的地图?还是有另一种更好的方法来做到这一点?非常感谢。

【问题讨论】:

    标签: r gis


    【解决方案1】:

    我认为仅根据 shapefile 中的数据删除非美国数据会很困难,因为这些区域不对应于政治边界 - 不过,这可以通过 rgeos 完成。

    假设“eco”是由rgdal::readOGRmaptools::readShapeSpatial读入的SpatialPolygonsDataFrame,请查看索引可用的关键数据:

    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

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

    【讨论】:

    • 感谢您的意见。我明白你这样做的意思。但是,您将如何在区域地图上绘制均值?
    • 在 sp 中使用 over() 来识别每个点的区域,然后聚合这些值。您的问题实际上并没有明确要求。
    • 很抱歉没有明确提出我的问题。你能更具体一点吗?谢谢
    猜你喜欢
    • 2019-12-04
    • 1970-01-01
    • 2022-01-28
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 2017-05-04
    相关资源
    最近更新 更多