Bonjour,
je travaille actuellement avec les topologies d'oracle (dans oracle 12c) et je cherche à savoir si mes données ont des erreurs topologiques et si c'est le cas à les corriger.
Je précise qu'avant d'insérer mes données dans une topologie j'ai vérifié que mes données spatiales étaient bien correctes en utilisant SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT. J'ai aussi fait un test pour vérifier qu'il n'y avait pas de recouvrement sur ces données spatiales et c'est le cas, aucun recouvrement n'a été détecté.
Mon problème :
Je suis actuellement dans la phase d'identification des erreurs topologiques et j'utilise le code ci-dessous afin de savoir si mes données topologiques sont concernées par de erreurs de recouvrement :
Mais j'obtiens l'erreur suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 SET SERVEROUTPUT ON DECLARE vobjet1 VARCHAR2(100); vobjet2 VARCHAR2(100); BEGIN FOR i IN (SELECT a.objectid, a.nom_commune, a.geom FROM TOPO_VERIF_COMMUNE a) LOOP BEGIN SELECT i.nom_commune, b.nom_commune INTO vobjet1, vobjet2 FROM TOPO_VERIF_COMMUNE b WHERE b.objectid <> i.objectid AND i.objectid < b.objectid AND SDO_OVERLAPBDYINTERSECT (b.geom, i.geom) = 'TRUE'; DBMS_OUTPUT.PUT_LINE(vobjet1||' recouvre en partie '||vobjet2); vobjet1 := NULL; vobjet2 := NULL; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; CONTINUE; END; END LOOP; END;
Je ne comprend pas l'erreur "ORA-13122: topo_geometry non valide" car mes données sources sont bonnes et j'ai utilisé la procédure d'oracle pour créer mes entités topologiques (cf. Topology Data Model Overview), je ne pense donc pas que l'erreur provienne d'une mauvaise conversion des données spatiales en données topologiques :Rapport d'erreur -
ORA-29902: erreur d'exécution de la routine ODCIIndexStart()
ORA-13122: topo_geometry non valide
ORA-13199: OCIStmtExecute(mdtpgettgids
ORA-29400: erreur de cartouche de données
ORA-06502: PL/SQL : erreur numérique ou erreur sur une valeur: tampon de chaîne de caractères trop petit
ORA-06512: à "MDSYS.SDO_TOPO", ligne 1591
ORA-06512: à "MDSYS.SDO_TOPO", ligne 2283
ORA-06512: à "MDSYS.SDO_INDEX_METHOD_10I", ligne 880
ORA-06512: à ligne 7
ORA-06512: à ligne 7
29902. 00000 - "error in executing ODCIIndexStart() routine"
*Cause: The execution of ODCIIndexStart routine caused an error.
*Action: Examine the error messages produced by the indextype code and
take appropriate action.
Je ne comprends pas non plus pourquoi j'obtiens l'erreur ORA-06502: PL/SQL : erreur numérique ou erreur sur une valeur: tampon de chaîne de caractères trop petit.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 -- Création de l'objet TOPOMAP EXECUTE SDO_TOPO_MAP.CREATE_TOPO_MAP('TOPO_VERIFICATION', 'TOPO_VERIFICATION_TOPOMAP'); -- Insertion des données de la topologie dans l'objet TopoMap EXECUTE SDO_TOPO_MAP.LOAD_TOPO_MAP('TOPO_VERIFICATION_TOPOMAP', 'true'); -- Insertion des entités topologiques dans la table topo_verif_commune BEGIN FOR i IN ( SELECT a.objectid, a.geom FROM ta_commune a ) LOOP INSERT INTO topo_verif_commune(fid_commune, geom) VALUES(i.objectid, SDO_TOPO_MAP.CREATE_FEATURE('TOPO_VERIFICATION', 'topo_verif_commune', 'GEOM', i.geom)); END LOOP; END; CALL SDO_TOPO_MAP.COMMIT_TOPO_MAP();
Par ailleurs, bien que mon test entre entités topologiques ne fonctionne pas celui entre entités spatiales et entités topologiques fonctionne et renvoie quant à lui des erreurs de recouvrement (le code utilisé est le même que celui présenté dans ma première citation, seul le nom de la table change dans le FOR i IN()). Mais ce test est-il significatif étant donné qu'il compare des entités spatiales avec des entités topologiques ? C'est pourquoi j'aimerai faire fonctionner mon test entre entités topologiques uniquement (il faut que je sois absolument sûr qu'il n'y a pas d'erreur de topologie).
Quelqu'un aurait-il une idée de ce qui provoquerait cette erreur ?
Merci d'avance.
Partager