【发布时间】:2016-07-01 18:31:39
【问题描述】:
我对 R 中的空间数据有以下困惑:
我有一个包含街道段的数据集(具有各自的起点和终点坐标)。我想在这些点周围创建一个 X 米的缓冲区,然后检查纬度/经度点列表是否在该缓冲区内。有没有办法在 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)
【问题讨论】:
-
运行
result <- over(points, shp_buff)会发生什么? -
它创建一个与 shp_buff 相同维度的空数据框
-
当您声明您的
points对象时,数据框中的坐标是否已经在 epsg:21897 CRS 中?该行上方评论的措辞听起来像是您正在尝试转换它们。另外,当你运行plot(shp_buff)然后plot(points, add=T)时会发生什么? -
嗨,Jacob - 我运行它以确保
points向量与 shapefileshp处于同一投影中。运行plot(shp_buff)时,它会创建缓冲区图,但运行plot(points, add=T)时会创建一个空值。 -
我的问题是,坐标系中的点是您定义它们的原始坐标系,还是您希望它们被 SparialPoints 函数转换?