利用高德地图API获取任意两座城市之间的距离

   日期:2020-11-11     浏览:237    评论:0    
核心提示:利用高德地图API获取任意两座城市之间的距离这是我的第一篇博客,给大家分享我做的一个项目。可以用高德地图API获取任意两座城市之间的距离。获取后会自动导出到csv文档里。我希望获得北京、上海、广州、深圳这四座城市,任意两座城市组合之间的距离,只要把这四座城市放到loc这个列表变量里就可以。如果要获得其他城市之间的距离,修改loc即可。代码原文如下:import requestsfrom geopy.distance import geodesicimport csvloc = ["北京","

利用Python爬虫和高德地图API获取任意两座城市之间的距离

工作中有时会遇到这样一种场景:年末需要统计所有员工该年的航旅出差情况,然后根据他们的飞行距离补贴一定的交通费。例如如下所示情况:

然而,如果我们使用地图APP等工具逐一进行手工查询,在一家规模稍大的公司,成百上千条数据便很容易让人崩溃。

此时,便需要一种能够批量获取多座城市的位置信息以及他们之间的距离信息的方法。

这里分享一种利用Python爬虫和高德地图API批量获取信息并自动导出到CSV格式文件的做法:

代码原文如下:

import requests
from geopy.distance import geodesic
import csv

''' 例如,我希望获得北京、上海、广州、深圳这四座城市, 任意两座城市之间的距离,以及他们相应的经纬度。只要 把这四座城市的名称放到loc这个列表变量里就可以。如 果要获得其他城市之间的距离,修改loc即可。 '''

loc = ["北京","上海","广州","深圳"]

# 利用高德地图API需要提供key,可以在官网上申请
key = '2ff259313e2a44392d570d5534358105'

# 获取某地的经纬度
def getCoordinate(city):
    url= 'https://restapi.amap.com/v3/geocode/geo?parameters?key='+str(city)+'&address='+str(city)+'&key='+str(key)
    response = requests.get(url)
    answer = response.json()
    location = str(answer["geocodes"][0]["location"]).split(",")
    return location

# 获取两城市之间的距离信息
def calDistance(place1,place2):
    coor1 = getCoordinate(place1)
    coor2 = getCoordinate(place2)
    distance = geodesic(coor1[::-1],coor2[::-1]).km
    return distance

# 创建一个CSV文件以存储信息
csv_file = open('城市距离.csv','w',newline='')
csv_writer = csv.writer(csv_file)
csv_writer.writerow(['城市一','城市二',
                    '城市一经度','城市一纬度',
                    '城市二经度','城市二纬度',
                    '距离(公里)'])
for i in loc:
    for j in loc[loc.index(i)+1:]:
        csv_writer.writerow([i,j,
                            getCoordinate(i)[0],getCoordinate(i)[1],
                            getCoordinate(j)[0],getCoordinate(j)[1],
                            calDistance(i,j)])
csv_file.close()

导出到csv结果如下:

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服