arcpyを使用してx個の近傍の近傍表を生成する


9

私が近距離をキャプチャしようとしている可能性のある3つのSceneriosがあります。

  1. 2つ以上の隣接する駅があるインターチェンジの地下鉄駅。つまり、問題の駅は2つ以上の主要ルートを接続し、2つ以上の隣接駅があります。
  2. 隣接する駅が1つしかない地下鉄の終着駅。終点の駅です。
  3. 隣接する駅が2つあるインライン地下鉄の駅で、どちらか一方のアプローチです。

「隣接するステーション間の平均距離」と呼ばれる値を計算しようとしています

は、arcpy.GenerateNearTable_analysis()2つのオプションを処理できます:最も近いフィーチャまでの距離、およびすべてのフィーチャ間の距離。

誰かがこれらのシナリオを解決するための賢い方法を持っていますか?各ステーションは、「StationType」フィールドの下の属性テーブルで「Interchange」、「Terminal」、または「Inline」として指定されていることに注意してください。

追加:

これは、コメントでの@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

3
FWIWこれは純粋に標準的なソリューションのグラフ理論上の問題です。各頂点の近傍グラフを探します。DCEL(またはネットワークが非平面の場合は一般化)などの標準形式でネットワークを表すとすぐに、すぐに使用できます。これは、すぐに使えるPythonソリューションがいくつか利用できる可能性があることを示唆しています。
whuber

回答:


5

@whuber、提案が最高に表現されるように私は、あなたの問題を信じ隣接行列。つまり、パッケージに頼って仕事をするのではなく、その背後にある理論を理解する時間と傾向がある場合です。

与えられたグラフGについて、頂点が{v 1、v 2、...、v n }である場合(nは頂点の数)、サイズM i、jの行列を作成する必要があります(i = nおよびj =) n。次に、各頂点は、j番目の列の隣接する頂点へのパスの数によって、i番目の行に表されます。

以下の例:

ここに画像の説明を入力してください

比較的単純なデータを表すこのやや複雑な形式を考えると、論理的な順序を表すのではなく、任意の方法で頂点に番号を付ける必要があります。

注:それ自体の上にないステーションループがないと仮定すると、K番目の行は0以外の値を持っていることはありませんK番目の列を。以下のすべての定義は、これが真であると想定しています

注:同じステーション間に同時回線がないと仮定すると、以下のすべての例では、セル値が常に1または0であると想定しています。上記の例では、双方向の移動が許可されていると想定しています。

ステーションカテゴリを識別するためのルール:

1.ターミナル

端末は、値が0でなく、値が1である単一の列を持つk番目の行によって識別されます。上記の例1の頂点1、2、および3を参照してください。

2.ジャンクション

ジャンクションは、1の値を含む3つ以上の列を持つk番目の行によって識別されます。上記の例1の頂点4、または上記の例3のすべての頂点を参照してください。

3.インライン

インラインステーションは、k番目の行に2つの列があり、値が1であることを意味します。上記の例2のすべての頂点を参照してください。({v 1、v 3 }が{v 2、v 4 }と交差するという事実は無視してください。)


あなたは誰で、どこから来たのですか!それは私が長い間受け取った最良の答えの1つでした。@ジオイストありがとうございます。
Michael Markieta

@MichaelMarkietaおかしい話では、私はちょうど私があなたのポストを見ていない2時間前にこれを知りました。
nagytech 2012

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が求めるのは、ネットワークに沿った頂点の可変数の隣接点を特定し、最後までそれらの距離を取得し、それらの統計的要約(平均など)を計算するためのアルゴリズムだと思います。
whuber

@whuberおっと!同意しました、私は少し急いで質問に答えました。
Cyrus

@whuberが注目されています。
hhart

これは私にはうまくいきませんが、ありがとう!
Michael Markieta
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.