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

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

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

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

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

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

代码原文如下:

import requests
from geopy.distance import geodesic
import csv

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

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

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

# 获取某地的经纬度
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结果如下:
在这里插入图片描述

  • 8
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
请查看以下代码示例,这是使用高德地图API获取两个经纬度之间的路线公里数的示例代码: ```java import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; public class AmapApiExample { public static void main(String[] args) throws UnsupportedEncodingException { // 高德地图API的Web服务Key String apiKey = "你的高德地图API Web服务Key"; // 出发点的经纬度 String origin = "116.481028,39.989643"; // 目的地的经纬度 String destination = "116.434446,39.90816"; // 根据高德地图API的规定,将参数进行URL编码 String encodedOrigin = URLEncoder.encode(origin, "UTF-8"); String encodedDestination = URLEncoder.encode(destination, "UTF-8"); // 构造请求URL String url = "https://restapi.amap.com/v3/distance?origins=" + encodedOrigin + "&destination=" + encodedDestination + "&key=" + apiKey; // 发送HTTP请求,获取响应内容 OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder().url(url).build(); Response response = null; try { response = client.newCall(request).execute(); } catch (IOException e) { e.printStackTrace(); } // 解析响应内容,获取路线距离 if (response != null && response.isSuccessful()) { try { String responseString = response.body().string(); JSONObject responseJson = JSON.parseObject(responseString); JSONArray results = responseJson.getJSONArray("results"); if (results != null && !results.isEmpty()) { JSONObject result = results.getJSONObject(0); if (result != null) { int distance = result.getInteger("distance"); System.out.println("路线距离为:" + distance + "米"); } } } catch (IOException e) { e.printStackTrace(); } } } } ``` 请将代码中的`apiKey`替换为你自己申请的高德地图API Web服务Key,`origin`和`destination`替换为你要计算路线的两个经纬度,然后运行程序即可获取路线的公里数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值