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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Fri 07 September 2007 14:49

michael_douchin
Participant occasionnel
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 11

[Postgis] extraire les coordonnées des sommets de polygone

Bonjour,

J'ai une couche dans la base de données postgis avec 40 polygones.
Je souhaite avoir en sortie de ma requete les coordonnées de tous les sommets des polygones, avec en sortie :

id_polygone | X | Y

A 18560 68000
A 18578 68015
A 18558 68040
A 18530 67968
B 18320 67850
B 18300 67960
etc..........

Avec la fonction postgis as text, cela me donne un résultat avec autant de lignes que de polygones (40) et pour chaque ligne le id_polygone et une colonne du style
POLYGON((680832.828831264 1839501.42014284,681100.37604724 1839556.35650452,681139.616305584 1839495.35573928,681099.662587998 1839486.08076912,681106.440450802 1839450.05107737,680857.799904755 1839401.8925785,680851.378771571 1839404.03295622,680832.828831264 1839501.42014284))

Je peux donc copier toutes ces lignes, puis m'amuse à remplacer les espaces par des retours chariot, mais cela est assez long et peu efficace.

Je n'ai pas trouvé de fonction qui à partir d'une geometrie au format texte pouvait me donner les valeurs de X et de Y pour chaque sommet.

Avec OpenJump c'est faisable en plusieurs temps:
1) geotraitement-->sur une couche-->convert-->de polygone vers linear ring
2) geotraitement-->sur une couche-->convert-->de ligne vers points
3) j'enregistre la couche de point créée sous postgis et ensuite je sors les X(the_geom) et Y(the_geom) via une requete.

Qu'en est-il avec PostGIS ? Je n'ai pas trouvé de fonction "PolygonToPoints" ou au moins "PolygonToLinestring

Merci à vous
Kimaidou

Hors ligne

 

#2 Fri 07 September 2007 16:25

michael_douchin
Participant occasionnel
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 11

Re: [Postgis] extraire les coordonnées des sommets de polygone

Re-bonjour

J'ai trouvé la solution, on peut le faire directement via une requête de ce type

Code:

SELECT code_polygone, 
pointn(ExteriorRing(the_geom), generate_series(1, Numpoints((ExteriorRing(the_geom))))  )  as the_geom,
X(pointn(ExteriorRing(the_geom), generate_series(1, Numpoints((ExteriorRing(the_geom))))  )  ) as X,
Y(pointn(ExteriorRing(the_geom), generate_series(1, Numpoints((ExteriorRing(the_geom))))  )  ) as Y
FROM uc_machine
ORDER BY code_polygone

La fonction ExteriorRing créé une polyligne fermée par polygone (contour exact)
La fonction NumPoints donne le nombre de point de la polyligne
La fonction generate_series crée la suite de 1 au nombre de points (1, 2, 3 .... n)
La fonction pointn(geometry,n) prend le point n d'une ligne
Les fonctions X(the_geom) et Y() donne les coordonnées X et Y du point

On obtient un tableau comme ceci
code_polygone  |  geometrie  |  X  |  Y
"01A";"0101000020B46B00000726C75C6CC82441F8AACEC00F0C3C41";681014.181206883;1838095.7531535
"01A";"0101000020B46B0000D33D315022C92441448ED874340C3C41";681105.156625683;1838132.45642938
"01A";"0101000020B46B00009ED5759362C92441DC8882E8430C3C41";681137.28800838;1838147.9082418
"01A";"0101000020B46B000095E105C486C92441ACC8F7594B0C3C41";681155.38285737;1838155.35143713


Merci à David
http://www.davidgis.fr/blog/index.php?2 … linestring

Voili voilou

Michael

Dernière modification par michael_douchin (Fri 07 September 2007 16:30)

Hors ligne

 

Pied de page des forums

Powered by FluxBB