Localiser un point à deux coordonnées dans un tableau de points
Bonjour à tous, une question pour les forçats du clavier qui ne sont pas en vacances...
J'ai réalisé un petit soft de carto où je dessine une trace GPS sur une image de carte calibrée. J'ai donc en permanence la correspondance entre position du curseur souris et la position géographique en latitude longitude.
Qd le curseur de la souris survole la trace je voudrais afficher dans une info bulle les caractéristiques du point : vitesse, altitude etc...
Pour l'instant j'utilise une procédure un peu bourrin peu performante...
Les points de la trace sont stockés dans un tableau où l'on a la latitude, la longitude, la coordonnée X en pixel sur la carte, la coordonnée Y en pixel sur la carte.
Je pourrai raisonner en terme de latitude et de longitude car je peux facilement calculer la latitude et la longitude correpondant au point survolé par la souris.
Pour l'instant j'ai adopté l'autre voie possible, raisonner sur la position en pixel sur la carte. Qd la souris se déplace je récupère sa position par rapport à la carte ( MouseX et MouseY ) et je teste si c'est une position de point GPS dans mon tableau. Je fais cela à trois pixels près. Ci dessous le bout de code Delphi
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
For i := 1 to Tb_Borne do
begin
if (MouseX > Tb_VolData[i].MapX - 3 ) and (MouseX < Tb_VolData[i].MapX + 3 )then
begin
if (MouseY > Tb_VolData[i].MapY - 3 ) and (MouseY < Tb_VolData[i].MapY + 3 )then
begin
NLabAlti.Visible := True;
NLabVitesse.Visible := True;
NLabAlti.Value := Tb_VolData[i].Altitude;
NLabVitesse.Value := Tb_VolData[i].Vitesse;
exit;
end;
end;
end; |
Existe il une solution plus élégante et surtout plus rapide ?
Amicalement