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

Pour sécuriser votre compte sur les forums du GeoRezo, nous demandons de changer votre mot de passe.

Vous allez recevoir un message pour effectuer ce changement de mot de passe.

Merci de bien respecter les règles préconisées.

#1 Thu 08 July 2010 17:09

emilk
Participant occasionnel
Lieu: Wasquehal
Date d'inscription: 8 Dec 2005
Messages: 31
Site web

[oracle] test centroid contenu dans polygone

Bonjour,

J'ai 2 polygones A et B. Les polygones A contiennent les polygones B.
Je veux tester si le centroid des polygones B est contenu dans les polygones A.
Je fais cela car le dessin des polygones B dépassent des polygones A.(topologie non parfaite).

1// Je réussi à trouver les centroid:

Code:

SELECT SDO_GEOM.SDO_CENTROID(c.GEOMETRY, m.diminfo) GEOMETRY FROM MATABLE c, user_sdo_geom_metadata m WHERE m.table_name = 'MATABLE' AND m.column_name = 'GEOMETRY' AND GID='5659'

2// Je réussi à trouver les polygones B contenu dans les polygones A:

Code:

select * from apicadm.MATABLE where mdsys.sdo_relate(MATABLE.geometry,(select geometry from apicadm.vue_commune where "NOM"='SANCOURT'),'mask=INSIDE querytype=JOIN')='TRUE';

3//Par contre si j'essaye d'imbriquer les deux requêtes, cela ne fonctionne pas.
Surement parce que la GEOMETRY renvoyée est de type point et que SDO_relate recherche une geométry polygonale.

Code:

select * from apicadm.MATABLE where mdsys.sdo_relate((SELECT SDO_GEOM.SDO_CENTROID(c.GEOMETRY, m.diminfo) GEOMETRY FROM MATABLE c, user_sdo_geom_metadata m WHERE m.table_name = 'MATABLE' AND m.column_name = 'GEOMETRY' AND GID='5659'),(select geometry from apicadm.vue_commune where "NOM"='SANCOURT'),'mask=INSIDE querytype=JOIN')='TRUE';

Si tu ne sais pas où tu vas. Prends n'importe quel chemin, il t'y emmènera.

Hors ligne

 

#2 Thu 08 July 2010 17:43

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1538

Re: [oracle] test centroid contenu dans polygone

emilk a écrit:

Bonjour,

J'ai 2 polygones A et B. Les polygones A contiennent les polygones B.
Je veux tester si le centroid des polygones B est contenu dans les polygones A.
Je fais cela car le dessin des polygones B dépassent des polygones A.(topologie non parfaite).

1// Je réussi à trouver les centroid:

Code:

SELECT SDO_GEOM.SDO_CENTROID(c.GEOMETRY, m.diminfo) GEOMETRY FROM MATABLE c, user_sdo_geom_metadata m WHERE m.table_name = 'MATABLE' AND m.column_name = 'GEOMETRY' AND GID='5659'

2// Je réussi à trouver les polygones B contenu dans les polygones A:

Code:

select * from apicadm.MATABLE where mdsys.sdo_relate(MATABLE.geometry,(select geometry from apicadm.vue_commune where "NOM"='SANCOURT'),'mask=INSIDE querytype=JOIN')='TRUE';

3//Par contre si j'essaye d'imbriquer les deux requêtes, cela ne fonctionne pas.
Surement parce que la GEOMETRY renvoyée est de type point et que SDO_relate recherche une geométry polygonale.

Code:

select * from apicadm.MATABLE where mdsys.sdo_relate((SELECT SDO_GEOM.SDO_CENTROID(c.GEOMETRY, m.diminfo) GEOMETRY FROM MATABLE c, user_sdo_geom_metadata m WHERE m.table_name = 'MATABLE' AND m.column_name = 'GEOMETRY' AND GID='5659'),(select geometry from apicadm.vue_commune where "NOM"='SANCOURT'),'mask=INSIDE querytype=JOIN')='TRUE';


bonsoir,

Quel est le message d'erreur Oracle ?
Sinon, passer par des sous requetes dans la clause from, au lieu de mettre les sous requetes directement dans les methodes, peut etre.

Nicolas

Hors ligne

 

#3 Thu 08 July 2010 17:54

Pierre
DesCartesPourUnMondeMeilleur
Date d'inscription: 22 Sep 2005
Messages: 1643

Re: [oracle] test centroid contenu dans polygone

Bonjour

Première remarque, pas de select dans un select sauf si il y a FROM entre les deux. (il y a d'autres exceptions).

Deuxième remarque, il est plus facile de lire une requête mise en forme.

Je pense que SDO_GEOM.RELATE ou SDO_ANYINTERACT sera plus efficace :

Code:

SELECT *
  FROM apicadm.MATABL, apicadm.vue_commune COMMUNE, user_sdo_geom_metadata m
 WHERE SDO_ANYINTERACT (COMMUNE.geometry,
                        (SDO_GEOM.SDO_CENTROID (c.GEOMETRY, m.diminfo))) =
          'TRUE'
       AND COMMUNE."NOM" = 'SANCOURT'
       AND m.table_name = 'MATABLE'
       AND m.column_name = 'GEOMETRY'
       AND GID = '5659';

Cordialement,

Dernière modification par Pierre (Thu 08 July 2010 17:54)


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

 

#4 Fri 09 July 2010 11:52

emilk
Participant occasionnel
Lieu: Wasquehal
Date d'inscription: 8 Dec 2005
Messages: 31
Site web

Re: [oracle] test centroid contenu dans polygone

1// il YA UN FROM ENTRE LES DEUX
2// vOICI UNE REQUETE QUI FONCTIONNE, avec une mise en forme agréable...

Cette requête fonctionne:

Code:

SELECT SDO_GEOM.RELATE (
   (SELECT SDO_GEOM.SDO_CENTROID(c.GEOMETRY, m.diminfo) GEOMETRY
   FROM MATABLE c, user_sdo_geom_metadata m
   WHERE m.table_name = 'MATABLE' 
   AND m.column_name = 'GEOMETRY' 
   AND GID='5659'), 'anyinteract', COMMUNE.GEOMETRY, 0.005) 
FROM MATABLE,COMMUNE  
WHERE COMMUNE."Nom"='SANCOURT'  
AND MATABLE.GID = '5659';

Dernière modification par emilk (Fri 09 July 2010 11:55)


Si tu ne sais pas où tu vas. Prends n'importe quel chemin, il t'y emmènera.

Hors ligne

 

#5 Sun 11 July 2010 12:00

Pierre
DesCartesPourUnMondeMeilleur
Date d'inscription: 22 Sep 2005
Messages: 1643

Re: [oracle] test centroid contenu dans polygone

emilk a écrit:

1// il YA UN FROM ENTRE LES DEUX
2// vOICI UNE REQUETE QUI FONCTIONNE, avec une mise en forme agréable...

Cette requête fonctionne:

Code:

SELECT SDO_GEOM.RELATE (
   (SELECT SDO_GEOM.SDO_CENTROID(c.GEOMETRY, m.diminfo) GEOMETRY
   FROM MATABLE c, user_sdo_geom_metadata m
   WHERE m.table_name = 'MATABLE' 
   AND m.column_name = 'GEOMETRY' 
   AND GID='5659'), 'anyinteract', COMMUNE.GEOMETRY, 0.005) 
FROM MATABLE,COMMUNE  
WHERE COMMUNE."Nom"='SANCOURT'  
AND MATABLE.GID = '5659';


1/ Je ne pense toujours pas que votre syntaxe respectent les canons du SQL. Et l'effiscience de votre requête pourrait s'en ressentir sur des traitements de lots importants de données.
2/ En effet plus lisible.


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