r语言 - 在一个地理点周围创建一个缓冲区,然后检查该缓冲区内是否有一个坐标列表



我对R中的空间数据有以下困惑:

我有一个具有街道段的数据集(具有各自的起始和结束坐标)。我想在这些点周围创建一个X米的缓冲区,然后检查这个缓冲区内是否有一系列的经纬度点。有没有办法在R中做到这一点?

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

任何想法?

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

#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)

事实证明,over()函数之前没有工作,因为具有缓冲区和GPS坐标列表的shapefile在不同的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次。

相关内容

最新更新