【问题标题】:Creating a buffer around a geographic point and then checking whether a list of coordinates is inside that buffer?在地理点周围创建一个缓冲区,然后检查坐标列表是否在该缓冲区内?
【发布时间】: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 &lt;- over(points, shp_buff)会发生什么?
  • 它创建一个与 shp_buff 相同维度的空数据框
  • 当您声明您的points 对象时,数据框中的坐标是否已经在 epsg:21897 CRS 中?该行上方评论的措辞听起来像是您正在尝试转换它们。另外,当你运行plot(shp_buff) 然后plot(points, add=T) 时会发生什么?
  • 嗨,Jacob - 我运行它以确保 points 向量与 shapefile shp 处于同一投影中。运行 plot(shp_buff) 时,它会创建缓冲区图,但运行 plot(points, add=T) 时会创建一个空值。
  • 我的问题是,坐标系中的点是您定义它们的原始坐标系,还是您希望它们被 SparialPoints 函数转换?

标签: r maps gis


【解决方案1】:

原来,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 次。

【讨论】:

    猜你喜欢
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多