2010-04-25 31 views
3

Comment calculer à partir de ces chiffres:Comment transformer la latitude et la longitude?

51.501690392607,-0.1263427734375 

à la latitude et la longitude?

Il devrait être

 
London, England 51° 32' N 0° 5' W 
+0

Dans quelle plateforme/environnement travaillez-vous? –

+2

@mmsmatt: est-ce important?Cela ressemble plus à une question d'algorithme/formule mathématique. Comment pouvez-vous passer des coordonnées décimales aux heures-minutes-secondes N/S et E/W notation. –

+0

@GregS: À droite, la conversion décimale -> hms est une question de formule. Mais ajouter un nom de ville ressemble à quelque chose d'autre. –

Répondre

2

Pour convertir le 51.501690392607, prenez d'abord la partie entière sur 51 degrés. Les valeurs positives sont nord; Les négatifs sont au sud.

Ensuite, prenez la partie fractionnaire: ,501690392607

Multiplier par 60: 60 * ,501690392607 = 30,10142355642

Prenez la partie entière pendant 30 minutes.

Ensuite, prenez la partie fractionnaire: ,10142355642

Multiplier par 60: 6,0854133852

ronde au plus proche 1 pour les secondes.

Vous sortez avec: 51 degrés Nord 30 minutes 6 secondes. Pour la direction Est/Ouest, répétez avec Est positif et Ouest négatif.

Pour trouver la ville, vous devrez utiliser une base de données ou quelque chose ...

Je ne sais pas pourquoi votre conversion ne semble pas correspondre.

2

La conversion de base entre les deux représentation peut se faire comme ceci:

// to decimal 
decimal = degree + minutes/60 + seconds/3600; 

// from decimal 
degree = int(decimal) 
remaining = decimal - degree 
minutes = int(remaining*60) 
remaining = remaining - minutes/60 
seconds = remaining*3600 
1

Pour convertir un nombre fractionnaire de degrés en degrés et minutes, en pseudocode:

degrees = int(frac) 
minutes = int((frac - degrees) * 60) 

pour convertir « négatif "numéros dans" S "et" W "(vs" N "et" E ") respectivement, utilisez" si ".

Juste pour rendre le fichier exécutable de pseudo-code, nous pourrions utiliser Python ...:

def translate(frac, islatitude): 
    if islatitude: decorate = "NS" 
    else: decorate = "EW" 
    if frac < 0: 
     dec = decorate[1] 
     frac = abs(frac) 
    else: 
     dec = decorate[0] 
    degrees = int(frac) 
    minutes = int((frac - degrees) * 60) 
    return "%d %d %s" % (degrees, minutes, dec) 

Ainsi, par exemple:

print translate(51.501690392607, True), 
print translate(-0.126342773437, False) 

émettraient

51 30 N 0 7 W 

La décoration (degrés et minutes) dépend de la prise en charge du jeu de caractères de votre périphérique de sortie - et des 7 à 5 minutes d'arc pour le W coor Dinate semble être le bon résultat pour les nombres d'entrée que vous donnez.