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 Mon 04 February 2008 16:58

David.D
Chef de projet SIG & Géoportail93
Lieu: Paris
Date d'inscription: 2 Nov 2005
Messages: 65
Site web

Liste coordonnées Oracle Locator 9g

Bonjour,

connaissez-vous la requête SQL sous Oracle 9g permettant d'obtenir une

chaine contenant les coordonnées d'un objet géométriques ?

Quelque chose qui serait l'équivalent sous PostGIS de : select

astext(geom) from matable

Ce n'est pas grave, si la chaine de coordonnées retournée n'est pas en WKT.

Merci d'avance

--

David Delhorbe
Webmapping & SIG OpenSource
Département de Seine-Saint-Denis
ddelhorbe@texte-a-enlever.cg93.fr

Hors ligne

 

#2 Tue 12 February 2008 06:54

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

Re: Liste coordonnées Oracle Locator 9g

Bonjour,

SDO_UTIL.GETVERTICES ?
(http://download.oracle.com/docs/html/A9 … sthref1639)

Nico

Hors ligne

 

#3 Tue 12 February 2008 15:36

David.D
Chef de projet SIG & Géoportail93
Lieu: Paris
Date d'inscription: 2 Nov 2005
Messages: 65
Site web

Re: Liste coordonnées Oracle Locator 9g

GetVertices ne renvoie pas une chaîne de caractère, et je ne peux pas

utiliser cet objet de type vertex en PHP. L'idée, c'est de récupérer (en

simple texte) les coordonnées des objets, pour les reformater via PHP

afin d'écire du SVG.

Aprés de nombreuses recherches, j'utilise ceci, faute de mieux. Mais ce

n'est pas satisfaisant, car je ne récupère les coordonnées que d'un

objet à la fois :

SELECT * FROM TABLE(SELECT a.CHAMP_GEOM.SDO_ORDINATES FROM MA_TABLE a

WHERE CHAMP_ID = 'ID')

Avec les dernières version d'Oracle, il existe des fonctions GET_WKT

permettant de récupérer les coordonnées de tous les objets en texte

selon la syntaxe OGC, mais sous oracle 8 et 9, je ne trouve pas d'autre

alternative.


David Delhorbe
Webmapping & SIG OpenSource
Département de Seine-Saint-Denis
ddelhorbe@texte-a-enlever.cg93.fr

Hors ligne

 

#4 Tue 12 February 2008 20:13

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

Re: Liste coordonnées Oracle Locator 9g

une requete comme celle-ci permet de recuper les coord x et y sous
forme de nombre:

SELECT c.datastripid, t.X, t.Y, t.id
FROM tmpstrip c,
   TABLE(SDO_UTIL.GETVERTICES(c.contour)) t
   ORDER BY c.datastripid, t.id;

datastrip est une table contenant des polygones. la requete donne:

DATASTRIPID          X          Y         ID
----------- ---------- ---------- ----------
        993 -37.658845 -46.877754          1
        993 -37.396009 -46.877754          2
        993 -37.396665 -46.608259          3
        993  -37.65819 -46.608259          4
        993 -37.658845 -46.877754          5
        994  -145.4031 33.4099522          1
        994 -145.18787 33.4099522          2
        994 -145.18753  33.679447          3
        994 -145.40343  33.679447          4
        994  -145.4031 33.4099522          5
        995 -119.98241 36.7822524          1
        995 -119.75809 36.7822524          2
        995 -119.75769 37.0517472          3
        995 -119.98281 37.0517472          4
        995 -119.98241 36.7822524          5

On peut imaginer un code PHP qui construit le svg ou le wkt a partir
de cette requete et en connaissant le type des objets stockés (tables
de metadonnées).
A chaque fois que l'identifiant de la feature change, on finit
d'ecrire l'objet precedant et on commence a ecrire le nouvel objet.

Nico

Hors ligne

 

#5 Wed 13 February 2008 15:45

David.D
Chef de projet SIG & Géoportail93
Lieu: Paris
Date d'inscription: 2 Nov 2005
Messages: 65
Site web

Re: Liste coordonnées Oracle Locator 9g

Merci pour la requête, c'est une bonne idée ! Je l'implémente dans mon

PHP pour voir si c'est plus rapide que ma méthode actuelle et je te

tiens au courant.



David Delhorbe
Webmapping & SIG OpenSource
Département de Seine-Saint-Denis
ddelhorbe@texte-a-enlever.cg93.fr

Hors ligne

 

#6 Wed 13 February 2008 15:46

David.D
Chef de projet SIG & Géoportail93
Lieu: Paris
Date d'inscription: 2 Nov 2005
Messages: 65
Site web

Re: Liste coordonnées Oracle Locator 9g

Ta soluce marche bien. J'ai à peu prés les même temps de réponse pour la

génération du SVG. Mais ça à le gros avantage d'être + propre et de

moins solliciter la base, car avant je lançais autant de requête que

d'objets à cartographier.

Par contre, j'ai un autre problème que je soumet à tes lumières en

Oracle Spatial (que je rencontrais déjà dans ma manière précédente de

récupérer les coordonnées) :

les mutipolygones ne sont pas distingués. Je m'explique : je ne peux pas

à distingué pour un même ID d'objet, si la géométrie de cet objet est

simple (1 polygone) ou complexe (plusieurs polygones distincts composent

la surface de l'objet). Les coordonnées des polygones composant l'objet

se suivent, mais je n'ai pas d'indication me permettant alors de créer

un autre polygone en SVG, et celà se traduit en SVG par un trait reliant

les polygones d'un même objet.

Peut-être que vertex.ID retombe à 1 quand on passe à un nouveau polygone

composant l'objet, mais la commande vertex.id ne fonctionne sur ma base,

alors vertex.X et Y fonctionnent : SQL Error: ORA-00904: "T"."ID" :

identificateur non valide



David Delhorbe
Webmapping & SIG OpenSource
Département de Seine-Saint-Denis
ddelhorbe@texte-a-enlever.cg93.fr

Hors ligne

 

#7 Wed 13 February 2008 22:47

David.D
Chef de projet SIG & Géoportail93
Lieu: Paris
Date d'inscription: 2 Nov 2005
Messages: 65
Site web

Re: Liste coordonnées Oracle Locator 9g

Pour identifier les sous-polygone des multipolygones, je regarde

simplement, si dans la liste des coordonnées d'un même objet, je

retrouve une autre fois les premières coordonnées X et Y; et je coupe à

ce moment là !

David Delhorbe

Hors ligne

 

#8 Wed 13 February 2008 22:47

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

Re: Liste coordonnées Oracle Locator 9g

Hmmm oui, je me suis posé la question, quid des multipg ?

J'ai chargé une table de multipolygones et ai lancé la requete que je
t'ai envoyée sur cette table.
Je ne peux effectivement pas caractériser le changement de polygone au
sein d'un multi, toutes les coordonnées se suivant.

A mon avis, faudrait regarder soit du coté d'une fonction pouvant
ressortir les eléments constituant un multi (je sais que ca existe sur
la 10), soit choper l'info sur le multipolygone: nombre de rings et
nombre de sommets par ring.
Ainsi, le code pourrait changer d'objet apres lecture des n
coordonnées formant un ring.

Je vais regarder.
Nicolas

Hors ligne

 

#9 Wed 13 February 2008 22:48

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

Re: Liste coordonnées Oracle Locator 9g

alors vertex.X et Y fonctionnent : SQL Error: ORA-00904: "T"."ID" :

identificateur non valide


Effectivement, la commande que j'ai donnée marche sous 10.2, pas 9: le
champ id a ete rajouté entre les deux versions sur l'objet vertex.

Hors ligne

 

#10 Wed 13 February 2008 22:48

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

Re: Liste coordonnées Oracle Locator 9g

A mon avis, faudrait regarder soit du coté d'une fonction pouvant
ressortir les eléments constituant un multi (je sais que ca existe sur
la 10), soit choper l'info sur le multipolygone: nombre de rings et
nombre de sommets par ring.
Ainsi, le code pourrait changer d'objet apres lecture des n
coordonnées formant un ring.


En fait, je pense que le plus simple est d'utiliser les structures
SDO_ELEM_INFO et SDO_ORDINATE (doc ici pour la version 9:
http://download.oracle.com/docs/html/A96630_01/toc.htm)

Elles permettent de connaitre la structure de chaque geometrie et
renvoie un tableau de coordonnées.
En parsant SDO_ELEM_INFO, on a le type de l'objet, le nombre de trous,
les offset des coordonnnées de chaque partie.
En parsant le tableau de coordonnées, on peut construire son objet SVG
en ayant toutes les infos, je pense.

Ca permet de faire un parser complet traitant tous les cas (pg, trous,
multipg, etc.)

Nicolas

Hors ligne

 

#11 Thu 14 February 2008 08:27

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

Re: Liste coordonnées Oracle Locator 9g

Oui, effectivement, mais ca fait faire un test a chaque coordonnée.
Comment tu fais la diff entre un multipolygone et un polygones a trous ?

Hors ligne

 

#12 Thu 14 February 2008 15:30

David.D
Chef de projet SIG & Géoportail93
Lieu: Paris
Date d'inscription: 2 Nov 2005
Messages: 65
Site web

Re: Liste coordonnées Oracle Locator 9g

en fait, pour éviter de tester toutes les coordonnées, je ne fait le

test uniquement lorsque le c.CHAMP_GEOM.SDO_GTYPE  du polygone est égale

à 2007, ce qui signifie que c'est un mutipolygone. Par ex. sur ma table

de test, sur 40 objets, 36 sont des polygones simples, et 4 sont

multipolygones, donc je fais le test que sur les coordonnées de ces 4

objets.

Je n'ai pas besoin de distinguer un multipolygone d'un donut, car SVG

dessine automatiquement un îlot ou un donut selon que les polygones

suivant le 1er sont dehors ou à l'intérieur du 1er polygone.



David Delhorbe
Webmapping & SIG OpenSource
Département de Seine-Saint-Denis
ddelhorbe@texte-a-enlever.cg93.fr

Hors ligne

 

Pied de page des forums

Powered by FluxBB