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

Développement SQL Server Discussion :

Données spatiales - Extraire les points d'un geography polygon


Sujet :

Développement SQL Server

  1. #1
    Membre confirmé Avatar de joKED
    Profil pro
    Imposteur en chef
    Inscrit en
    Février 2006
    Messages
    337
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Imposteur en chef

    Informations forums :
    Inscription : Février 2006
    Messages : 337
    Points : 458
    Points
    458
    Par défaut Données spatiales - Extraire les points d'un geography polygon
    Bonjour à tous,

    Je débute dans l'utilisation de données spatiales avec SqlServer, et je n'arrive pas à trouver une solution "propre"

    J'ai une table contenant des parcelles de terrain représentées comme suit :
    Id (int) - Nom (varchar) - Parcelle (geography)

    Toutes les parcelles sont des polygon.

    J'arrive facilement à créer des polygon, ça ne me pose pas de souci.
    Par contre, j'ai besoin de récupérer la liste des vertex d'un polygon pour pouvoir l'afficher sur une carte.
    Pour l'instant, je procède comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DECLARE @truc geography
    SET @truc = geography::STGeomFromText('POLYGON((-122.358 47.653 , -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))', 4326)
    -- J'ai maintenant un joli polygon
    SELECT convert(varchar(max),@truc)
    -- Je récupère la conversion en texte de mon polygon, soit POLYGON ((-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))
    -- Puis côté application, je parse ce texte pour récupérer tous mes points me permettant de réaliser l'affichage
    Evidemment, ça fonctionne, je parse mon texte recupéré, j'extrais les points, et j'affiche dans mon appli. Mais je trouve ça un peu moche de devoir s'en remettre à du parsing de texte.
    Existe t'il une solution me permettant de "select" tous les vertex de mon polygon ?
    Du genre (ça ne marche pas hein, c'est pour donner une idée) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT point.Longitude, point.Latitude FROM @monPolygon
    Merci d'avance pour votre aide.
    Tant va la cruche à l'eau qu'à la fin y'a plus d'eau.

  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 761
    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 761
    Points : 52 547
    Points
    52 547
    Billets dans le blog
    5
    Par défaut
    Merci de respecter à l'avenir la charte de postage :
    https://www.developpez.net/forums/d9...vement-poster/
    Ceci évite de faire perdre du temps à tout le monde, vous compris !

    Une solution...

    La table exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE T_PARCELLE_PCL
    (PCL_ID            INT IDENTITY PRIMARY KEY,
     PCL_NOM           VARCHAR(100),
     PCL_GEO           GEOGRAPHY);
    GO

    Les données exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    INSERT INTO T_PARCELLE_PCL
    VALUES 
    ('Duchemol',  geography::STGeomFromText('POLYGON((-122.358 47.653 , -142.348 47.649, -122.348 31.658, -122.358 58.658, -122.358 47.653))', 4326)),
    ('Potichoi',  geography::STGeomFromText('POLYGON((-104.358 52.653 , -122.348 52.649, -121.348 47.658, -122.358 44.658, -104.358 52.653))', 4326));
    GO
    La requête finale récursive :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    WITH 
    T0 AS 
    (
    SELECT PCL_ID, PCL_NOM, PCL_GEO.STStartPoint().STAsText() AS POINT, 1 AS NUM, PCL_GEO
    FROM   T_PARCELLE_PCL
    UNION ALL
    SELECT PCL_ID, PCL_NOM, PCL_GEO.STPointN(NUM + 1).STAsText(), NUM + 1, PCL_GEO
    FROM   T0
    WHERE  NUM+1 <= PCL_GEO.STNumPoints()
    )
    SELECT PCL_ID, PCL_NOM, NUM, POINT
    FROM  T0
    ORDER BY PCL_ID, NUM;
    Le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    PCL_ID      PCL_NOM        NUM         POINT
    ----------- -------------- ----------- -------------------------
    11          Duchemol       1           POINT (-122.358 47.653)
    11          Duchemol       2           POINT (-142.348 47.649)
    11          Duchemol       3           POINT (-122.348 31.658)
    11          Duchemol       4           POINT (-122.358 58.658)
    11          Duchemol       5           POINT (-122.358 47.653)
    12          Potichoi       1           POINT (-104.358 52.653)
    12          Potichoi       2           POINT (-122.348 52.649)
    12          Potichoi       3           POINT (-121.348 47.658)
    12          Potichoi       4           POINT (-122.358 44.658)
    12          Potichoi       5           POINT (-104.358 52.653)
    Venez suivre mon cours sur le spatial à Orsys...
    http://www.orsys.fr/formation-donnees-spatiales.asp

    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 confirmé Avatar de joKED
    Profil pro
    Imposteur en chef
    Inscrit en
    Février 2006
    Messages
    337
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Imposteur en chef

    Informations forums :
    Inscription : Février 2006
    Messages : 337
    Points : 458
    Points
    458
    Par défaut
    Bonjour SQLpro,

    En effet, cette requête récursive me permettra d'accéder à tous les points. Une légère adaptation me permettra d'obtenir les longitudes et latitudes séparément.

    Je vous remercie pour votre aide.

    PS : Merci aussi pour le lien vers votre formation, ça me sera probablement utile.
    Tant va la cruche à l'eau qu'à la fin y'a plus d'eau.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. retirer les points internes d'un polygone
    Par Rastacouéne dans le forum Algorithmes et structures de données
    Réponses: 42
    Dernier message: 14/01/2008, 19h55
  2. Extraire les données ID3 d'une musique
    Par FluidBlow dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/10/2006, 20h04
  3. Réponses: 12
    Dernier message: 18/07/2006, 19h51
  4. Pour extraire les données d'un fichier texte
    Par Floch dans le forum Access
    Réponses: 2
    Dernier message: 02/05/2006, 15h01
  5. Réponses: 2
    Dernier message: 18/10/2005, 08h05

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