GeoPandas 是一个用于处理地理数据的 Python 库,它扩展了 Pandas 的功能,使其能够处理地理信息。地理编码(Geocoding)是将地址转换为地理坐标(经度和纬度)的过程。虽然 GeoPandas 本身不提供地理编码的功能,但您可以结合使用其他库(如 geopy
或 geocoder
)来实现地理编码,然后将结果与 GeoPandas 数据框结合使用。
以下是一个使用 GeoPandas 和 geopy
进行地理编码的示例。
首先,确保您安装了 geopandas
和 geopy
。您可以使用以下命令安装它们:
pip install geopandas geopy
以下是一个示例,展示如何使用 geopy
进行地理编码,并将结果存储在 GeoPandas 数据框中。
import geopandas as gpd
import pandas as pd
from geopy.geocoders import Nominatim
from geopy.exc import GeocoderTimedOut
# 创建一个包含地址的 DataFrame
data = {
'address': [
'1600 Amphitheatre Parkway, Mountain View, CA',
'1 Infinite Loop, Cupertino, CA',
'350 5th Ave, New York, NY'
]
}
df = pd.DataFrame(data)
# 初始化地理编码器
geolocator = Nominatim(user_agent="geoapiExercises")
# 定义一个函数来进行地理编码
def geocode_address(address):
try:
location = geolocator.geocode(address)
if location:
return pd.Series({'latitude': location.latitude, 'longitude': location.longitude})
else:
return pd.Series({'latitude': None, 'longitude': None})
except GeocoderTimedOut:
return geocode_address(address) # 递归调用以处理超时
# 应用地理编码函数
df[['latitude', 'longitude']] = df['address'].apply(geocode_address)
# 将 DataFrame 转换为 GeoDataFrame
gdf = gpd.GeoDataFrame(df, geometry=gpd.points_from_xy(df.longitude, df.latitude))
# 显示结果
print(gdf)
Nominatim
初始化地理编码器。user_agent
是必需的参数,用于标识您的应用。geocode_address
函数接受一个地址并返回其经纬度。如果地理编码超时,它会递归调用自己。apply
方法将地理编码函数应用于地址列,并将结果存储在新的列中。gpd.GeoDataFrame
将 Pandas DataFrame 转换为 GeoPandas GeoDataFrame,并使用 points_from_xy
创建几何点。领取专属 10元无门槛券
手把手带您无忧上云