【发布时间】:2018-05-21 01:47:21
【问题描述】:
我有大量的地块多边形 shapefile(用于 50 多个县),我想遍历每个地块并计算从每个地块的中心到最近的铁路的距离,并在全国范围内存储在 line shapefile 中.
我想出了两种不同的方法来做到这一点: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
因此,我本质上要寻找的是一种以相当有效的方式获得从点到线 shapefile 的最近距离的方法,该方法以公里或英里为单位吐出距离,或者类似的可解释的东西。如果这可以通过 gDistance 以没有这些错误的方式完成,那就太好了!如果有一种方法可以从 dist2Line 或其他方法加速它,那也很棒。如果您对如何使用一些缓冲区裁剪轨道 shapefile 也有任何想法,我也将不胜感激。 (由于包裹数据是专有的,我无法发布代码)
我仍然是空间方面的初学者,如果我无法理解或者之前已经回答过这个问题,我很抱歉。我环顾四周,没有找到我能够在这里工作的解决方案。
谢谢!
用数据编辑
所以我想我使用this 找出了我的警告消息来自哪里。我使用的是 3d 坐标系而不是平面坐标系。我已经使用从互联网上为威斯康星州的一个县下载的 shapefile 运行了一些代码,gDistance 输出了一个矩阵,其中包含地块数 x 每个地块到每条铁路线的距离(我假设)的线数。有谁知道这些距离的测量值是多少?如何将它们转换为 KM 或英里?还有一个我应该使用的“首选”平面投影。此外,任何关于如何用一些缓冲区裁剪 shapefile 的想法都将不胜感激。文件/代码可以找到here
【问题讨论】:
-
你应该发布一些工作代码。提供一些用代码创建的简单示例数据;有很多这样的例子。
-
@RobertH 在弄清楚了一些事情后添加了一些代码/澄清了一点。我编辑的帖子的最后一部分应该解释我的关键问题
标签: r distance spatial geosphere