虽然我相信我所提到的帖子回答了这个问题,但我认为需要一些澄清,因此发布一个答案。
要找到两个地理特征的交点,我们需要有相同的投影。sp库可以帮助我们做到这一点。确保将经度和纬度放在正确的位置:
sp::SpatialPoints(c(my_point$long,my_point$lat),proj4string=CRS(proj4string(my_raster)))
使用rgeos库,我们可以检查两个空间数据集/特征之间是否存在交集:
rgeos::gContains(my_raster,my_projected_point)
因此,以下是OP示例的工作原理:
library(sp)
library(raster)
library(rgeos)
library(tidyverse)
border <- getData("GADM",country="Spain",level=0)
df <- data.frame(
lat=c(40, 30, 40.864),
lon=c(0, 20, 1.274)
)
sapply(1:3,function(i)
list(id=i,
intersect= gContains(border,SpatialPoints(df[i,2:1],proj4string=CRS(proj4string(border))))))
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)
sapply(1:nrow(df), function(i){gContains(spa.mask, SpatialPoints(df[i,], proj4string = CRS(proj4string(spa.mask))))})
对于这三个点,它返回FALSE
。我不明白为什么。也许是因为我的边界包含多个多边形(岛屿和半岛)? - Javi_VM