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

 Delphi Discussion :

Tracé d'une route sur une carte


Sujet :

Delphi

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 439
    Par défaut Tracé d'une route sur une carte
    Bonjour

    Je me trouve face à un problème comme suit:
    Je doit tracer des route sur une carte du monde Mercator.
    Certaines seront entièrement dessinées sur la carte, d'autre commenceront ou finiront à l'extérieur (virtuellement car en fait elle reprendront de l'autre côté).
    Ces routes sont définies par des points: départ, Point1, Point2..... Point X, arrivée.
    Les coordonnées géographiques de ces point sont convertis en coordonnées rectangulaire selon les axes X et Y. (Voir schéma joint.)
    Je cherche un algorithme permettant de tracer ces routes correctement pour les divers cas (tout sur la carte, sortie à droite, à gauche et inversement)


    Pourriez vous m'apporter votre aide?

    Merci
    Pierre
    Images attachées Images attachées  

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 086
    Par défaut
    On peut considérer une section de route comme un vecteur
    La limite de la carte est aussi un vecteur :
    Un Vecteur peut s'exprimer par deux TPointF (x, y) (1200, 500), le premier utilisé comme point de départ, le second TPointF indique le pas (1, 0.66)
    TVector doit pouvoir aider (c'est nouveau XE3)

    Tu dois avoir des formules pour trouver leur intersection


    Si tu es mauvais en math comme moi, les formules ne doivent pas t'aider

    Donc juste en observant
    prenons, le cas central de ton image, pour moi ta route de 1200 à 1685 est composé de 4 ségment !

    Il faut commencer par trouver un segment qui soit X soit Y dépasse la taille de la carte !
    Ton X vas de Gauche à Droite
    Ton Y vas de Haut vers Bas
    La c'est le 3eme segment disons (1450, 1000) vers (1600, 700)
    le 3 segment doit devenir (1450, 1000) vers (1500, y)

    Utilise TPoint.Distance
    ça doit être un truc genre pythagore, D ça donne 540
    DN c'est la nouvelle distance, on doit pouvoir faire
    DN = D / (X1 - X2) * (X1 - X3),
    Sqrt(Sqr(X1 - X3) + Sqr(Y1 - Y3)) = 111,
    Sqr(X1 - X3) + Sqr(Y1 - Y3) = 12321,
    Sqr(1450 - 1500) + Sqr(1000 - Y3) = 12321,
    2500 + Sqr(1000 - Y3) = 12321,
    Sqr(1000 - Y3) = 9821,
    1000 - Y3p = 99 ou 1000 - Y3n = -99,
    Y3p = 901 ou Y3n = 1099,

    Le problème avec les racines c'est qu'il y a deux possibilités !
    Pour choisir, il faut tester les deux résultats
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    IF Y1 < Y2 THEN
      IF Y1 < Y3p < Y2 THEN
        Y3 = Y3p
      ELSE
        Y3 = Y3n
      END
    END
    ELSE
      IF Y1 > Y3p > Y2 THEN
        Y3 = Y3p
      ELSE
        Y3 = Y3n
      END
    END

    901 est entre 1000 et 700, ça me semble pas trop mauvais !

    Décortique différents cas, tu trouveras un algo commun, il faut commencer la déterminer l'axe qui déborde puis s'en servir pour poser un nouveau point



    Pour les calculs sur les droites avec une representation parametrique :
    x(t) = x0 + t*dx
    y(t) = y0 + t*dy
    Avec des Équations Second degré ou petit calcul matricielle cela se résout !
    Si tu es bon en math, tu y arriveras mieux que moi

    Sinon, tu as TRect.Intersect,
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    je n'ai pas bien compris où était le problème...dans quel contexte sont dessinées ces routes ? un clipping rectangulaire des fonctions graphiques et implicite dans un bitmap par exemple.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 439
    Par défaut
    Merci d'abord de ta réponse.

    Je travaille sur un logiciel aéronautique (divertissement). J'utilise XE2.
    Sur une carte du monde en projection Mercator (la planète est représentée sur un rectangle et seules les Latitudes sont déformées par ce type de projection)

    Mon appli utilise des routes aériennes qui passent par un certain nombre de points.

    3 cas peuvent se présenter:
    1 - Le départ et l'arrivée de la route sont reliés par des lignes qui sont toutes sur la carte (exemple du milieu sur mon schema.)
    2- le départ se fait très à l'est et atteint le bord droit de la carte pour rentré par son bord gauche.
    3- situation inverse de 2 la route sort de la carte par la gauche et entre par la droite

    @ShaiLeTroll: les coordonnées X et Y ne peuvent jamais dépasser les bords de la carte. Elles sont calculées à partir des coordonnées géographiques comme suit:

    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
    Procedure TForm3.MapPoint(Longit : Extended; Latit :Extended);
    Var Ratio : Extended;
    begin
      MapH       := Image2.Height;
      MapW       := Image2.Width;
      Ratio      := MapW /(Pi * 2);
      if Longit < 0 then
      begin
        PixelX   := MapW *((-longit + 180) / 360);
      end
      else
      begin
        PixelX   := MapW *((longit + 180) / 360);
      end;
      PixelY     := MapH / 2 - Ln(Tan((Pi / 4 )
                    + (( pi * Latit / 180) / 2))) * Ratio;
    end;
    J 'espère mon explication plus claire ainsi.

    Amicalement
    Pierre

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 086
    Par défaut
    Ce que veut dire Paul, c'est que tu dois pouvoir tracer une ligne qui déborde !
    MoveTo\LineTo du TCanvas, ce dernier doit s'arrêter à la fin de la zone prévue (ou l'agrandir si nécessaire)
    Je sais que sur un TImage vierge, trace un Rectangle va dimensionner le Canvas de façon que le tracé soit complet

    Si tu dois absolument avoir les valeurs précises pour les passer à un autre logiciel, cherche autour de ma proposition sur pythagore
    Ou si tu as le courage fait des recherches sur l'intersection de droite, le net regorge de ce genre de sujet !

    pour un Axe mathématique, X (gauche droite), Y (bas haut)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        function intersection(X1,Y1,X2,Y2,X3,Y3,X4,Y4: int): TPoint ///Calcul d'intersection de 2 droite
        begin
         Result.X := (((X3 * Y4) - (X4 * Y3)) * (X1 - X2) - (X1 * Y2 - (X2 * Y1)) * (X3 - X4)) / ((Y1 - Y2) * (X3 - X4) - (Y3 - Y4) * (X1 - X2));
         Result.Y :=  Result.X * ((Y1 - Y2) / (X1 - X2)) + ((X1 * Y2 - (X2 * Y1)) / (X1 - X2));
     
        end;
    X1, Y1 = point de départ du segment de route (1450, 1000)
    X2, Y2 = fin du segment de route (1600, 1300)
    X3, Y3 = point de départ de l'axe (1500, 0)
    X4, Y4 = point de départ de l'axe (1500, 1500)

    Cette droite croise l'axe centrale en (1500, 900) comme je le disais plus haut
    Maintenant, tu dois positionner tes segments à l'endroit approprié

    C'est droite croise l'axe 0 en (0, 900) et l'axe 3000 en (3000, 900)


    ça c'est pour arrêter d'un côté !
    Pour que cela fasse le tour du monde et que cela reparte de l'autre côté, il te suffit retrancher X (3000) à tes calculs qui dépasse le point d'intersection entre le segment et l'AXE
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    AH ! je crois que j'ai compris ce que tu veux dire

    un même segment peut être dessinée deux fois

    tu ne peux pas juste maper 1 point, tu as besoin des 2 points d'un segment pour savoir s'il doit être dessiner 1 seule fois ou 2 fois (une fois à droite et une fois à gauche).
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 439
    Par défaut
    Merci à vous deux,

    @Paul : C'est exactement cela.. sauf que la partie hors carte ne doit pas être visible...

    Je creuse et reviens vers vous

    Merci encore
    Amicalement
    Pierre

  8. #8
    Membre très actif
    Homme Profil pro
    Santé
    Inscrit en
    Septembre 2010
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Santé
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2010
    Messages : 290
    Par défaut
    Salut,

    ATTENTION! Pour faire ce que tu veux, la projection de Mercator est totalement déconseillée !

    En effet, pour aller d'Amérique du sud en Australie, ton logiciel te fera passer par l'Afrique (ce qui est absurde). En réalité il te faudrait passer par le pôle sud.
    Or, sur une carte selon Mercator, il n'y a pas les pôles (en fait, ils se situent à Y= + ou -infini.

    Les marins se foutent pas mal des pôles... mais pas les aviateurs.

    [Edit]
    Selon moi, le mieux serait de calculer tes routes en 3D, avec longitudes et latitudes, puis d'effectuer une projection de ces routes sur une carte 2D (peu importe alors le système de projection).

    Bien sûr, il ne s'agira plus de dessiner des droites, mais des coniques...

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 439
    Par défaut
    Merci Pierre Luc de ton intervention.

    En effet, tu as parfaitement raison car la projection Mercator est utilisable entre + et - 70° de latitude.
    Mon appli ne nécessite pas un grande précision quand à la visualisation de la route, c'est plus un outils d'appréciation que de navigation.
    Elle est plus orienté calcul de carburant et performances de décollage et atterrissage.

    J'ai vu ici et là des cartes du monde zoomables et sans fin (en défilement horizontal).

    Connaitriez vous ce genre de composants?

    Amicalement
    Pierre

  10. #10
    Membre très actif
    Homme Profil pro
    Santé
    Inscrit en
    Septembre 2010
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Santé
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2010
    Messages : 290
    Par défaut
    ...Je ne connais pas ce genre de composant, mais c'est très facile à faire.

    Si tu disposes d'un Bmp représentant une planisphère, il te suffit de créer un Bmp de largeur double et d'y coller côte-à-côte le 1er Bmp.

    Et quand, par exemple, tu arriveras au bord droit de la carte, il te suffira de recentrer le Bmp sur X-(Bmp.width div 2). Et pour le côté gauche, sur X+(Bmp.width div 2).
    Je pense qu'en plus cela te facilitera grandement le tracé de route...

    Vois-tu ce que je veux dire ?


    [Edit]
    Si tu veux voir l'ensemble du "monde" sur ton écran, il te faudra alors utiliser 3 Bmp de la planisphère collés côte à côte.

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 439
    Par défaut
    Merci Pierre-Luc,

    Je vais tenter de créer ce double Bitmap.
    Je reviens vers vous pour vous rendre compte de mes avancées....

    Bonne soirée à tous

    Pierre

  12. #12
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 086
    Par défaut
    Google Map ?

    Il faut même mettre 4 bitmap en fait, si ton avion passe par les pôles (mais bon j'ai lu plus haut que cela n'arrivera pas )

    Il n'y a pas besoin de faire cela !
    Si tu ne gère que le défilement horizontal mais pas les pôles

    Tu dessines la route dans un TBitmap
    Tu détermine la position du Rectangle dans la carte TRect(plus petit X, plus petit Y, plus grand X, plus grand Y)

    Ca c'est MapPoint, faudrait voir pour qu'elle donne des X\Y en dehors du plan (peut-être, les deux, la valeur toujours intérieure et la valeur potentiellement extérieur)

    Au lieu de faire défiler le monde, tu peux juste correctement positionné ton rectangle de route

    le plus petit XY ou le plus grand XY c'est sur TOUS les segments de la route !

    Tu n'as qu'a déterminer de quel côté ton rectangle dépasse
    Si X0
    Tu dessines la partie droite en (0, plus petit Y, plus grand X, plus grand Y)
    Tu dessines la partie gauche en (plus petit X + 3000, plus petit Y, 3000, plus grand Y)
    Idem en X3000
    Tu dessines la partie droite en (0, plus petit Y, plus grand X - 3000, plus grand Y)
    Tu dessines la partie gauche en (plus petit X, plus petit Y, 3000, plus grand Y)

    Rien de compliquer !



    Si tu veux gèrer un passage par les pôles (on ne sais jamais)

    Juste, comme ça, c'est comme dans le jeu Snake
    Certaines version n'ont pas de bordure, lorsque tu arrives au bout de l'écran, tu reprends de l'autre côté !
    Cela doit bien se trouver !

    Sinon

    Etape 1
    Tu vas créer un rectangle (TRect), le segment en sera l'une des deux diagonales

    Etape 2
    Si pas intersection *
    . Tu dessine directement sur ton plan tes segments, méthode libre

    Si il y a une intersection sur Nord\Sud ou Est\Ouest
    . Tu divise le Segment en intersection en DEUX Segments
    . Tu vas aussi créer le 5eme rectangle (tu as 4 segment, puis 5 segment avec la division)
    . La Méthode TRect.Intersect va indiquer si le rectangle est présent dans le plan (0, 0, 3000, 1500)
    . Si présent, tu dessines dans le plan, méthode libre
    . Si pas présent,
    . . Si intersection en X0, tu incrémente X1 et X2 de 3000,
    . . Si intersection en X3000, tu décrémente X1 et X2 de 3000
    . . Si intersection en Y0, tu incrémente Y1 et Y2 de 3000,
    . . Si intersection en Y3000, tu décrémente Y1 et Y2 de 3000
    . . Tu peux dessiner le segment avec ses positions corrigés !

    Si pas intersection équivaut à
    - div par zéro (parallèle)
    - coordonnées hors du rectangle dont le segment est la diagonale
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  13. #13
    Membre très actif
    Homme Profil pro
    Santé
    Inscrit en
    Septembre 2010
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Santé
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2010
    Messages : 290
    Par défaut
    @Shaï
    Pas mal l'histoire du rectangle dessiné en deux fois. L'avantage est qu'on peut y dessiner toute la route en une fois je pense (plusieurs segments).

    Sinon, pour répondre à la première question, on peut utiliser le fait que Tcanvas est une surface de dessin qui n'a pas besoin de clipping :

    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
    18
    19
    20
    21
    22
    {Dessine le segment direct en noir, le segment indirect en rouge.}
    procedure DrawSegments(Canv: TCanvas; X1,Y1,X2,Y2: Integer);
      var Xmax : Integer;
      begin
      {Segment direct en noir:}
      Canv.Pen.Color := clBlack;
      Canv.MoveTo(X1,Y1);
      Canv.LineTo(X2,Y2);
      {Segment indirect en rouge:}
      Xmax := Canv.ClipRect.Right-1;
      Canv.Pen.Color := clRed;
      Canv.MoveTo(X1,Y1);
      if X1<X2 then begin
        Canv.LineTo(X2-Xmax,Y2);
        Canv.MoveTo(X2,Y2);
        Canv.LineTo(X1+Xmax,Y1); end
      else begin
        Canv.LineTo(X2+Xmax,Y2);
        Canv.MoveTo(X2,Y2);
        Canv.LineTo(X1-Xmax,Y1);
      end;
    end;


    Mais attention, pour gérer un passage par les pôles c'est beaucoup plus compliqué que sortir à droite pour rentrer à gauche et sortir en haut pour rentrer en bas.
    Cela ne détermine pas le comportement d'une sphère mais d'un tore (un pneu, quoi...)!

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 439
    Par défaut
    Bonjour,

    Finalement, et après un weekend de recherches, j'ai décidé d'utiliser Google map.
    J'ai cherché des tuyaux sur son utilisation et trouvé quelques pistes.
    Je viens à nouveau vers vous pour quelques conseils à ce sujet.

    J'ai trouvé un script pour placer des points et tracer des lignes sur la carte à la souris qui fonctionne, mais je ne parviens pas à trouver une fonction qui puisse être appelée depuis le programme pour tracer les lignes dans une boucle.
    Voici le script utilisé pour l'instant:

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    HTMLStr: AnsiString =
    '<html> '+
    '<head> '+
    '<meta name="viewport" content="initial-scale=1.0, user-scalable=yes" /> '+
    '<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true"></script> '+
    '<script type="text/javascript"> '+
    ''+
    '  var map;'+
    '  var Poly; '+
    ''+
    ''+
    '  function initialize() {'+
    '  var myLatLng = new google.maps.LatLng(48.00, 2.00);'+
    '  var mapOptions = {'+
    '    zoom: 5,'+
    '    center: myLatLng,'+
    '    mapTypeId: google.maps.MapTypeId.TERRAIN'+
    '  };'+
    '  map = new google.maps.Map(document.getElementById("map_canvas"),'+
    '      mapOptions);'+
    ''+
    '  var polyOptions = {'+
    '    strokeColor: "#FF0000",'+
    '    strokeOpacity: 1.0,'+
    '    strokeWeight: 2'+
    '  };'+
    '  poly = new google.maps.Polyline(polyOptions);'+
    '  poly.setMap(map);'+
    '  google.maps.event.addListener(map,"click", addLatLng);'+
    '}'+
    ''+
    ' function addLatLng(event) {'+
    '   var path = poly.getPath();'+
    '   path.push(event.latLng);'+
    '   var marker = new google.maps.Marker({'+
    '   position: event.latLng,'+
    '   title: "#" + path.getLength(),'+
    '   map: map });'+
    '}'+
    ''+
    ''+'</script> '+
    '</head> '+
    '<body onload="initialize()"> '+
    '  <div id="map_canvas" style="width:100%; height:100%"></div> '+
    '</body> '+
    '</html> ';
    Quelles modifications lui apporter pour avoir la fonction qui trace les points de puis la boucle de lecture de mes plans de vols:
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Procedure TForm3.Convert;
    var SDirLat, sLatitude, sDirLon, sLonDeg, sLongitude, sCaption :String;
        dLatDeg, dLatMin, dLatSec, dLonDeg, dLonMin, dLonSec, dLatitude,
        dLongitude  :Extended;
        PosError, ind :Integer;
    begin
      For ind := 0 to lPoints.Count-1 do
      Begin
        LSt.StrictDelimiter      := True;
        LSt.Delimiter            := ';';
        LSt.DelimitedText        := Lpoints.Strings[ind];
        sCaption                 := Lst[0];
        sLatitude                := Lst[1];
        sLongitude               := Lst[2];
      //Convert String in DMS
      //Latitude
        sDirLat                  := Copy(sLatitude,1,1);
        Val(Copy(sLatitude,2,2),dLatDeg,PosError);
        if sDirLat = 'S' then
          dLatDeg                := - dLatDeg;
        Val(Copy(sLatitude,6,2),dLatMin,PosError);
        Val(Copy(sLatitude,10,5),dLatSec,PosError);
      //Longitude
        sDirLon                  := Copy(sLongitude,1,1);
        sLonDeg                  := Copy(sLongitude,2,3);
        sLonDeg                  := ReplaceText(sLonDeg,'°','');
        dLonDeg                  := StrToFloat(sLonDeg);
        if sDirLon = 'W' then
          dLonDeg                := - dLonDeg;
        Val(Copy(sLongitude,6,2),dLonMin,PosError);
        Val(Copy(sLongitude,10,5),dLonSec,PosError);
      //Convert Coordinates in decimal coordinates
        dLatitude                := DMS2Extended(dLatDeg,dLatMin,dLatSec);
        dLongitude               := DMS2Extended(dLonDeg,dLonMin,dLonSec);
      //Draw Waypoint on Map
      //******** Appel de la fonction de tracé sur Google Map **********************
      End;
    end;
    Merci de vos lumières.

    Amicalement
    Pierre

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 439
    Par défaut
    Bonjour à nouveau,

    Après bien des essais et recherches, j'ai fini par réussir à tracer les routes désirées sur un TWebBrowser et google map.

    Je passe simplement vous remercier chaleureusement pour le mal que vous vous êtes donnés afin de m'aider.

    Bien Cordialement
    Pierre

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

Discussions similaires

  1. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  2. afficher une valeur sur une feuille lorsqu'une checkbox est cochée
    Par chrnoe dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/12/2008, 14h39
  3. probleme avec l'appui sur une touche sur une jframe ou jdialog
    Par jeanfeu dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 05/08/2008, 16h14
  4. [VBA Excel] Appliquer une macro sur une celulle contenant une valeur
    Par tchauviere dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 21/01/2008, 10h21
  5. Réponses: 3
    Dernier message: 16/01/2006, 16h02

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