如何使用 Geopy 对位置进行地理编码

在本文中,我将向您介绍一个名为 Geopy 的 Python 库。 这是一个地理编码包

什么是地理编码?

Geopy 是用于地理编码的许多常见 Web 服务的 Python 客户端,使 Python 开发人员可以轻松定位地址、城市或国家/地区的坐标,反之亦然。

它使用第三方地理编码器和其他数据源来查找全球地址、城镇、大陆和地标的坐标。

地理编码是将位置定义(例如物理地址或位置名称)转换为地球表面上该位置的纬度和经度对的方法。

企业应用程序的地理编码服务

市场上有许多地理编码服务可用。 我已经尝试过 GeocodeAPI,它们非常适合企业应用程序。 他们有多个端点可以从地址、反向地理编码和自动完成地址获取经纬度。

他们每天提供 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

尾注

如果您喜欢阅读本文并想阅读更多内容,请以作者身份关注我。 在那之前,继续编码!