繁体   English   中英

R-计算点和线之间的最小距离

[英]R- Calculating the minimum distance between points and lines

我有一大组地块的多边形形状文件(用于 50 多个县),我想遍历它们中的每一个并计算从每个地块的中心到最近的铁路的距离,在全国范围内存储在一个线形文件中。

我想出了两种不同的方法来做到这一点:来自 geospheres 包的 point2Line 和来自 rgeos 包的 gDistance。 每个人对我来说都有不同的问题。

对于 point2line,我的代码如下所示:

rail_projection <-spTransform(rail_file,CRS(proj4string(parcels)) #project to same CRS
rail_crop<-crop(rail_projection,extent(parcels)) #crop to extent of parcels
centroids<-gCentroid(parcels,byid=T) # take centroid of parcel polygons.
m<-gDistance(rail_crop,centroids,byid=T)

但这会发出以下警告:

Warning messages:
1: In RGEOSDistanceFunc(rail_crop, centroids, byid=T, "rgeos_distance") :
Spatial object 1 is not projected; GEOS expects planar coordinates
2: In RGEOSDistanceFunc(rail_crop, centroids, byid=T, "rgeos_distance") :
Spatial object 2 is not projected; GEOS expects planar coordinates

它还给了我一个 nparcels X(我认为行矩阵的数量)的数字,我不太确定其测量值。 我想要以公里或英里为单位的测量值。

第二种方法,使用 dist2line 看起来像这样: dist<-dist2Line(centroids,rail_crop) 它工作正常,但唯一的问题是它需要很长时间! 如果要遍历 60 个左右的县,可能需要几天时间。 此外,如果最近的铁路在另一个县,我宁愿不必裁剪铁路形状文件。 使用整个 shapefile 运行代码需要更长的时间。

所以我基本上要寻找的是一种以相当有效的方式获得从点到线形状文件的最近距离的方法,以公里或英里或类似的可解释的方式输出距离。 如果这可以通过 gDistance 以没有这些错误的方式完成,那就太好了! 如果有办法从 dist2Line 或其他方法加快速度,那也很棒。 如果您对如何使用一些缓冲区裁剪轨道 shapefile 也有任何想法,我也将不胜感激。 (我无法发布代码,因为包裹数据是专有的)

我仍然是空间内容的初学者,如果我在跟随时遇到问题或者之前已经回答过,我很抱歉。 我环顾四周,没有找到我可以在这里工作的解决方案。

谢谢!

使用数据编辑

所以我想我想出了我的警告信息来自使用this 的地方 我使用的是 3d 坐标系而不是平面坐标系。 我用我从互联网上为威斯康星州的一个县下载的 shapefile 运行了一些代码,gDistance 输出了一个矩阵,其中包含包裹数量 x 线数以及从每个包裹到每条铁路线的距离(我假设)。 有谁知道这些距离的测量结果是什么? 我如何将它们转换为公里或英里? 还有我应该使用的“首选”平面投影。 此外,任何关于如何使用一些缓冲区裁剪 shapefile 的想法都将不胜感激。 文件/代码可以在这里找到

我建议查看通用横轴墨卡托系统 我不知道它是否是最好的投影坐标系,但它是我在我的领域中看到最常用的一个(只要研究区域不是太大)。

找到特定于您所在地区的 UTM 区域后,您可以使用sp::spTransform()重新投影您的 shapefile,以便gDistance()可以以公里或米为单位返回您的距离。

这是覆盖肯尼亚的 UTM 区域的 proj4string: +proj=utm +zone=37 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs 如您所见,此处的单位以米为单位( +units=m )。

可能值得您花时间研究一下相对较新的sf包,它简化和标准化了空间数据的函数和类。 这是您可以查看的简短介绍: http : //strimas.com/r/tidy-sf/ 该包中的类似函数是st_transform()st_distance()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM