IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

Topologie : identification et correction d'erreurs topologiques


Sujet :

PL/SQL Oracle

  1. #1
    Membre à l'essai
    Homme Profil pro
    Géomaticien
    Inscrit en
    Octobre 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Géomaticien

    Informations forums :
    Inscription : Octobre 2015
    Messages : 13
    Points : 10
    Points
    10
    Par défaut Topologie : identification et correction d'erreurs topologiques
    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 :
    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;
    Mais j'obtiens l'erreur suivante :

    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 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 :

    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();
    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.

    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.

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 138
    Points : 1 918
    Points
    1 918
    Par défaut
    Bonjour,

    Es tu sûr que tes variables vobjet1 et vobjet2 sont suffisamment grandes?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Géomaticien
    Inscrit en
    Octobre 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Géomaticien

    Informations forums :
    Inscription : Octobre 2015
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Bonjour,
    oui j'en suis certain. J'ai vérifié avec la fonction LENGTH() et mes plus grands noms font 25 caractères.

Discussions similaires

  1. fonction correction, mais erreur compilation
    Par cashmoney dans le forum SQL
    Réponses: 15
    Dernier message: 22/01/2009, 15h53
  2. correction d'erreur (rtp)?
    Par motivée dans le forum Développement
    Réponses: 0
    Dernier message: 13/12/2008, 00h28
  3. [HTML] Correction des erreurs de validation W3C
    Par jlb59 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 15
    Dernier message: 24/02/2008, 09h50
  4. [XSLT] Parseur XML : correction des erreurs détéctées
    Par serenity dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 08/11/2007, 07h08
  5. Réponses: 2
    Dernier message: 26/06/2007, 16h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo