2.1 Geopy 库介绍

这里介绍一个Python 包 Geopy ,借助它也可以实现经纬度地理位置转换,

这款包之经纬度转换原理其实还是借助了第三方 API 平台,因为市面上提供经纬度转换 第三方平台很多,为了方便, Geopy 把这些接口都分别封装在一个类中,借助 Geopy 模块来调用,支持的第三放平台如下

Geopy作为一个专注于地理处理包之外, 除了能实现上面 地理编码 逆地理编码 功能之外,还有一个其它令我经验的功能, 提供两个经纬度坐标,计算他们在地球上的最短距离

下面将介绍一下 Geopy 的具体用法,

2. 2 地理编码

使用 地理编码 功能时,需要借助 Geopy 的 geocoders 模块,Geopy 把所有第三方API封装到 geocoders 中

这里选用 OpenStreetMap 平台上提供的 Nominatim 地理编码器,因为可以免费供我们使用,不需要申请 API ,但缺点是限流,限额,不能大规模频繁访问,否则会返回 403,429错误代码

from geopy.geocoders import Nominatim
geolocator=Nominatim()
location= geolocator.geocode("北京市海淀区西二旗北路")
print(location.address)
print(location.latitude,location.longitude)
西二旗北路, 东北旺村, 海淀区, 北京市, 102208, 中国
40.056793 116.305811

2.3 逆地理编码

from geopy.geocoders import Nominatim
geolocator=Nominatim()
location= geolocator.reverse("40.056793 116.305811")
print(location.address)
1#, 西二旗北路, 东北旺村, 海淀区, 北京市, 102208, 中国

结果看起来还不错,简单方便;但提醒一下,因为前面说过 Nominatim 模块是限额度的,不要频繁访问,否则会出现以下错误

2.4 根据经纬度计算距离

Geopy 最让我惊喜的是这个用法,提供两个经纬度坐标计算他们之间的距离,因为地球具体来说是椭圆,所以不能按照常规方法来计算 ,目前现有比较流行的几个模型有以下几个

              model             major (km)   minor (km)     flattening
ELLIPSOIDS = {'WGS-84':        (6378.137,    6356.7523142,  1 / 298.257223563),
              'GRS-80':        (6378.137,    6356.7523141,  1 / 298.257222101),
              'Airy (1830)':   (6377.563396, 6356.256909,   1 / 299.3249646),
              'Intl 1924':     (6378.388,    6356.911946,   1 / 297.0),
              'Clarke (1880)': (6378.249145, 6356.51486955, 1 / 293.465),
              'GRS-67':        (6378.1600,   6356.774719,   1 / 298.25),

根据官方介绍,官网选择的是 WGS-84 模型,根据统计最终计算到的距离误差最高在0.5%左右;使用方法如下

from geopy import distance
newport_ri = (41.49008, -71.312796)
cleveland_oh = (41.499498, -81.695391)
print(distance.distance(newport_ri, cleveland_oh).miles)#最后以英里单位输出
#output
538.39044536
wellington = (-41.32, 174.81)
salamanca = (40.96, -5.50)
print(distance.distance(wellington, salamanca).km)# 以 km 作为单位输出
19959.6792674
                    2,Geopy2.1 Geopy  库介绍这里介绍一个Python 包 Geopy ,借助它也可以实现经纬度地理位置转换,这款包之经纬度转换原理其实还是借助了第三方 API 平台,因为市面上提供经纬度转换 第三方平台很多,为了方便, Geopy 把这些接口都分别封装在一个类中,借助 Geopy 模块来调用,支持的第三放平台如下Geopy作为一个专注于地理处理包之外, 除了能实现上面地理编码、逆地理编码功能之外,还有一个其它令我经验的功能, 提供两个经纬度坐标,计算他们在地球上的最短距离下面将介.
				
中文领域: 指的是提取境内地址的经纬度,的主要调用的是百度API。中间经历了一些波折,刚开始直接使用网上代码debug半天都不行,才发现要随时跟进官方改动,使用别人的API一定要看说明书啊! 首先需要从百度地图平台上注册一个AK(在这之前要注册百度的开发者身份,免费),进入其地理编码网址: http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding 由于我们是要从地址转换经纬度,因此看地理编码就可以了。 官网给出了服务文档(千万要看),因为爬取地址时需要提供url,这个url必须和官方提供的一致
一、geopy 简介及安装 可以使用geopy来查询地址,国家,城市,地标,geopy使用的是第三方的geo解析器(包括谷歌地图,必应地图,Nominatim等)和一些数据源来获取地理信息。 安装 geopy: pip3 install geopy 二、geopy 使用 1、从地址字符串获取 Location 对象 也就是将字符串转换为地理位置。 # coding=utf-8 from geo...
您可以使用 geopy 中的 geocode 函数来获取地址的经纬度信息,然后使用逆地理编码来获取地址信息。具体可以参考下面的代码示例: from geopy.geocoders import Nominatim geolocator = Nominatim(user_agent="my_application") location = geolocator.geocode("北京市海淀区中关...
# 计算平面坐标 x = R * math.cos(lat_rad) * math.cos(lon_rad) y = R * math.cos(lat_rad) * math.sin(lon_rad) return (x, y) lat = 39.9042 lon = 116.4074 x, y = convert_to_plane_coord(lat, lon) print("经度:", lon) print("纬度:", lat) print("平面坐标:", x, y) 希望能对你有所帮助。
“basetsd.h”: No such file or directory,LINK : fatal error LNK1158: 无法运行“rc.exe”报错 ax一号街阿楠: 厉害,找了五六个小时终于解决了 TCGA数据库的利用(三)—做差异分析的三种方法 xiaoying123_: 引用「把表达矩阵内为0的数据赋值为1」 那不就和矩阵中原本为1的混在 一起了吗 人脸融合技术,用 Python - OpenCV 来帮你实现 不用也行,就是效果一般