IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python使用geopy包提取城市经纬度及计算距离矩阵 -> 正文阅读

[Python知识库]python使用geopy包提取城市经纬度及计算距离矩阵

? ? ? 在做物流调度问题时,我们想要知道供应商发货城市的地理坐标及距离矩阵,为路径推荐算法模型做数据准备工作,这里记录一下怎么使用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提取坐标&计算距离矩阵,需要的同学自行下载。

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

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-07-20 18:47:30  更:2022-07-20 18:48:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 12:07:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码