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

PostgreSQL Discussion :

PostgreSql Intersection polygone ligne


Sujet :

PostgreSQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 12
    Par défaut PostgreSql Intersection polygone ligne
    Bonjour,

    J'ai crée une table figure qui contient des polygones avec un identifiant et une altitude. Je voudrais faire une requête qui me permettrait de récupérer les points d'intersections entre un polygone et une ligne dont je connais deux points(debut et fin).

    Merci d'avance

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 997
    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 : 21 997
    Billets dans le blog
    6
    Par défaut
    Utilisez la méthode Intersection pour ce faire.

    Exemple :

    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
    CREATE TABLE T_GEO ( GEO_NOM VARCHAR(16), GEO_OBJET GEOMETRY);
     
    INSERT INTO T_GEO (GEO_NOM, GEO_OBJET)
        VALUES ('Un polygone', 'POLYGON ((0 0, 0 1, 1 1, 1 0, 0 0))');
    INSERT INTO T_GEO (GEO_NOM, GEO_OBJET)
        VALUES ('Une ligne', 'LINESTRING(0 0, 1 1)');
     
    SELECT ST_AsText(Intersection(T1.GEO_OBJET, T2.GEO_OBJET)) AS Inter
    FROM   T_GEO AS T1
           CROSS JOIN T_GEO AS T2
    WHERE  T1.GEO_NOM LIKE '%polygone%'
      AND  T2.GEO_NOM LIKE '%ligne%';
     
    inter
    ------------------------------  
    LINESTRING(0 0,1 1)
    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/ * * * * *

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 12
    Par défaut
    Merci de m'avoir ca marche mais je voudrais récupérer que des points et pas des lignes si c'est possible

    Cordialement

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 12
    Par défaut
    Je suis arrivé à récupérer des multipoints est-il possible de récupérer chacun des points qui composent un multipoint ou une ligne ?

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 997
    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 : 21 997
    Billets dans le blog
    6
    Par défaut
    L'intersection d'un polygone qui est une surface avec une ligne est une ligne, pas deux points.
    Mais d'une ligne vous pouvez obtenir les extrémités :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT ST_ASText(ST_StartPoint(Intersection(T1.GEO_OBJET, T2.GEO_OBJET))) AS StartPoint, 
           ST_ASText(ST_EndPoint(Intersection(T1.GEO_OBJET, T2.GEO_OBJET))) AS StartPoint
    FROM   T_GEO AS T1
           CROSS JOIN T_GEO AS T2
    WHERE  T1.GEO_NOM LIKE '%polygone%'
      AND  T2.GEO_NOM LIKE '%ligne%';
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    StartPoint         EndPoint
    ------------------ -----------------
    POINT(0 0)         POINT(1 1)
    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/ * * * * *

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 12
    Par défaut
    Mais si ma droite comporte plus de points comment on peut faire ? svp

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 12
    Par défaut
    pour récupérer la totalité des points (ex: ma droite a trois points je souhaiterai avoir ces trois points) merci d'avance

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 997
    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 : 21 997
    Billets dans le blog
    6
    Par défaut
    Une droite est définie par deux points, pas par trois.

    Que cherchez vous à faire ? Exprimez vous clairement ! Vous faites perdre du temps à tous en ne posant pas les bonnes question !!!!!
    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/ * * * * *

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 12
    Par défaut
    Un droite peut couper en plusieurs points un polygone ce qui m'intéresse c'est de récupérer tous ces points d'intersections sous forme de points et non de ligne.

  10. #10
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 997
    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 : 21 997
    Billets dans le blog
    6
    Par défaut
    Comme je vous l'ais déjà dit, un polygone est une surface. L'intersection d'une surface et d'une ligne donne soit l'ensemble vide, soit une partie de la ligne.
    Il ne tient qu'a vous d'opter non pour un polygone, mais pour une autre ligne périmétrique du polygone considéré.
    A défaut vous pouvez, partant du polygone en obtenir la frontière (Boundary) et par là même les points communs.

    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/ * * * * *

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 12
    Par défaut
    Merci j'ai arrivé a récupérer ce que je voulais.
    J'aurais une dernière question à un moment je récupère une GEOMETRYCOLLECTION(POINT(1 4),LINESTRING(10 4,11 4)). Est-il possible de récupérer séparément le point et la linestring ? ou de relier les deux geometry (point et linestring) pour ne faire qu'une seule linestring ?

    Merci d'avance

  12. #12
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 997
    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 : 21 997
    Billets dans le blog
    6
    Par défaut
    Encore une fois vous ne définissez pas correctement votre besoin : à quel endroit dois-je rabouter ce point ? au début ? à la fin ? à un point intermédiaire ???

    Commencez par analyser votre problème, ensuite posez-vous les bonnes questions et vous verrez que, par raisonnement, vous arriverez tout seul à trouver la bonne solution !

    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/ * * * * *

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 12
    Par défaut
    Le point à ajouter dans cet exemple-ci est à mettre au début de la linestring. Mais je voudrais que selon le résultat de ma requête, le point se mette automatiquement là où il doit être d'après ses cordonnées.

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 12
    Par défaut
    Je viens de voir que ce point serait à rajouter en début ou en fin de ligne

Discussions similaires

  1. [Toutes versions] Intersection de ligne et colonne
    Par phildouja dans le forum Excel
    Réponses: 2
    Dernier message: 26/03/2011, 19h28
  2. Réponses: 7
    Dernier message: 26/10/2004, 11h02
  3. dessiner lignes et polygones
    Par Harry_polin dans le forum DirectX
    Réponses: 31
    Dernier message: 25/05/2004, 17h42
  4. Transformer une ligne en polygone
    Par bl4d3 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 02/09/2003, 09h35
  5. une ligne et un polygone convexe
    Par rekam dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 20/12/2002, 10h39

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