首页 文章

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

提问于
浏览
0

我对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

    事实证明, 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次 .

相关问题