ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python读取文件夹下图像的GPS并且可视化

2021-09-11 09:03:10  阅读:255  来源: 互联网

标签:python lon print 可视化 lat path 100 GPS


 

 

 

 

 

 

 

 

 

 

# -*- coding: utf-8 -*-

import os
import cv2


#------获取文件下下所有文件路径---
'''
输入:文件夹的路径
输出:文件列表 - 所有格式

'''
def file_name(file_dir):
    for root, dirs, files in os.walk(file_dir):
        #print(root) #当前目录路径
        #print(dirs) #当前路径下所有子目录
        #print(files) #当前路径下所有非目录子文件
        return files

#imgpath="C:/Users/dongdong/Desktop/标定图/img/"
#files=file_name(imgpath)
#for path_i in files:
#    print(path_i)





#------获取照片的GPS信息并转化60进制---
'''
输入:图像路径名称
输出:经纬度

'''


import json
import requests
import exifread


def GetGps(ImgPath):
    with open(ImgPath, 'rb') as f:
        exif_dict = exifread.process_file(f)

        # 经度
        lon_ref = exif_dict["GPS GPSLongitudeRef"].printable
        lon = exif_dict["GPS GPSLongitude"].printable[1:-1].replace(" ", "").replace("/", ",").split(",")
        lon = float(lon[0]) + float(lon[1]) / 60 + float(lon[2]) / float(lon[3]) / 3600
        if lon_ref != "E":
            lon = lon * (-1)

        # 纬度
        lat_ref = exif_dict["GPS GPSLatitudeRef"].printable
        lat = exif_dict["GPS GPSLatitude"].printable[1:-1].replace(" ", "").replace("/", ",").split(",")
        lat = float(lat[0]) + float(lat[1]) / 60 + float(lat[2]) / float(lat[3]) / 3600

        if lat_ref != "N":
            lat = lat * (-1)
        #print('照片的经纬度:', (lat, lon))

        '''
        # 调用百度地图api转换经纬度为详细地址
        secret_key = 'MAsVGINLNyTGiM4UulcaeluCekGnAFxj' # 百度地图api 需要注册创建应用
        baidu_map_api = 'http://api.map.baidu.com/reverse_geocoding/v3/?ak={}&output=json&coordtype=wgs84ll&location={},{}'.format(secret_key, lat, lon)
        content = requests.get(baidu_map_api).text
        gps_address = json.loads(content)
        # 结构化的地址
        formatted_address = gps_address["result"]["formatted_address"]
        # 国家(若需访问境外POI,需申请逆地理编码境外POI服务权限)
        country = gps_address["result"]["addressComponent"]["country"]
        # 省
        province = gps_address["result"]["addressComponent"]["province"]
        # 市
        city = gps_address["result"]["addressComponent"]["city"]
        # 区
        district = gps_address["result"]["addressComponent"]["district"]
        # 语义化地址描述
        sematic_description = gps_address["result"]["sematic_description"]
        
        print(ImgPath,'照片的经纬度:', (lat, lon), formatted_address,  gps_address["result"]["business"] ,)
        #print(formatted_address) #陕西省西安市长安区Y243(东大路)
        #print(gps_address["result"]["business"])#东大

        '''
        print(ImgPath,'照片的经纬度:', (lat, lon))
        return lat,lon




#------GPS可视化工具---
'''
输入:
locations      经纬度
output_path    GPS可视化结果HTML 文件保存路径
file_name      GPS可视化结果HTML 文件保存名字

输出:文件列表 - 所有格式

'''

 ##pip3 install folium
import folium  #可视化工具
import os
 
def draw_gps(locations, output_path, file_name):
    """
    绘制gps轨迹图
    :param locations: list, 需要绘制轨迹的经纬度信息,格式为[[lat1, lon1], [lat2, lon2], ...]
    :param output_path: str, 轨迹图保存路径
    :param file_name: str, 轨迹图保存文件名
    :return: None
    """
    m = folium.Map(locations[0], zoom_start=15, attr='default')  #中心区域的确定
 
    folium.PolyLine(    # polyline方法为将坐标用线段形式连接起来
        locations,    # 将坐标点连接起来
        weight=3,  # 线的大小为3
        color='orange',  # 线的颜色为橙色
        opacity=0.8    # 线的透明度
    ).add_to(m)    # 将这条线添加到刚才的区域m内
     
    # 起始点,结束点
    folium.Marker(locations[0], popup='<b>Starting Point</b>').add_to(m)
    folium.Marker(locations[-1], popup='<b>End Point</b>').add_to(m)
 
   # len(locations)
      
    '''
    for i in locations:
        #folium.Marker(
        #i, popup="<i>Click show a test</i>", tooltip="Click me!",icon=folium.Icon(color="red", icon="info-sign")
        ).add_to(m)
   '''
     
    m.save(os.path.join(output_path, file_name))  # 将结果以HTML形式保存到指定路径
     
 

def USE_GPS_Single():


    # 1 获取文件夹所有照片
    # 2 从图像解析GPS
    # 3 调用GPS可视化结果


    DirPatnList=["100_0001","100_0002","100_0003","100_0004","100_0005","100_0006","100_0007","100_0008","100_0009"]#文件夹名字
    DirPatnList=["100_0009"]

    for DirPatn in DirPatnList:
        imgpath="F:/dongdong/0my_project/slam/航拍数据/NWPU_9/"+DirPatn+"/"#文件夹完整路径
        files=file_name(imgpath)#获取文件夹下所有文件夹名字

        locations=[]


        
        for path_i in files:
            if path_i[-4:] == '.JPG':
                path_i="./NWPU_9/"+DirPatn+"/"+path_i #文件夹下图像路径
                lat,lon=GetGps(path_i)
                locations.append([float(lat),float(lon)])
            else:
                print("非指定文件类型:",path_i)

            
            

        map_html=DirPatn+".html"

        print("地图生成中请等待")
        draw_gps(locations,"",map_html)
        print(map_html,"地图网页生生结束,请用网页打开查看")



        
def USE_GPS_More():


    # 1 获取文件夹所有照片名字
    # 2 从图像解析GPS
    # 3 调用GPS可视化结果

    #文件夹名字
    DirPatnList=["100_0001","100_0002","100_0003","100_0004","100_0005","100_0006","100_0007","100_0008"]#文件夹名字
    #DirPatnList=["100_0009"]

    locations=[]

    for DirPatn in DirPatnList:
        imgpath="F:/dongdong/0my_project/slam/航拍数据/NWPU_9/"+DirPatn+"/"#文件夹完整路径
        files=file_name(imgpath)#获取文件夹下所有文件夹名字

        


        
        for path_i in files:
            if path_i[-4:] == '.JPG':
                path_i="./NWPU_9/"+DirPatn+"/"+path_i #文件夹下图像路径
                lat,lon=GetGps(path_i)
                locations.append([float(lat),float(lon)])
            else:
                print("非指定文件类型:",path_i)

            
            

    map_html="all_8"+".html"
    print("地图生成中请等待")
    draw_gps(locations,"",map_html)
    print(map_html,"地图网页生生结束,请用网页打开查看")


USE_GPS_More()

  

标签:python,lon,print,可视化,lat,path,100,GPS
来源: https://www.cnblogs.com/gooutlook/p/15253732.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有