[FOSSGIS-Talk] . Linien Geometrien vergleichen / Überlagerungen finden in QGIS

bmarcus at giswana.de bmarcus at giswana.de
Fr Sep 11 12:05:08 CEST 2026


Hallo Jörg,

eine mögliche Lösung wäre nachfolgender Ausdruck, der prüft, ob sich eine
Linie innerhalb eines Layers mit einer anderen Linie schneidet.
Ist dem so, wird die ID der anderen Linie und der Geometrie-Typ der
Überlagerung zurückgegeben. 
Liegt keine Überschneidung vor und liegt die andere Linie innerhalb einer
definierten Distanz, wird die ID und der Abstand zur nächstgelegenen Linie
berechnet und ausgegeben.   
Der Ausdruck kann entweder direkt für eine Selektion oder aber auch zur
Anlage einer neuen (virtuellen) Spalte verwendet werden. 

with_variable(
	-- Angabe max. Distanz
	'max_dist'
	, 0.1 /* ändern */
, with_variable(
	-- Map id:NächsterNachbar 
	'map_geom'
	, overlay_nearest(
		layer:= @layer
		, expression:= map($id,$geometry)
		, limit:= 1
		, max_distance:= @max_dist
	)
, with_variable(
	-- Textausgabe id und Distanz zum nächsten Nachbarn
	'dist'
	, concat(
		map_akeys(@map_geom[0])[0]
		, ': '
		, round(distance($geometry, map_avals(@map_geom[0])[0]),3)
	) 
, with_variable(
	-- Geometrie-Typ bei Überschneidung
	'intersection_type'
	, aggregate(
			layer:= @layer
			, aggregate:= 'array_agg'
			, expression:= concat(
				'Linie '
				,$id
				, ': '
				, geometry_type(
					intersection($geometry,
geometry(@parent))
				)
			)
			, filter:= intersects($geometry, geometry(@parent)) 
				and $id != attribute(@parent, 'id')
		)
	-- Fallunterscheidende Ausgabe
	, case
		when array_length(@intersection_type) is True
			then 'Schnitt ' ||
array_to_string(@intersection_type)
		when distance($geometry, map_avals(@map_geom[0])[0]) <=
@max_dist
			then 'Abstand Linie ' || @dist
		else NULL
	end
	)
)))

Viele Grüße
Bernd



Mehr Informationen über die Mailingliste FOSSGIS-Talk-Liste