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

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    juin 2019
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juin 2019
    Messages : 1
    Points : 1
    Points
    1

    Par défaut Récupérer une distance unique sur une liste de points

    Bonjour

    Je travaille sur un projet PostGIS et j'aimerai faire des traitements sur un GeoJSON entier (une feature collection)
    J'ai déjà trouvé le moyen d'obtenir la liste des centroïde de chacune des features de mon GeoJSON
    Maintenant, j'aimerai associer chacun de ces centroïde avec le node le plus proche sur mon réseaux (pour faire du Pg_routing après)

    J'aimerai en sortie une table avec cette tête:
    centroid id_node
    POINT(-80.870885 35.215151) 124
    POINT(2.835564 50.399172) 18
    ..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT f2.geom , id_node
    FROM node_table , f2
     
    # group by f2.geom ??
    ORDER BY ST_Distance(the_geom, f2.geom) ASC LIMIT 1
    Je suis sûr de ma table f2 ( elle contient la liste de géométrie des centroïdes )
    Sans la ligne du group by, j'obtient le couple centroid/node le plus proche alors que j'aimerai ce couple pour chacun de mes centroides

    En espérant avoir été compréhensible et vous remerciant de votre aide

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    janvier 2010
    Messages
    5 213
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : janvier 2010
    Messages : 5 213
    Points : 10 782
    Points
    10 782

    Par défaut

    bonjour,

    vous pouvez utiliser ROW_NUMBER( ou DENSE_RANK en fonction du comportement voulu en cas "d'égalité")

    quelque chose comme ceci (pas testé)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    WITH tmp AS (
    SELECT 
        f2.geom 
    , id_node
    , ROW_NUMBER() OVER(PARTITION BY id_node ORDER BY ST_Distance(the_geom, f2.geom) ) AS Rn
    FROM node_table 
    CROSS JOIN f2
     )
    SELECT geom, id_node
    FROM tmp
    WHERE Rn = 1

Discussions similaires

  1. [LibreOffice][Base de données] Recuperer une liste de tables et une liste de champs d'une table sur LibreOffice & OpenOffice
    Par gerard.sauvage dans le forum OpenOffice & LibreOffice
    Réponses: 2
    Dernier message: 08/04/2014, 12h35
  2. [Performance]Recuperer une liste important de données
    Par Shivan dans le forum Hibernate
    Réponses: 2
    Dernier message: 10/02/2009, 20h57
  3. recuperer une liste de dataProvider
    Par charlix dans le forum Flash
    Réponses: 4
    Dernier message: 28/08/2008, 23h46
  4. Réponses: 10
    Dernier message: 22/07/2008, 14h53
  5. Réponses: 5
    Dernier message: 11/05/2006, 19h20

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