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

Algorithmes et structures de données Discussion :

représentation cartographique de coordonnées


Sujet :

Algorithmes et structures de données

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2004
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 7
    Points : 2
    Points
    2
    Par défaut représentation cartographique de coordonnées
    Bonsoir, voici mon problème :

    Je dispose d'un fonds de carte quelconque sur laquelle je ne connais les coordonnées (latitude et longitude) de quelques points seulement.
    A partir des coordonnées d'autres points, et de la localisation graphique sur la carte des points connus, comment faire pour représenter de manière relativement correcte tous les autres points ?
    J'ai essayé un algorithme avec une règle de trois (pixels / degrés), ce n'est pas convaincant, j'ai essayé avec le sinus (angle-distance en pixels), çà ne marche pas bien non plus... Je sèche.

    Par exemple, si j'ai une carte du Rhône de 800 pixels sur 500 pixels, j'ai les coordonnées graphiques (en pixels) et géographiques (en degrés) de Lyon, Fleurie, Tarare et Saint Priest, comment dessiner les autres communes du département, ne disposant que de leurs coordonnées géographiques (latitude, longitude) ?

  2. #2
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Nemerle, mathématicopilier de bars, membre du triumvirat du CSTM, 3/4 centre

  3. #3
    mat.M
    Invité(e)
    Par défaut
    A partir des coordonnées d'autres points, et de la localisation graphique sur la carte des points connus, comment faire pour représenter de manière relativement correcte tous les autres points ?
    Il faut :
    déterminer un centre d'origine donc déplacer le point de coordonnées (0,0) coin gauche et haut vers le centre de l'écran.
    Ce point basiquement représentera le point de coordonnées N00°00min W00°00 min .
    Donc pour Lyon il faut effectuer les conversions nécessaires pour déterminer une nouvelle origine.
    convertir les points exprimés en Lat / Lon en coordonnées écran
    calculer les distances avec les autres points.

    Pour les coordonnées représentées de manière géodésique il ya déjà eu tout un post là dessus sur le forum algorithmes.

  4. #4

  5. #5
    Membre du Club
    Inscrit en
    Septembre 2002
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 49
    Points : 50
    Points
    50
    Par défaut
    voila c tres simple :

    I. Principe

    0 - choix du modèle de transformation :
    - transformation affine
    - trasformation sémilitude

    1 - Calcul les paramètres de transformation

    entres les deux systèmes ( S1 - S2 )
    c.a.d l'angle de rotation , transaltaion et facteur d'echelle

    d'où :
    S1 repsente la carte ( l'image scanné )
    S2 repsesente la fentre d'affichage de votre carte



    II. Mise en oeuvre

    1.prépartive des données
    p1 ( 36°30'00" , 1h30mn)
    p2,p3,p4

    trasformation des coordonées aux sustème décimale par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    36°30'00 = 36.5000 °
    1h30mn = combien en degrée ( regle de trois 24 ---> 360 ) = 22.5 °
    le même ^pour les autres points
    il nous faut au minimum 4 points

    2. Calcul des paramètres du système :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    |X1|     |A   B|     |X2 |     |  Tx  |
    |    | = |        | *  |    |  + |       |
    |Y1|     |C   D|     |Y2|      |  Ty |
     
    (X1 , Y1) : coordonnée du point 1 aux sytème fentre
    (x2,y2) : coordonnée du point aux systemes géo
    donc on sort les parametres a,b,c,d ,tx, ty (paramètre de rotation et translation entre les deux systmes)

    remarque il faut avoir 4 points connus dans les deux systèmes (S1, S2)

    à la fin juste on applique la matrice précédante pour avoir n'importe quel point

  6. #6
    Candidat au Club
    Inscrit en
    Mai 2004
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Merci de vos réponses, je vais étudier de ce pas la méthode proposée.
    Je témoignerai de ce que çà donne.

    La solution proposée sur la page citée par Nemerle ne m'avait pas permis d'aboutir.

  7. #7
    nkd
    nkd est déconnecté
    Nouveau membre du Club
    Inscrit en
    Mars 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 38
    Points : 29
    Points
    29
    Par défaut
    bonjour et bonne année

    maamar a une très belle approche du problème
    J'ai le même problème et j'ai déjà parcouru les solutions que les autres ont proposé ça n'a pas donné grand chose.

    maamar a dit
    I. Principe

    0 - choix du modèle de transformation :
    - transformation affine
    - trasformation sémilitude
    J'ai utilisé le principe de la transformation affine et j'ai constaté que les angles n'étaient pas conservés (un carré se retrouve en losange, à moins que j'aie fait des erreurs dans les formules...)

    Je vais opter pour le principe de la transformation par similitude(rotation+translation+facteur d'echelle)

    Mais avant j'aimerais que tu explicites ta matrice de transformation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    . Calcul des paramètres du système : 
     
    |X1|     |A   B|     |X2 |     |  Tx  | 
    |    | = |        | *  |    |  + |       | 
    |Y1|     |C   D|     |Y2|      |  Ty | 
     
    (X1 , Y1) : coordonnée du point 1 aux sytème fentre 
    (x2,y2) : coordonnée du point aux systemes géo  
     
    donc on sort les parametres a,b,c,d ,tx, ty (paramètre de rotation et translation entre les deux systmes) 
     
    remarque il faut avoir 4 points connus dans les deux systèmes (S1, S2)
    merci

  8. #8
    Membre du Club
    Inscrit en
    Septembre 2002
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 49
    Points : 50
    Points
    50
    Par défaut
    si tu sache que les angles sont conservée utilise une similitude plane sinon affine est bonne.

    voila notre système d'equation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    |X1 |    |fx |      | cos theta      -sin theta   |     |X2   |       | Tx|
    |     |= |    |  *  |                                    | *  |       |  +   |    |
    |Y1 |    |fy |      | sin theta       cos theta   |     | Y2   |       | Ty|
    fx : represente le facteur d'echelle en x
    fy : represente le facteur d'echelle en y

    theta : l'angle de rotation entre les deux système
    Tx,Ty : translation en x et y

    Donnée brute:

    les points du sytème I:
    IX1,IX2.....IXn
    Y1,Y2,......IYn

    les points(coordonnées) du système II
    IIX1,IIX2,.....IIXn
    IIY1,IIY2.........IIYn


    étape1 : éliminer les transaltion Tx, Ty
    1. réduire au centre de gravité:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    calculer la moyenne en X 
    calculer la moyenne en Y
    kif kif pour le système II

    2.Nouvelle coordonnées
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    X1nouveau  = X1 - MoyenneDesX        Y1nouveau  = Y1 - MoyenneDesY
                   .                                                            .
    Xnnouveau  = Xn - MoyenneDesX        Ynnouveau  = Yn - MoyenneDesY
    étape2: Calcul de l'angle de rotation et Facteur d'echelle
    pour Calculer a,b ,c,d il y a une formule directe sinon essai d'ecrire ta matrice essai de sortir ou la reconfigurer a nouveau de tel facon que tu peut avoir tes a,b,c,d

    remarque :
    si tu utilise une similitude plane Fx = Fy


  9. #9
    Candidat au Club
    Inscrit en
    Mai 2004
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Bonsoir et bonne année à tous,

    Après avoir lu et essayé les méthodes proposées, je retiens que lorsque l'on utilise l'algorithme suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    fonction calcul_dist(latori, longori, latdest, longdest : nombre_reel):nombre_reel
    debut
    distance = arccos( sin(latori*pi/180) * sin(latdest*pi/180) + cos(latori*pi/180) * 	
    cos(latdest*pi/180) * cos( (longdest-longori)*pi/180 ) ) * 6366
    fin
    la distance est évaluée correctement après vérification sur quelques cartes. Cependant, cette méthode ne me permet pas de positionner correctement mes points sur la représentation graphique.
    Intuitivement, je pense que la méthode proposée par maamar est la bonne. Cela fait trop longtemps que je ne pratique plus les mathématiques, alors les matrices...
    Néanmoins,ce serait aimable si vous pouviez, à titre d'exemple, résoudre le problème ci-dessous. Le plus important, évidemment, c'est que vous nous donniez les détails de ce calcul. D'avance, merci.

    Soit une carte géographique quelconque de dimension (498 px sur 498 px). On ne sait rien de plus sur cette carte, ni échelle, ni technique de représentation. Le repère est en haut à gauche, en (0,0).

    Par contre, les 4 villes suivantes sont dessinées sur cette carte
    (Ville, longitude; latitude; abscisse en px; ordonnée en px)
    ( Chalon sur Saône ; 4,85 ; 46,783333 ; 229 ; 42 )
    ( Clermont Ferrand ; 3,083333 ; 45,783333 ; 8 ; 242 )
    ( Montélimar ; 4,75 ; 44,566667 ; 222 ; 480 )
    ( Chambéry ; 5,933333 ; 45,566667 ; 382 ; 275 )

    Quelles sont les coordonnées des villes manquantes ?
    ( Annecy ; 6,116667 ; 45,9 ; ??? ; ??? )
    ( Le Puy ; 3,885833 ; 45,044166 ; ??? ; ??? )
    ( Saint Chamond ; 4,5 ; 45,466667 ; ??? ; ??? )
    ( Villeurbanne ; 4,883333 ; 45,766667 ; ??? ; ??? )
    ( ... )

    J'ai l'impression que la résolution de ce problème en intéressera plus d'un.

  10. #10
    Membre du Club
    Inscrit en
    Septembre 2002
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 49
    Points : 50
    Points
    50
    Par défaut
    1. fait les transformation nécéssaire pour vos données

    par exemple tous les coordonée en degrée transforme les en abscisse et ordonnée ( type de projection de votre carte ex : lambert 4 ... ou UTM )
    par exemple
    carte fenetre
    cermont ferrand : 214525,458712, 452, 25
    j'essai de données l'algo en détail mais n'oublie pas que c'est un forum d'entraide le but que il faut réflichir

  11. #11
    nkd
    nkd est déconnecté
    Nouveau membre du Club
    Inscrit en
    Mars 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 38
    Points : 29
    Points
    29
    Par défaut
    Salut maamar
    merci pour les détails explicatifs de la formule

    je teste et je te fais signe
    merci et A+

  12. #12
    Candidat au Club
    Inscrit en
    Mai 2004
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Bonsoir,

    Je suis sans doute un cancre mais quelqu'un serait en mesure de m'expliquer comment mettre en oeuvre la formule de maamar ? Un exemple de calcul ?
    Clermont Ferrand : 214525,458712, 452, 25
    à quoi correspondent ces chiffres par rapport à l'exemple que j'ai proposé ?

  13. #13
    nkd
    nkd est déconnecté
    Nouveau membre du Club
    Inscrit en
    Mars 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 38
    Points : 29
    Points
    29
    Par défaut
    bonsoir Programmeur90

    ces chiffres correspondent aux coordonnées réelles sur la carte (par exemple dans le système utm) qui se retrouvent transformés en pixel.

    En fait , tu connais quatre points dans les deux systèmes qui te permettront de calculer des coefficients.
    Maamar a dit :
    Calcul des paramètres du système :
    |X1| |A B| |X2 | | Tx |
    | | = | | * | | + | |
    |Y1| |C D| |Y2| | Ty |
    (X1 , Y1) : coordonnée du point 1 aux système fenêtre
    (X2,Y2) : coordonnée du point aux systemes géo
    donc on sort les parametres a,b,c,d ,tx, ty (paramètre de rotation et translation entre les deux systmes)
    remarque il faut avoir 4 points connus dans les deux systèmes (S1, S2)
    Ces coefficients te permettront de mettre en place la fonction générale de transformation des autres villes en pixel.
    j'espère que j'ai été simple
    A+

  14. #14
    Candidat au Club
    Inscrit en
    Mai 2004
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    impasse

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 12
    Points : 12
    Points
    12
    Par défaut
    Si ce n'est pas trop tard, voici des infos utilisé par l'IGN pour résoudre ce genre de problème.

    http://www.ign.fr/affiche_rubrique.asp?rbr_id=1700&lng_id=FR#68096

    Mais tu dois touver quel est le système de projection utilisé dans ton image pour pouvoir placer de nouveaux points sur celle-ci.

  16. #16
    Nip
    Nip est déconnecté
    Rédacteur

    Inscrit en
    Juin 2004
    Messages
    963
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 963
    Points : 1 076
    Points
    1 076
    Par défaut
    Alors voila comment j'ai fait pour résoudre ce problème :
    1-Récuperer les coordonnées en degré décimaux du cadre de la carte concernée : valeur en latitude et longitude du coin haut gauche et bas droit(correspondant à ton cadre carte du Rhône).

    2-Deteminer la taille en Km du cadre : largeur et hauteur; cela se fait grâce à l'algorithme de conversion suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AB = (180/PI)*(1000/9)*ArcCos[(sin(LatitudeA*PI/180)* sin(LatitudeB*PI/180))+(cos(LatitudeA*PI/180)* cos(LatitudeB*PI/180)* cos((LongitudeA*PI/180)-(LongitudeB*PI/180)))]
    Les valeurs obtenues sont les distances AB exprimées en Km et donnent les dimensions du cadre.

    3-Ramener la taille du km en nombre de pixels par règle de 3.

    4-Determiner la position du point à afficher
    a-Récupérer les coordonnées géographiques du point en degré décimaux
    b-Calculer les distances suivantes par rapport au point en Haut à Gauche avec la relation en 2.
    c-les distances par rapport au point Haut Gauche sont calculées : convertir ces données en pixels par la relation calculée en (3).

    Et voilà tu as ton positionnement des points par rapport à ton point haut gauche de ton cadre en pixels.
    Et ça marche testé et approuvé

  17. #17
    Membre du Club
    Inscrit en
    Septembre 2002
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 49
    Points : 50
    Points
    50
    Par défaut
    attention cette formule , represente la résolution d'un traingle sphérique pour une carte nous avons un système de référence (éllipsoide) une projection!
    a mon avis utilisation de cette méthode pour une application éducatif , visuel ... qlq chose comme ca.
    mais si tu developpe qlq chose du sérieux attention les résulats seront erronés

Discussions similaires

  1. représenter l'image en coordonnés polaire
    Par aminoste dans le forum MATLAB
    Réponses: 1
    Dernier message: 21/07/2012, 14h44
  2. Transformation de coordonnées
    Par Dranor dans le forum DirectX
    Réponses: 3
    Dernier message: 04/04/2009, 13h11
  3. [FLASH 8] Cherche représentation cartographique
    Par php_de_travers dans le forum Flash
    Réponses: 4
    Dernier message: 16/11/2005, 13h30
  4. Récuperer les coordonnées d'un vecteur
    Par kerzut dans le forum OpenGL
    Réponses: 5
    Dernier message: 15/04/2003, 11h51
  5. Coordonnées du curseur ???
    Par LE CHAKAL dans le forum Composants VCL
    Réponses: 3
    Dernier message: 27/08/2002, 17h28

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