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

SQL Oracle Discussion :

Points dans un polygone


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 516
    Par défaut Points dans un polygone
    Bonjour,

    Dans une requête, je cherche à utiliser la fonction SDO_INSIDE pour savoir si un point est dans un polygone.
    Le point est donné par une latitude et une longitude, donc je recrée la géométrie à la volée.
    La géométrie du polygone est récupérée dans une autre table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT 
    SDO_GEOMETRY(2001, 4326, SDO_POINT_TYPE(pnt_lon, pnt_lat, NULL), NULL, NULL) geom,
    (SELECT sge_geometry FROM sit WHERE SIT_NOM = 'mavaleur') geom_polygon,
    SDO_INSIDE(geom, geom_polygon)
    FROM matable
    Quand je lance cette requête dans sqldevelopper, j'ai l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-00904: "GEOM_POLYGON" : identificateur non valide
    Qu'est ce qui cloche ?

    Merci,

    Nico

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 966
    Par défaut
    Vous ne pouvez pas référencer un alias du query dans une autre expression du même query, transformez en sous-query.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT expr1 as a, expr2 as b, function(a,b) as c  from some_table
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select a, b, function(a,b) as c
    from (
    select expr1 as a, expr2 as b from some_table
    )

  3. #3
    Membre Expert
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 1 009
    Par défaut
    Citation Envoyé par JeitEmgie Voir le message
    Vous ne pouvez pas référencer un alias du query dans une autre expression du même query, transformez en sous-query.
    Bravo pour cette relecture JeitEmgie, j'étais passé à coté

    Pour moi les sous requêtes sont, à la fois, plus lisibles et plus maintenables en utilisant les CTE.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    WITH
       point as   (SELECT SDO_GEOMETRY(2001, 4326, SDO_POINT_TYPE(pnt_lon, pnt_lat, NULL), NULL, NULL) as geom from dual)
      ,polygon as (SELECT sge_geometry  as geom FROM sit WHERE SIT_NOM = 'mavaleur')
    SELECT point.geom, polygon.geom, SDO_INSIDE(point.geom, polygon.geom)
    FROM point 
         cross join polygon
    Le savoir est une nourriture qui exige des efforts.

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 031
    Billets dans le blog
    6
    Par défaut
    Ou bien tu encapsukes...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT SDO_GEOMETRY(2001, 4326, SDO_POINT_TYPE(pnt_lon, pnt_lat, NULL), NULL, NULL) geom,
           (SELECT sge_geometry FROM sit WHERE SIT_NOM = 'mavaleur') geom_polygon,
           SDO_INSIDE(SDO_GEOMETRY(2001, 4326, SDO_POINT_TYPE(pnt_lon, pnt_lat, NULL), NULL, NULL), 
                                   (SELECT sge_geometry FROM sit WHERE SIT_NOM = 'mavaleur'))
    FROM   matable
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. [C] présence d'un point dans un polygone
    Par adiiii dans le forum Développement 2D, 3D et Jeux
    Réponses: 15
    Dernier message: 16/11/2019, 10h14
  2. Point dans un polygone 3D
    Par silfride dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 22/08/2008, 12h04
  3. Point dans un polygone
    Par kerinel dans le forum Mathématiques
    Réponses: 5
    Dernier message: 17/10/2007, 13h23
  4. Point dans un polygone
    Par titelisette dans le forum ASP
    Réponses: 7
    Dernier message: 03/05/2007, 18h08
  5. Point dans un polygone
    Par titelisette dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 27/04/2007, 12h51

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