程序简介
程序封装了两个函数
一、调用百度地图的API来获得地点的经纬度
二、调用python的geopy模块来计算两个经纬度的直线距离
输入:地点名称
输出:经纬度、直线距离
程序/数据集下载
代码分析
申请百度地图API(懒得申请可以直接点击上面的下载地址,里面有我个人的应用)
进入网站http://lbsyun.baidu.com/apiconsole/key登录后进入控制台创建应用,点击应用可以看到应用的AK和SK码
导入模块、填写AK、SK码
# -*- coding: utf-8 -*-
from geopy.distance import geodesic
import urllib.parse
import hashlib
import requests
ak = "xxxxxxxxxxx"#百度地图ak码
sk = "xxxxxxxxxxx"#百度地图sk码
getCoordinate函数可以根据地名来获得对应经纬度,这里拿秦皇岛做测试
def getCoordinate(address):
'''
输入地址输出坐标(经度,维度)
address:城市名
'''
#产生sn码
queryStr = "/geocoder/v2/?address="+address+'&output=json&ak='+ak
encodedStr = urllib.parse.quote(queryStr, safe="/:=&?#+!$,;'@()*[]")
rawStr = encodedStr+sk
sn = (hashlib.md5(urllib.parse.quote_plus(rawStr).encode("utf8")).hexdigest())
#生成url
url = urllib.parse.quote("http://api.map.baidu.com"+queryStr+"&sn="+sn,safe="/:=&?#+!$,;'@()*[]")
result = requests.get(url).json()
coordinate = (result['result']['location']['lng'],result['result']['location']['lat'])
return coordinate
print('秦皇岛经纬度',getCoordinate('秦皇岛'))
秦皇岛经纬度 (119.60853063334328, 39.941748102377936)
calDistance函数可以根据两地名来获得对应其直线距离,其中需要调用到上面的getCoordinate函数来获取坐标,这里拿北京、秦皇岛做测试
def calDistance(place1,place2):
'''
输入两个地点名,输出直线距离(米)
place1:地点1
place2:地点2
'''
coor1 = getCoordinate(place1)#经纬度1
coor2 = getCoordinate(place2)#经纬度2
#这里输入纬度在前,经度在后,所以做一下反转
distance = geodesic(coor1[::-1],coor2[::-1]).m#距离(米)
return distance
distance = calDistance("北京市","秦皇岛市")
print("秦皇岛、北京距离约为%d米"%distance)
秦皇岛、北京距离约为273145米