COORDONNÉE GÉOGRAPHIQUE

viarn Messages postés 33 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 21 février 2006 - 2 mai 2005 à 02:21
dede59620 Messages postés 23 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 31 juillet 2017 - 20 juin 2010 à 13:29
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/31105-coordonnee-geographique

dede59620 Messages postés 23 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 31 juillet 2017
20 juin 2010 à 13:29
C'est bon et ça m'est utile alors je mets un 9/10 pour faire monter la moyenne.
Il est évident qu'on peut toujours améliorer un code, surtout quand on ne l'a pas fait soi-même, alors j'en profite pour le rendre compatible avec une position quelconque du graphe sur la feuille.
Et pour supprimer deux contrôles numériques.
Bon courage.

Private Sub Command1_Click() 'Permet de placer sur la carte la position choisie.

If Not IsNumeric(Text1.Text) Then 'Si Text1.text n'est pas un chiffre alors
MsgBox "Entrez un chiffre." 'On affiche un message à l'utilisateur
Exit Sub 'Et on quitte la procédure
End If

If Not IsNumeric(Text2.Text) Then 'Si Text2.text n'est pas un chiffre alors
MsgBox "Entrez un chiffre." 'On affiche un message à l'utilisateur
Exit Sub 'Et on quitte la procédure
End If

Line7.Visible = True 'Rend visible la croix qui indiquera la position
Line8.Visible = True 'Rend visible la croix qui indiquera la position
Shape1.Visible = True 'Rend visible la croix qui indiquera la position

Longitude = Text1.Text 'On affecte la valeur de Text1.text à Longitude
Latitude = Text2.Text 'On affecte la valeur de Text2.text à Latitude
N_S = Combo1.List(Combo1.ListIndex) 'On affecte à N_S la valeur séléctionnée par l'utilisateur pour la position Nord/Sud
E_O = Combo2.List(Combo2.ListIndex) 'On affecte à E_O la valeur séléctionnée par l'utilisateur pour la position Est/Ouest

If N_S = "Nord" And Longitude > 90 Then 'Si Nord est séléctionné et que Longitude est supérieure à 90°
Combo1.Text = Combo1.List(1) 'Alors on affiche dans la combo la position Sud Longitude 180 - Longitude 'Et on indique que Longitude 180 - Longitude
End If

If N_S = "Sud" And Longitude > 90 Then 'Si Sud est séléctionné et que Longitude est supérieure à 90°
Combo1.Text = Combo1.List(0) 'Alors on affiche dans la combo la position Nord Longitude 180 - Longitude 'Et on indique que Longitude 180 - Longitude
End If

If E_O = "Est" And Latitude > 180 Then 'Si Est est séléctionné et que Latitude est supérieure à 180°
Combo2.Text = Combo2.List(1) 'Alors on affiche dans la combo la position Ouest Latitude 360 - Latitude 'Et on indique que Latitude 360 - Latitude
End If

If E_O = "Ouest" And Latitude > 180 Then 'Si Ouest est séléctionné et que Latitude est supérieure à 180°
Combo2.Text = Combo2.List(0) 'Alors on affiche dans la combo la position Est Latitude 360 - Latitude 'Et on indique que Latitude 360 - Latitude
End If

N_S = Combo1.Text 'On met Combo1.text dans N_S car celui ci à peut etre été modifié cf au dessus
E_O = Combo2.Text 'On met Combo2.text dans E_O car celui ci à peut etre été modifié cf au dessus

Text1.Text = Longitude 'On met Longitude dans Text1.text car celui ci à peut etre été modifié cf au dessus
Text2.Text = Latitude 'On met Latitude dans Text2.text car celui ci à peut etre été modifié cf au dessus

If N_S = "Nord" Then 'Si N_S est égal à Nord on place la ligne horizontale sur le point
Line8.Y1 = Image1.Top + Image1.Height / 2 - (Image1.Width * Longitude / 360)
Line8.Y2 = Image1.Top + Image1.Height / 2 - (Image1.Width * Longitude / 360)
Line8.X1 = Image1.Left + Image1.Width / 2 - Image1.Width / 2
Line8.X2 = Image1.Left + Image1.Width / 2 + Image1.Width / 2
Else 'Si N_S n'est pas égal à Nord, donc c'est Sud
Line8.Y1 = Image1.Top + Image1.Height / 2 + (Image1.Width * Longitude / 360)
Line8.Y2 = Image1.Top + Image1.Height / 2 + (Image1.Width * Longitude / 360)
Line8.X1 = Image1.Left + Image1.Width / 2 - Image1.Width / 2
Line8.X2 = Image1.Left + Image1.Width / 2 + Image1.Width / 2
End If

If E_O = "Est" Then 'Si E_O est égal à Est on place la ligne verticale sur le point
Line7.Y1 = Image1.Top + Image1.Height / 2 - Image1.Height / 2
Line7.Y2 = Image1.Top + Image1.Height / 2 + Image1.Height / 2
Line7.X1 = Image1.Left + Image1.Width / 2 + (Image1.Width * Latitude / 360)
Line7.X2 = Image1.Left + Image1.Width / 2 + (Image1.Width * Latitude / 360)
Else 'Si E_O n'est pas égal à Est, donc c'est Ouest
Line7.Y1 = Image1.Top + Image1.Height / 2 - Image1.Height / 2
Line7.Y2 = Image1.Top + Image1.Height / 2 + Image1.Height / 2
Line7.X1 = Image1.Left + Image1.Width / 2 - (Image1.Width * Latitude / 360)
Line7.X2 = Image1.Left + Image1.Width / 2 - (Image1.Width * Latitude / 360)
End If

'Notre point est trouvé, c'est le croisement de Line7 et Line8

'Ici on centre le carré sur le centre des 2 lignes
Shape1.Left = Line7.X1 - Shape1.Width / 2
Shape1.Top = Line8.Y1 - Shape1.Height / 2

End Sub

Private Sub Command2_Click() 'Permet d'afficher l'équateur et 4 autres lignes.
'Permet de rendre visible les différentes lignes et label que nous utiliserons
Line1.Visible = True
Line2.Visible = True
Line3.Visible = True
Line4.Visible = True
Line5.Visible = True
Line6.Visible = True
Label1.Visible = True
Label2.Visible = True
Label3.Visible = True
Label4.Visible = True
Label5.Visible = True
Label6.Visible = True

'Ligne de l'Equateur
Line1.Y1 = Image1.Top + Image1.Height / 2
Line1.Y2 = Image1.Top + Image1.Height / 2
Line1.X1 = Image1.Left + Image1.Width / 2 - Image1.Width / 2
Line1.X2 = Image1.Left + Image1.Width / 2 + Image1.Width / 2

'Ligne du 45° Nord
Line2.Y1 = Image1.Top + Image1.Height / 2 - Image1.Width / 8
Line2.Y2 = Image1.Top + Image1.Height / 2 - Image1.Width / 8
Line2.X1 = Image1.Left + Image1.Width / 2 - Image1.Width / 2
Line2.X2 = Image1.Left + Image1.Width / 2 + Image1.Width / 2

'Ligne du 45° Sud
Line3.Y1 = Image1.Top + Image1.Height / 2 + Image1.Width / 8
Line3.Y2 = Image1.Top + Image1.Height / 2 + Image1.Width / 8
Line3.X1 = Image1.Left + Image1.Width / 2 - Image1.Width / 2
Line3.X2 = Image1.Left + Image1.Width / 2 + Image1.Width / 2

'Ligne du 0°
Line4.Y1 = Image1.Top + Image1.Height / 2 - Image1.Height / 2
Line4.Y2 = Image1.Top + Image1.Height / 2 + Image1.Height / 2
Line4.X1 = Image1.Left + Image1.Width / 2
Line4.X2 = Image1.Left + Image1.Width / 2

'Ligne du 45° Est
Line5.Y1 = Image1.Top + Image1.Height / 2 - Image1.Height / 2
Line5.Y2 = Image1.Top + Image1.Height / 2 + Image1.Height / 2
Line5.X1 = Image1.Left + Image1.Width / 2 + Image1.Width / 8
Line5.X2 = Image1.Left + Image1.Width / 2 + Image1.Width / 8

'Ligne du 45° Ouest
Line6.Y1 = Image1.Top + Image1.Height / 2 - Image1.Height / 2
Line6.Y2 = Image1.Top + Image1.Height / 2 + Image1.Height / 2
Line6.X1 = Image1.Left + Image1.Width / 2 - Image1.Width / 8
Line6.X2 = Image1.Left + Image1.Width / 2 - Image1.Width / 8

'Permet d'afficher le label de la ligne en face ou au dessus de celle-ci
Label1.Top = Image1.Top + Image1.Height / 2 - Label1.Height / 2 'Equateur
Label2.Top = Image1.Top + Image1.Height / 2 - Label2.Height / 2 - Image1.Width / 8 'Nord
Label3.Top = Image1.Top + Image1.Height / 2 - Label3.Height / 2 + Image1.Width / 8 'Sud
Label4.Top = Image1.Top + Image1.Height / 2 - Label4.Height / 2 - Image1.Height / 2 - 500 'Est
Label4.Left = Image1.Left + Image1.Width / 2 + Image1.Width / 8
Label5.Top = Image1.Top + Image1.Height / 2 - Label5.Height / 2 - Image1.Height / 2 - 500 'Ouest
Label5.Left = Image1.Left + Image1.Width / 2 - Image1.Width / 8
Label6.Top = Image1.Top + Image1.Height / 2 - Label6.Height / 2 - Image1.Height / 2 - 500 '0
Label6.Left = Image1.Left + Image1.Width / 2
End Sub

Private Sub Form_Load() 'S'execute dès le lancement de la feuille
'Permet de charger l'image
Image1.Picture = LoadPicture(App.Path & "\map.jpg")

'Centre l'image au milieu de l'écran
'image1.Left = 4000 'Screen.Width / 2 - image1.Width / 2
'image1.Top = 300 ' Screen.Height / 2 - image1.Height / 2

'Centre la frame par rapport à la hauteur de l'écran
'Frame1.Top = Screen.Height / 2 - Frame1.Height / 2

'Ajoute les 4 directions aux 2 Combos
Combo1.AddItem "Nord"
Combo1.AddItem "Sud"
Combo2.AddItem "Est"
Combo2.AddItem "Ouest"

'Affiche le premier élément de la combo
Combo1.Text = Combo1.List(0)
Combo2.Text = Combo2.List(0)
Image1.MouseIcon = LoadPicture(App.Path & "\6.ico")
Image1.MousePointer = 99
End Sub

Private Sub image1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

If Y > (Image1.Height / 2) Then
Y1 = (Y - (Image1.Height) / 2) * 180 / Image1.Height
Combo1.Text = Combo1.List(1)
Text1.Text = Y1 'Si Y est plus grand que la moitie de la hauteur de l'image alors on est au Sud de l'Equateur
Else
Y1 = ((Image1.Height / 2) - Y) * 180 / Image1.Height
Combo1.Text = Combo1.List(0)
Text1.Text = Y1 'Si Y est plus petit que la moitie de le hauteur de l'image alors on est au Nord de l'Equateur
End If

If X > (Image1.Width / 2) Then
X1 = (X - (Image1.Width / 2)) * 180 / Image1.Height
Combo2.Text = Combo2.List(0)
Text2.Text = X1 'Si X est plus grand que la moitie de la largeur de l'image alors on est à l'Est du 0°
Else
X1 = ((Image1.Width / 2) - X) * 180 / Image1.Height
Combo2.Text = Combo2.List(1)
Text2.Text = X1 'Si X est plus petit que la moitie de la largeur de l'image alors on est à l'Ouest du 0°
End If

End Sub

Private Sub Text1_Change()
If Text1.Text > 90 Then Text1.Text = 90
End Sub

Private Sub Text2_Change()
If Text2.Text > 180 Then Text2.Text = 180
End Sub
JULIEN0 Messages postés 37 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 16 mai 2014 1
10 juin 2009 à 14:36
Tout d'abord merci pour cette source très simple à comprendre,
Super source, mais je ne comprend pas pourquoi tu uilise la valeure 0,0375, valeure que tu as deja calculé par rapport a la taille verticale de l'image actuelle (4800 points) :
"Y1 = (Y - (Image1.Height) / 2) * 0,0375"

alors que si tu marque :
Y1 = (Y - (Image1.Height) / 2) * 180 / Image1.Height

tu n'avais pas expliqué comment tu arrive a 0,0375....
la tu as bien une valeure qui dépend de la taille de ton image, tu peux alors agrandir l'image ou mettre une autre image ca marche toujours. ou mettre en place un systeme de zoom.... etc...
Sniper_Vgaerr Messages postés 113 Date d'inscription jeudi 2 décembre 2004 Statut Membre Dernière intervention 14 août 2006
3 juil. 2005 à 22:23
Merci, mais désolé pour toi je ne connais pas le Java, mais content que ce programme te plaise. Merci
misteraoul Messages postés 23 Date d'inscription mardi 16 novembre 2004 Statut Membre Dernière intervention 25 novembre 2009
2 juil. 2005 à 22:19
C'est une super source, mon portable me donne la position du soleil et de la lune par rapport au nord geographique, seulement il faut entrer les coordonnées du lieu, se programme est donc parfait pour moi. P.S: si tu pouvai coder la meme chose en java pour le mettre sur mon portable aussi sa serai bien :D . Bravo Sniper_Vgaerr
viarn Messages postés 33 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 21 février 2006
3 mai 2005 à 18:32
bravo. 8/10 pour les efforts.

A bientôt.
Sniper_Vgaerr Messages postés 113 Date d'inscription jeudi 2 décembre 2004 Statut Membre Dernière intervention 14 août 2006
2 mai 2005 à 23:58
Ca y est c'est fait j'ai mis a jour ma source comme ca on peut pointer la carte et avoir les coordonnées.

Merci viarn
viarn Messages postés 33 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 21 février 2006
2 mai 2005 à 02:21
Source interessante. Cependant, il faut que tu penses à indenter ton code pour la lisbilité, ainsi qu'au nommage des controles.
La source est correctement commentée.

Maitenant, prochaine étape, si tu es daccord, ca serait que l'on puisse déplacer le "petit viseur" avec la souris et que cela marque, ds tes textBox(s), les coordonnées automatiquement.

Pour les coordonnées LAMBERT II + on verra + tard.

Bonne prog.
Rejoignez-nous