QGISジオメトリジェネレータマニュアルをお探しですか?


8

Underdarkの投稿に示されているようなフローマップを作成したいと思います。https//anitagraser.com/2016/12/18/details-of-good-flow-maps/

ロケーションポイントのセット、たとえば50があり、各ポイントに対して「すべてのポイントから1へ」のマップを1つ作成したいので、この例では50のマップを作成します。さらに、「1つのポイントからすべて」の別のセットが各ポイントにマップされるため、50がさらにマップされます。

追加のラインレイヤーをすべて作成する代わりに、QGISでアトラスとジオメトリジェネレーターシンボルの組み合わせを使用してこれを実現したいと思います。

ただし、どのように、またはそれができるかを確認するための例は多くありません。

それで、QGISジオメトリジェネレータの例の完全なセットを見つけることができるサイトはありますか?

これは、フィルタリングされた出力のクリップで、各ポイントからの上位10行のみを示しています。WKTを使用して、CSVからすべてのラインをポイント座標で作成しました。矢印とポイントシンボルは、ジオメトリジェネレータで作成されます。残りはアトラスによって制御されます。

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

回答:


8

今のところそのようなサイトはありません。機能はかなり新しいものであり、使用例は現在現れ始めたばかりです。

特定のユースケースでは、すべての接続を持つラインレイヤーを作成することをお勧めします。その後、Atlasを使用してこのレイヤーをフィルタリングできます。他のことを心配する必要はありません。


6

これは、私が最初に意図したものとは異なる「ジオメトリジェネレータ」を使用して可能です。仮想レイヤを使用することで、すべての接続ラインレイヤを生成する必要を回避できます。

いくつかのポイント:

サンプルポイント

次のSQLを使用して仮想レイヤーを追加します。JOINはすべてのポイントを互いに一致させ、Spatialite MakeLine関数を使用してラインジオメトリを生成します。

SELECT s.id 'ID1', c.id 'ID2' , MakeLine(s.geometry,c.geometry) 'geometry'
  FROM SamplePoints AS s JOIN SamplePoints AS c 
  WHERE s.id <> c.id

結果:

接続線のある点

この仮想テーブルは、Atlas機能を使用して動的にフィルタリングできます。

曲線を動的に生成するのは難しいですが、それでも可能です。地図作成上適切な方法で(他の線の分布を考慮して)それらを湾曲させることは、おそらく仮想レイヤーで実現できることを超えています。

更新:

少しいじくってSpatialite関数リストをたくさん参照して、曲線を生成しました。

曲線の接続線があるポイント

このための仮想レイヤーSQLを以下に示します。すべての順列が表示され、開始位置と終了位置の順序を逆にすると相補曲線が生成されることに注意してください。

SELECT s.id 'ID1', c.id 'ID2' , 
MakeArc(
    X(Project(MakePoint((X(s.geometry)+X(c.geometry))/2,(Y(s.geometry)+Y(c.geometry))/2),distance(s.geometry,c.geometry),Azimuth(s.geometry,c.geometry) - PI()/2)),
    Y(Project(MakePoint((X(s.geometry)+X(c.geometry))/2,(Y(s.geometry)+Y(c.geometry))/2),distance(s.geometry,c.geometry),Azimuth(s.geometry,c.geometry) - PI()/2)),
    distance(s.geometry,c.geometry) * 1.1180339887,
    90 - azimuth(Project(MakePoint((X(s.geometry)+X(c.geometry))/2,(Y(s.geometry)+Y(c.geometry))/2),distance(s.geometry,c.geometry),Azimuth(s.geometry,c.geometry) - PI()/2),s.geometry) * (180/PI()),
    90 - azimuth(Project(MakePoint((X(s.geometry)+X(c.geometry))/2,(Y(s.geometry)+Y(c.geometry))/2),distance(s.geometry,c.geometry),Azimuth(s.geometry,c.geometry) - PI()/2),c.geometry) * (180/PI()),
    27700,
    2) 'geom' /*line:27700*/
  FROM SamplePoints AS s JOIN SamplePoints AS c 
  WHERE s.id <> c.id
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.