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['坐标']=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包提取城市经纬度及计算距离矩阵相关推荐
- Python爬取全国主要城市经纬度坐标
1.首先注册百度或高德地图的开发密钥. 2.在Python搞爬虫,你可能需要这几个库,json,urllib,直接pip就行. import json from urllib.request impo ...
- python:osmnx包下载城市路网数据
OSMnx 是一个可从 OpenStreetMap 下载地理空间数据的软件包,并对真实世界的街道网络和任何其他地理空间几何进行建模.投影.可视化和分析.但是这个包在使用时遇到了一些让人头疼的问题,在这 ...
- python城市提取_使用python从文本中提取城市名称
我有一个数据集,其中一个列的标题是"您的位置和时区是什么?" 这意味着我们有像丹麦,CET 地点是英国德文郡,GMT时区 澳大利亚.澳大利亚东部标准时间.+协调世界时10小时. 甚 ...
- 球面距离计算方式(杭州到各城市的球面距离计算球面距离)
1)杭州到各城市的球面距离 1.数据来源:自主计算 2.时间跨度:至今 3.区域范围:368个城市 4.指标说明:利用城市经纬度,计算球面距离 部分数据如下: (2)计算两个点之间的球面距离 1. ...
- python绘制简单城市剪影图_利用Python的folium包绘制城市道路图的实现示例
写在前面 很长一段时间内,我都在研究在线地图的开发者文档,百度地图和高德地图的开发者中心提供了丰富的在线地图服务,虽然有一定的权限限制,但不得不说,还是给我的科研工作提供了特别方便的工具,在博客前面我 ...
- python对城市规划_Python对城市距离自动化爬取【必学小型项目】
本地创建数据库,将 excel 数据存储到 city 表中,再取 | 湖北省 | 的所有地级市和县.县级市.区数据作为样表数据记录在样表中.利用 python 的 xlrd 包,定义 process_ ...
- python随机生成车牌_使用Python自动化获取全国每个城市的车牌代码
最近有这样一需求,需要获取12123交管查询网站上的全国每个城市对应的城市id和车牌代码.最初的想法是直接用Python写个爬虫,遍历每个城市,然后用Xpath提取DOM节点数据就好了.然而在实际操作 ...
- python+百度地图 实现地址转换为经纬度(全网最简单方法)
python+百度地图实现地址转换经纬度 前期准备 安装requests包 在百度地图开放平台申请AK 接下来进入正题 首先, AK使用方法 最后,上代码 前期准备 首先安装需要的库,requests ...
- 人口普查分析:利用python+百度文字识别提取图片中的表格数据
今天发布了最新的人口普查结果,笔者拿到的文件是pdf格式(网上应该有).之前就一直想实现从pdf提取表格数据,输出为excel.正好这次有公开数据,因此打算用来练个手. 尝试了两种方法: 1.pyth ...
最新文章
- python xlrd读取excel所有数据_python读取excel进行遍历/xlrd模块操作
- vscode: Visual Studio Code 常用快捷键
- STM32库中几个重要的文件说明
- 面对不可避免的故障,我们造了一个“上帝视角”的控制台
- json格式输出数组隐藏键值方法
- lombok(@Getter@Setter)
- 方法重写(重点)-->多态
- 口琴膜片什么作用_新手怎么学口琴?
- 微服务升级_SpringCloud Alibaba工作笔记0017---Nacos之服务消费者注册和负载
- centos 6.5下安装fpm打包工具
- 用友u8数据库表结构
- Tableau Desktop 2021中文免费版下载(包含其它历史版本)
- 微信小程序开发校园论坛网站+后台
- 银行 结算 清分清算 对账
- 前端面试题集锦——前端综合问题
- AngularJS之有序列表
- Python Selenium:键盘鼠标操作
- CVS 常用操作命令
- 《AI算法工程师手册》
- 毫米波雷达前装市场“爆发”,新旧势力“角力”加剧