python使用geopy包提取城市经纬度及计算距离矩阵

本文介绍了如何利用geopy库在Python中提取发货城市的经纬度,并计算城市间的距离矩阵,为物流调度的路径推荐算法提供数据准备。首先,通过pandas读取城市信息,然后使用geopy的Nominatim地理编码器获取坐标,接着计算所有城市两两之间的距离,最后将结果保存为Excel文件供后续使用。
摘要由CSDN通过智能技术生成

      在做物流调度问题时,我们想要知道供应商发货城市的地理坐标及距离矩阵,为路径推荐算法模型做数据准备工作,这里记录一下怎么使用geopy包提取城市经纬度及计算距离矩阵。

一、读取城市名称

          首先使用pandas包读取城市名称

import pandas as pd
df=pd.read_excel(r"C:\Users\zyy\Desktop\发货城市整理.xlsx")
df.head()   #打印前五行

       将数据读入变成dataframe格式,前五行打印出来结果如下:

二、根据城市名称提取经纬度坐标

        我们需要对城市这一列提取经纬度坐标,借助python包geopy可以轻松实现经纬度地理位置转换,使用geopy.geocoders的Nominatim地理编码器,分别提取出经度、纬度以及经纬度坐标。

from geopy.geocoders import Nominatim
gps = Nominatim(user_agent='myuseragent')
loc_list_x=[]
loc_list_y=[]
coord=[]
for i in list(df['城市']):
    location = gps.geocode(i)
    loc_list_x.append(location.longitude)
    loc_list_y.append(location.latitude)
    coord.append((location.latitude,location.longitude))
df['经度']=loc_list_x
df['维度']=loc_list_y
df['坐标']=coord
df.head()  #打印前五行

       前五行结果如下所示:

需要注意,gps = Nominatim(user_agent='myuseragent')这一行一定要写入user_agent='myuseragent',否则可能会报错。

三、计算距离矩阵

       提供两个地理位置的坐标,geopy可以提供几个模型来计算他们之间的距离,默认选择WGS-84 模型,距离误差最高在0.5%左右,可以选择公里、英里等距离单位输出。我们希望计算出城市两两之间的距离并以矩阵的形式输出,具体实现代码如下:

from geopy.distance import distance
rr=np.zeros([len(coord),len(coord)])
for i in range(len(coord)):
    for j in range(len(coord)):
        arr[i,j]=distance(coord[i],coord[j]).km
dis_matrix=pd.DataFrame(arr,index=list(df['城市']),columns=list(df['城市']))

     部分距离矩阵结果如下所示:

四、数据存储输出

         将发货城市坐标和距离矩阵以excel表格形式存储并输出 

df.to_excel('发货城市地理位置.xlsx')
dis_matrix.to_excel('发货城市距离矩阵.xlsx')

最终xlsx结果:

  1)发货城市地理位置: 

2)发货城市距离矩阵:

 完整代码:

# -*- coding:utf-8 -*- 
import pandas as pd
from geopy.geocoders import Nominatim
from geopy.distance import distance
import numpy as np
gps = Nominatim(user_agent='myuseragent')
df=pd.read_excel(r"C:\Users\zyy\Desktop\发货城市整理.xlsx")

loc_list_x=[]
loc_list_y=[]
coord=[]
for i in list(df['城市']):
    location = gps.geocode(i)
    loc_list_x.append(location.longitude)
    loc_list_y.append(location.latitude)
    coord.append((location.latitude,location.longitude))
df['经度']=loc_list_x
df['维度']=loc_list_y
df['坐标']=coord

arr=np.zeros([len(coord),len(coord)])
for i in range(len(coord)):
    for j in range(len(coord)):
        arr[i,j]=distance(coord[i],coord[j]).km
dis_matrix=pd.DataFrame(arr,index=list(df['城市']),columns=list(df['城市']))
df.to_excel('发货城市地理位置.xlsx')
dis_matrix.to_excel('发货城市距离矩阵.xlsx')

完整代码及数据均以上传至我的资源——geopy提取坐标&计算距离矩阵,需要的同学自行下载。

有问题欢迎随时学习交流!

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhugby

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值