【Python入门教程】获取图片可视化精准定位(逆地理编码)

这篇具有很好参考价值的文章主要介绍了【Python入门教程】获取图片可视化精准定位(逆地理编码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  1. 使用exifread库读取图片的经纬度信息(WGS84坐标)
  2. 使用高德开放API将经纬度转为高德底图经纬度,并输出具体位置
  3. 使用folium库,以高德底图为基准,在网页上可视化显示地图和兴趣点

一、获取图片经纬度

        之前发过类似的文章,这里就不赘述了。下面代码中有相应注释。

def Get_LatLon(path_image):
    """
    :param path_image: 输入图片路径
    :return: 返回纬度、经度
    """
    # 获取图片的经纬度信息
    f = open(path_image, 'rb')
    contents = exifread.process_file(f)
    longitude = contents["GPS GPSLongitude"].values
    longitude_f = longitude[0].num/longitude[0].den + (longitude[1].num/longitude[1].den/60) + (longitude[2].num/longitude[2].den/3600)
    latitude = contents["GPS GPSLatitude"].values
    latitude_f = latitude[0].num/latitude[0].den + (latitude[1].num/latitude[1].den/60) + (latitude[2].num/latitude[2].den/3600)
    # print("经度:", longitude_f)  # contents['GPS GPSLatitudeRef']
    # print("纬度:", latitude_f)  # contents['GPS GPSLongitudeRef']
    f.close()
    return latitude_f, longitude_f
【Python入门教程】获取图片可视化精准定位(逆地理编码)

二、高德开放API将经纬度转为高德底图经纬度,并输出具体位置

1.注册账号,获取key

        打开高德开放平台,注册账号后点击控制台。点击我的应用,然后创建应用后就会得到一个key。对于地理编码官方也有说明文档,可以自行参考。

2.使用高德开放API将经纬度转为高德底图经纬度,并输出具体位置

def Get_address(latitude_f2, longitude_f2):
    """
    :param latitude_f2: 输入WGS84纬度
    :param longitude_f2: 输入WGS84经度
    :return: 返回地址、高德经纬度
    """
    key = '**********'
    # 高德地图api
    url_lonlat = f'https://restapi.amap.com/v3/assistant/coordinate/convert?locations=%s,%s&coordsys=gps' \
                 f'&output=json&key={key}' % (longitude_f2, latitude_f2)
    r_lonlat = requests.get(url_lonlat)
    gaode_lonlat = r_lonlat.json()['locations']
    # 获取高德经纬度
    url_address = f'https://restapi.amap.com/v3/geocode/regeo?output=json&location=%s&key={key}' \
                  f'&radius=1000&extensions=all' % gaode_lonlat
    r_address = requests.get(url_address)
    gaode_address = r_address.json()['regeocode']['formatted_address']
    # 获取经纬度对应的详细地址
    return gaode_address, gaode_lonlat
【Python入门教程】获取图片可视化精准定位(逆地理编码)

三、folium库以高德底图为基准在网页上可视化显示地图和兴趣点

def Show_map(address1, lonlat):
    """
    :param address1: 高德地址
    :param lonlat: 高德经纬度
    :return: 打开html,可视化地图
    """
    tiles1 = 'http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}'
    # 高德底图api
    map_url = folium.Map([float(lonlat.split(',')[1]), float(lonlat.split(',')[0])],
                         tiles=tiles1,
                         attr="&copy; <a href=http://ditu.amap.com/>高德地图</a>",
                         zoom_start=15,
                         control_scale=True,
                         )
    # 底图的基本设置
    folium.Marker(
        location=[float(lonlat.split(',')[1]), float(lonlat.split(',')[0])],
        popup=folium.Popup('%s' % address1, max_width=20),
        icon=folium.Icon(color='red', icon='info-sign')  # 标记颜色图标
    ).add_to(map_url)
    # 添加标记点
    folium.Circle(
        radius=3000,
        location=[float(lonlat.split(',')[1]), float(lonlat.split(',')[0])],
        popup=folium.Popup('范围', max_width=20),
        color="crimson",
        fill=False,
    ).add_to(map_url)
    # 添加圆圈
    map_url.add_child(folium.ClickForMarker(popup="新点"))
    # 添加新点
    map_url.add_child(plugins.MeasureControl(position='topleft'))
    # 地图测距离
    map_url.add_child(folium.LatLngPopup())
    # 经纬度查询
    map_url.save('map.html')
    # 保存为html
    webbrowser.open('map.html')
【Python入门教程】获取图片可视化精准定位(逆地理编码)

四、完整代码

        记得自己修改key和图片路径!

# -*- coding: utf-8 -*-
"""
@Time : 2023/6/1 15:29
@Auth : RS迷途小书童
@File :Positioning based on images.py
@IDE :PyCharm
@Purpose :通过图片获取其准确位置并在网页上可视化
"""
import exifread
import requests
import folium
# 地图模块
import webbrowser
# 浏览器调用
from folium import plugins


def Get_LatLon(path_image):
    """
    :param path_image: 输入图片路径
    :return: 返回纬度、经度
    """
    # 获取图片的经纬度信息
    f = open(path_image, 'rb')
    contents = exifread.process_file(f)
    longitude = contents["GPS GPSLongitude"].values
    longitude_f = longitude[0].num/longitude[0].den + (longitude[1].num/longitude[1].den/60) + (longitude[2].num/longitude[2].den/3600)
    latitude = contents["GPS GPSLatitude"].values
    latitude_f = latitude[0].num/latitude[0].den + (latitude[1].num/latitude[1].den/60) + (latitude[2].num/latitude[2].den/3600)
    # print("经度:", longitude_f)  # contents['GPS GPSLatitudeRef']
    # print("纬度:", latitude_f)  # contents['GPS GPSLongitudeRef']
    f.close()
    return latitude_f, longitude_f


def Get_address(latitude_f2, longitude_f2):
    """
    :param latitude_f2: 输入WGS84纬度
    :param longitude_f2: 输入WGS84经度
    :return: 返回地址、高德经纬度
    """
    key = '*******'
    # 高德地图api
    url_lonlat = f'https://restapi.amap.com/v3/assistant/coordinate/convert?locations=%s,%s&coordsys=gps' \
                 f'&output=json&key={key}' % (longitude_f2, latitude_f2)
    r_lonlat = requests.get(url_lonlat)
    gaode_lonlat = r_lonlat.json()['locations']
    # 获取高德经纬度
    url_address = f'https://restapi.amap.com/v3/geocode/regeo?output=json&location=%s&key={key}' \
                  f'&radius=1000&extensions=all' % gaode_lonlat
    r_address = requests.get(url_address)
    gaode_address = r_address.json()['regeocode']['formatted_address']
    # 获取经纬度对应的详细地址
    return gaode_address, gaode_lonlat


def Show_map(address1, lonlat):
    """
    :param address1: 高德地址
    :param lonlat: 高德经纬度
    :return: 打开html,可视化地图
    """
    tiles1 = 'http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}'
    # 高德底图api
    map_url = folium.Map([float(lonlat.split(',')[1]), float(lonlat.split(',')[0])],
                         tiles=tiles1,
                         attr="&copy; <a href=http://ditu.amap.com/>高德地图</a>",
                         zoom_start=15,
                         control_scale=True,
                         )
    # 底图的基本设置
    folium.Marker(
        location=[float(lonlat.split(',')[1]), float(lonlat.split(',')[0])],
        popup=folium.Popup('%s' % address1, max_width=20),
        icon=folium.Icon(color='red', icon='info-sign')  # 标记颜色图标
    ).add_to(map_url)
    # 添加标记点
    folium.Circle(
        radius=3000,
        location=[float(lonlat.split(',')[1]), float(lonlat.split(',')[0])],
        popup=folium.Popup('范围', max_width=20),
        color="crimson",
        fill=False,
    ).add_to(map_url)
    # 添加圆圈
    map_url.add_child(folium.ClickForMarker(popup="新点"))
    # 添加新点
    map_url.add_child(plugins.MeasureControl(position='topleft'))
    # 地图测距离
    map_url.add_child(folium.LatLngPopup())
    # 经纬度查询
    map_url.save('map.html')
    # 保存为html
    webbrowser.open('map.html')


if __name__ == "__main__":
    file_image = "G:/721_0211_W.jpeg"
    latitude_f1, longitude_f1 = Get_LatLon(file_image)
    # 输入图片路径,获取WGS84经纬度
    address, lonlat = Get_address(latitude_f1, longitude_f1)
    # 获取高德地址和经纬度
    Show_map(address, lonlat)
    # 在网页上可视化显示
【Python入门教程】获取图片可视化精准定位(逆地理编码)

 

本文章主要是分享个人在学习Python过程中写过的一些代码。有些部分参考了前人以及官网的教程,如有侵权请联系作者删除,大家有问题可以随时留言交流,博主会及时文章来源地址https://www.toymoban.com/news/detail-473455.html

到了这里,关于【Python入门教程】获取图片可视化精准定位(逆地理编码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python入门教程】基于OpenCV视频分解成图片+图片组合成视频(视频抽帧组帧)

            在人工智能爆火的今天,深度学习被广泛应用于各个领域。深度学习的模型训练离不开大量的样本库。我之前分享过【Python爬虫】批量爬取网页的图片制作数据集,今天跟大家分享一下如何使用OpenCV库对视频进行抽帧,从而增加样本图片的数量。正好也顺便分享一下

    2024年02月04日
    浏览(28)
  • python教程 入门学习笔记 第4天 数据类型 获取数据类型 字符串拼接

    数据类型 1、能直接处理的基本数据类型有5个:整型、浮点型、字符串、布尔值、空 1)整型(int)=整数,例如0至9,-1至-9,100,-8180等,人数、年龄、页码、门牌号等 没有小数位的数字,是整型 2)浮点型(float)=小数,例如金额、身高、体重、距离、长度、π等 精确到小

    2024年02月14日
    浏览(39)
  • python如何实现点云可视化交互——Open3D实例教程(获取所选点的信息)保姆级教学

    Open3D是目前python中可用的用于 3D 数据处理的现代库,可以对点云、网格等三维数据进行读取、采样、配准、可视化等操作。其中对点云等三维模型进行可视化的功能在Python中显得非常方便。 在通过对官方文档的研究之后作者发现在Open3D的多种可视化函数中出现了返回所选点

    2024年02月02日
    浏览(48)
  • Annotorious入门教程:图片注释工具

    最近有工友问我前端怎么给图片做标注。使用 Fabric.js 或者 Konva.js 等库确实可以实现,但我又好奇有没有专门做图片标注的工具呢? 在网上搜了一下发现 Annotorious 可以实现这个功能。 Annotorious 提供了图片注释和标注功能,而且用法很简单。 本文分为 【快速入门】和【API讲

    2024年02月08日
    浏览(31)
  • Android入门教程 | ImageView 图片显示

    为了让App界面更美观生动,我们可以放上图片。 显示图片是“刚需”。不论是书籍,报纸,网站,都有显示图片的需求。毕竟“无图无真相”。 在 Android 应用开发中,我们通常使用 ImageView 来显示图片。 ImageView的主要属性 ImageView的使用 ImageView经常用来显示图片。例如直接显

    2024年02月03日
    浏览(48)
  • Midjourney 绘画保姆级入门 图片教程

    对于想了解Midjourney 绘画的同学们,现在有福利了。Midjourney 绘画保姆级入门及图片教程现分享给大家参考。 一、账号申请( 5个步骤 ) 二、初步登录(3个流程 ) 三、指令教程( 18个指令)         /imagine           使用提示生成图像 /settings           查看和调整 Midjourney Bot 的

    2024年02月11日
    浏览(36)
  • 【教程篇】AI绘画Stable Diffusion入门教程之提示词和生成图片步骤 最简单上手方法

    实在不会就照葫芦画瓢~ 这个主要是说电脑端,本地使用Stable Diffusion软件出图的教程,手机用户和移动端用户请看副推文~ 这是一个直接给出图照葫芦画瓢的教程,给0基础小白上手出图的一个简单教程,更多东西还是要自己多去学习和摸索,下面给出的也只是根据我本地测试

    2024年02月21日
    浏览(128)
  • 当~python批量获取某电商:商品数据并作可视化

    前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 开发环境: 首先我们先来安装一下写代码的软件(对没安装的小白说) Python 3.8 / 编译器 Pycharm 2021.2版本 / 编辑器 专业版是付费的 文章下方名片可获取魔法永久用~ 社区版是免费的 第三方模块使用: requests pip install requests 数据请

    2024年02月04日
    浏览(27)
  • 【 Python 入门教程 ② 】Python IDLE 下载教程

    本章节我们将向大家介绍如何下载 Python 官方编辑器 —— IDLE。 Python 可应用于多平台包括 Windows、Linux 和 Mac OS X。 Unix (Solaris, Linux, FreeBSD, AIX, HP/UX, SunOS, IRIX, 等等。) Win 9x/NT/2000 Macintosh (Intel, PPC, 68K) OS/2 DOS (多个DOS版本) PalmOS Nokia 移动手机 Windows CE Acorn/RISC OS BeOS Amiga VMS/OpenVM

    2023年04月18日
    浏览(35)
  • 【7月最新实现】使用Python获取全网招聘数据,实现可视化分析

    哈喽兄弟们,今天来实现采集一下最新的qcwu招聘数据。 因为网站嘛,大家都爬来爬去的,人家就会经常更新,所以代码对应的也要经常重新去写。 对于会的人来说,当然无所谓,任他更新也拦不住,但是对于不会的小伙伴来说,网站一更新,当场自闭。 所以这期是出给不会

    2024年02月12日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包