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

GEODATA DAYS 2024

#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

 

Pied de page des forums

Powered by FluxBB