2009-05-22 15 views
3

NLCDデータを使用して、森林と非森林の7つの州があります。いくつかの森林地帯にはプロットがあります(これは私が取り組んでいる私の修士論文です)。私はこの大規模なデータセットで尋ねたすべての人を困らせましたが、そこに解決策があることは確かです。森林/非森林地域は、署名された離散的なラスタです。私は、森林地帯を部分集合化することによって森林地帯をポリゴンにすることができました。私は非森林地域をポリゴン(大きすぎる)にすることができません。だから、私は森林ポリゴンの端までポイント距離(ポイントはポリゴン内にあります)を取得しようとしていました。森林の端までの距離を得るための提案はありますか?ポリゴン内の点からポリゴンの端までの距離

+2

あなたが望むものについて少し正確にすることはできますか?あなたは平均距離、または最短距離をしたいですか?他に何か? – Breton

+3

ポリゴンは凸ですか? – Dave

+1

また、これを複数の点について計算するつもりです。 – Dave

答えて

2

これは実際には2つのことに依存します。具体的にどの辺をお望みですか?最も近い辺を探したいのですか、または辺を選択する他の基準(例えば、基准方向)がありますか?

最も近いエッジを見つけたい場合は、基本的に、ポリゴンで定義されているすべての線分を繰り返し、線分から点間の距離を計算します。これはあなたの距離を見つけるでしょう。 this質問には、Pythonのアルゴリズムの良い実装があります。そこにはアルゴリズムの良い説明がいくつかあります。

1

ポイントが外側のポリゴン内にあるかどうかわからない場合は、まずそれをテストします。次に、最も近い森のエッジまでの距離をテストするために、あなたはこのような何かを試みることができる:ここで

http://www.bdcc.co.uk/Gmaps/BdccGeo.js

Googleは「点からポリゴンのエッジまでの距離」の結果の富を持っている

2

をいくつかあります点から端までの距離を出力するコード、ポリゴンが凸であるかどうか、CCWかどうか。すべてのポリゴンのエッジをテストする必要があります。大きなエッジのセットでは少し遅いかもしれません。

- (double) distanceFromPoint:(yourPoint)testPoint 
{ 

double pointX = edgePointB.x - edgePointA.x; 
double pointY = edgePointB.y - edgePointA.y; 

double k = pointX * pointX + pointY * pointY; 
double u = ((testPoint.x - edgePointA.x) * pointX + (edgePointA.y - edgePointA.y) * pointY)/k; 

if (u > 1) 
    u = 1; 
else if (u < 0) 
    u = 0; 

double x = edgePointA.x + (u * pointX); 
double y = edgePointA.y + (u * pointY); 

double dx = x - testPoint.x; 
double dy = y - testPoint.y; 

return sqrt((dx * dx) + (dy * dy)); 

} 
+0

完全に動作しますが、あなたはタイプミスをしました:u =((testPoint.x - edgePointA.x)* pointX +(* testPoint.y * - edgePointA.y)* pointY)/ k; – scippie

関連する問題