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

 更新时间:2023年08月16日 09:55:46   作者:bill12458  
这篇文章主要介绍了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的调用也有一定的数量限制,所以请合理使用!

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python接口自动化测试的实现

    Python接口自动化测试的实现

    这篇文章主要介绍了Python接口自动化测试的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • python实点云分割k-means(sklearn)详解

    python实点云分割k-means(sklearn)详解

    这篇文章主要为大家详细介绍了Python实点云分割k-means,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • python连接数据库后通过占位符添加数据

    python连接数据库后通过占位符添加数据

    在pymysql中支持对占位符的处理,开发者需要在SQL中使用“%”定义占位符,在使用excute()方法执行时对占位符的数据进行填充即可,本文给大家介绍python连接数据库后通过占位符添加数据的方法,需要的朋友参考下吧
    2021-12-12
  • python对excel文档去重及求和的实例

    python对excel文档去重及求和的实例

    下面小编就为大家分享一篇python对excel文档去重及求和的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • Python基于opencv实现的人脸识别(适合初学者)

    Python基于opencv实现的人脸识别(适合初学者)

    OpenCV是一个基于BSD许可开源发行的跨平台计算机视觉库,下面这篇文章主要给大家介绍了关于Python基于opencv实现的人脸识别,文中通过实例代码介绍的非常详细,本文的教程非常适合初学者,需要的朋友可以参考下
    2022-03-03
  • Python单元测试入门到精通讲解

    Python单元测试入门到精通讲解

    单元测试是软件开发中不可或缺的一部分,有助于确保代码的正确性、可维护性和可扩展性,在Python中,有丰富的工具和库可用于进行单元测试,本文将为你提供一个全面的指南,从入门到精通,轻松掌握Python单元测试的方方面面
    2023-11-11
  • Python2.x中str与unicode相关问题的解决方法

    Python2.x中str与unicode相关问题的解决方法

    这篇文章主要介绍了Python2.x中str与Unicode相关问题的解决方法,Python2.x版本中由于没有默认使用Unicode而会在实际使用中碰到一些字符问题,针对这些问题本文讨论了一些解决方法,需要的朋友可以参考下
    2015-03-03
  • python+selenium 点击单选框-radio的实现方法

    python+selenium 点击单选框-radio的实现方法

    今天小编就为大家分享一篇python+selenium 点击单选框-radio的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • Python简繁体转换的简单实现步骤

    Python简繁体转换的简单实现步骤

    工作中需要将繁体中文转换成简体中文上网找了些资料,下面这篇文章主要给大家介绍了关于Python实现简繁体转换的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • Python深入学习之内存管理

    Python深入学习之内存管理

    这篇文章主要介绍了Python深入学习之内存管理,本文比较详细的讲解了Python的内存管理相关知识,需要的朋友可以参考下
    2014-08-08

最新评论