重み付きティーセンポリゴンを作成しますか?


17

ポイントシェープファイルがあり、次のスクリプト構文を使用してプログラムでティーセン(ボロノイ)ポリゴンを作成します。

CreateThiessenPolygons_analysis (in_features, out_feature_class, fields_to_copy) 

ただし、各ポイントはエリア(つまり、各ポリゴンの推奨サイズ)に関連付けられているため、このフィールドに基づいてティーセンポリゴンに重みを付ける必要があります。

それは可能ですか?

VBAに関連するコードはありますか?

回答:


15

ティーセンポリゴンを構築するために距離を重み付けする方法は多数あります。 それらを構築する際の基本的な考え方は、任意のポイントxと2つの固定ポイントpおよびqとの間の距離を比較することに基づいています。xqよりもpに「近い」かどうかを判断する必要があります。この目的のために、少なくとも概念的には、距離dp = d(xp)およびdq = d(xq)を考慮します。通常、重み付けは2つの方法で行われます。ポイントに正の数値の重みwpおよびwqを与えることができ、距離自体を変換できます。

意味をなすために、距離が増加するにつれて変換(これをfとして記述します)を増加させる必要があります。つまり、d '> d> = 0の場合は常にf(d')> f(d)です。このような変換の例は、f(d)= d + 1、f(d)= d ^ 2(Reillyの小売重力の法則)です。 )、f(d)= 1-1 / d(すべての距離が1より小さいと仮定)、f(d)= log(d)、f(d)= exp(d)-1

次に、xqよりもpに「近い」と正確に言います。

f(d(xp))/ wp <f(d(xq))/ wq。

乗算ではなく、重みによる除算に注意してください。これは、大きな重みは、より大きな距離でポイントを「引き込む」傾向があることを意味します。これは、以下の実行例で確認できます。

ここに美しいものと、このやや抽象的な説明の要点があります:結果のティーセン領域は、複雑で非常に計算しにくい境界を持つことができますが、グリッドベースの表現を使用して計算するのは比較的簡単です。 レシピは次のとおりです。

  1. 各入力ポイントpについて、そのユークリッド距離グリッド[d(p)]を計算します。

  2. マップ代数演算を使用してfと重みを適用し、各距離グリッドを次のように再表現します。

    [fp] = f([d(p)])/ wp。

    以下はf(d)= 100 + d ^(3/2);を使用した例です。スケールは400 x 600です。

    図1

    f(d)が増加すると、値は暗くなります。明らかに、この例の距離は中央の赤い点を基準にしています。他の4つのポイントは、個別の距離計算を取得します(表示されていません)。ドットの面積は、2、10、3、4、5の重みに比例します。

  3. これらすべてのグリッドの極小値を計算します[fp]。これを[f]と呼びます。以下に例を示します。

    図2

  4. [f]と各[fp]を比較して、各グリッドセルに、[f]> = [fp] である最初のpの識別子を割り当てます。(これは、例えば、最低位置の操作で1ステップで実行できます。)

    図3

    (この重み関数fのベクトル形式の解を計算するアルゴリズムはどこにも存在しないと思います。)

明らかに、ポイントpが数個以上ある場合は、これをスクリプト化します。また、その数が数千に達すると、おそらく、計算を実行不可能であるとして試行を放棄します(ただし、計算をタイリングすることで計算を高速化する方法はあります)。

楕円上のティーセンポリゴンを示す別の例は、https://gis.stackexchange.com/a/17377/にあります


3
+1ラスターアプローチを採用することで、この問題がどれほど簡単になるかはわかりませんでした。
カーククイケンダル

Whuber:非常に洗練されたプロセスです!ただし、アプリケーションに集中するために、入力ファイルの各ポイントは、土地区画のおおよその中心を表します。上記のスクリプト行を使用して、ベクターのティーセンポリゴンファイルを作成します。各ポリゴンには、スペース、すなわち境界の等距離のティーセンポリゴンの原理に基づくサイズが割り当てられます。一方、各ランドパレルには、エリアフィールドで提供される定義済みのサイズがあります。これは、ポリゴンがこの要素に比例するように考慮したい要素です。何か考えてください?
デメトリス

Demetris、あなたの発言は理解できません。ティーセンポリゴンのコレクションではなく、エリアカートグラムが本当に欲しいようです。これらのポリゴンを計算する理由を説明すると役立ちます。彼らはどのような問題を解決しますか?それらはどのように解釈されますか?
whuber

Whuber:ティーセンポリゴンプロセスで入力した各ポイントは、新しい土地区画セットのおおよその重心を表します。したがって、土地区画の形状を表すこれらのポイントに基づいて、ティーセンポリゴンを作成します(1対1の土地区画)。これらのポイントを移動して遺伝的アルゴリズムを入力することにより、ランダムな土地区画形状の多くのセットを作成できます。問題は、これらの生成されたパーセルシェイプ(つまり、ティーセンポリゴン)に事前定義された領域が必要であり、ティーセンポリゴン操作を利用するときにこれを考慮することが可能かどうかです。これが理にかなっていることを願っています。
デメトリス

あなたの遺伝的アルゴリズムは何をしようとしていますか?重み付きのティーセンポリゴンは必要ないように聞こえます。ポリゴンが事前に指定された領域、または事前に指定された相対領域に到達することを保証する可能な重みは存在しないと思います。
whuber

10

必要なのは、重み付けされたボロノイ図です。http//en.wikipedia.org/wiki/Weighted_Voronoi_diagram は、2次元平面で乗法の重みを使用して行われた場合、円形のディリクレテッセレーションとしても知られています。誰かがこれらを構築するためにarcgis 9拡張機能を構築したようです:http ://arcscripts.esri.com/details.asp?dbid=15481 ここで利用可能なユーザーガイド http://geography.unt.edu/~pdong/software .htm およびDong、P.、2008で発行された論文。GISのポイント、ライン、ポリゴンフィーチャの乗法的に重み付けされたボロノイ図の生成と更新。Computers&Geosciences、Volume 34、Issue 4、Pages 411-421。

このためのベクトルベースのアルゴリズムに関する最近の記事があります(P Dongのアルゴリズムはラスターベースであると仮定しています)。 http://www.sciencedirect.com/science/article/pii/S0098300411003037 Abstractは、c#コードが含まれていると述べています。


1
Blord-castillo:この情報すべてに感謝します。これは非常に便利であり、包括的な回答として受け入れます。しかし、私の新しい問題は、上記のスクリプト行などの入力を提供することにより、コード内で何度もそのツールを実行したいということです。それは可能ですか?
デメトリス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.