Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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

Printemps des cartes 2024

#1 Mon 15 January 2018 09:44

hotegbe
Participant occasionnel
Date d'inscription: 28 Jun 2017
Messages: 32

QGIS: ordonnancement de points le long d'une ligne

Bonjour à tous,

je recherche un script python me permettant de parcourir une ligne intersectant des points dans le sens de mon choix.
le premier point rencontré dans le sens de parcours aura pour numéro 1, le deuxième point aura le numéro 2 et ainsi de suite jusqu'à la fin de mon parcours.
auriez vous des propositions de code svp?
merci

Cordialement, Hotegbe

Hors ligne

 

#2 Tue 16 January 2018 10:43

MathieuR
Membre
Lieu: aix-en-provence
Date d'inscription: 16 Feb 2009
Messages: 1690
Site web

Re: QGIS: ordonnancement de points le long d'une ligne

Bonjour,

On dirait un parcours de graphe. Il vous faudra sans doute faire appel à la QGIS network analysis library

En voici un exemple : https://gis.stackexchange.com/questions … -algorithm

A noter que dans la dernière version de QGIS, il y a des scripts déjà faits dans la boîte à outils traitement, onglet Analyse de réseau, relatifs aux plus courts chemins. Notamment, il y a un script appelé "de point à point", qui semble répondre à votre question de façon assez proche


geodata au cerema et petits billets en géomatique

Hors ligne

 

#3 Tue 16 January 2018 14:45

hotegbe
Participant occasionnel
Date d'inscription: 28 Jun 2017
Messages: 32

Re: QGIS: ordonnancement de points le long d'une ligne

je ne recherche pas le chemin le plus court dans mon réseau je recherche à mémoriser les points qui intersectent ma ligne dans selon le sens de parcours de ma ligne. si je parcours ma ligne de bas en haut par exemple le premier point intersecté sera le 1 le deuxième le 2 le 3eme le 3 ainsi de suite.

j'ai essayé le code suivant mais n'ayant pas beaucoup d’expériences en python je suis un peu bloqué. :



Code:

[cofor f in CB.getFeatures():
    geom2 = f.geometry()
    if f['numero']==1:
        for b in BP.getFeatures():
            geom1 = b.geometry()
            liste2.append(geom1)
            if geom2.intersects(geom1):
                liste1.append(b[0])

mais j'obtiens mais mes entités dans ma liste dans un ordre aléatoire.

dans l'image ci-jointe si je parcours ma ligne de bas en haut je dois stocker dans mon tableau les valeurs : [24, 20, 29, 28, 27, 26, 21]

or avec mon code je récupère dans mon tableau :[21, 24., 26., 27, 28, 29, 30].

Merci d'avance pour vos aides

Dernière modification par hotegbe (Tue 16 January 2018 14:55)


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

Hors ligne

 

#4 Tue 16 January 2018 15:21

MathieuR
Membre
Lieu: aix-en-provence
Date d'inscription: 16 Feb 2009
Messages: 1690
Site web

Re: QGIS: ordonnancement de points le long d'une ligne

Bonjour,

Dans l'API, vous avez une fonction appelée lineLocatePoint qui semble répondre à votre question.
https://qgis.org/api/classQgsGeometry.h … b005f673ca

Elle vous donnera une valeur de distance qui est la distance entre le début de la ligne et le point situé sur la ligne qui est le plus proche du point source à projeter.

A partir de cette valeur, vous pourrez ordonner les points de votre liste et leur affecter le bon identifiant numérique


geodata au cerema et petits billets en géomatique

Hors ligne

 

#5 Tue 16 January 2018 15:42

hotegbe
Participant occasionnel
Date d'inscription: 28 Jun 2017
Messages: 32

Re: QGIS: ordonnancement de points le long d'une ligne

Malheureusement cette fonction ne résout pas mon problème car mon code doit tourner pour n lignes différentes et je ne vais pas à chaque fois choisir un point de départ; il faudra juste pour moi à minima spécifier ma ligne et un sens de parcours de la ligne

Hors ligne

 

#6 Wed 17 January 2018 10:24

MathieuR
Membre
Lieu: aix-en-provence
Date d'inscription: 16 Feb 2009
Messages: 1690
Site web

Re: QGIS: ordonnancement de points le long d'une ligne

Bonjour,

Cette fonction ne nécessite pas de point de départ. A minima, pour affecter un ordre de parcours, il faut bien s'appuyer sur un sens de parcours, et la fonction pré-citée lineLocatePoint, donne la distance de chaque point par rapport au début de la ligne (début qui dépend de son sens).

Sans forcément aller dans le code, ce que vous conseille, c'est :
- d'inverser le sens de certaines lignes si besoin est avec le plugin" swap line direction" ou en codage : https://gis.stackexchange.com/questions … on-in-qgis
-> itérer sur chaque ligne :
  -> pour chaque ligne :
    - avoir la distance pour chaque point de la ligne auquel il est associé (cela signifie qu'il faut avoir une association point-ligne issue d'intersection, ou un champ attributaire idLigne pour les points) : lineLocatePoint
  - ordonner les points en fonction de la distance et donner un id numérique en fonction de l'ordre

J'espère avoir bien répondu à votre questionnement


geodata au cerema et petits billets en géomatique

Hors ligne

 

Pied de page des forums

Powered by FluxBB