我对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)
答案 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次。