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 Tue 24 February 2009 10:43

nat43
Participant actif
Date d'inscription: 13 Mar 2008
Messages: 94

Oracle - Transformation de coordonnées.

Bonjour,

J'ai une table contenant des polygones sous Oracle possédant un champ géométrie, un champ x, un champ y. J'utilise les champs x et y pour créer une vue de label-text.

J'ai intégré des données Lambert 1 dans cette table, et je souhaite transformer mes données en Lambert 93.

J'ai donc mis à jour mon champ géométrie avec le script suivant :

Code:

update SCHEMA.NOMTABLE c set c.geometry = (select SDO_CS.TRANSFORM(a.GEOMETRY, b.DIMINFO, 141012) from SCHEMA.NOMTABLE a, user_sdo_geom_metadata b where b.table_name = 'NOMTABLE' and b.column_name = 'GEOMETRY' and a.entityid = c.entityid) where c.geometry.sdo_srid = 41013;

Ensuite, pour mettre à jour les champs x et y, j'ai lancé un script du type :

Code:

update SCHEMA.NOMTABLE a set a.LABX = (select result.GEOMETRIE.SDO_POINT.X from (select (MDSYS.SDO_CS.TRANSFORM(MDSYS.SDO_GEOMETRY(2001, 41013, MDSYS.SDO_POINT_TYPE(p.LABX,p.LABY,0), NULL, NULL),141012)) GEOMETRIE, p.entityid ENTITYID from SCHEMA.NOMTABLE p) result 
where result.entityid = a.entityid) where exists (select result.GEOMETRIE.SDO_POINT.X from (select (MDSYS.SDO_CS.TRANSFORM(MDSYS.SDO_GEOMETRY(2001, 41013, MDSYS.SDO_POINT_TYPE(p.LABX,p.LABY,0), NULL, NULL),141012)) GEOMETRIE, p.entityid ENTITYID from SCHEMA.NOMTABLE p) result 
where result.entityid = a.entityid and a.laby < 500000);

Le seul soucis est que lorsque je regarde mes données dans Oracle déjà, les champs x et y ne se situent plus à l'intérieur du polygone. Et ça confirme avec l'affichage.
J'ai vérifié mes données sources, et en Lambert 1, tout est cohérent.

Est ce que quelqu'un a déjà eu à faire ce type de transformation ? Ce sont mes scripts qui ont un problème ?

Merci pour votre aide.

NT

Hors ligne

 

#2 Tue 24 February 2009 11:38

François
Membre
Lieu: Grenoble
Date d'inscription: 4 Apr 2007
Messages: 257

Re: Oracle - Transformation de coordonnées.

Bonjour,

Avez vous vérifié que la clause where de votre script remonte bien des valeurs ?


François

Hors ligne

 

#3 Tue 24 February 2009 11:42

nat43
Participant actif
Date d'inscription: 13 Mar 2008
Messages: 94

Re: Oracle - Transformation de coordonnées.

Oui, oui ...
La clause WHERE est logique. La transformation s'effectue bien, mais pas correctement, pas comme je le souhaite.

Hors ligne

 

#4 Wed 25 February 2009 09:17

nat43
Participant actif
Date d'inscription: 13 Mar 2008
Messages: 94

Re: Oracle - Transformation de coordonnées.

J'ai opté pour autre solution pour régler mon problème ... mais bon, le sujet reste peut-être actif pour d'autre qui se poserait la même question.

Bonne journée.

Hors ligne

 

#5 Tue 21 April 2009 20:30

agodfrin
Participant occasionnel
Lieu: Sophia Antipolis
Date d'inscription: 4 Jan 2006
Messages: 13

Re: Oracle - Transformation de coordonnées.

La syntaxe initiale est bien compliquée. Il suffit de faire ceci:

update schema.nomtable
set c.geometry = sdo_cs.transform(geometry, 141012)
where c.geometry.sdo_srid = 41013;

Quant à la seconde requète, elle me semble incorrecte car elle ne fait que remplacer labX par le X résultant de la transformation, alors que labY reste inchangée, ce qui expliquerait l'erreur que vous observez - mais c'est peut-être simplement une erreur dans le "copier-coller" sur le forum.

On peut l'écrire de manière plus simple comme ceci:

update schema.nomtable set
labx = sdo_cs.transform (
         sdo_geometry(2001, 41013, sdo_point_type(labx, laby, null), null, null), 141012
       ).sdo_point.x,
laby = sdo_cs.transform (
         sdo_geometry(2001, 41013, sdo_point_type(labx, laby, null), null, null), 141012
       ).sdo_point.y
where laby < 500000;

Il faudrait aussi vérifier que la définition de la projection 141012 pour le lambert 93 est bien correcte. Quelle est votre version de la base Oracle ?

Albert Godfrind
Oracle

Dernière modification par agodfrin (Tue 21 April 2009 20:34)

Hors ligne

 

#6 Tue 26 May 2009 16:53

nat43
Participant actif
Date d'inscription: 13 Mar 2008
Messages: 94

Re: Oracle - Transformation de coordonnées.

Bonjour,

Merci pour votre réponse. Je n'avais pas vu que vous aviez répondu. Du coup, j'avais opté pour une autre solution.
Cependant, le Lambert 93 est bien renseigné, je possède une version 10g2 de Oracle. Je dirai même que le script de mise à jour de ce srid vient de vous.
J'aurai certainement à refaire ce genre de traitement à l'avenir, donc je garde votre post sous le coude et vous tiens au courant dès que je m'y remet dedans.

Merci,

Hors ligne

 

Pied de page des forums

Powered by FluxBB