既存のポイントのセットから最も遠いポイントを見つけるにはどうすればよいですか?


17

シェープファイルとしてポイントのセットがあり、既存の各ポイントから可能な限り長い距離を持つ新しいポイントの(座標)を見つけたいと思います。それは可能ですか?はいの場合、サンプルVBコードはありますか?おかげでデメトリス


既存のポイントごとに新しいポイントが必要ですか、それともすべてのポイントから何らかの形で「最も遠い」1つのポイントが必要ですか?そして最も遠いのは、「地球の反対側」という意味ですか?その場合、緯度に-1を掛けて、経度に180を加算します(結果の値が180を超える場合は360を減算します)。
nmpeterson

興味深い質問は、地球上に点在する既存のポイントを考えると、すべての既存のポイントから最も遠い地球上の新しいポイントを見つけることだと思います。
カーククイケンドール

実質的には、二等辺三角形の端の点になります。この点で、距離は、あなたが行きたい距離によってのみ制限されます。質問を適切に読んだ場合、あなたは両方のポイントから最も遠いポイントが欲しいですか?同様に?
毛深い

1
ああ!私の投稿は素晴らしい議論と資料を作成しました!NMpeterson:まず、私のポイントは小さな平らなエリア内にあると言わざるを得ません。地球計算の必要はありません。提起された2番目の問題を探しています。つまり、既存のすべてのポイントから何らかの形で「最も遠い」ポイントです。それで、これに集中してください。
デメトリス

元の質問で要求されたサンプルVBコードが利用できるかどうか疑問に思っています。たぶん、そのようなコードは、専門家の応答を考えるとすでに明らかです。しかし、初心者として、私は親切にwhuberによって提供されるソリューションを再作成することから始めたいと思っています。事前にコメントではなく答えとしてこれを装ったことをおaび申し上げます。

回答:


12

球形のボロノイ図(ティッセンポリゴン)を作成するカーククイケンダルの推奨は良いものですが、解決するための技術的な問題があるかもしれません。それまでの間、別の方法として、別のスレッドで説明されている標準のラスターソリューションを適用できます。ユークリッド距離の代わりに球面距離を使用します。

これは、5つのポイントを使用した例で、ここでは(lat、lon)として示されています。

 82.7051   -145.256
 60.3321     81.2881
-17.076     105.125
-38.792    -122.686
  0.000     180.000

距離マップ

この球面距離マップは、経度-180〜180度の水平方向と緯度-90〜90度の垂直方向に地球全体に広がります。ポイントは大きな赤い点で示されます。距離は明るさとともに増加します。見かけの尾根は大円の一部でなければなりません。近くの小さな黒い点(-15.3268、-2.04352)は、最大距離11,227 kmのポイントを示します。(距離は、ITRF00楕円体基準で計算されました。)

このグリッドの解像度は1度です。より正確な解決策を得るには、そのようなポイント(およびグローバル最大値に十分近い値を持つ他のローカル最大値)にズームし、より小さくより高い解像度のグリッドで計算を繰り返すことができます。


ベクトルよりもずっときれいです。ラスターにフラットな地球モデルが必要だと思った理由がわかりません。
カーククイケンダル

かなり、はい、しかし非効率的です。ベクトルベースの球面ボロノイ解がうまくいくのを見るといいでしょう。
whuber

@Whuber:ブラックポイントの座標を自動的に取得するにはどうすればいいですか?」
Demetris

@Demetris 1つの方法は、グリッド上の最大値を計算し、その値に等しいすべてのセルを選択し、そのセルの中心の座標を使用することです。
whuber

@Whuber:どうもありがとう。これは良い考えです。ただし、フィーチャクラス(一意のポリゴン)に基づいて出力ラスターをクリップする必要があります。これはできますか?
デメトリス

8

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

私はこれを試したことはありませんが、これはうまくいくようです:

球の3Dボロノイ図を作成します。この結果のポリゴンは、元の既存の(シード)ポイントのほぼ中央に配置されます。

結果の各頂点をループして、最も近い既存のポイントから最も遠い頂点を見つけます。この地点は、地球上で最も遠い地点である必要があります。


これは素晴らしいアイデアです(+1)。しかし、すべての点が共通の半球内にある場合、球面ボロノイ図はどのように見えますか?参照するコードは凸包で取得しますが、機能しないようです。
whuber

うーん、そうですね、それらがすべて共通の半球になくても、シードポイントのないポリゴンが1つあると思います。凸包の重心の対pod点を使用して、その点を構築した場合はどうなりますか?次に、各頂点をループすることに加えて、この凸対対点を調べて、最大頂点距離よりも近くにあるかどうかを確認します。
カーククイケンドール

それが私の最初の考えでしたが、対pod点は人工的なポリゴンを作成します。たとえば、すべてのポイントへの対抗策が含まれている場合、イラストで何が起こるかを考えてください!おそらくこの性質の解決策はありますが、簡単ではないようです。
whuber

1

コスト加重距離関数を使用して、ラスター内のすべてのセルが他のすべてのポイントからどれだけ離れているかを特定できます。


費用はいくらですか?
whuber

コストを1ユニットに設定した場合; 距離に基づいて最も遠いポイントを特定できます。
djq

@whuberおそらく、これはすでに述べたユークリッド距離のアプローチを計算することと同じです。
djq

それがユークリッド距離です。実際には、それでもありません:それは奇妙な種類の八角形の距離です(円は実際には八角形です)。この状況(ポイントからの距離、バリアなし)では、CostDistanceを活用するのではなく、ユークリッド距離または球面距離グリッドを直接計算する方がはるかに正確で高速です。
whuber

1つのポイントの座標だけが必要であり、既存のベクトルのポイントセットがあるため、コスト加重距離関数が役立つかどうかはわかりませんが、試してみます。ありがとう。
デメトリス

1

私の知る限り、この「アクセス不能の極」分析は繰り返し行う必要があります。

投影による歪みを最小限に抑えた小さな領域を見ている限り、反復ラスタアプローチが適切です。各セルについて、すべてのポイントまでの距離を計算し、最小距離を取得します。最も高い値を持つセルは極です。Spatial Analystでユークリッド距離を使用してこれを達成することもできます。

反復ベクトルアプローチはより複雑です。 Garcia-Castellanos et al 2007は、球状の地球に基づいた反復法について説明しています。彼らはCコードをオンラインで利用可能にしたようです。バッファーを使用してArcでこれを行う方法は想像できますが、それでも反復的で遅くなります。


0

ポイント距離(分析)を使用できます。このツールは、2つのポイントセット間の距離を含むテーブルを作成します。デフォルトの検索半径が使用される場合、すべての入力ポイントからすべての近いポイントまでの距離が計算されます。出力テーブルは非常に大きくなる可能性があります。たとえば、入力フィーチャと近接フィーチャの両方にそれぞれ1,000ポイントがある場合、出力テーブルには100万レコードを含めることができます。


入力に表示されない新しいポイントの座標を見つけるために、これをどのように適用できますか?おそらくあなたは質問を読み違えたのでしょうか?
whuber

0

ポイントのセットの最も遠いポイントは、セットの最も内側のポイントの逆数になります。たとえば、セットの最も内側のポイントの座標が北49度、東-144度の場合、逆数と最遠点の座標は南49度、西36度になります。地球は完全に球形ではなく、ジオイド型であるため、これは正確には真実ではありません。したがって、結果点の正確さは、使用する投影および地理システム(正投影、正投影...)に大きく依存します。地形は非常に複雑になる可能性があるため、セット全体の逆数を見つけて(セットの対poを転送)、対極点のセットで覆われた地形内で表面解析を実行すると役立ちます。あなたの質問は、他の惑星や月などの地球外体の点に関するものではないと思います。ごめんなさい、私はあなたのためのVBコードを持っていません。🙄


セット内の他のすべてのポイントから最も遠いポイントは、最も内側のポイント(エッジに沿って最も外側のすべてのポイントから最も遠いポイント)になります。これはクラスター分析であり、楽しくはありません。それはPhysics.😐で同じ電荷原子に、おそらくより良い表情にある
ユーリーShevchuk
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.