#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
Hors ligne
#2 Mon 17 December 2018 10:40
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: Réalisation d'angles entre deux tables
Bonjour,
TOUT est possible avec PostGIS (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
• 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