#1 Fri 14 February 2025 15:34
- p.robledo
- Juste Inscrit !
- Date d'inscription: 28 Sep 2009
- Messages: 7
QGIS: Identifier le 1er batiment qui touche un transect
Bonjour,
J'ai créé sous qgis des transects à partir d'une polyligne (image jointe). Je voudrais maintenant identifier le premier bâtiment qui touche chacun de ces transects, pour ne garder que ce groupe de bâtiments à l'échelle d'une portion du littoral.
J'ai pensé à "sélection par localisation" mais je ne vois pas de critère pour ne retenir qu'un premier objet...
Merci pour votre aide.
Bonne fin de semaine, Paul
Hors ligne
#2 Thu 20 February 2025 18:29
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 4119
Re: QGIS: Identifier le 1er batiment qui touche un transect
Bonjour,
Je me suis laissé tenter et vous propose quelque chose qui semble marcher. Ça se passe totalement ou en partie dans l'algorithme "Géométrie par expression" (tout dépend de si ce sont les géométries seules des bâtis qui vous intéressent ou leurs attributs aussi).
La couche en entrée est celle des transects
le type de géométrie est polygone
L'expression à utiliser serait du genre
Code:
with_variable( -- on va créer la liste des points d'intersection transect et bâtis 'id_polygones_superposes', aggregate( 'couche_bati', 'collect', expression:=intersection( boundary(@geometry), geometry(@parent) ), -- intersection entre le linéaire extérieur des batis et le transect filter:=intersects( @geometry, geometry(@parent) ) ), -- @id_polygones_superposes -- multipoint des inter transects et batis -- closest_point(@id_polygones_superposes, start_point(@geometry)) -- si décommenté (et la suite commentée), renvoie une couche des points d'inter les plus proches du point de départ du transect with_variable( 'point_proche', closest_point(@id_polygones_superposes, start_point(@geometry)), aggregate( 'couche_bati', 'collect', @geometry, intersects(buffer(@point_proche, 0.000001), @geometry) -- normalement touches devrait suffire mais ça marchait pas des masses avec mon jeu de données donc on passe à intersects avec une tolérance de mini buffer ) ) )
Si vous voulez les attributs des bâtis aussi ou souhaitez juste pouvoir sélectionner et visualiser le résultat, vous pouvez limiter le code à la génération de la couche des points les plus proches et utiliser une fonction overlay_nearest pour trouver les bâtis les plus proches.
Hors ligne