python实现根据经纬度计算距离


import math
from math import pi, sin, cos

addresses = [118.746795, 32.028986, 118.744657, 32.02933]
EARTH_REDIUS = 6378.137

def rad(d):
    return d * pi / 180.0

def getDistance(lat1, lng1, lat2, lng2):
    """ 根据两地的经纬度,计算对应的距离km"""
    radLat1 = rad(lat1)
    radLat2 = rad(lat2)
    a = radLat1 - radLat2
    b = rad(lng1) - rad(lng2)
    s = 2 * math.asin(math.sqrt(math.pow(math.sin(a / 2), 2) + math.cos(radLat1) * cos(radLat2) * math.pow(sin(b / 2), 2)))
    s = s * EARTH_REDIUS
    return s

题外话:根据地址,获取对应的经纬度。

Key的获取方式:百度地图开放平台  控制台 --> 应用管理 --> 我的应用 --> 创建应用(成功后返回会获得 【访问应用(AK)】及Key)

API:web端的api

import geocoder

Key = "kKLSYO6Xoxlb****1Bbilr8A6ijHp6Pz"

import hashlib
import http
import json
from urllib import parse

import requests


def get_url(address):
    # http://api.map.baidu.com/geocoder/v2/?address=你的地址&output=json&ak=你的ak
    queryStr = f'/geocoder?address={address}&output=json&ak={Key}'
    # 对queryStr进行转码,safe内的保留字符不转换
    encodedStr = parse.quote(queryStr, safe="/:=&?#+!$,;'@()*[]")
    # 在最后直接追加上sk
    rawStr = encodedStr + '你的sk'
    # 计算sn
    sn = (hashlib.md5(parse.quote_plus(rawStr).encode("utf8")).hexdigest())
    # 由于URL里面含有中文,所以需要用parse.quote进行处理,然后返回最终可调用的url
    url = parse.quote("http://api.map.baidu.com" + queryStr + "&sn=" + sn, safe="/:=&?#+!$,;'@()*[]")

    return url

def get_Location(url):
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36 Edg/88.0.705.74',
               'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',}
    data = requests.get(url, headers=headers).json()
    coordinate = data['result']['location']
    return coordinate

if __name__ == '__main__':
    while True:
        address = input('请输入您要查询的地址:')
        if address.__eq__(''):
            print("请输入地址!")
            continue
        url = get_url(address)
        print(url)
        coordinate = get_Location(url)
        lng = coordinate['lng']
        lat = coordinate['lat']
        print(coordinate)

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM