在本文中,我将向您介绍一个名为 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)
这给了我们:
自动获取地址列表
因此,我们可以一次为每个地址执行此操作,但在大型机构中,您通常需要一次获取数千个地址。
让我们制作一个地址列表:
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)
现在这会将数据附加到我们的原始数据帧:
反向搜索坐标
它还允许用户反向搜索一对坐标(十进制度数):
app.reverse((37.234332396,-115.80666344), language="hi").raw
会给我们(用我们选择的语言):
寻找距离
我们可以用公里或英里找到两个地方之间的距离,使用:
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
尾注
如果您喜欢阅读本文并想阅读更多内容,请以作者身份关注我。 在那之前,继续编码!