首页 > 解决方案 > 以椭圆形将 SpatialPoints 扩展到 SpatialPolygon

问题描述

我想在 SpatialPointsDataFrame 中的每个点周围生成一个椭圆形状的缓冲区,这意味着最后我希望我的空间数据框中的每个点都有一个多边形,其形状像一个延伸原始点 130 的椭圆公里纬度和 70 公里纵向。

我尝试使用 st_ellipse 函数,但遇到了生成的多边形绘制在随机位置而不是作为生成它的点周围的缓冲区的问题。也许有人有一个想法,这里可能出了什么问题,或者有一个关于在空间点周围生成椭圆的不同方法的建议。

请参阅下面我使用的代码。

非常感谢您!

# example data frame

ID<-"point1"
longitude<- -120.628
latitude<- 36.64

spp<-data.frame(ID,longitude,latitude)

projection<-"+proj=laea +lat_0=45 +lon_0=-100 +x_0=0 +y_0=0 +a=6370997 +b=6370997 +units=m +no_defs" 

# convert to st object to be able to use st_ellipse function

stp<-st_as_sf(spp, coords = c("longitude", "latitude"))

# assign same projection as background
stp<-stp %>% st_set_crs(st_crs(world2_proj))

# generate ellipse around point (70 km longitudinal; 130 km latitudinal)
stp_elp<-st_ellipse(stp, ex=70000, ey=130000)

#convert back to spatial polygon
elp_poly<-as(stp_elp, "Spatial")

# convert into a SpatialPolygonDataFrame
df<- data.frame(id = getSpPPolygonsIDSlots(elp_poly))
row.names(df) <- getSpPPolygonsIDSlots(elp_poly)

spdf <- SpatialPolygonsDataFrame(elp_poly, data =df)

# change projection to match to background
crs(spdf)<-projection

两个 SpatialPolygonsDataFrame 具有相同的投影:

spdf 类:SpatialPolygonsDataFrame 特征:1 个范围:-70120.63、69469.03、-129772.7、129846(xmin、xmax、ymin、ymax)crs:+proj=laea +lat_0=45 +lon_0=-100 +x_0=0 +y_0=0 +ellps=sphere +units=m +no_defs 变量:1 名称:id 值:ID1

world2_proj 类:SpatialPolygonsDataFrame 特征:209 范围:-12240565、11932463、-12523922、11616224(xmin、xmax、ymin、ymax) crs:+proj=laea +lat_0=45 +lon_0=-100 +x_0=0 +y_0=0 +ellps=sphere +units=m +no_defs 变量:3 个名称:NAME、GMI_CNTRY、REGION 最小值:阿富汗、AFG、南极洲最大值:津巴布韦、ZWE、撒哈拉以南非洲

# But when I try to plot them on top of each other, the new polygon (in red) plots in a random location away from the original location (blue cross).


# plot on top of background to see if function worked

plot(crop(world2_proj,e))
plot(spdf, add=T, col="red")

新多边形(红色)绘制在远离用于生成椭圆的位置的随机位置

标签: bufferspatialellipse

解决方案


推荐阅读