繁体   English   中英

在 python3.x 中使用 haversine 公式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM