程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python 之 geopy 用法(已封裝)

編輯:Python

參考: https://blog.csdn.net/Next_Second/article/details/78618081

geopy 是抽象出一系列不同地理編碼服務的API。它使您可以獲得一個地方的完整街道地址,緯度,經度,甚至高度。地理編碼功能時,需要借助 Geopy 的 geocoders 模塊,Geopy 把所有第三方API封裝到 geocoders 中

  • 地理編碼:將字符串轉換為地理位置
  • 逆地理編碼:用於將地理坐標轉換為具體地址
  • 計算兩個點的距離:經緯度距離和球面距離
  • pip install geopy
import json
from geopy import GoogleV3
from geopy.geocoders import Nominatim
from geopy import distance
class Geopy(object):
def location_geocode(self):
'''
地理編碼 根據地址查詢坐標及詳細信息
OpenStreetMap 平台上提供的 Nominatim 地理編碼器,不需要申請 API ,限流,限額,不能大規模頻繁訪問
我的情況:白嫖限速、限次數 非常很
:return:
'''
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("珠穆朗瑪峰") # 根據查相關信息
location = geolocator.geocode("北京市海澱區西二旗北路")
print(location, location.address, location.latitude, location.longitude, location.altitude, location.point, location.raw)
def location_reverse(self):
"""
逆地理編碼 根據坐標查地點
:return:
"""
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("39.90733345 116.391244079988") # reverse 方法接收經緯度字符串作為輸入,緯度在前,經度在後
location = geolocator.reverse("31.239853 121.499740") # reverse 方法接收經緯度字符串作為輸入,緯度在前,經度在後
print(location, location.address, location.latitude, location.longitude, location.altitude, location.point, location.raw)
print(json.dumps(location.raw, indent=4, ensure_ascii=False, encoding='utf8'))
def location_distance(self):
"""
兩個經緯度坐標計算距離: 大圓算法將地球簡化為一個圓球,其計算的距離是球面上過兩點的大圓距離
有點: 大圓距離計算速度快 缺點: 一定的誤差(0.5%以內)
:return:
"""
dist = distance.distance((39.90733345,116.391244079988), (31.239853,121.499740)) # 緯度在前、經度在後
dist = distance.geodesic((45.768189, 126.6212835), (39.907359, 116.3912630)) # 等同上
print(dist.km) # 距離: km: 千米, m: 米, miles: 英裡
def location_great_circle(self):
"""
計算球面距離: 大地線使用目前國際通用的方法,用旋轉橢球面表示地球,其計算的是兩點在橢球面上的最短距離。
優點:精確度高 缺點: 大地線的劣勢在於計算速度太慢
:return:
"""
gc = distance.great_circle((45.768189, 126.6212835), (39.907359, 116.3912630)) # 同樣返回distance對象
print(gc.km) # 距離: km: 千米, m: 米, miles: 英裡
# print(f'{(dist.km - gc.km) / dist.km:%}')
# 哈爾濱到北京的大圓與大地線距離之間有0.13%的差異
def run(self):
# self.location_geocode() # 根據地點查坐標
# self.location_reverse() # 根據坐標查地點
self.location_distance()
self.location_great_circle()
if __name__ == '__main__':
gy = Geopy()
gy.run()

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved