使用arcpy为x个邻居生成近表


9

我正在尝试为以下距离捕获3种场景:

  1. 换乘地铁站,具有2个或更多的相邻站。即,所讨论的站点连接2条或更多的主要路线,并具有2条或更多的相邻站点。
  2. 终点站地铁站,只有1个相邻站。这是行尾的车站。
  3. 嵌入式地铁站,其中有2个相邻站,两种方法之一。

我正在尝试计算一个可能称为“相邻站点之间的平均距离”的值

arcpy.GenerateNearTable_analysis()可处理两种选择:距离最接近的特征,并且距离所有功能之间。

有没有人有解决这些情况的聪明方法?注意,在属性表的“ StationType”字段下,每个站都被指定为“交换”,“端子”或“内联”。

添加:

这是一些基于@whuber在评论中建议的伪代码。我还没有时间弄清楚这个问题,因此,如果有人想刺中它,您将获得复选标记!;)

我看了一下NetworkX库,它似乎可以按我的意愿工作。

给定图:

A —― B ―― C ―― D
     |
     E

以及节点和链接:

Nodes = ["A", "B", "C", "D", "E"]
Links = [("A", "B"), ("B", "C"), ("C", "D"), ("B", "E")]

def myFunction(node):
    identify the links that node belongs to
    count the number of links
    calculate the total link lengths
    divide the total link lengths by the number of links
    return someValue

我想我也可以提到我正在使用ArcGIS 10.1,并且我喜欢arcpy.da模块(因为它的速度)。我希望我们可以使用它。
Michael Markieta 2012年

3
FWIW这纯粹是带有标准解决方案的图论问题:您寻找每个顶点的邻域图。一旦以标准格式(例如DCEL)表示网络,则几乎可以立即使用它(如果网络是非平面的,则可以泛化)。这表明可能会提供一些现成的Python解决方案。
ub

Answers:


5

我相信您的问题,如@whuber,建议最好在邻接矩阵中表示。也就是说,如果您有时间和意愿去理解其背后的理论,而不是依靠软件包来为您完成工作。

对于给定的图G,其顶点为{v 1,v 2,...,v n },其中n是顶点数,您需要创建一个矩阵M i,j,其中i = n和j = 。然后,在第i行中,通过在第j列中找到相邻顶点的路径数来表示每个顶点。

下面的例子:

在此处输入图片说明

考虑到这种表示您相对简单的数据的复杂形式,您将需要以任意方式对顶点进行编号,而不是表示任何逻辑顺序。

注:在其自身假设没有站环路,一个ķ个行永远不会有在除0以外的值ķ列。以下所有定义均假定这是正确的

注意:假设同一站点之间没有并发线路,则以下所有示例均假定像元值将永远为1或0。上述示例还假定允许双向传播。

识别电台类别的规则:

1.终端

终端将通过第k行来识别,该行具有不具有0值且值为1的单列。请参见上面示例1中的顶点1、2和3。

2.交界处

结点将由具有多于两列的第k行(其值为1)标识。请参见上面示例1中的顶点4,或者上面示例3中的所有顶点。

3.内联

通过在第k行中恰好有2列(值是1)来表示内联桩号。请参见上面示例2中的所有顶点。(忽略{v 1,v 3 }与{v 2,v 4 } 相交的事实。)


你是谁,你从哪里来!这是我很长时间以来收到的最好的答案之一。谢谢@Geoist。
Michael Markieta 2012年

@MichaelMarkieta有趣的故事,我在不到看到您的帖子的两个小时前了解到这一点的。
nagytech'7

1

您可以尝试使用Shapely。如果将弧形点转换为整形点,则可以计算单个点之间的距离。

import arcpy
import shapely

arc_point1 = arcpy.Point(1,1)
arc_point2 = arcpy.Point(5,5)

shp_point1 = shapely.geometry.Point(arc_point1.X, arc_point1.Y)
shp_point2 = shapely.geometry.Point(arc_point2.X, arc_point2.Y)

distance = shp_point1.distance(shp_point2)
print "distance:", distance

我应该提到Shapely仅可用于笛卡尔平面上的要素,因此,如果您的数据在地理坐标中,则此方法将无效。
赛勒斯(Cyrus)

这个答案暗示了在如何理解问题上的模棱两可。我读过这个问题,因为它表明距离是已知的。他们的计算似乎不是问题。我认为,OP寻求的是一种算法,该算法可识别沿网络的顶点的可变数目的相邻邻居,直到最后获取它们的距离并计算它们的统计摘要(例如平均值)。
ub

@whuber糟糕!同意,我太匆忙地回答了这个问题。
赛勒斯(Cyrus)2012年

@whuber有印记。
哈特2012年

这不会为我工作,但谢谢!
Michael Markieta 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.