Pages: 1
- Sujet précédent - [Postgis] extraire les coordonnées des sommets de polygone - Sujet suivant
#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
Pages: 1
- Sujet précédent - [Postgis] extraire les coordonnées des sommets de polygone - Sujet suivant