これは、私が最初に意図したものとは異なる「ジオメトリジェネレータ」を使用して可能です。仮想レイヤを使用することで、すべての接続ラインレイヤを生成する必要を回避できます。
いくつかのポイント:
次の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