[英]How to get city, state, and country from a list of latitude and longitude coordinates?
我有 500,000 個緯度和經度坐標列表,如下所示:
Latitude Longitude
42.022506 -88.168156
41.877445 -87.723846
29.986801 -90.166314
我希望使用 python 來獲取城市、state 以及新列中每個坐標的國家/地區,如下所示:
Latitude Longitude City State Country
42.022506 -88.168156 Streamwood IL United States
41.877445 -87.723846 Chicago IL United States
29.986801 -90.166314 Metairie LA United States
有了這么大的數據集,如何在 python 中實現? 聽說過Google的API,Nominatim的API,Geopy的package。
如何將所有行都運行到此代碼中? 現在我必須在最后一行手動輸入緯度和經度。
import csv
import pandas as pd
import numpy as np
import math
from geopy.geocoders import Nominatim
input_file = "Lat-Log.csv" # file contains ID, Latitude, Longitude
output_file = "output.csv"
df = pd.read_csv(input_file)
geolocator = Nominatim(user_agent="geoapiExercises")
def city_state_country(coord):
location = geolocator.reverse(coord, exactly_one=True)
address = location.raw['address']
city = address.get('city', '')
state = address.get('state', '')
country = address.get('country', '')
return city, state, country
print(city_state_country("47.470706, -99.704723"))
output 給我('Bowdon'、'North Dakota'、'USA')。 我希望用我的列(緯度和經度)替換坐標以運行我的列表。 如何將我的列輸入到代碼中以運行整個文檔?
您想要在每一行上運行 function,這可以使用apply()來完成。
有兩個並發症,即您想要 1) 向 function 提供多個 arguments,以及 2) 取回多個結果。
這些問題解釋了如何做這些事情:
以下是調整代碼以執行此操作的方法:
import pandas as pd
import io
from geopy.geocoders import Nominatim
geolocator = Nominatim(user_agent="geoapiExercises")
s = """Latitude Longitude
42.022506 -88.168156
41.877445 -87.723846
29.986801 -90.166314"""
df = pd.read_csv(io.StringIO(s), delim_whitespace=True)
def city_state_country(row):
coord = f"{row['Latitude']}, {row['Longitude']}"
location = geolocator.reverse(coord, exactly_one=True)
address = location.raw['address']
city = address.get('city', '')
state = address.get('state', '')
country = address.get('country', '')
row['city'] = city
row['state'] = state
row['country'] = country
return row
df = df.apply(city_state_country, axis=1)
print(df)
(我用 dataframe 的內聯定義替換了您的 read_csv() 調用。忽略它。這對示例並不重要。我這樣做是為了使示例獨立。)
dataframe 的每一行都會調用city_state_country()
function。( axis=1
參數使 apply() 使用行而不是列運行。)function 獲取緯度和經度,並進行查詢。 然后,它修改該行以包含來自查詢的信息。
這得到以下結果:
Latitude Longitude city state country
0 42.022506 -88.168156 Illinois United States
1 41.877445 -87.723846 Chicago Illinois United States
2 29.986801 -90.166314 Louisiana United States
與您的示例不同,但 Nominatim 似乎沒有為您的兩個坐標返回一個城市。 (它稱它們為城鎮,而不是城市。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.