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

  1. Python爬取全国主要城市经纬度坐标

    1.首先注册百度或高德地图的开发密钥. 2.在Python搞爬虫,你可能需要这几个库,json,urllib,直接pip就行. import json from urllib.request impo ...

  2. python:osmnx包下载城市路网数据

    OSMnx 是一个可从 OpenStreetMap 下载地理空间数据的软件包,并对真实世界的街道网络和任何其他地理空间几何进行建模.投影.可视化和分析.但是这个包在使用时遇到了一些让人头疼的问题,在这 ...

  3. python城市提取_使用python从文本中提取城市名称

    我有一个数据集,其中一个列的标题是"您的位置和时区是什么?" 这意味着我们有像丹麦,CET 地点是英国德文郡,GMT时区 澳大利亚.澳大利亚东部标准时间.+协调世界时10小时. 甚 ...

  4. 球面距离计算方式(杭州到各城市的球面距离计算球面距离)

     1)杭州到各城市的球面距离 1.数据来源:自主计算 2.时间跨度:至今 3.区域范围:368个城市 4.指标说明:利用城市经纬度,计算球面距离 部分数据如下: (2)计算两个点之间的球面距离 1. ...

  5. python绘制简单城市剪影图_利用Python的folium包绘制城市道路图的实现示例

    写在前面 很长一段时间内,我都在研究在线地图的开发者文档,百度地图和高德地图的开发者中心提供了丰富的在线地图服务,虽然有一定的权限限制,但不得不说,还是给我的科研工作提供了特别方便的工具,在博客前面我 ...

  6. python对城市规划_Python对城市距离自动化爬取【必学小型项目】

    本地创建数据库,将 excel 数据存储到 city 表中,再取 | 湖北省 | 的所有地级市和县.县级市.区数据作为样表数据记录在样表中.利用 python 的 xlrd 包,定义 process_ ...

  7. python随机生成车牌_使用Python自动化获取全国每个城市的车牌代码

    最近有这样一需求,需要获取12123交管查询网站上的全国每个城市对应的城市id和车牌代码.最初的想法是直接用Python写个爬虫,遍历每个城市,然后用Xpath提取DOM节点数据就好了.然而在实际操作 ...

  8. python+百度地图 实现地址转换为经纬度(全网最简单方法)

    python+百度地图实现地址转换经纬度 前期准备 安装requests包 在百度地图开放平台申请AK 接下来进入正题 首先, AK使用方法 最后,上代码 前期准备 首先安装需要的库,requests ...

  9. 人口普查分析:利用python+百度文字识别提取图片中的表格数据

    今天发布了最新的人口普查结果,笔者拿到的文件是pdf格式(网上应该有).之前就一直想实现从pdf提取表格数据,输出为excel.正好这次有公开数据,因此打算用来练个手. 尝试了两种方法: 1.pyth ...

最新文章

  1. python xlrd读取excel所有数据_python读取excel进行遍历/xlrd模块操作
  2. vscode: Visual Studio Code 常用快捷键
  3. STM32库中几个重要的文件说明
  4. 面对不可避免的故障,我们造了一个“上帝视角”的控制台
  5. json格式输出数组隐藏键值方法
  6. lombok(@Getter@Setter)
  7. 方法重写(重点)-->多态
  8. 口琴膜片什么作用_新手怎么学口琴?
  9. 微服务升级_SpringCloud Alibaba工作笔记0017---Nacos之服务消费者注册和负载
  10. centos 6.5下安装fpm打包工具
  11. 用友u8数据库表结构
  12. Tableau Desktop 2021中文免费版下载(包含其它历史版本)
  13. 微信小程序开发校园论坛网站+后台
  14. 银行 结算 清分清算 对账
  15. 前端面试题集锦——前端综合问题
  16. AngularJS之有序列表
  17. Python Selenium:键盘鼠标操作
  18. CVS 常用操作命令
  19. 《AI算法工程师手册》
  20. 毫米波雷达前装市场“爆发”,新旧势力“角力”加剧

热门文章

  1. 网络-----各种协议等
  2. (附源码)计算机毕业设计SSM音乐推荐系统
  3. 人生苦短,我学Python-008:程序设计方法学
  4. EdgeView 2 for Mac(图像查看器)
  5. arcgis利用栅格计算器修改DEM高程数据
  6. 如何解释 Minitab 运行图的主要结果?
  7. 学习笔记-Matlab算法篇-规划算法
  8. 51单片机 SPI协议通信
  9. Spine3.8.75学习版打开不同版本骨架.skel的方法
  10. iPhone安装软件