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)