代码来源:zhugby的python使用geopy包提取城市经纬度及计算距离矩阵
我自己跑的时候发现有一点点报错,也有人有一样的错误,所以分享一下,感谢zhugby的分享- #没有安装的话需要安装一下
- pip install geopy
- # 导入pandas模块
- import pandas as pd
- # 读入城市数据
- df=pd.read_excel(r"你的文件")
- df.head() #打印前五行
- # 使用geopy模块获取城市的经纬度坐标
- from geopy.geocoders import Nominatim
- import time
- 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))
- time.sleep(2) # 暂停2秒钟
- df['经度']=loc_list_x
- df['维度']=loc_list_y
- df['坐标']=coord
- df.head() #打印前五行
- # 计算城市之间的空间距离
- from geopy.distance import distance
- import numpy as np
- 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['城市']))
- print(dis_matrix.head()) #打印前五行
- # 将结果写入文件
- df.to_excel('空间距离坐标.xlsx')
- dis_matrix.to_excel('空间距离矩阵.xlsx')
准备一个你需要的所有城市的excel,利用geopy模块获取每个城市的经纬度坐标,然后计算城市之间的空间距离,并将结果写入两个Excel文件中。
之前说的报错就是在获取城市经纬度的时候报错HTTPSConnectionPool(host='nominatim.openstreetmap.org', port=443),搜了一下,看到说虽然nominatim是免费的,但是每秒最多一个请求,所以在每次循环中暂停了2秒(我试了1秒还是报错,所以增加成2秒,虽然时间久一点)
也可以去看下zhugby的原分享,有图片更直观
___________更新:有问题各位,好像相同读音的会串,比如佛山的坐标会识别成釜山,还不知道咋弄


雷达卡




京公网安备 11010802022788号







