banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

GeoDataDays 2025

#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


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

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

 

Pied de page des forums

Copyright Association GeoRezo