#1 Fri 29 October 2010 10:43
- Pierre
- DesCartesPourUnMondeMeilleur
- Date d'inscription: 22 Sep 2005
- Messages: 1643
ORACLE : reprojection
Aloha
Je tente de créer une vue, qui sera utilisée par une autre application toujours en L1, contenant des enregistrements aujourd'hui en L93.
J'ai bien un SRID dans ma vue USER_GEOM_METADATA (ici 2154), mais lorsque j'utilise la fonction SDO_CS.TRANSFORM, j'obtiens une erreur ORA-13029 (Invalid SRID). Et je ne vois pas comment injecter le SRID dans le champ GEOMETRY de ma vue.
Voici mes scripts :
Code:
DELETE FROM USER_SDO_GEOM_METADATA WHERE TABLE_NAME LIKE 'XXX_CS_PA%'; /*Création de ma vue avec les centroïdes des objets*/ CREATE OR REPLACE VIEW A_XXX.XXX_CS_PA_BADM AS SELECT CAST ("type" AS CHAR (50)) AS TYPE_, CAST ("libelle" AS CHAR (100)) AS LIBELLE, CAST ("propriet" AS CHAR (100)) AS PROPRIET, CAST ("commune" AS CHAR (100)) AS COMMUNE, CAST ("libelle1" AS CHAR (100)) AS LIBELLE1, CAST ("libelle2" AS CHAR (100)) AS LIBELLE2, CAST ("libelle3" AS CHAR (100)) AS LIBELLE3, CAST ("aff_lib" AS CHAR (100)) AS AFF_LIB, SDO_GEOM.SDO_CENTROID (GEOMETRY, 1) AS GEOMETRY, APIC_CDATE, APIC_MDATE FROM PA_BADM WITH READ ONLY;
Code:
/*Référencement de la vue dans les métadata avec un SRID à 2154 ce qui correspond au lambert 93*/ INSERT INTO USER_SDO_GEOM_METADATA (TABLE_NAME, COLUMN_NAME, DIMINFO, SRID) VALUES ('XXX_CS_PA_BADM', 'GEOMETRY', SDO_DIM_ARRAY (SDO_DIM_ELEMENT ('X', 692000, 875296, 0.001), SDO_DIM_ELEMENT ('X', 6820000, 7012512, 0.001)), 2154 -- SRID );
Code:
/*Et là, la requête de sélection pour reprojeter mes données en L1*/ SELECT -- GEOMETRY, L93.X, L93.Y, L1.X, L1.Y, LIBELLE FROM XXX_CS_PA_BADM, TABLE ( SDO_UTIL. GETVERTICES (XXX_CS_PA_BADM.GEOMETRY)) L93, TABLE ( SDO_UTIL. GETVERTICES ( SDO_CS. TRANSFORM (XXX_CS_PA_BADM.GEOMETRY, 27561))) L1;
1/ Quelqu'un a-t'il déjà pratiqué ?
2/ Quelqu'un a-til une idée ?
D'avance merci,
art X I. Déclaration des Droits de l’Homme et du Citoyen 1789
La libre communication des pensées et des opinions est un des droits les plus précieux de l’Homme : tout Citoyen peut donc parler, écrire, imprimer librement, sauf à répondre de l’abus de cette liberté, dans les cas déterminés par la Loi.
Hors ligne
#2 Fri 29 October 2010 11:41
- saispasfau
- Participant actif
- Date d'inscription: 28 Nov 2006
- Messages: 62
Re: ORACLE : reprojection
Bonjour.
Le SRID est-il bien spécifié à 2154 dans les géométrie de la table PA_BADM ?
Je pense qu'il doit être à null. le SRID des géométries ne correspond alors pas avec le SRID spécifié dans les métadonnées, idem pour la vue.
Il faut donc commencer par supprimer l'index spatial sur la table PA_BADM (pour pouvoir modifier le SRID des géométries sans message d'erreur).
Puis exécuter la requête pour spécifier le SRID des géométries (qui doit correspondre à celui spécifié dans les métadonnées) :
Code:
UPDATE PA_BADM P set PA_BADM.GEOMETRY.SDO_SRID = 2154;
Enfin, recréer l'index spatial sur la table, puis relancer la requête :
Code:
/*Et là, la requête de sélection pour reprojeter mes données en L1*/ SELECT -- GEOMETRY, L93.X, L93.Y, L1.X, L1.Y, LIBELLE FROM XXX_CS_PA_BADM, TABLE ( SDO_UTIL. GETVERTICES (XXX_CS_PA_BADM.GEOMETRY)) L93, TABLE ( SDO_UTIL. GETVERTICES ( SDO_CS. TRANSFORM (XXX_CS_PA_BADM.GEOMETRY, 27561))) L1;
A+
Saispasfau.
Hors ligne
#3 Tue 16 November 2010 09:46
- Pierre
- DesCartesPourUnMondeMeilleur
- Date d'inscription: 22 Sep 2005
- Messages: 1643
Re: ORACLE : reprojection
Aloha
L'Update ne fonctionne pas.
Ont été testés, aussi, mais pas par moi,
la création d'une géométrie correcte (? on en est à moitié sûrs) :
Code:
SELECT GEOMETRY, sdo_geometry(2001, 2154, SDO_POINT_TYPE( L93.X, L93.Y, NULL), NULL, NULL) FROM XXXXs.A_ANNOPT, TABLE ( SDO_UTIL. GETVERTICES (GEOMETRY)) L93 where rownum = 1;
mais l'essai de transformation des coordonnées, aboutit à une une erreur "ORA-13282: échec d'initialisation de la transformation des coordonnées", même en utilisant plusieurs méthodes de CS_TRANSFORM.
Code:
SELECT GEOMETRY, SDO_CS.TRANSFORM ( sdo_geometry(2001, 2154, SDO_POINT_TYPE(L93.X, L93.Y, NULL), NULL, NULL), MDSYS.SDO_DIM_ARRAY( MDSYS.SDO_DIM_ELEMENT(null,692000.0,875296.0,0.0010), MDSYS.SDO_DIM_ELEMENT(null,6820000.0,7012512.0,0.0010) ), 27561) GEOML93 FROM XXXX.A_ANNOPT, TABLE ( SDO_UTIL. GETVERTICES (GEOMETRY)) L93 where rownum = 1;
Ont été essayé aussi de rajouter ce qu'il faut dans SDO_GEOM_METADATA mais j'ai toujours l'erreur "ORA-13282: échec d'initialisation de la transformation des coordonnées"
Code:
DELETE FROM MDSYS.ELYX_SDO_GEOM_METADATA WHERE TABLE_NAME = 'A_ANNOPT' and OWNER='XXXX' and COLUMN_NAME = 'GEOML93'; INSERT INTO MDSYS.ELYX_SDO_GEOM_METADATA (OWNER,TABLE_NAME,COLUMN_NAME,DIMINFO,SRID) values ('XXXX','A_ANNOPT','GEOML93',MDSYS.SDO_DIM_ARRAY(MDSYS.SDO_DIM_ELEMENT(NULL,692000.0,875296.0,0.0010),MDSYS.SDO_DIM_ELEMENT(NULL,6820000.0,7012512.0,0.0010) ),2154); SELECT GEOMETRY, SDO_CS.TRANSFORM ( sdo_geometry(2001, 2154, SDO_POINT_TYPE(L93.X, L93.Y, NULL), NULL, NULL) ,27561) GEOML93 FROM XXXXs.A_ANNOPT, TABLE ( SDO_UTIL. GETVERTICES (GEOMETRY)) L93 where rownum = 1; rollback;
sans plus de succès.
**********************
Jusqu'à ce que j'utilise
Code:
SDO_GEOMETRY(2001, 2154, SDO_POINT_TYPE( L93.X, L93.Y, NULL), NULL, NULL) AS GEOMETRY,
comme champ GEOMETRY dans ma définition de vue (notez les majuscules dans SDO_GEOMETRY), L93 étant une table de la clause FROM
Code:
TABLE ( SDO_UTIL. GETVERTICES (SDO_GEOM.SDO_CENTROID (GEOMETRY, 1))) L93
Et maintenant, je peux reprojeter mes ponctuels !
Yipi.
Dernière modification par Pierre (Tue 16 November 2010 10:32)
art X I. Déclaration des Droits de l’Homme et du Citoyen 1789
La libre communication des pensées et des opinions est un des droits les plus précieux de l’Homme : tout Citoyen peut donc parler, écrire, imprimer librement, sauf à répondre de l’abus de cette liberté, dans les cas déterminés par la Loi.
Hors ligne