本文介紹了一個名為 Geopy 的 Python 庫。這是一個地理編碼包

什麼是地理編碼?

Geopy 是用於地理編碼的許多流行 Web 服務的 Python 客戶端,它使 Python 開發人員可以輕鬆查找地址、城市和國家坐標,反之亦然。

使用第三方地理編碼器和其他數據源來查找全球地址、城鎮、大陸和地標的坐標。

地理編碼是一種將位置定義(例如物理地址或地名)轉換為地球表面該位置的緯度-經度對的方法。

企業應用程序的地理編碼服務

市場上有許多地理編碼服務。 我已經嘗試過 Geocode API,它非常適合企業應用程序。有多個端點可用於從地址、反向地理編碼和自動完成地址中檢索緯度和經度。

我們每天提供 10,000 個免費請求。如果您剛剛開始創建應用程序,這非常棒。您可以從此頁面獲取有關其功能和價格的更多詳細信息。

安裝

Geopy 已準備好安裝和使用。

pip install geopy

將此包與其他一些重要包一起導入。

from geopy.geocoders import Nominatim
import pandas as pd

創建一個新的用戶代理

按名字 按名稱和地址(地理編碼)搜索 OpenStreetMap 數據的工具。

OpenStreetMap 是世界地圖,由互聯網上的人們創建的開源軟件。因此,創建一個新的 API 對象來訪問 nominatim 客戶端。

app = Nominatim(user_agent="JournalDev")

顯示區域位置

現在,無論您身在何處,都可以獲取位置詳細信息。您可以使用您創建的應用程序客戶端訪問它。

location = app.geocode("Kolkata, India")
location

這將為您提供以下輸出:

Location(Kolkata, Howrah, West Bengal, 711101, India, (22.5414185, 88.35769124388872, 0.0))

您可以獲取字典並將其用作數據框。

但是,由於某種原因,將字典轉換為數據幀會產生一些假元組,因此您需要執行以下操作:

location = app.geocode("Kolkata, India").raw
pd.DataFrame(location).head(1)

這給了我們:

Geopy 輸出位置坐標

自動獲取地址列表

因此,您可以為每個地址一次執行此操作,但大型機構通常需要一次獲取數千個地址。

創建地址列表:

address_list = ['Goregaon, Mumbai', 'Kota, Rajasthan','New York', 'Alaska']
#add more as you wish

然後運行循環。通常,由於服務器崩潰,openstreetmap api 不允許機器人持續訪問數據。因此,您需要設置一個等待計時器以避免錯誤。

for address in address_list:
  try:
    time.sleep(1)
    loc = app.geocode(address).raw
    df = df.append(loc, ignore_index=True)
  except Exception as e:
    print(e)

這會將數據添加到原始數據框中。

Geopy 輸出位置坐標列表

逆搜索坐標

用戶還可以反向搜索坐標對(十進制度)。

app.reverse((37.234332396,-115.80666344), language="hi").raw

給我們(用您選擇的語言):

Geopy 印地語Geopy 印地語

尋找距離

您可以使用以下方法查找兩個位置之間的距離(以公里或英里為單位)。

from geopy.distance import geodesic
kolkata = (df['lat'][0],df['lon'][0])
goregaon = (df['lat'][1],df['lon'][1])
print("In kms : ",geodesic(kolkata,goregaon).km)
print("In miles : ",geodesic(kolkata,goregaon).miles)

這給了我們:

公里數:1655.7023089773734

里程:1028.805717719377

書末附註

如果您喜歡閱讀本文並想閱讀更多內容,請以作者身份關注我。在那之前,繼續編碼。