ポリゴンをラインに変換せずにシンボル化したいのですが。海岸線(青い線)の上部と下部に一致するポリゴンフィーチャ(赤い線でハッチングおよび境界が設定されています)があります。ポリゴンの輪郭を2辺だけでシンボル化し、上部と下部の赤い色を削除したいと思います。
このような最終結果を見たいのですが。
ポリゴンをラインに変換せずにシンボル化したいのですが。海岸線(青い線)の上部と下部に一致するポリゴンフィーチャ(赤い線でハッチングおよび境界が設定されています)があります。ポリゴンの輪郭を2辺だけでシンボル化し、上部と下部の赤い色を削除したいと思います。
このような最終結果を見たいのですが。
回答:
Geometry generator
@GSienkoとして少し苦労しました。交差部分については、組み込み関数を使用することもできますaggregate
。またsegment_to_lines
、多角形を線に変換する関数を使用しました。
difference(
segments_to_lines($geometry),
aggregate(
layer:= 'line',
aggregate:='collect',
expression:= $geometry,
filter:=intersects($geometry, geometry(@parent))
)
)
または
difference(
segments_to_lines($geometry),
aggregate('line','collect',$geometry,intersects($geometry, geometry(@parent)))
)
ラインに「無関係」のポリゴンがある場合はif
、交差の条件を追加できます。レイヤーが交差している場合は、シンボルに差異が適用されます。それ以外の場合は、ジオメトリ全体が適用されます。
if(
intersects(
segments_to_lines($geometry),
aggregate('line','collect',$geometry,intersects($geometry, geometry(@parent)))
),
difference(
segments_to_lines($geometry),
aggregate('line','collect',$geometry,intersects($geometry, geometry(@parent)))
),
segments_to_lines($geometry)
)
編集:この方法でラインジェネレータを使用することには弱点があります-凡例シンボルを処理する必要があります。これは、ラインを(境界としてではなく)ポリゴンを通してレンダリングするためです。ただし、レイヤーを複製し、単純な塗りつぶしを設定して、凡例に使用できます。
ジオメトリジェネレーター内でrefFunctionプラグインを使用してみてください。
仮定。2つのレイヤー-1つの線を線として、ポリゴンを多角形として。
difference(exterior_ring( $geometry ),geom_from_wkt(geomintersects('line','$geometry')))
geomintersectは、ポリゴンレイヤーとラインレイヤーの間で空間クエリを実行し、2つのポリゴンの交差のジオメトリ(この場合は、ポリゴンの2つの境界線)を返します。次のステップは、ポリゴンの境界との違いを作ることです。内部に穴があるかどうかはわかりませんが、exterior_ring()は外部ボーダーのみを返します。
制限-geomintersectは、1つのポリゴンの交差のみをチェックします。ポリゴンレイヤーを1つの大きなマルチポリゴンに作成することで、たとえば境界線のスタイリング用の仮想レイヤーで、この制限を管理します。
免責事項:複数のポリゴンがある場合、この回答は機能しません
あなたができることは、線の間に描画したいポリゴンの四隅を形成するノードを見つけ、それらをMAKE_LINE()関数で使用して線を描画することです:
必要なノードを見つけるには:
POINT_N($geometry, 1)
を使用して、最初のノードを点として表示します線を引くには:
MAKE_LINE(POINT_N($geometry, *first point*), POINT_N($geometry, *second point*)
次に、これら2つのジオメトリジェネレータの下に通常のラインパターン塗りつぶしシンボルを追加します