python中有许多关于经纬度转换的库,这其中有一个比较常用的库是
geopy
geopy简单介绍
geopy是几个流行的地理编码web服务的Python客户端实现。
geopy使python开发人员能够使用第三方地理编码程序和其他数据源轻松定位全球各地的地址、城市、国家和地标的坐标。
geopy是一个开源的项目;
项目地址:源代码
官方文档: 文档地址
Geopy作为一个专注于地理处理包之外, 除了能实现地理编码、逆地理编码功能之外,还可以通过提供两个经纬度坐标,计算他们在地球上的最短距离,球面距离等;
geopy的使用
首先需要确保安装了python,geopy不是内置库,使用前需要进行安装;
安装geopy
安装方式推荐有很多种,推荐使用pip;
pip 是 Python 的包安装程序。其实,pip 就是 Python 标准库(The Python Standard Library)中的一个包,只是这个包比较特殊,用它可以来管理 Python 标准库(The Python Standard Library)中其他的包。pip 是一个命令行程序。 安装 pip 后,会向系统添加一个 pip 命令,该命令可以从命令提示符运行。
如何安装pip:
- 安装python; 这个是必须安装的;
下载pip:
> 官网地址:https://pypi.org/project/pip/#downloads; 下载完毕后,解压
打开命令行窗口,进入到pip解压后的目录;执行代码
python3 setup.py install
进行安装,
安装完成后,将pip加入到系统环境变量中
- 验证
打开命令行窗口,输入pip list 或者pip3 list
以上只针对于windows系统,其他系统也可以参考;
执行安装命令:
打开命令行窗口,输入执行以下代码,并回车pip install geopy
等待提示第三库安装成功既可;
安装完成后,导入geopy,只需要输入
import geopy
功能案例:
地理编码,根据地址查询坐标及详细信息
import json from geopy.geocoders import Nominatim def location_geocode(self,address): geolocator = Nominatim(user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.90 Safari/537.36") # 放ua # 根据地址查相关信息 location = geolocator.geocode(address) print(json.dumps(location.raw,indent=4,ensure_ascii=False))
以上函数需要输入一个地址参数,通过OpenStreetMap 平台上提供的 Nominatim 地理编码器获取地址详细信息;
为方便查看,使用json,dumps方法格式化输出;逆地址编码 根据坐标查地点
import json from geopy.geocoders import Nominatim geolocator = Nominatim(user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.90 Safari/537.36") # 放ua location = geolocator.reverse("31.239853 121.499740") #纬度在前,经度在后 print(location, location.address, location.latitude, location.longitude, location.altitude, location.point, location.raw) print(json.dumps(location.raw, indent=4, ensure_ascii=False))
- 两个经纬度坐标计算距离
计算距离需要使用geopy中的distance对象;
引入
from geopy import distance
调用方式一:
dist = distance.distance((19.90733345,116.191244079988), (11.239853,21.499740)) # 纬度在前、经度在后
print(dist.km) # 距离: km: 千米, m: 米, miles: 英里
调用方式二:
dist = distance.geodesic((39.90733345,116.391244079988), (31.239853,121.499740))
print(dist.km) # 距离: km: 千米, m: 米, miles: 英里
print(dist.m)
两种方式获取到同样的结果;