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 Sat 09 July 2022 11:42

ODJAC33
Participant assidu
Date d'inscription: 6 Aug 2017
Messages: 240

QGIS: Creation de 2 Points ?

Bonjour à tous,

Je souhaiterais créer 2 sortes de points (Shape ponctuel) :
- 1 point situé au milieu d'un segment : y a t'il une fonction qui me permette de calculer les coordonnées du milieu de ce segment et de positionner le point avec ces coordonnées?
- 1 point situé à une distance et un angle paramétré à partir de l'extrémité d'un segment : j'ai regardé dans les outils de numérisation avancée, ceux-ci ne proposent que des courbes, des cercles, des ellipses, des rectangles et des polygones paramétrés, mais pas de segments.

Merci d'avance sur vos conseils concernant chacun des 2 types de points.

Hors ligne

 

#2 Sun 10 July 2022 13:42

Mathieu Denat
Participant actif
Lieu: Montpellier
Date d'inscription: 5 May 2010
Messages: 110

Re: QGIS: Creation de 2 Points ?

Bonjour,
Sympathique exercice du dimanche!

Je vous propose d'utiliser le gestionnaire de BDD (Base de données > Gestionnaire BD), puis de lancer
Couches virtuelles > couches du projet > <votre couche>.
Dans mon exemple, la couche d'entrée se nomme ligne.

Pour extraire le milieu de vos segments vous pouvez utiliser la fonction St_Line_Interpolate_Point est conçue pour ça:

Code:

select
    st_line_interpolate_point(geometry,0.5) geom,
    id
from ligne

Plus d'informations ici: http://postgis.net/docs/ST_LineInterpolatePoint.html



Pour la 2e question, il faut fixer un angle et une distance (voir les commentaires dans le code ci-dessous).
Script adapté de ce poste

Code:

with tmp as
(
    SELECT 45 AS angle, --fixer l'angle, ici 45°
           10000  AS rayon, --fixer la distance, ici 1km
           id,
           force_rhr(geometry) geom --on fixe la fin de ligne toujours du même côté, pas forcément utile selon la situation
    FROM   ligne
)


SELECT
    setsrid(
    make_point(
            X(st_line_interpolate_point(geom,1)) + rayon*sin(angle), --0 pour le départ de la ligne, 1 pour l'arrivée
            Y(st_line_interpolate_point(geom,1)) + rayon*cos(angle) --0 pour le départ de la ligne, 1 pour l'arrivée
            )
    ,2154) --fixer la projection
    AS geom,
       id
FROM tmp

Pour la liste des fonctions de qgis, c'est par ici:
https://docs.qgis.org/3.22/fr/docs/user … _list.html

Sur la capture en PJ:
- ligne pour la couche en entrée
- milieu pour le milieu des segments
- point pour les points situés à 1km et 45° depuis le dernier point de chaque ligne


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

Mathieu
C'est en forgeant qu'on devient forgeron

Hors ligne

 

#3 Mon 11 July 2022 15:19

ODJAC33
Participant assidu
Date d'inscription: 6 Aug 2017
Messages: 240

Re: QGIS: Creation de 2 Points ?

Merci beaucoup Mathieu, le milieu d'un segment fonctionne très bien.

J'ai un peu plus de mal en revanche pour la 2° question.
Je voudrais récupérer les points qui prolongent de 250 m. une piste d'aviation (fichier piste UTM.zip ci-joint) de part et d'autre de chacune des 2 extrémités de cette piste (Nord et Sud).

J'ai tapé le code suivant :
with tmp as
(
    SELECT 0 AS angle, --fixer l'angle, ici 0°
           250  AS rayon, --fixer la distance, ici 250 m.
           id,
           force_rhr(geometry) geom --on fixe la fin de ligne toujours du même côté, pas forcément utile selon la situation
    FROM   pisteutm
)


SELECT
    setsrid(
    make_point(
            X(st_line_interpolate_point(geom,1)) + rayon*sin(angle), --0 pour le départ de la ligne, 1 pour l'arrivée
            Y(st_line_interpolate_point(geom,1)) + rayon*cos(angle) --0 pour le départ de la ligne, 1 pour l'arrivée
            )
    ,32636) --fixer la projection
    AS geom,
       id
FROM tmp


En sortie j'ai saisi une couche appelée Extremite, mais elle n'apparaît pas dans mes couches lorsque j'exécute la requête, ce qui prouve que l'exécution de la requête ne se passe pas bien.

2 remarques :
- la projection est bien UTM Zone 36N
- l'angle de 0 degré signifie pour moi que l'on prolonge l'axe piste de 250 m. vers le Nord, ne faut-il pas mettre 180 degrés pour la prolonger vers le Sud? (ce qui entrainerait qu'il faudrait faire 2 requêtes séparées (une pour la prolongation Nord et une pour la prolongation Sud), à moins que l'on puisse faire les 2 prolongations en une seule fois (excusez-moi, je ne sais pas programmer en SQL).

Merci encore de vos conseils.


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

Hors ligne

 

#4 Mon 11 July 2022 15:36

ODJAC33
Participant assidu
Date d'inscription: 6 Aug 2017
Messages: 240

Re: QGIS: Creation de 2 Points ?

Pardonnez moi Mathieu, en fait, si, j'ai bien la couche Extremite qui s'affiche (j'avais oublié de la charger), mais il n'y a que le point qui est à 250m. au nord de la piste (copie d'écran ci-jointe).
Comment faire pour récupérer le point qui est à 250m. au Sud de l'extrémité Sud de la piste SVP?
Merci à vous.


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

Hors ligne

 

#5 Mon 11 July 2022 17:33

Sylvain M.
Participant assidu
Lieu: Saint-Pierre-des-Nids (53)
Date d'inscription: 8 Sep 2005
Messages: 983

Re: QGIS: Creation de 2 Points ?

Comment faire pour récupérer le point qui est à 250m. au Sud de l'extrémité Sud de la piste SVP?


Il me semble que la réponse est dans la proposition de Mathieu : "--0 pour le départ de la ligne, 1 pour l'arrivée", ce qui donne :

Code:

SELECT
    setsrid(
    make_point(
            X(st_line_interpolate_point(geom,0)) + rayon*sin(angle), --0 pour le départ de la ligne, 1 pour l'arrivée
            Y(st_line_interpolate_point(geom,0)) + rayon*cos(angle) --0 pour le départ de la ligne, 1 pour l'arrivée
            )
    ,32636) --fixer la projection
    AS geom,
       id
FROM tmp

Sylvain M.

Hors ligne

 

#6 Mon 11 July 2022 18:01

ODJAC33
Participant assidu
Date d'inscription: 6 Aug 2017
Messages: 240

Re: QGIS: Creation de 2 Points ?

Merci Sylvain, effectivement, en mettant 0 à la place de 1, je pars de l'autre extrémité du segment.
En revanche, j'ai un petit souci sur le paramétrage de l'angle : en mettant 180 °, le point ne se retrouve pas au Sud, mais au Sud-Ouest (cf. PJ.).
Étrange, non? (l'unité angulaire par défaut est bien le degré?)


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

Hors ligne

 

#7 Tue 12 July 2022 11:26

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3812

Re: QGIS: Creation de 2 Points ?

Bonjour,
Autrement, en version full boîte à outils Traitement:

1 point situé au milieu d'un segment


: L'algorithme "Centroide" (si les entités sont constituées d'un seul segment) ou "Interpoler le point sur la ligneavec la formule length($geometry)/2 pour le paramètre distance

1 point situé à une distance et un angle paramétré à partir de l'extrémité d'un segment


: une combinaison de Prolonger les lignes et Extraire les vertex spécifiques (valeurs 0,-1)

Ou les deux en 1, prolonger la ligne d'abord puis utiliser "Points le long de la géométrie" avec comme distance length($geometry)/2 (j'ai cru comprendre qu'on prolongeait de la même distance des deux côtés).

Bon j'avoue, c'est moins classe que le SQL mais c'est pour dire que la boîte à outils regorge d'outils pour régler un bon nombre de tâches apparemment complexes....

Hors ligne

 

#8 Tue 12 July 2022 15:12

ODJAC33
Participant assidu
Date d'inscription: 6 Aug 2017
Messages: 240

Re: QGIS: Creation de 2 Points ?

Bonjour,

J'ai appris un peu de SQL grâce à Sylvain et Mathieu mais j'avoue effectivement que Centroide   est parfait pour sortir le milieu d'un segment, de même que l'exécution consécutive de Prolonger les lignes et Extraire les vertex spécifiques fonctionne très bien pour sortir les 2 points situés à 250m. des 2 extrémités de mon segment.

Mais ... comment faire pour sortir un point qui est à une certaine distance de l'extrémité d'un segment, mais pas dans l'axe de ce segment? (donc à un angle connu que l'on devra paramétrer dans l'algorithme).
SQL obligatoire ou géotraitements existant?

Encore un grand merci à vous tous.

Hors ligne

 

#9 Tue 12 July 2022 22:26

Mathieu Denat
Participant actif
Lieu: Montpellier
Date d'inscription: 5 May 2010
Messages: 110

Re: QGIS: Creation de 2 Points ?

Re,

ODJAC33 a écrit:

Mais ... comment faire pour sortir un point qui est à une certaine distance de l'extrémité d'un segment, mais pas dans l'axe de ce segment? (donc à un angle connu que l'on devra paramétrer dans l'algorithme).
SQL obligatoire ou géotraitements existant?


Pour un angle fixe : la réponse était dans mon premier post! wink
En relisant bien les commentaires, vous trouverez la ligne à modifier pour changer l'angle.
Dans mon exemple, l'angle était de 45°.
Voir ce qui est en gras dans le 1er bloc (bloc tmp)

Mathieu Denat a écrit:

[...]
with tmp as
(
    SELECT 45 AS angle, --fixer l'angle, ici 45°
           10000  AS rayon, --fixer la distance, ici 1km
           id,
           force_rhr(geometry) geom --on fixe la fin de ligne toujours du même côté, pas forcément utile selon la situation
    FROM   ligne
)

[...]


Si l'angle est variable (entré en paramètre dans le script), c'est plus compliqué!
Il faut faire une fonction (mais il existe peut-être des choses + clic-bouton).
La question est comment est calculé l'angle.
Si l'angle est dans un champ (donc calculé au préalable), il suffit de remplacer le 45 par le nom du champ qui contient la valeur de l'angle.

J'espère que c'est assez clair.
Bonne soirée,

Dernière modification par Mathieu Denat (Tue 12 July 2022 22:29)


Mathieu
C'est en forgeant qu'on devient forgeron

Hors ligne

 

#10 Wed 13 July 2022 13:00

ODJAC33
Participant assidu
Date d'inscription: 6 Aug 2017
Messages: 240

Re: QGIS: Creation de 2 Points ?

Bonjour Mathieu,

Merci beaucoup pour les éléments de réponse.

L'angle est fixe, mais j'ai des soucis avec sa valeur : par exemple, quand je mets 180°, je me retrouve avec un point situé au Sud-Ouest de mon point de départ et non au Sud).
Cf. la pièce jointe où mon point créé est bien à la bonne distance de mon point de départ (10112m. de l'extrémité Nord du segment), mais pas du tout à 180° alors que j'ai bien mis le code suivant :

SELECT 180 AS angle, --fixer l'angle,
           10112  AS rayon, --fixer la distance,
           id,
           force_rhr(geometry) geom --on fixe la fin de ligne toujours du même côté, pas forcément utile selon la situation
    FROM   Lin1 -- Linéaire Zone 2A Est


NB : l'angle n'est pas dans un champ, je suis obligé de mettre sa valeur en dur.
Merci encore.


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

Hors ligne

 

#11 Wed 13 July 2022 18:17

ODJAC33
Participant assidu
Date d'inscription: 6 Aug 2017
Messages: 240

Re: QGIS: Creation de 2 Points ?

Rebonjour,

Je joins un petit schéma très simple pour essayer de comprendre pourquoi le paramétrage d'une valeur angulaire ne correspond pas à l'attendu (cf. mon dernier post).

Le segment AB est mon segment initial, je veux sortir le point C qui est à une distance D de B (appelé rayon dans le code SQL) et à un angle alpha (appelé angle dans le code SQL) de l'axe AB.

Est t'on bien d'accord sur les 2 points suivants ?
- l'angle alpha n'est pas un angle par rapport au Nord (axe des Y sur mon schéma) mais par rapport à l'axe du segment AB (Y' sur mon schéma)
- X(st_line_interpolate_point(geom,0)) + rayon*sin(angle), Y(st_line_interpolate_point(geom,0)) + rayon*cos(angle) sont bien mesurés dans le repère (B, X', Y') et non le repère (O (intersection des axes des X et des Y), X, Y).

Merci de votre avis, bonne soirée.


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

Hors ligne

 

#12 Mon 18 July 2022 10:17

Mathieu Denat
Participant actif
Lieu: Montpellier
Date d'inscription: 5 May 2010
Messages: 110

Re: QGIS: Creation de 2 Points ?

Ha ha,
Je me suis fait feinter par les noms de fonction dans qgis qui ne sont pas exactement les même que dans postgresql!
La fonction pgsql est sind elle prend une valeur d'angle en degrés.
À ma connaissance, il n'y a pas d'équivalent pour qgis, la fonction sin (sans le d) prend des angles en radian.
D'où le comportement bizarroïde.

Pour répondre à tes questions:
1. la valeur de l'angle que tu fixe dans le script est bien fixée par rapport au N, par contre elle est en rad (voir correction ci-dessous). Du coup le schéma est faux, mais tu auras compris l'idée c'est ça qui compte! smile
2. la longueur est bien calculée dans le repère 0, mais elle est calculée dans l'espace cartésien, et pas avec la méthode ellipsoïdale. Ça devient compliqué de gérer la conversion à la volée (dans le SELECT). Mes connaissances sont plutôt portées sur pgsql, peut-être que d'autres sauront proposer mieux. Selon ce que tu fais une distance cartésienne (sans tenir compte de l'arrondi du géoïde terrestre) suffit peut-être?


Pour convertir ton angle de radians vers degrés (pour rappel 1 rad = pi /180), il faut reprendre ton ancien script de la manière suivante:


SELECT 180 *pi()/180 AS angle, --fixer l'angle et le convertir de rad vers deg
           10112  AS rayon, --fixer la distance ATTENTION DISTANCE CARTÉSIENNE
           id,
           force_rhr(geometry) geom --on fixe la fin de ligne toujours du même côté, pas forcément utile selon la situation
    FROM   Lin1 -- Linéaire Zone 2A Est


En espérant que tu vas t'en sortir! wink


Mathieu
C'est en forgeant qu'on devient forgeron

Hors ligne

 

#13 Tue 19 July 2022 17:11

ODJAC33
Participant assidu
Date d'inscription: 6 Aug 2017
Messages: 240

Re: QGIS: Creation de 2 Points ?

Bonjour Mathieu,

Merci beaucoup pour tes précieux conseils, ça a super bien marché.

J'ai fait un test d'un point situé à 30° et 10000 m. de l'extrémité Nord d'une piste d'aviation (orientée plein Nord, la chance ...).
J'ai tapé le code suivant :
with tmp as
(SELECT 30 *pi()/180 AS angle, --fix angle and convert it from rad to deg
           10000  AS rayon, --fix distance ATTENTION CARTESIAN DISTANCE
           id,
           force_rhr(geometry) geom -- we always fix the end of the line on the same side, not necessarily useful depending on the situation
    FROM   pisteutm – the runway
)
SELECT
    setsrid(
    make_point(
            X(st_line_interpolate_point(geom,1)) + rayon*sin(angle), --0 for start of the line, 1 for end
            Y(st_line_interpolate_point(geom,1)) + rayon*cos(angle) --0 for start of the line, 1 for end
            )
    ,32636) –fix EPSG
    AS geom,
       id
FROM tmp


Et ça m'a donné le résultat en PJ.
Nickel, encore merci à toi.


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

Hors ligne

 

#14 Sun 24 July 2022 16:57

ODJAC33
Participant assidu
Date d'inscription: 6 Aug 2017
Messages: 240

Re: QGIS: Creation de 2 Points ?

Je me permets de revenir sur cet échange, avec un petit point de détails : y a t'il un moyen rapide pour changer l'altitude des sommets dans l'éditeur de sommets?
Ayant généré des arcs de cercle, j'ai dû modifier manuellement l'altitude de 150 points avec 150 copier-coller de suite ...
Merci d'avance.

Hors ligne

 

#15 Mon 25 July 2022 17:19

Mathieu Denat
Participant actif
Lieu: Montpellier
Date d'inscription: 5 May 2010
Messages: 110

Re: QGIS: Creation de 2 Points ?

Avec plaisir pour le coup de pouce! smile

Je ne suis pas sûr d'avoir bien saisi la question, je reformule:
En déplaçant les points, on peut tomber sur un point avec une altitude différente.
Tu veux récupérer l'altitude du nouveau point, c'est bien ça?

Si c'est le cas, il faut utiliser un MNT ou récupérer la donnée d'une couche extérieure.
Ça revient à faire une jointure (spatiale).
Je suis à côté de la plaque ou c'est bien ça la question?


Mathieu
C'est en forgeant qu'on devient forgeron

Hors ligne

 

#16 Sat 30 July 2022 02:27

ODJAC33
Participant assidu
Date d'inscription: 6 Aug 2017
Messages: 240

Re: QGIS: Creation de 2 Points ?

Merci Sylvain, mais je me suis trompé de message.
Cette question (y a t'il un moyen rapide pour changer l'altitude des sommets dans l'éditeur de sommets?) était en lien avec mon post https://georezo.net/forum/viewtopic.php?id=128045
Je l'ai reformulée dans ce post. Désolé.

Hors ligne

 

Pied de page des forums

Powered by FluxBB