交差点に基づいて、地区の名前と通りの多角形レイヤーのセクションの数を連結します

Nov 23 2020

QGIS 3.14では、通りの輪郭(ポリゴン)を含むレイヤーで、通りが通過するエリアの名前と、通りが通過する地籍区画の数を記録する必要があります。

通りが複数のオブジェクトと交差する場合、それらの名前はコンマの後の1つのフィールドに書き込む必要があります。この問題を解決するにはどうすればよいですか?

通りの境界に入るエリアのエリアが指定された値よりも小さい場合、その名前は考慮されません

回答

Taras Nov 23 2020 at 20:59

でクエリを拡張するには、この答え「エリア」 -rule、すなわち交差点がより一定値以上である場合にのみ値を考慮して、その後、微調整の問合せを考えてみます。

SELECT a.*, GROUP_CONCAT(b.info) AS concat_b_info
FROM "Layer_B" AS b, "Layer_A" As a
WHERE ST_INTERSECTS(a.geometry, b.geometry)
      AND ST_AREA(ST_INTERSECTION(a.geometry, b.geometry)) > 80000000
GROUP BY a.id

または、フィールド計算機で次の式を検討してください。

aggregate(
  layer:='Layer_B',
  aggregate:='concatenate',
  expression:="info",
  concatenator:=',',
  filter:=(intersects($geometry,geometry(@parent)) AND area(intersection($geometry,geometry(@parent))) > 80000000)
)

その'area'機能を覚えておいてください

ジオメトリポリゴンオブジェクトの面積を返します。このジオメトリの空間参照系(SRS)では、計算は常に平面であり、返される領域の単位はSRSの単位と一致します。これは、プロジェクトの楕円体と面積の単位設定に基づいて楕円体の計算を実行する$ area関数によって実行される計算とは異なります。

重複する特徴の領域を追加で計算する必要がある場合は、これを使用します

SELECT a.*, GROUP_CONCAT(b.info) AS concat_b_info,
            GROUP_CONCAT(round(ST_AREA(ST_INTERSECTION(a.geometry, b.geometry)), 4)) AS a_b_areas
            -- GROUP_CONCAT(round(ST_AREA(b.geometry), 4)) AS b_areas
FROM "Layer_B" AS b, "Layer_A" As a
WHERE ST_INTERSECTS(a.geometry, b.geometry)
      AND ST_AREA(ST_INTERSECTION(a.geometry, b.geometry)) > 80000000
GROUP BY a.id

または、エリア値の新しいフィールドを持つフィールド計算機で:

aggregate(
  layer:='Layer_B',
  aggregate:='concatenate',
  expression:=to_string(round(area(intersection($geometry,geometry(@parent))),4)),
  # expression:=to_string(round(area($geometry),4)),
  concatenator:=',',
  filter:=(intersects($geometry,geometry(@parent)) AND area(intersection($geometry,geometry(@parent))) > 80000000)
)