これは、上記のコメントで述べたワークフローの図です。これを行う簡単な既定のルーチンはわかりませんが、一連の出発地と目的地の座標をインポートできるExcelスプレッドシートを添付しました。次に、シートはセットまたは円形の線座標を作成します(ここにスプレッドシート)。数式が設定されているため、新しいOD座標をインポートして数式を拡張して結果を入力するのは非常に簡単ですが、プロセスのロジックをより明確に説明します。 ArcMap(または何でも)。
簡単に言うと、これは主に大円線が人気であるのと同じ理由でODデータを視覚化するのに合理的だと思います。線がより視覚的に区別されます。私が提案するアプローチには、フローの方向が半円でエンコードされるという点で、大円線よりも1つの利点があります。このサイトの他の回答では、フローマッピングの視覚化手法のより一般的な概要を説明します。このような弧を作成することに加えて、同じ手法の多くを適用できます。
したがって、私が提案しているように線を描く方法を詳しく説明すると、基本的にはプロセスに3つのステップしかない、1)流れの方向を見つける、2)中点と流れの距離を見つける、3)処理する中点を円の中心とし、円弧(起点から終点までの半円)を描きます。明確にするために、投影された起点座標(x1,y1)
と終点座標のセットのペアから始め(x2,y2)
ます。
したがって、1)流れの方向を見つけます。最初に式ATAN((y2 - y1)/(x2 - x1))
を使用し、次に、方向に応じて、方向が東向きか西向きかに応じて方向を割り当てます。以下の疑似コードの例(両方とも同じ座標にあるODポイントにゼロの方向を割り当てます)。ここで、変数or_rad
は「ラジアンでの向き」の省略形であることを意味しpi
、piの値を指します。
#tan_or = ATAN((y2 - y1)/(x2 - x1)).
Do If x2 = x1 and y1 <= y2.
compute or_rad = 0.
Else if x2 = x1 and y1 > y2.
compute or_rad = pi.
Else if x1 > x2.
compute or_rad = 270/180*pi - #tan_or.
Else if x1 < x2.
compute or_rad = 90/180*pi - #tan_or.
End If.
2)フローの中間点と距離を見つけます。これは非常に単純です。1組のペアの座標の場合、(x、y)座標の中点はになります(x1+x2/2,y1+y2/2)
。それでは、次の部分を定義mid_x = (x1 + x2)/2
しmid_y = (y1 + y2)/2
てみましょう。ピタゴリウムの定理を使用した距離は単純distance = SQRT((x1 - x2)^2 + (y1 - y2)^2)
です。
3)次に、その情報が与えられたら、事前に指定された度数と半径(2点間の距離の半分)上に与えられた円を描きます。たとえば、のOD座標ペアのセットから始めるとしましょう(1,3):(3,2)
。度単位の方向は〜116(およびラジアン〜2)、x、yの中間(2,2.5)
点は2つのポイント間の距離は約2.2になります。
それでは、半円を180度に描画するとします。pseduo-code(すでに定義した変数を使用)では、反復は次のようになります。
for i in (0 to 180 degrees)
rad_i = i/180*pi. /*converts i from degrees to radians
step_or = pi - rad_i /*for clarity, this makes the circle go from origin to destination
radius = distance/2
Arc_X = mid_x + sin(or_rad - step_or)*radius.
Arc_Y = mid_y + cos(or_rad - step_or)*radius.
以下は、上で指定した元の座標の図です。ゼロから始まり180で終わることで、存在ポイントと終了ポイントが同じ場所にあることを確認します。より多くのステップ(より詳細な弧)またはより少ない(より詳細な弧)を持つようにループを調整することは、かなり明白です。
なお、サイトの他のスレッドでは、ポイントデータからのラインの作成について説明しています(polyline-creationタグを参照)。添付のxlsスプレッドシートに例があり、ET Geo-wizardsアークマップツールを使用して、スプレッドシートの座標をシェープファイルの線に変換しました。添付されたスプレッドシートのサンプルデータの円弧は、次のようになります。
この現在のセットアップに対する1つの単純であるが潜在的に有用な更新は、数式を更新して弧の偏心量を事前に指定できるようにすることです。私のアドバイスについて、コミュニティからの提案やフィードバックをお待ちしています。