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

SIG : Système d'information Géographique Discussion :

Comment calculer la distance entre un point et un polygone/polyligne ?


Sujet :

SIG : Système d'information Géographique

  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Avril 2009
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2009
    Messages : 897
    Par défaut Comment calculer la distance entre un point et un polygone/polyligne ?
    Bonjour
    Quelqu'un d'entre vous sait-il comment calculer la distance minimale entre un point et une polyligne ou obtenir les coordonnées du point de la polyligne le plus plroc du point ?
    Pascal

  2. #2
    Membre expérimenté
    Homme Profil pro
    Architecte progiciel et développeur informatique
    Inscrit en
    Février 2011
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte progiciel et développeur informatique

    Informations forums :
    Inscription : Février 2011
    Messages : 260
    Par défaut
    Salut Pascal,

    regardes avec les fonctions turf si ça peut répondre à ton problème.

    Calcul de la distance entre un point et une ligne
    https://turfjs.org/docs/#pointToLineDistance

    Si besoin, conversion d'un polygone en multilignes
    https://turfjs.org/docs/#polygonToLine

    Avec la librairie turf, les calculs se font en mode coordonnées géographiques.

    Je te laisse voir si ça peut t'aider.

    Xav

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Avril 2009
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2009
    Messages : 897
    Par défaut
    Salut XavLight
    Je vais regarder mais j'ai trouvé des méthodes MySQL (ça tombe bien, les données sont dans une base MySQL)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SET @ls = 'LineString(-1.330612337516323 46.1838784635389, -1.337450027016408 46.17007432243334, -1.319968698261084 46.16610051556031, -1.297392883040005 46.16218718163123, -1.287842996815222 46.16729994822109, -1.2932928099298 46.1743292669458, 1.303584490927381 46.18455617068945, -1.307852453145282 46.18732303600101)';
    
    SET @p1s = 'point(-1.304473 46.186323)';
    SELECT ST_Distance(ST_GEOMFROMTEXT(@p1s),ST_GEOMFROMTEXT(@ls)), ST_Distance(ST_GEOMFROMTEXT(@p1s),ST_GEOMFROMTEXT(@ls)) * 111139;
    
    SET @p2s = 'point(-1.314473 46.186323)';
    SELECT ST_Distance(ST_GEOMFROMTEXT(@p2s),ST_GEOMFROMTEXT(@ls)), ST_Distance(ST_GEOMFROMTEXT(@p2s),ST_GEOMFROMTEXT(@ls)) * 111139;
    
    SET @p3s = 'point(-1.321463 46.168062)';
    SELECT ST_Distance(ST_GEOMFROMTEXT(@p3s),ST_GEOMFROMTEXT(@ls)), ST_Distance(ST_GEOMFROMTEXT(@p3s),ST_GEOMFROMTEXT(@ls)) * 111139;
    Le résultat est pas mal sauf pour P2 qui contrairement aux P1 et P3 est vraiment loin de la stringline, le point de celle-ci le plus proche étant le bout nord-ouest de la ligne

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Avril 2009
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2009
    Messages : 897
    Par défaut
    Tiercé gagnant avec turf

    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
        <script src='https://unpkg.com/@turf/turf@6/turf.min.js'></script>
    <script>
        
        var line = turf.lineString([[-1.330612337516323,46.1838784635389],[-1.337450027016408,46.17007432243334],[-1.319968698261084,46.16610051556031],[-1.297392883040005,46.16218718163123],[-1.287842996815222,46.16729994822109],[-1.2932928099298,46.1743292669458],[1.303584490927381,46.18455617068945],[-1.307852453145282,46.18732303600101]]);
    
        var pt1 = turf.point([-1.304473,46.186323]);
        var distance = turf.pointToLineDistance(pt1, line, {units: 'kilometers'});
        console.log(distance)
        var pt2 = turf.point([-1.314473,46.186323]);
        var distance = turf.pointToLineDistance(pt2, line,{units: 'kilometers'});
        console.log(distance)
        var pt3 = turf.point([-1.321463, 46.168062]);
        var distance = turf.pointToLineDistance(pt3, line,{units: 'kilometers'});
        console.log(distance)
    </script>

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Avril 2009
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2009
    Messages : 897
    Par défaut
    L'équivalent de turf javascript en PHP ou autre langage côté serveur ?

  6. #6
    Membre expérimenté
    Homme Profil pro
    Architecte progiciel et développeur informatique
    Inscrit en
    Février 2011
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte progiciel et développeur informatique

    Informations forums :
    Inscription : Février 2011
    Messages : 260
    Par défaut
    Hello Pascal,

    alors d'abord côté JS toujours avec Turf pour trouver tes coordonnées, il y a peut-être une piste que je te laisse expérimenter.

    Donc 1ère étape, tu as trouvé la distance avec la fonction précédente.

    Avec cette distance, tu calcules un buffer par rapport à ton point de départ, en ajoutant la distance trouvée.
    https://turfjs.org/docs/#buffer

    Tu vas donc avoir un cercle avec un rayon de la distance trouvée.
    Exemple (mettre steps à une valeur de 64 pour avoir un cercle le plus rond possible) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var buffered = turf.buffer(point, 500, {units: 'kilometers', steps: 64});
    Ensuite, il faut trouver l'intersection entre ce nouveau polygone (cercle) et ta ligne ou polygone.
    Tu as la fonction intersect pour ça.
    https://turfjs.org/docs/#intersect

    Je te laisse tester déjà pour voir si ça fonctionne.

    *********************************************************************************************
    Côté PHP
    il y a une personne qui a réécrit un contrôleur turf en PHP (il y a 2 ans).
    Il n'y a pas forcément toutes les fonctions, mais regardes si tu trouves ton bonheur.
    En regardant rapidement, pas vu les fonctions qui t'intéresseraient.
    https://gist.github.com/sahilkashyap...1452711dd69944

    Sinon, encore autre chose :
    https://geophp.net
    et un fork de cette librairie, un peu plus récente https://github.com/funiq/geoPHP
    ou encore https://github.com/mjaschen/phpgeo

    Mais pas sûr que tu trouves ton bonheur côté PHP.

    Xav

  7. #7
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Avril 2009
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2009
    Messages : 897
    Par défaut
    Merci pour tes réponses.

    Pour trouver les coordonnées les plus proches sur la ligne, Turf bien sûr !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        var pt2 = turf.point([-1.314473,46.186323]);
        var distance = turf.pointToLineDistance(pt2, line,{units: 'kilometers'});

Discussions similaires

  1. calcul de distance entre 2 points
    Par c4cf6 dans le forum Android
    Réponses: 3
    Dernier message: 13/06/2010, 11h17
  2. calcul de distance entre deux points.
    Par jamsgoodon dans le forum Bioinformatique
    Réponses: 0
    Dernier message: 31/05/2010, 15h06
  3. [Google API v3] Calcul de distance entre plusieurs points
    Par akrogames dans le forum APIs Google
    Réponses: 1
    Dernier message: 08/04/2010, 17h35
  4. calculer la distance entre 2 point en c++
    Par chabeka dans le forum Débuter
    Réponses: 6
    Dernier message: 10/02/2009, 19h50
  5. Calcul de distance entre deux points en WGS84
    Par marieR dans le forum Langage
    Réponses: 5
    Dernier message: 03/08/2006, 17h07

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