Conversion pixel/latitude,longitude

Conversion pixel/latitude,longitude - Java - Programmation

Marsh Posté le 07-05-2007 à 08:26:13    

bonjour, :)  
j'aimerais de l'aide pour convertir des pixels en latitude/longitude si vous avez des exemples de méthode se serai sympa de me les transmettre le plus vite possible merci d'avance a tous les membres! ;)  :hello:

Reply

Marsh Posté le 07-05-2007 à 08:26:13   

Reply

Marsh Posté le 07-05-2007 à 09:09:29    

prendre la position du pixel et faire une règle de 3 :??:
 
 
 
(pas sûr d'avoir compris)


---------------
oui oui
Reply

Marsh Posté le 07-05-2007 à 09:17:19    

oui je sais sa mais je veux afficher les vrai latitude/longitude
par exemple sur la carte qui s'affiche je veux définir les coordonnées en pixel(0,0) en latitude/longitude(N14°57' W61°31')

Reply

Marsh Posté le 07-05-2007 à 09:37:53    

bien si tu connais les coordonnées "pixel" et "réelles" de deux points, tu fais une règle de 3 entre les deux systèmes.

 

Si tu vois pas, donnes deux points et leurs coordonnées


Message édité par art_dupond le 07-05-2007 à 09:54:43

---------------
oui oui
Reply

Marsh Posté le 07-05-2007 à 09:54:32    

pixel(351,347) latitude/longitude(60°51'/14°23')
pixel(189,76) latitude/longitude(61°10'/14°52')

Reply

Marsh Posté le 07-05-2007 à 10:03:39    

ok donc, pour la latitude :

 

351-189 = +162 pixels représentent 60°51' - 61°10' = -19'

 

si +162 pixels représentent -19' => 1 pixel représente -19'/162

 

idem pour l'autre coordonnée


Message édité par art_dupond le 07-05-2007 à 10:05:00

---------------
oui oui
Reply

Marsh Posté le 07-05-2007 à 10:07:38    

merci je vais essayer je vous tiens au courant

Reply

Marsh Posté le 07-05-2007 à 11:32:07    

si il y a d'autre solution n'hésiter pas a men faire part merci

Reply

Marsh Posté le 12-05-2007 à 18:22:41    

Salut,
 
je me permets de remonter le topic parce que je ne comprends pas comment passer des coordonnées normales aux pixels (art_dupond, tu dis qu'il y a une règle de 3 mais est-ce que c'est bien comme ça : Xp = a*Xn + b (avec Xp les coordonnées en pixel et Xn les coordonnées normales) ?)
 
Dans ce cas, comment passer de Xn à Xp en fonction de la taille de la fenêtre ? J'ai pensé à un getSize(), mais bon...
 
Merci :jap:

Reply

Marsh Posté le 13-05-2007 à 10:41:51    

Repère "normal"


 
    .(Xn,Yn)
 
 
                                                                             .(An,Bn)
 


 
Repère "pixel"


 
    .(Xp,Yp)
 
 
                                                                             .(Ap,Bp)
 


 
Soit la taille de la carte en pixels Tp et la taille "normale" de la carte Tn.
 
Pour récupérer la taille de la carte, tu peux récupérer la largeur de ton image en javascript (J'ai pas compris le rapport avec la taille de la fenêtre, je suppose que tu voulais dire la taille de ton image).

Spoiler :


Google : javascript get image width me donne
 
function getImageWidth(myImage) {
 var x, obj;
 if (document.layers) {
  var img = getImage(myImage);
  return img.width;
 } else {
  return getElementWidth(myImage);
 }
 return -1;
}


 
Pour passer des coordonnées "normales" -> "pixel" :
Le facteur d'échelle dans ce 'sens' est Ep = Tp/Tn
On connait (Xn,Yn), (Xp,Yp) et (An,Bn)
On veut trouver (Ap,Bp)

  • Ap = Xp + Ep * (An - Xn)
  • Bp = Yp + Ep * (Bn - Yn)


 
Pour passer de "pixel" -> "normal" :
Le facteur d'échelle dans ce 'sens' est En = Tn/Tp
On connait (Xn,Yn), (Xp,Yp) et (Ap,Bp).
On veut trouver (An,Bn)

  • An = Xn + En * (Ap - Xp)
  • Bn = Yn + En * (Bp - Yp)


 
edit : si t'as une image tordue et que l'échelle verticale et l'échelle horizontale sont différentes, il faut calculer un facteur d'échelle "horizontal" et un facteur d'échelle "vertical".


Message édité par art_dupond le 13-05-2007 à 10:43:48

---------------
oui oui
Reply

Marsh Posté le 13-05-2007 à 10:41:51   

Reply

Marsh Posté le 13-05-2007 à 17:03:22    

Salut, merci pour ta réponse, je vais essayer de mieux expliquer mon problème (j'aurais dû le faire au début :sweat:) :  
 
Mon programme est une JFrame dans laquelle il y a un JPanel, et j'essaye de tracer la courbe représentative d'une fonction (admettons sin(x)). Vu que l'origine est normalement en haut à gauche, je l'ai déplacée pour pouvoir être au centre de la fenêtre en fonction de la taille de celle-ci (donc lors du redimensionnement, le centre du repère est toujours au centre de la fenêtre) ; pour cela, j'ai fait un translate(largeur/2, hauteur/2).
 
Maintenant mon problème, c'est si je veux tracer la fonction sin(x) sur [-PI, PI] en largeur et sur [-1, 1] en hauteur, comment faire pour que le tracé prenne l'ensemble du Jpanel ?
 
Pour la largeur, j'ai trouvé (et ça semble fonctionner, mais je n'ai pas compris pourquoi :cry:) :
 
pour x de -PI à PI (avec un delta x quelconque) faire
    [largeur / (PI - (-PI))] * x
 
C'est là que je parlais de la règle de 3 (a * x + b, mais comme j'ai déjà transformé l'origine du repère, b = 0)
 
Mais pour la hauteur, je n'ai pas encore trouvé.
 
Merci pour ton aide en tout cas :wahoo:

Reply

Marsh Posté le 13-05-2007 à 22:55:04    

oups, j'ai complètement zappé que c'était du java :p
 
Pour la hauteur, ca devrait être sin(x) * demi hauteur de ton Jpanel.
 
Reste à trouver la hauteur, mais comme je ne connais pas java :p
 
Par contre, si c'est juste ça le problème, crée pit-être un topic pour demander comment trouver cette hauteur.


---------------
oui oui
Reply

Marsh Posté le 14-05-2007 à 00:24:20    

Ah ok, c'était pour ça le javascript ^^
 
Bon sinon pour la hauteur c'est (hauteur / Ymin - Ymax) * sin(x), mais bon je tâtonne en fait, donc si quelqu'un pouvait m'expliquer la raison :sweat:
 
Merci à toi art_dupond !

Reply

Marsh Posté le 14-05-2007 à 00:54:13    

Ici, tu as un sinus que tu veux mettre dans un JPanel de hauteur H.
 
Ton sinus varie de -1 à 1, c'est à dire qu'en tout, tu as besoin de "2" ( = 1-(-1) ) pour dessiner ton sinus.
 
 
Ici, tu ne disposes pas de 2 mais de H (la hauteur).
Comment passer de 2 à H ? Ben il faut diviser par 2 puis multiplier par H :  
 
2 -> 2 (/2 * H) = H
 
Donc si tu appliques la même règle pour toutes tes valeurs, c'est-à-dire que tu appliques la règle à ton sinus, il sera comme tu le veux dans ton JPanel, c'est-à-dire que quand il sera max (ou min), il touchera le bord haut (ou bas).
 
=> sin(x) -> sin(x) (/2 * H) = sin(x) dans le JPanel
 
 
 
 
note : c'est (Ymax - Ymin) ou |Ymin - Ymax| (en valeur absolue)


Message édité par art_dupond le 14-05-2007 à 00:56:41

---------------
oui oui
Reply

Marsh Posté le 14-05-2007 à 16:41:43    

Salut, merci pour ton explication, c'est beaucoup plus clair maintenant :jap:
 
Sinon pour la hauteur, étant donné que l'axe des ordonnées "pointe" vers le bas, je suis obligé de prendre une valeur négative, mais ça reste juste du détail.
 
 :hello:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed