最大の幅/高さの比率で「斜めの境界ボックス」を作成しますか?


13

以下の画像に示すように、入力フィーチャのセットから最大の幅/高さの比率(「斜めの境界ボックス」)で囲む長方形を作成したいと思います。

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

たとえば、PostGIS関数ST_EnvelopeおよびST_Box2DFMEトランスフォーマーBoundingBoxReplacerBoundingBoxAccumulator使用して、軸平行バウンディングボックスを生成します。

PostGIS、QGIS、またはFMEを使用したアプローチを使用した提案は大歓迎です!


ない正確な男はFMEやPostGISの中に該当するソリューションを求めていないので、重複します。それでも、上記の質問への回答で言及されているpythonスクリプトは、FME PythonCallerトランスフォーマーに入れると非常に便利です。実行中のワークスペースがある場合、スクリプトを少し修正したソリューションを投稿します。
ヨッヘンシュヴァルツェ

重複していないだけでなく、参照されている質問が受け入れられていないため、どのアルゴリズムを使用しているか、正確であるかどうかに関して未回答の質問があります。
ジョンパウエル

以下の私の答えをご覧ください。FMEでこれを実行できるはずです。どのバージョンを使用していますか?
フェスター

回答:


9

これはおそらく処理の面ではやり過ぎであり、より良い数学的な解決策がある可能性がありますが、それはむしろ単にクエリとして行うことができる方法の例として

SELECT 
   id, rotated_by, oblique_bound
  FROM 
     (
     SELECT 
        m.id,
        r rotated_by, 
        ST_Rotate(ST_Envelope(ST_Rotate(m.geom, r)),-r) oblique_bound,
        row_number OVER (PARTITION BY id) 
                   ORDER BY ST_Area(ST_Rotate(ST_Envelope(ST_Rotate(m.geom, r)),-r))) N
       FROM 
          generate_series(0, 90, 0.1) N(r), my_table m
    ) s
WHERE N = 1;

これにより、ジオメトリが回転し、境界が作成され、0〜90の10分の1度ごとに回転が逆になります。その結果、面積が最小の境界ボックスになります。もちろん、これは完全に正確な方法ではなく、要件に応じてシリーズの増分値を微調整する必要がある場合があります。


実際、これは素晴らしい解決策だと思います。正確なソリューションは非常に高価です。plpgsqlで簡単に拡張して最高のxバウンディングボックスを記録できます。2つが非常に近い場合は、ズームインし、いくつかの小さな回転を行って正確な解に近づけることができます。常にエッジケースがありますが、良いアプローチです。
ジョンパウエル

そして、付加的な利点としては、回転角度:-)維持する
ヨッヘンSCHWARZE

6

QGISには、まさにこれを行う「最小指向の境界ボックス」アルゴリズムがあります。


「方向付けられた最小境界ボックス」と呼ばれます。Processing Toolbox> QGIS geoalgorithms> Vector general toolsから呼び出すことができます。
ステファン

ここで使用している2.14.15LTRで見つからなかったため、これはQGIS 2.14を超えていると思いますか?
ヨッヘンシュヴァルツェ

@JochenSchwarzeはQGIS 2.14.19に存在します。処理ツールボックスで検索する必要があります。直接、それを見つけることができますProcessing toolbox -> QGIS geoalgorithms -> Vector General tools -> Oriented minimum bounding box
-ahmadhanb

4

バウンディングボックス代替あなたが言及した変圧器は、これを行うことができるはずです。ドキュメントによると、

フィーチャのジオメトリを2次元の境界ボックスまたは2次元の最小方向の境界ボックスに置き換えます。

このパラメータを使用すると、軸に沿った境界ボックスまたは直線的な境界ボックスを選択できます。

どうやら、方向付けられたバウンディングボックスの長辺の角度を含めるための拡張機能提案されているようです。これは安全番号PR#53924です。

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