Map Composer QGISでの自動マップ回転


10

それは、map composerで地図の回転を自動的に計算できるようにしたいのですが。独自の投影パラメータを持つ1つのファイルに多くのマップがあり、投影式に基づいてマップコンポーザでマップの回転を定義したいと思います(または他に何ですか?)

例:プロジェクト内の特定の1つのマップの場所:

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

投影は

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

Map Composerでは、マップ境界は次のようになります。

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

そして、その投影パラメータを使用して、マップの選択された回転角度で:

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

地図の回転角度は、場所と投影パラメータに応じて、地図ごとに異なります。

このプロセスを自動化してマップの回転角度を自動的に計算することは可能ですか?毎回この値を手動で見つける必要はありません(アトラス生成メニューを介してすべてのマップにUniversal Composerを作成したいと思います)?


1
フィーチャーを回転させて、マップフレームのエッジと平行にしますか?フィーチャのいずれかの側面の方位角を計算し、それを使用して回転できますか?それがrotation = degree(atan(abs((y1-y2)/(x1-x2))))のような線である場合は、角度を度で示します。次に、90度回転すると、マップフレームに位置合わせされます。
混合ブレディ2017年

2
アトラスを使用していますか?「方向付き最小バウンディングボックス」ツールを使用してカバレッジレイヤーを生成する場合、そのレイヤーにはデータ定義プロパティを使用してマップアイテムの回転にバインドできる回転属性が含まれます。
ndawson 2017年

@mixedbredie、はい、マップの境界がマップキャンバスのマップフレームと平行になるようにマップを回転させます。方位角を計算しようとしましたが、問題は、マップを含むレイヤーが多角形であり、最初の点が左上頂点または他の特定の頂点(右下など)であるということを知らないことです。そのため、ほとんど毎回角度が満足しません
Jane

@ndawsonによって提案された解決策はごちそうです。新しいバウンディングボックスレイヤーを非表示のカバレッジレイヤーとして使用すると、すべてが整列されます。
混合ブレディ2017年

1
処理ツールボックス(Ctrl + Alt + T)を開き、 "directional"を検索します-QGIS地理アルゴリズム>ベクター一般ツールの下にツールが表示されます。
mixedbredie 2017年

回答:


3

質問のコメントで@ndawsonが見つけたソリューションの下。自由にコメントして、この回答を強化してください。

処理ツールボックスから、既に使用しているマップエンベロープグリッドの方向付き最小境界ボックスツールを実行します。

有向バウンディングボックスツール

元のレイヤーとまったく同じレイヤーを作成します。属性テーブルにはANGLEフィールドがあります

OBBフィールド

これで、コンポーザーでこのANGLEフィールドを使用して、回転用のデータ定義フィールドに入力できます。

データ定義角度

問題は、角度が最初のポリゴンの作成方法に依存するため、常に使いやすいとは限らないことです。いくつかのテストを行いましたが、ソースポリゴンをどのように描いたかによって異なります。それに応じて、ANGLeフィールドの属性値を微調整する必要がある場合があります。

(赤は元のポリゴン、黒はOMBBツールのポリゴンです)。類似したポリゴンの例をデジタル化したのは、2つの異なる方法です(右または左に行く)。

OMBBの例

角度値を元のレイヤーに戻すには、空間位置結合操作を使用できます。


どうもありがとうございます!私はあなたの詳細な答えを注意深く赤くしました!しかし、問題はより複雑なようです。すべてのマップのレイヤーと、すべてのマップの属性テーブルに投影されたレイヤーがあります。WGS84の一連のマップを含む初期レイヤーですが、マップを準備するときに、(すべてのマップで異なる)属性テーブルから取得したマップキャンバスに投影を設定し、このプロジェクトでマップの回転値が必要です。そのため、すべてのマップを独自の投影法で再保存してから、ポリゴンに対してOMBBを実行する必要があります。一部のマップをテストしましたが、回転角度の値がOMBBで計算した値と異なります
Jane

属性テーブルの投影式に基づいて、map composerで回転角度の値を計算するとよいでしょう
Jane

簡単ではありません !特に回転角度の場合、簡単な方法でそれを行う方法はわかりません。関数 "transform"を使用してデータを投影する方法はありますが、それ以外の座標で機能するかどうかは疑問です。(ソースCRSから宛先CRSに変換されたジオメトリを返します。構文:transform(geom、source_auth_id、dest_auth_id)-例:geom_to_wkt(transform($ geometry、 'EPSG:2154'、 'EPSG:4326'))
gisnside
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.