Ini dimungkinkan menggunakan 'generator geometri' yang berbeda dengan yang awalnya Anda maksud saya curigai, Anda dapat menghindari keharusan membuat semua lapisan sambungan dengan menggunakan lapisan virtual:
Beberapa poin:
Tambahkan lapisan virtual menggunakan SQL berikut - GABUNGAN cocok setiap titik satu sama lain, dan garis geometri dihasilkan menggunakan fungsi MakeLine Spatialite :
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
Hasil:
Tabel virtual ini kemudian dapat difilter secara dinamis menggunakan fungsionalitas Atlas.
Menghasilkan garis lengkung secara dinamis akan lebih sulit, tetapi harus tetap dimungkinkan. Melengkung mereka dengan cara yang sesuai secara kartografis (mempertimbangkan distribusi jalur lain) mungkin melampaui apa yang dapat dicapai dengan lapisan virtual.
Memperbarui:
Dengan sedikit mengutak-atik dan banyak referensi ke daftar fungsi Spatialite saya telah menghasilkan garis lengkung:
SQL layer virtual untuk ini di bawah ini. Perhatikan bahwa semua permutasi ditampilkan, dan membalikkan urutan lokasi awal dan akhir menghasilkan kurva komplementer.
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