如何在Python中将纬度和经度从十进制度转换为度,分和秒

时间:2017-09-08 22:51:09

标签: python

我想知道是否有人知道此代码将十进制度数转换为度数,分钟和秒数有什么问题:

while True:

latitude = float(input("Enter a Decimal Degree latitude: "))
print(latitude)
longitude = float(input("Enter a Decimal Degree longitude: "))
print(longitude)

print("Result: ")

deg = int(latitude)
min = int((latitude - deg) * 60)
sec = ((latitude - deg) * 60) - min
DMS = str(deg) + u"\u00b0" + str(min) + "'" + str(sec) + "'' "
for latitude in range(-90, 90):
    if latitude < 0:
        direction = "S"
    elif latitude > 0:
        direction = "N"
print(DMS + direction)

deg = int(longitude)
min = int((longitude - deg) * 60)
sec = ((longitude - deg) * 60) - min
DMS = str(deg) + u"\u00b0" + str(min) + "'" + str(sec) + "'' "
for longitude in range(-180, 180):
    if longitude < 0:
        direction = "W"
    elif longitude > 0:
        direction = "E"
print(DMS + direction)

while True:
    another = input("Shall this program run another conversion? (Y/N)")
    if another in ("Y", "N"):
        break
    print("This question needs a proper answer.")
if another == "Y":
    continue
elif another == "N":
    break

它一直超出纬度和经度值的限制。可能有什么不对?

1 个答案:

答案 0 :(得分:0)

因此,当您输入的值高于纬度或经度的正常范围时,可能会出现问题。例如,如果用户以经度进入200度,他们将获得200度0分0秒但你希望它返回-20度0分0秒,因为它缠绕在日期线上。您需要在代码中实现该行为,如下所示:

limited_longitude = (longitude + 180.0) % 360.0 - 180.0
deg = int(limited_longitude)
min = int((limited_longitude - deg)*60)
...

在上面的代码中,%是模数运算符,它在除法后得到余数,例如380 % 360 = 20。由于经度是-180到180,你必须将整个事物前后移动180度以获得正确的效果。

您需要为纬度找出类似的逻辑。