buffer - 以椭圆形将 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")
解决方案
推荐阅读
- c++ - C ++ Gtest如何将参数传递给类夹具?
- r - 按组合并两个因子时重新计算新的加权平均值,并保留原始数据
- c++ - 无法连接到两台不同机器上的 localhost
- vba - 我无法检索网页上的信息
- android - Android Livedata 存储库单元测试问题
- image - 如何在文件对象的资产文件夹中加载图像?我收到一个错误“没有这样的文件或目录,errno = 2”
- c++ - CUDA 代码可以在 Linux 上编译,但不能在 Windows 上编译(Visual Studio 2012)
- r - 为不包括结果列的每个组合附加缺失的日期
- p5.js - 我的一个变量被无缘无故地改变了
- javascript - 如何保护自己免受 XSS 攻击,同时按照用户期望的方式显示字符?