[英]Using haversine formula in python3.x
该测试项目用于演示 Haversine 公式。 它拉取国际空间站的经纬度,并计算出它在0.5秒内行进的距离。 但是,我无法打印变量 dist 的值。 知道如何解决吗?
#!/bin/python3
import json
import turtle
import urllib.request
from time import sleep
from math import radians, cos, sin, asin, sqrt
while True:
url = 'http://api.open-notify.org/iss-now.json'
response = urllib.request.urlopen(url)
result = json.loads(response.read())
time = result['timestamp']
location = result['iss_position']
lat1 = float(location['latitude'])
lon1 = float(location['longitude'])
sleep(.5)
url = 'http://api.open-notify.org/iss-now.json'
response2 = urllib.request.urlopen(url)
result2 = json.loads(response2.read())
time2 = result2['timestamp']
location2 = result2['iss_position']
lat2 = float(location2['latitude'])
lon2 = float(location2['longitude'])
def haversine(lon1, lat1, lon2, lat2):
# convert decimal degrees to radians
lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
# haversine formula
dlon = lon2 - lon1
dlat = lat2 - lat1
a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
c = 2 * asin(sqrt(a))
r = 6371
dist = c * r
print ("dist:",dist)
sleep(.5)
根据@Tim Roberts 和@Grismar 的反馈,我修改了代码并且它起作用了。 这是更新的版本
def haversine(lon1, lat1, lon2, lat2):
# convert decimal degrees to radians
lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
# haversine formula
dlon = lon2 - lon1
dlat = lat2 - lat1
a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
c = 2 * asin(sqrt(a))
r = 6371
return c * r
hav = haversine(lon1, lat1, lon2, lat2)
miles = hav*0.6213712
print ("Distance travelled", miles)
sleep(.5)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.