在地理点周围创建缓冲区,然后检查坐标列表是否在该缓冲区内?

时间:2016-07-01 18:31:40

标签: r maps gis

我对R中的空间数据有以下谜题:

我有一个带有街道段的数据集(带有各自的起点和终点坐标)。我想在这些点周围创建一个X米的缓冲区,然后检查一个lat / lon点列表是否在该缓冲区内。在R中有办法做到这一点吗?

我可以使用各种包的组合来映射点并映射缓冲区:maptools,ggmap,rgdal,sp和rgeos。但这个程序似乎只映射点和缓冲区,而不允许我检查我的其他坐标是否在缓冲区内。理想情况下,我想生成一个1和0的向量,描述纬度/经度点列表是否在街道段周围的缓冲区内。

有什么想法吗?

这是我一直在使用的代码,但是我得到了所有缺失的值(我知道不应该这样)。我也尝试过使用rgeos的gContains函数,但它崩溃了R.

#Load shapefile in R and transform to appropriate CRS
shp <- readOGR(dsn="/Users/Maps/shapes", layer="shp")
shp_transf <- spTransform(shp_transf, CRS( "+init=epsg:21897" ))

#Create buffer around polygons
shp_buff <- gBuffer(shp_transf, width=40, byid=TRUE, quadsegs=10)

#Make my dataframe of lat/lon points into same projection as buffers
points <- SpatialPoints(points,proj4string=CRS(proj4string(shp_buff)))

#Use over function from SP pacakge
result <- as.integer(over(points, shp_buff)$OBJECTID)

1 个答案:

答案 0 :(得分:0)

事实证明,over()函数之前没有工作,因为带有缓冲区的shapefile和GPS坐标列表位于不同的CRS中。我这样解决了:

shp <- spTransform(shp, CRS("+proj=longlat +datum=WGS84")) proj4string(points) <- CRS("+proj=longlat +datum=WGS84")

然后,你运行over()函数,它会给你每个缓冲区中每个点的次数:

x <- over(points, shp) table(x$ID)

181 304

118 8

因此,特定GPS脉冲来自分段ID 181,总共118次,并且来自分段ID 304,总共8次。