在 R 中围绕空间数据创建缓冲区

Create buffer around spatial data in R

我有一个购物中心的空间数据集,我想在 R 中围绕它创建缓冲区。

我认为这些包会有用:

require(maptools)
require(geosphere) 

我能够为一组坐标这样做,但不能为空间数据这样做。代码如下所示:

coordinates(locs) <- c("Longitude", "Latitude")  # set spatial  coordinates
fivekm <- cbind(coordinates(locs), X=rowSums(distm (coordinates(locs)[,1:2], fun = distHaversine) / 1000 <= 5)) # number of points within 5 km

但我不知道 function/package 用于一组多边形。有人可以就功能(或代码)提出建议,我会从那里开始吗?

谢谢!

我认为目前唯一的选择是将您的经度和纬度点投影到平面地图上,然后在那里进行所有操作。据我所知,目前还没有用于在球体上进行多边形几何的软件包(我正在开发一个,但没有预计到达时间)。

投影过去是用 sp 包中的 spTransform 完成的,但现在使用具有以下功能的更现代的简单功能包 sf 可能会更方便 st_transform。小插图 https://cran.r-project.org/web/packages/sf/vignettes/sf1.html 有一个名为 "Coordinate reference systems and transformations" 的部分可以帮助您完成这一部分。缓冲在 "Geometrical operations".

部分中描述

在库 rgeos 中,有与 SpatialPoints 或 SpatialPolygons 一起使用的 gBuffer 函数。
width 参数允许设置您要缓冲的距离。但是,请注意,此距离在所用坐标系的比例范围内。因此,对于非投影数据,以度为单位而不是以米为单位。正如@Ege Rubak 所建议的,您必须首先使用 spTransform 投影您的数据(请务必根据您的位置使用适当的 CRS)。
至于现在,rgeos 图书馆与图书馆 sp 合作,但(还没有?)与最近的 sf.

前两个 post 已经涵盖了细节,但我认为提供工作流程可能会有所帮助。这是假设您使用的是纬度和经度点。您的原始空间数据格式是什么?

  1. 将您的坐标转换为空间点数据框 SpatialPointsDataFrame 并为其分配一个与您的坐标数据(可能是 WGS84)相匹配的地理 CRS (proj4)
  2. 将投影更改为具有首选单位的本地投影 CRS
  3. 将缓冲区应用于空间点数据框,width现在将以更多可用单位表示