在 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 已经涵盖了细节,但我认为提供工作流程可能会有所帮助。这是假设您使用的是纬度和经度点。您的原始空间数据格式是什么?
- 将您的坐标转换为空间点数据框
SpatialPointsDataFrame
并为其分配一个与您的坐标数据(可能是 WGS84)相匹配的地理 CRS (proj4)
- 将投影更改为具有首选单位的本地投影 CRS
- 将缓冲区应用于空间点数据框,
width
现在将以更多可用单位表示
我有一个购物中心的空间数据集,我想在 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 已经涵盖了细节,但我认为提供工作流程可能会有所帮助。这是假设您使用的是纬度和经度点。您的原始空间数据格式是什么?
- 将您的坐标转换为空间点数据框
SpatialPointsDataFrame
并为其分配一个与您的坐标数据(可能是 WGS84)相匹配的地理 CRS (proj4) - 将投影更改为具有首选单位的本地投影 CRS
- 将缓冲区应用于空间点数据框,
width
现在将以更多可用单位表示