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 Sat 15 December 2018 09:50

SIGnico
Juste Inscrit !
Date d'inscription: 13 Sep 2018
Messages: 8

Réalisation d'angles entre deux tables

Bonjour à tous,


Je suis encore débutant sur Postgis mais je souhaite produire une réalisation d'angle automatique sous Postgis. J'ai réalisé le même programme sous Mapinfo en requêtes SQL.

Je dispose d'une table "Point_villes" avec une colonne "nom_ville" char et d'une table "Points_reperes" avec une colonne "repère" et "indice"  (plusieurs points avec le même identifiant)

Je souhaite faire une requête qui trace un angle à partir d'une ville. l'utilisateur pointe une ville rentre le nom de sa ville  et Postgis analyse  la table point_reperes pour former un angle en fonction du nom des repères sur 6 km. Postgis doit déterminer les points les plus  éloignés pour former l'angle d'un ensemble de repères qui portent le même nom.

Je ne sais pas si je suis assez claire.

Je cherche à savoir ce que je dois utiliser comme fonction ou commande sous Postgis car je manque de connaissance dans les "fonctions" Postgresql/Postgis

Buffer
Déterminer X Y de la ville
Déterminer X et Y de chaque points repères (il est possible de les avoirs dans deux colonnes)
Tracer une ligne entre deux points  (ville -> repères)
La fonction pour déterminer la direction d'une ligne
Enregistrer une valeur d'une variable dans un tableau (pour comparer les directions et déterminer l'angle le plus grand)





J'imagine faire une requête similaire à mon programme Mapinfo

Sélectionner les repères dans 6km de la ville
Realisation d'un buffer de 6km puis selection avec intersecte
Supprimer le buffer de 6km
Déterminer les repères les plus proche de la ville (calculer les distances entre la ville et chaque repères et classer dans l'ordre croissant)
Utilisation d'une sous-boucle sur la sélection des repères dans les  6km
Si  dans la colonne "indice"  est différente de 1 alors lancement du traitement
Tracer une ligne entre une ville et un repère et sauvegarder la valeur de la direction
Recommence l'opération sur les repères suivant qui portent le même nom
Comparaison des directions pour estimer l'angle le plus grand  entre les repéres du même nom
Trace les lignes de l'angle le plus grand
MAJ d'une colonne (valeur "1") de la table repère pour indiquer de ne pas traiter un repère portant le même nom

Fermeture de la sous-boucle
Initialisation de la colonne indice par la valeur  "0"


Le but est d'avoir un visuel temporaire des angles


Merci par avance si cela n'est pas possible alors tanpis smile

Hors ligne

 

#2 Mon 17 December 2018 10:40

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1536

Re: Réalisation d'angles entre deux tables

Bonjour,

TOUT est possible avec PostGIS wink (plus sérieusement, comme PG dispose de nombreux langages de programmation, vous pouvez tout faire avec).

Quelques élements de réponse:
D'abord la doc chapitre 8: https://postgis.net/docs/manual-2.5/reference.html
Elle est assez succincte pour etre lue rapidement et indique toutes les fonctions spatiales disponibles.

Concernant votre traitement:
• pas besoin de buffer: long a calculer: vous voulez les points situés a moins d'une certaine distance: st_dwithin.
• Pas besoin de boucle: le SQL fait ca tout seul: 'boucler' sur tous les éléments de la requete.
• Stockez vos points repere dans une seule colonne.
• Pour les angles entre deux points: st_azimuth.
• Matérialiser une ligne: st_makeLine wink
• Trouver les points les plus proches: surtout pas de calcul de distance avec classement ! Postgis dispose d'un opérateur plus proche voisin (KNN) faisant ca très très vite.

Vous auriez un exemple de ce que vous voulez faire ? Quelles sont les colonnes géo de vos tables ?

Nicolas

Hors ligne

 

Pied de page des forums

Powered by FluxBB