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

Langage Perl Discussion :

convertion latitude longitude en coordonnees en metres avec Geo::Mercator


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Juillet 2009
    Messages : 176
    Points : 61
    Points
    61
    Par défaut convertion latitude longitude en coordonnees en metres avec Geo::Mercator
    Bonjour,
    Voila comme dis dans le titre je veux convertir des latitudes longitudes donnees par google maps en coordonnees x,y en metres.
    Voici mon petit bout de code :
    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
    17
    #!/usr/local/bin/perl -w
     
    use strict;
    use VSATM::LocationTracker::Point;
    use VSATM::TechnologyInterface;
    use Polygon qw(:DEFAULT);
    use Math::Trig;
    use Geo::Mercator;
    my $techInterface = new VSATM::TechnologyInterface;
    my $sites = $techInterface->getSiteConfig(0);
     
    my $lat1=$sites->{12849}->{latitude};
    my $long1=$sites->{12849}->{longitude};
    my ($x1,$y1)=mercate($lat1,$long1);
     
    print"lat/long : $lat1,$long1 \n";
    print"x/y : $x1,$y1 \n";
    Ne vous tracassez pas a propos de techInterface, c'est juste pour recuperer les lat long de google maps.
    Voila ce que j'obtiens a la sortie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    lat/long : 56.01,-3.37 
    x/y : -375146.683973332,7524950.03004611
    Ce qui me pose probleme : en effet ce point est situe en Angleterre a cote d'Edinburgh (comme vous pouvez le tester sur google maps en reprenant les lat/long). Mais Edinburgh est situe a environ 500 km de Greenwich en "hauteur" pas 7000 ! Et pareil pour l'axe des y : si je ne me trompe pas, je devrais avoir un y qui vaudrait environ -200 000 pas -300 000

    Voyez-vous ou je me trompe ?
    Merci

  2. #2
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Citation Envoyé par CPAN
    Geo::Mercator

    Use of Mercator projection on latitudes above/below +70/-70 degrees is strongly discouraged, due to the gross distortions of the projection.
    ...
    There are many other packages available on CPAN to compute various (and probably more accurate) geographic projections, ...
    Ne serait-ce pas un problème dû au module? Il ne semble pas très précis bien que tes valeurs 56.01,-3.37 reste dans la gamme conseillée.

  3. #3
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Une question par curiosité (je n'y connais rien en cartographie) mais je me renseigne :
    Citation Envoyé par wikipédia
    La projection de Mercator est une projection cylindrique du globe terrestre sur une carte plane formalisée par Gerardus Mercator en 1569. Les parallèles et les méridiens sont des lignes droites et l'inévitable étirement Est-Ouest en dehors de l'équateur est accompagné par un étirement Nord-Sud correspondant, de telle sorte que l'échelle Est-Ouest est partout semblable à l'échelle Nord-Sud. Une carte de Mercator ne peut couvrir les pôles : ils seraient infiniment hauts.
    Citation Envoyé par CPAN
    Geo::Mercator

    ($x, $y) = mercate($lat, $long)

    Converts the input latitude and longitude values (in degrees) into Mercator projected points (in meters) from the equator/ meridian.
    Vu que la carte de Mercator allonge les distances nord-sud, n'est-il pas normal de trouver 7000 m (représentation) versus 500 m (réel) ?

  4. #4
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Juillet 2009
    Messages : 176
    Points : 61
    Points
    61
    Par défaut
    Bonjour Jasmine, merci de prendre par a ce sujet.
    J'avoue que ta question me trouble... J'ai découvert une partie de la cartographie a travers ce projet (il y a deux jours donc...), et j'ai peur de comprendre certain truc de travers. C'est pas évident !
    Donc une partie de ma réponse serait que comme la projection se fait en mètres, je m'étais dit que ça devait quand même conserver un minimum les distances, et je gardais espoir de m'être trompée quelque part dans mon code, car ce module est le seul que j'ai trouve qui corresponde a ce que je veux faire (mais je croise les doigts pour que vous en connaissiez)..
    Je savais qu'il y aurait une marge d'erreur..mais aussi grande ??
    Ok. Je résume donc mon problème..
    Je veux calculer la distance d'un point a un segment.
    Les 3 points considérés sont obtenus a travers Google maps donc en lat/long (Google maps utilise une projection de Mercator).
    Le premier problème est que je ne peux pas calculer les distances juste en prenant les lat/long comme des coordonnes dans le plan (car la terre n'est pas plate..)
    J'ai regarde le module Geo::Distance qui permet justement de calculer la distance entre deux points lat/long. Mais voici le deuxieme probleme :
    La distance d'un point P a un segment [AB] est soit PA, PB (et dans ces cas je pourrais utiliser directement le module Geo::Distance) soit PP' avec P' le projeté de P sur le segment [AB].
    Or voila, pour calculer PP' je me sers du produit scalaire pour avoir directement la distance sans passer par le calcul des coordonnes de P'.
    Car si je dois passer par les coordonnées de P', je ne vois vraiment pas comment faire, et je pense que de toute façon il faudrait se ramener a des "vraie" coordonnes pour pouvoir faire les calculs..
    Je suis vraiment paumée..
    J'avais aussi regarde la page Wiki sur la projection de Mercator, mais je ne peux pas faire les calcules proposes car mes lat/long peuvent être négatives et donc ça coince..
    Je dois me tromper quelque part... Peut etre Google maps n'utilise pas la projection de Mercator comme je le pense ?
    Je ne pense pas mon problème insoluble (ils font comment les GPS ?) mais franchement...je suis un peu perdue.

  5. #5
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 161
    Points : 101
    Points
    101
    Par défaut
    La projection de Mercator est utilisée pour les planisphères, sur des cartes plus lisibles qu'un globe.

    Mais les proportions, au fur et à mesure que l'on s'éloigne de l'Equateur, sont complètement fantaisistes.

    En effet, la projection est fait de telle manière que l'alignement des parallèles tracés sur un globe est conservé.

    Mais comme il est évident que plus on s'éloigne de l'Equateur, plus les parallèles sont "courts" (ils dessinent des cercles de distances moindre au fur et à mesure qu'on s'approche des pôles), mais que la projection de Mercator se fait comme si ils étaient tous de la même distance, tout se retrouve distendu sur la représentation.

    Du coup, on a des pays qui semblent plus grands que d'autre, alors qu'ils sont très largement plus petit (je pense au Groenland, qui a l'air aussi grand que l'Afrique, alors qu'il est infiniment moins étendu !)

    Donc je pense que les valeurs retournées par ton programme sont bonnes, vu qu'elles sont mesurées dans un référentiel mercatorien.

  6. #6
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Juillet 2009
    Messages : 176
    Points : 61
    Points
    61
    Par défaut
    Conclusion : le module de Mercator n'est pas un bon outils pour résoudre mon problème...
    Une idée ?

  7. #7
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Citation Envoyé par Saita Voir le message
    Je dois me tromper quelque part... Peut etre Google maps n'utilise pas la projection de Mercator comme je le pense ?
    Citation Envoyé par wikipédia
    Google Maps currently uses a Mercator projection for its map images. Despite its obvious scale distortions at small scales, the projection is well-suited as an interactive world map that can be zoomed seamlessly to large-scale (local) maps, where there is relatively little distortion due to the projection's conformal nature. (Google Satellite Maps, on the other hand, used a plate carrée projection until July 22, 2005.)
    Citation Envoyé par CPAN
    Use of Mercator projection on latitudes above/below +70/-70 degrees is strongly discouraged, due to the gross distortions of the projection. In fact, any use of the Mercator projection is strongly discouraged...but its the view we've all been programmed to see for 400 years, so its genetic sense memory by now. And if its good enough for Google, its good enough for me.
    Google

    Apparemment c'est bien ce qui est utilisé par Google,à moins que ça ait changé depuis 2005.

  8. #8
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 161
    Points : 101
    Points
    101
    Par défaut
    Si tu veux les vraies distances, il va falloir utiliser un autre module.

    Et les distances sur Google sont faussées donc, vu qu'ils utilisent cette projection là.

  9. #9
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Citation Envoyé par Saita Voir le message
    Les 3 points considérés sont obtenus a travers Google maps donc en lat/long (Google maps utilise une projection de Mercator).
    Le premier problème est que je ne peux pas calculer les distances juste en prenant les lat/long comme des coordonnes dans le plan (car la terre n'est pas plate..)
    Citation Envoyé par wikipédia
    La projection de Mercator est une projection cylindrique du globe terrestre sur une carte plane formalisée par Gerardus Mercator en 1569.
    Donc, n'utilise pas Mercatore, c'est justement ce qu'il fait, il transforme la sphère terrestre en un plan, ce qui fausse donc tes estimations.

  10. #10
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 161
    Points : 101
    Points
    101
    Par défaut
    A défaut d'avoir un module, tu peux déjà trouver des formules pour calculer les distances entre deux points géographiques dont tu as les coordonnées :

    http://jan.ucc.nau.edu/~cvm/latlon_formula.html

    http://www.zipcodeworld.com/samples/distance.pl.html

    Et sinon, utilise le module Geo::Coder (pas Geo::Coder-Google)

  11. #11
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    CGI::Wiki::Plugin::Locator::UTM
    CGI::Wiki::Plugin::Locator::UTM

    A CGI::Wiki plugin to manage international location data.

    This module provides access to the Universal Transverse Mercator international coordinates system. It is a thin wrapper for the module Geo::Coordinates::UTM. To use this module, you must specify an ellipsoid, on which the mercator projection is based.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      my ($zone, $x, $y) = $locator->coordinates( lat => 51.507497,
                                                 long => -0.271797);
    Cela ne pourrait-il pas t'aider?
    ... mais ça fait peut-être l'inverse de ce qu'il faudrait.

  12. #12
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Juillet 2009
    Messages : 176
    Points : 61
    Points
    61
    Par défaut
    Merci pour vos remarques (il y avait donc bien une certaine logique dans ce que je faisais..), mais que puis-je donc faire ?
    Les lat/long que j'ai viennent forcement de Google maps.
    Je suppose que je dois pas être la première a parler de ce sujet, non ? (rassurez-vous j'ai cherche quand meme mais tout ce que j'ai trouve se rapporte a la distance entre 2 points long/lat et comme je vous ais explique ca m'embête a cause de P').
    Comment se ramener dans un plan ou je puisse faire mes calculs de distance (je pense qu'une erreur au mètre serait acceptable..) ?

    Edit : ne tenez pas compte de se poste, on a tous poster en meme temps, je n'ai donc pas lu vos propositions

  13. #13
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 161
    Points : 101
    Points
    101
    Par défaut
    Tu as une distance d'environ 550km en ligne droite entre ton point à Edimbourg, et Greenwich (ça t'évitera des valeurs farfelues)

    A toi d'affiner le calcul

  14. #14
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Juillet 2009
    Messages : 176
    Points : 61
    Points
    61
    Par défaut
    D'accord, tenez compte du post précédent : ces idées sont impeccables pour calculer la distance PA ou PB mais PP' ?
    Tout mon problème est la.. Et en plus je pense que de toute façon par la suite, je serais quasiment obligée de me ramener dans un plan cartésien car des histoires de vecteurs vont s'en mêler et je ne vois pas comment faire autrement.
    Jasmine, par rapport a ton premier post, penses-tu que je devrais plutôt mettre ce sujet dans le forum modules ? J'ai hésité...

  15. #15
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Juillet 2009
    Messages : 176
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par byrdo Voir le message
    Tu as une distance d'environ 550km en ligne droite entre ton point à Edimbourg, et Greenwich (ça t'évitera des valeurs farfelues)

    A toi d'affiner le calcul
    Oui c'était a peu prés mon estimation aussi (dans mon premier post) mais comme je dis : calculer une distance entre 2 points, ok, mais calculer la distance entre le point et un segment...
    En plus après le point aura une "direction" et une "vitesse" (mon point c'est un bateau ) donc il faudra que je trouve en fonction de la direction la distance de mon point a mon segment, et utiliser la vitesse pour déterminer approximativement le temps restant avant que le bateau atteigne le segment..
    Vous voyez le soucis ? Sur un plan, je sais faire ces calculs... Mais en 3D avec des lat/long, aucune idée...

  16. #16
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Citation Envoyé par Saita Voir le message
    Jasmine, par rapport a ton premier post, penses-tu que je devrais plutôt mettre ce sujet dans le forum modules ? J'ai hésité...
    Les personnes de ce forum qui viennent dans la partie module viennent également dans celle-ci donc ça revenait au même pour ton choix initial. Mais vu que nous avons dévié et avons conclu que le module de départ n'est pas approprié, peut-être serait-il bien de refaire un nouveau post en expliquant le module que tu recherches.

  17. #17
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Ceci devrait t'aider : great-circle distance et peut-être le module GIS::Distance::GreatCircle - Great circle distance calculations.

  18. #18
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 161
    Points : 101
    Points
    101
    Par défaut
    Si tu es dans un triangle quelconque, que tu connais la longueur des 3 côtés ...

    Soit P' le pied de la hauteur issue de P.
    Soit h = PP'

    Soit a=AP'+P'B=AB
    Soit b=PB
    Soit c=PA

    h= sqrt(4b²c²-(a²-b²-c²)²))/2a

  19. #19
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Juillet 2009
    Messages : 176
    Points : 61
    Points
    61
    Par défaut
    byrdo, tu as pointe du doigts mon principal problème : ceci est valable dans un plan ou un repère cartésien... Mais pas utilisable directement avec mes coordonnées lat/long ?
    Edit : soit dis en passant, es-tu sur de ta formule ?
    ca c'est vrai pour les vecteurs mais pas pour les longueurs..

  20. #20
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 161
    Points : 101
    Points
    101
    Par défaut
    Citation Envoyé par Saita Voir le message
    byrdo, tu as pointe du doigts mon principal problème : ceci est valable dans un plan ou un repère cartésien... Mais pas utilisable directement avec mes coordonnées lat/long ?
    En fait, je me suis posé la question, car tu n'es pas vraiment dans un triangle "à plat", mais courbé ...

    J'ai du mal à le visualiser.

    Il faudrait donc que tu te places dans un repère sphérique(http://fr.wikipedia.org/wiki/Coordon...ph%C3%A9riques), et travailler uniquement avec les angles (longitude et latitude donc), en les convertissant en coordonnées polaires.


    Et utiliser des formules de conversions pour obtenir les distances.


    Edit : Comme le point P' est sur le segment AB, la formule pour la distance est bonne. AB = AP' + P'B

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Recherche de pays par Latitude/Longitude
    Par ram-0000 dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 08/04/2008, 12h42
  2. recherche 1 position (latitude longitude) la + proche
    Par 83stef dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 14/05/2007, 20h52
  3. [CSV] extraire latitude/longitude de google map
    Par arnogef dans le forum Langage
    Réponses: 14
    Dernier message: 30/03/2007, 15h32
  4. Conversion Latitude,Longitude en UTM pour débutant.
    Par Messie dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 22/04/2006, 18h37
  5. Coordonnées de pixel avec glsl
    Par nodar3 dans le forum OpenGL
    Réponses: 2
    Dernier message: 02/02/2006, 11h23

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