#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
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.
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.
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: 995
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é?)
Hors ligne
#7 Tue 12 July 2022 11:26
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3945
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,
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!
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)
[...]
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.
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.
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!
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!
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.
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!
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