gpt4 book ai didi

r - 子集空间点以提取多边形内部的空间点(国家/地区边界)

转载 作者:行者123 更新时间:2023-12-05 06:29:10 26 4
gpt4 key购买 nike

我有一个带有经纬度坐标的 data.frame:

df<-data.frame(
lat=c(40, 30, 40.864),
lon=c(0, 20, 1.274)
)

和一个国家(西类牙)的边界,

library(raster)
border <- getData("GADM",country="Spain",level=0)

我只想为 df 选择 inside border 的点。

我该怎么做?

注意:在我的可重现示例 df 中,第一个入口点在内部,第二个显然在外部,第三个在外部但靠近海岸。

最佳答案

虽然我相信我提到的帖子回答了这个问题,但我认为需要做一些澄清;因此,发布一个答案。

要找到两个地理特征的交集,我们需要有相同的投影。 图书馆帮助我们这样做。确保将经度和纬度放在正确的位置:

sp::SpatialPoints(c(my_point$long,my_point$lat),proj4string=CRS(proj4string(my_raster)))

使用 库,我们可以检查两个空间数据集/特征之间是否存在交集:

rgeos::gContains(my_raster,my_projected_point)

因此,这是它在 OP 示例中的工作方式:

library(sp)        #for projection
library(raster) #for getting the border data
library(rgeos) #for finding intersection
library(tidyverse) #for illustration only

#data
border <- getData("GADM",country="Spain",level=0)
df <- data.frame(
lat=c(40, 30, 40.864),
lon=c(0, 20, 1.274)
)

#this is the part that actually check if a point is inside the border
#adapted from https://stackoverflow.com/questions/21971447
sapply(1:3,function(i)
list(id=i,
intersect= gContains(border,SpatialPoints(df[i,2:1],proj4string=CRS(proj4string(border))))))

# [,1] [,2] [,3]
# id 1 2 3
# intersect TRUE FALSE FALSE

#a map for better understanding
ggplot()+
geom_polygon(data=border, aes(x=long, y=lat, group=group),
fill=NA, color="grey50", size=0.25) +
geom_point(data=df,aes(x=lon,y=lat), color="red", size=1)

enter image description here

关于r - 子集空间点以提取多边形内部的空间点(国家/地区边界),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53779929/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com