2010-04-25 170 views
3

如何从这些数字计算:如何转换经纬度?

51.501690392607,-0.1263427734375 

纬度和经度?

应该

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

你在哪个平台/环境中工作? – 2010-04-25 19:17:53

+2

@mmsmatt:这很重要吗?看起来更像是一个算法/数学公式问题。你怎么能从十进制坐标到小时 - 分钟秒N/S和E/W表示法。 – 2010-04-25 19:20:17

+0

@GregS:对,十进制 - > hms转换是一个公式问题。但是附加一个城市名称看起来好像还有其他内容。 – 2010-04-25 19:23:15

回答

2

要转换51.501690392607,先取的整数部分为51度。正值是北;底片是南方。

然后取小数部分:0.501690392607

乘以60:60 * 0.501690392607 = 30.10142355642

取整数部分30分钟。

然后取小数部分:0.10142355642

乘以60:6.0854133852

回合为秒最接近的1。

你拿出来:51度北30分6秒。

对于东/西的方向,重复与东正和负的西部。

要找到城市里,你将不得不使用一些数据库或东西...

我不知道为什么你的转换似乎并不匹配。

2

两个表示之间的基本转换可以做这样的:

// 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

向度的分数转换成度和分,在伪代码:

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

转换“负“数字分别写入”S“和”W“(与”N“和”E“),使用”if“。

只是为了让伪代码可执行文件,我们可以使用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) 

因此,例如:

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

会发出

51 30 N 0 7 W 

装饰(度和分钟符号)取决于输出设备的字符集支持 - 以及W coor的7 vs 5弧分dinate似乎是您输入数字的正确结果。