#ecoding:utf-8
import datetime
from PIL import Image
import piexif
import csv
import os

def main(csv_path, image_root, save_root):
    csv_data = open(csv_path, "r")
    reader = csv.reader(csv_data)

# 读取csv的每一行,跳过标题行
    for item in reader:
        if reader.line_num <= 1:
            continue
        lng = float(item[0])
        lat = float(item[1])

#alt=(item[2])
        #print('{} finished'.format(item[-1]))
        # 将经纬度与相对航高转为exif可用的经纬度与行高
        # exif需要的航高输入为(20000,2)格式,表示高度为20000/100米
        # exif需要的经度与维度为((12, 1), (20,1), (41000, 1000))格式表示12度20分41秒
        lng_exif = format_latlng(lng)
        lat_exif = format_latlng(lat)
        #alt_exif = (0,10000)
        #_dict = {"alt": alt_exif, "lng": 
            #lng_exif, "lat": lat_exif, "lng_ref":'S', "lat_ref":'N'}

_dict = {"lng": 
            lng_exif, "lat": lat_exif, "lng_ref":'E', "lat_ref":'N'}
        image_path = os.path.join(image_root, item[-1]).replace("\\","/") + '.jpg'
        save_path = os.path.join(save_root, item[-1]).replace("\\","/") + '.jpg'
        # 修改图片的exif
        try:
            read_modify_exif(image_path, save_path, _dict)
            print("第" + str(reader.line_num-1) + "张图片处理完成!")
        except Exception as ex:
            #print(ex)
            continue

def format_latlng(latlng):
    """经纬度十进制转为分秒"""
    degree = int(latlng)
    res_degree = latlng - degree
    minute = int(res_degree * 60)
    res_minute = res_degree * 60 - minute
    seconds = round(res_minute * 60.0,3)
    return ((degree, 1), (minute,1), (int(seconds*1000), 1000))

def read_modify_exif(image_path,save_path, _dict):
    """ 读取并且修改exif文件"""
    img = Image.open(image_path)  # 读图
    #exif_dict = piexif.load(img.info['exif'])  # 提取exif信息
    #print('alt:{} lng:{} lat:{}'.format(exif_dict['GPS'][piexif.GPSIFD.GPSAltitude], exif_dict['GPS'][piexif.GPSIFD.GPSLongitude], exif_dict['GPS'][piexif.GPSIFD.GPSLatitude]))
    exif_dict = {"GPS":{}}
    #exif_dict['GPS'][piexif.GPSIFD.GPSAltitude] = _dict['alt']  # 修改高度,GPSAltitude是内置变量,不可修改
    exif_dict['GPS'][piexif.GPSIFD.GPSLongitude] = _dict['lng']  # 修改经度
    exif_dict['GPS'][piexif.GPSIFD.GPSLatitude] = _dict['lat']  # 修改纬度
    exif_dict['GPS'][piexif.GPSIFD.GPSLongitudeRef] = _dict['lng_ref']  # odm需要读取,一般为’W'
    exif_dict['GPS'][piexif.GPSIFD.GPSLatitudeRef] = _dict['lat_ref']  # 一般为‘N'
    
    exif_bytes = piexif.dump(exif_dict)
    
    #print(exif_dict['GPS'][piexif.GPSIFD.GPSLongitude])
    
    img.save(save_path, "jpeg", exif=exif_bytes)  # 保存

def check_folder(path_list):
    """输入为文件夹列表,文件夹不存在则创建"""
    for path in path_list:
        if not os.path.exists(path):
            os.mkdir(path)

if __name__ == "__main__":
    csv_path = 'C:/Users/Administrator/Desktop/1/from/pos.csv'
    image_root = 'C:/Users/Administrator/Desktop/1/from'
    save_root = 'C:/Users/Administrator/Desktop/1/3'
    check_folder([csv_path, image_root, save_root])
    main(csv_path, image_root, save_root)

python批量写入经纬度相关推荐

  1. python批量写入数据

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 python批量写入文件内容 前言 一.使用步骤 1.引入库 前言 提示:这里可以添加本文要记录的大概内容: python批量写入文件 ...

  2. python批量添加经纬度照片水印,照片水印,坐标转换

    通过获取shp文件的大地2000坐标,然后转换为经纬度坐标,最后将经纬度坐标添加到照片中,实现照片添加水印,实现批量添加经纬度坐标水印. # -*- coding: utf-8 -*- import ...

  3. python批量写入数据库engine_python 快速写入postgresql数据库方法

    一种是导入sqlalchemy包,另一种是导入psycopg2包. 具体用法如下(此处以postgre数据库举例) 第一种: # 导入包 from sqlalchemy import create_e ...

  4. 用Python评测三种批量查询经纬度的方法,你pick哪一种?

    不知道大家会在什么场合使用地图可视化,对我来说地图可视化的优点除了它可以展示海量的位置数据,更重要的是它可以很酷很炫,给人一种赏心悦目的舒适感.如下是J哥做的一个简单热力图: 热力地图 制作此类可视化 ...

  5. python经纬度获取县名_利用 Python 批量获取县镇运输距离

    起因 最近做规划项目,领导让查出某几个市的所有乡镇级行政区域,距离所在县级行政中心的交通运输距离.想着也不是啥难事儿,高德地图一搜就有. 当我把各市行政区划统计完,发现一共有五百多个乡镇,意味着要在地 ...

  6. Python从数据库读取大量数据批量写入文件的方法

    今天小编就为大家分享一篇Python从数据库读取大量数据批量写入文件的方法,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 使用机器学习训练数据时,如果数据量较大可能我们不能够一次性将 ...

  7. python批量读取文件内容_Python从数据库读取大量数据批量写入文件的方法

    使用机器学习训练数据时,如果数据量较大可能我们不能够一次性将数据加载进内存,这时我们需要将数据进行预处理,分批次加载进内存. 下面是代码作用是将数据从数据库读取出来分批次写入txt文本文件,方便我们做 ...

  8. Python读取excel表格人员数据同时批量写入多个excel个人登记表

    背景:驻村期间需要将1张含有200多人的人员记录数据写入人员信息登记表中,1条记录对应一个人员信息登记表.如果复制粘贴肯定比较慢,所以当然使用Python来解决.涉及的字段其实有23个,因涉及其他问题 ...

  9. 自动化神器啊,Python 批量读取身份证信息写入 Excel

    大家好,今天分享一个实用技能,利用 Python 批量读取身份证信息写入 Excel. 喜欢记得收藏.关注.点赞. 注:文末提供完整版代码.技术交流方式 读取 以图片形式的身份证为例,信息读取我们使用 ...

  10. 教程 | 批量将经纬度坐标标注到地图上,不用Python,不用GIS软件

    小O地图EXE版三大功能,地图数据查询.地图数据分析.地图可视化! 在以往的文章中大多介绍前两者,可视化功能介绍较少,本文将直接上视频,通过B站视频演示地图可视化功能使用. 本文视频演示使用小O地图软 ...

最新文章

  1. Microbiome:16S扩增子测序研究中定量变异和生物量影响
  2. 面试题3-二维数组中的查找
  3. Java进阶:多线程Lock管理多个Condition的实践
  4. ubuntu11.10 mysql_Ubuntu11.10下mysql+apache+PHP
  5. scala集合中添加元素_如何在Scala中获得列表的第一个元素?
  6. redux 简明学习
  7. Bailian2939 玩游戏【模拟】
  8. python深拷贝和浅拷贝的区别_python 深拷贝与浅拷贝的区别
  9. HDU 1019 least common Multipy
  10. 吐槽一下:武装GoldenDict时,好一个OALD,RAR格式,12万多的文件,晕!!
  11. DNS 技术标准综述
  12. 设计师必备,6个PNG素材网站
  13. 阿里云系统盘扩容及数据盘分区、格式化分区、挂载、取消挂载
  14. ftp下出现“当前的安全设置不允许从该位置下载文件”提示
  15. 【C++学习笔记】类型转换和跳转语句
  16. 强化学习:训练加速技巧
  17. java6安全设置_小米安全中心
  18. 文本文档写html图片显示不出来,word文档几种不显示图片的解决方法
  19. 毫米波雷达处理流程、算法、代码合集
  20. 质量管理、质量保证、质量控制的区别

热门文章

  1. js 根据公历日期 算出农历_显示阴历(农历)日期的js代码
  2. Windows8[Web应用程序项目***已配置为使用IIS。无法访问IIS元数据库,您没有足够的特权访问计算机上的IIS网站]
  3. 虚拟机安装后找不到操作系统
  4. linux 回收站恢复文件怎么恢复文件,清空回收站后如何恢复已被删除的文件?
  5. 新机常用软件及环境配置清单
  6. 网口压线顺序_网线水晶头接法
  7. 【建议收藏】 11个适合程序员逛的在线社区
  8. 互联网寒冬,这个技术领域的人才需求却持续爆表
  9. phpstudy mysql 版本_phpstudy切换mysql版本
  10. html根据出生日期计算星座,星座测算.html