Python批量处理经纬度数据并生成位置信息

前言:

        这次的内容是无意之间想到要做的,因为本人在自学Python,学习到pandas模块的时候就想着怎么样可以将学习获得的知识应用起来,于是就有了今天这个实战内容。

准备:

        ①Python 3.x及以上的运行环境

        ②导入pandas模块

        ③导入geopy模块,可以直接pip install geopy获得

        ④导入warnings模块,用于过滤无用的警告信息

        其中geopy作为一个地理位置相关的库,提供了一系列方便的调用其他地图api的方法,其中就包括了:1、通过地名(如建筑物)获取详细地理位置;2、通过给定的经纬度获取详细的地址这两种实用方法。具体请参考官方文档,地址:欢迎使用Geopy文档! — GeoPy 2.2.0 文档

读取处理数据:

        由于使用的是pandas模块,所以按照以往的经验,我选择使用csv文件保存经纬度数据,通过python程序生成指定数目和范围的随机数用来模拟实际中的经纬度数据,效果如下(注:这里只生成了东经0-180°的,实际上应该还包括西经0-180°):

然后通过pandas的read_csv()方法得到一个DataFrame对象。到这里思路就很清晰了,即通过某种方式我们可以方便地获取每一行的经度和纬度信息并进行处理,这种方式就是行/列切片。

生成位置信息:

        geopy提供了一系列方便的调用其他地图api的方法,考虑到某些api的调用需要用户注册并生成密钥才可以使用,我选择无需注册的Nominatim的api,官网:Nominatim

        结合上一步,将每次切片得到的经纬度数据分别填充,调用reverse()函数后得到较为准确的位置信息。关键部分如下——

data="{}, {}".format(str(longtitude),str(latitude))

geolocator = Nominatim(user_agent=username)

location = geolocator.reverse(data,zoom=18)

 tips:

location输出一个对应经纬度的大致地理位置,比如说精确到街道
location.address输出一个对应经纬度的详细地理位置,包括是什么建筑物
location.raw输出一个对应经纬度的原始信息,貌似默认是json格式

最终效果:

         其中的none是因为经纬度坐标在水系或者无人区中,无法确定地理位置。

完整代码:

from geopy.geocoders import Nominatim
import warnings as bill_warn
import pandas as pd1
def locate_address(urlname,username):
    bill_warn.filterwarnings(action="ignore",message="whatever")
    geo_frame=pd1.DataFrame(pd1.read_csv(urlname))
    for i in range(0,len(geo_frame)):
        longtitude = geo_frame.iloc[i,1]
        latitude = geo_frame.iloc[i,2]
        data="{}, {}".format(str(longtitude),str(latitude))
        geolocator = Nominatim(user_agent=username)
        location = geolocator.reverse(data,zoom=18)
        print("The information to this set of data:")
        print(location)
    print("Transform successfully conducted!!!")
locate_address("location.csv","myuseragent")

注意事项:

       ① 如果遇到下列的异常

         问题就是在于初始化Nomitanim的时候,没有指定user_agent的名字,而是调用了默认的user_agent,解决办法就是在构造函数改为你想要的任何的名字

geolocator = Nominatim(user_agent=“你想要的名字”)

         ②Nominatim的调用也有一定的数量限制,所以请合理使用!

本篇完

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值