子集空间点以提取多边形内部的空间点(国家边界)

Posted

技术标签:

【中文标题】子集空间点以提取多边形内部的空间点(国家边界)【英文标题】:Subset Spatial Points to Extract those inside of a Polygon (Countries Borders) 【发布时间】:2019-05-15 17:40:46 【问题描述】:

我有一个带有经纬度坐标的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 中,第一个入口点在里面,第二个显然在外面,第三个在外面但靠近海岸.

【问题讨论】:

***.com/questions/21971447/… 事实上@Masoud 链接的问题与我的问题非常相似。但是,它不起作用。 sapply(1:nrow(df), function(i)gContains(spa.mask, SpatialPoints(df[i,], proj4string = CRS(proj4string(spa.mask))))) 返回FALSE三点。我不理解为什么。也许是因为我的边界包含几个多边形(岛屿和半岛)? 正如我在问题中所说,其中一个在边界内。我不明白你所说的“地图”是什么意思。我做了一个绘图并检查了该点是否在多边形内,而另外两个在多边形外... 检查我的答案。我的猜测是您以错误的方式实施该解决方案的一部分。 【参考方案1】:

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

要找到两个地理特征的交集,我们需要有相同的投影。 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)        #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://***.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)

【讨论】:

以上是关于子集空间点以提取多边形内部的空间点(国家边界)的主要内容,如果未能解决你的问题,请参考以下文章

按坐标子集空间多边形 df

从空间点数据创建边界多边形,以便在传单中绘图

已知空间三角形,四边形,或者五边形的顶点的三维坐标,如何遍历多边形内部的每个点。

查找给定多边形 w.r.t 的两个“边界”顶点。已知(光源)点

ARCGIS中如何用生成的坡度图提取多边形的平均坡度?

谷歌地图边界多边形