我在这儿--给照片加定位 v0.16

查看 81|回复 11
作者:igaoyuan   
我在这儿--给照片加定位 使用说明
这是《我在哪儿--照片定位查看助手》的同门兄弟,专门给没有GPS的照片、图片添加定位信息,可批量,同时具备兴趣点管理功能,欢迎使用反馈!
基本功能:
  • 选择图像文件并编辑其元数据
  • 添加GPS坐标信息到照片
  • 修改拍摄日期时间
  • 批量处理多个文件

    操作步骤:
  • 点击"选择文件"按钮添加要处理的图像文件
  • 使用"地图选点"选择位置或从兴趣点管理中选择位置
  • 设置拍摄日期时间(可选)
  • 选择输出目录
  • 点击"执行"开始处理

    高级功能:
  • 兴趣点管理:保存和管理常用位置
  • 地图选点:可视化选择地理位置
  • 高德地图集成:使用高德地图API提供更好的地图体验

    注意事项:
  • 处理后的文件会保存在输出目录中,原始文件不会被修改
  • GPS坐标格式为十进制,例如:39.90923, 116.397428
  • 如果"更新拍摄日期时间"未选中,处理时将不会修改日期时间信息

    作者: 高山羊止
    下载地址
    便携版v0.16
    https://www.123684.com/s/xntA-yAabv
    https://www.123912.com/s/xntA-yAabv
    更新网盘:
    https://www.123684.com/s/xntA-xcfbv
    https://www.123912.com/s/xntA-xcfbv
    运行环境
  • 在64位Win10/11下测试正常
  • Win7会提示缺少必要文件,暂时不支持
  • 360会对Python打包程序普遍性误报

    我在, 照片

  • igaoyuan
    OP
      


    dazuyishi1314 发表于 2025-9-11 22:40
    我可能表述错了,就是带gps信息的照片显示在地图上对应的地点~

    https://www.52pojie.cn/thread-2058435-1-1.html
    移步这里,下载我在哪儿,将照片导入,立刻可以查询照片位置名称,一般是国家市区县(图片左上方拼音),点击这个位置名称就能在百度地图中显示了,试试看
    igaoyuan
    OP
      


    enze999 发表于 2025-9-12 10:42
    怎么写入坐标的? 怎么读取图片坐标的? 能否讲一下? 什么语言开发的?  问题挺多,望大佬解惑。
    主要通过分析照片元数据来提取,具体原理、步骤如下,供参考:
    照片的EXIF(Exchangeable Image File Format)是嵌入在图片文件中的元数据,包含拍摄设备、时间、地理位置等信息。其中GPS信息是重要组成部分,用于记录照片拍摄的位置。
    EXIF结构概述
    EXIF数据通常以标签形式存储,主要结构包括:
    [ol]
  • 文件头:标识文件格式和EXIF数据起始位置
  • IFD(Image File Directory):包含多个标签目录
  • 0th IFD:主图像信息
  • 1st IFD:缩略图信息
  • Exif IFD:详细拍摄信息
  • GPS IFD:地理定位信息

    [/ol]
    GPS IFD主要包含以下关键标签:
  • GPSVersionID:GPS版本
  • GPSLatitudeRef/LongitudeRef:纬度/经度参考(N/S/E/W)
  • GPSLatitude/GPSLongitude:纬度/经度值(度分秒格式)
  • GPSAltitudeRef:海拔参考
  • GPSAltitude:海拔高度

    Python读取和写入GPS信息的方法
    使用exifread库读取EXIF信息,piexif库写入GPS信息:
    # 读取照片的GPS信息
    import exifread
    def read_gps_info(image_path):
        with open(image_path, 'rb') as f:
            tags = exifread.process_file(f)
        gps_info = {}
        # 读取纬度
        if 'GPS GPSLatitude' in tags and 'GPS GPSLatitudeRef' in tags:
            lat = tags['GPS GPSLatitude'].values
            lat_ref = str(tags['GPS GPSLatitudeRef'])
            # 转换度分秒为十进制
            latitude = float(lat[0].num) / float(lat[0].den) + \
                      (float(lat[1].num) / float(lat[1].den)) / 60 + \
                      (float(lat[2].num) / float(lat[2].den)) / 3600
            if lat_ref == 'S':
                latitude = -latitude
            gps_info['latitude'] = latitude
        # 读取经度
        if 'GPS GPSLongitude' in tags and 'GPS GPSLongitudeRef' in tags:
            lon = tags['GPS GPSLongitude'].values
            lon_ref = str(tags['GPS GPSLongitudeRef'])
            longitude = float(lon[0].num) / float(lon[0].den) + \
                       (float(lon[1].num) / float(lon[1].den)) / 60 + \
                       (float(lon[2].num) / float(lon[2].den)) / 3600
            if lon_ref == 'W':
                longitude = -longitude
            gps_info['longitude'] = longitude
        return gps_info
    # 写入GPS信息到照片
    import piexif
    from fractions import Fraction
    def decimal_to_dms(decimal):
        """将十进制经纬度转换为度分秒格式"""
        degrees = int(decimal)
        minutes = int((decimal - degrees) * 60)
        seconds = (decimal - degrees - minutes / 60) * 3600
        # 转换为分数形式
        return (
            (degrees, 1),
            (minutes, 1),
            (int(seconds * 10000), 10000)  # 保留4位小数精度
        )
    def write_gps_info(image_path, output_path, latitude, longitude, altitude=0):
        # 读取现有EXIF数据
        exif_data = piexif.load(image_path)
        # 确定经纬度参考方向
        lat_ref = 'N' if latitude >= 0 else 'S'
        lon_ref = 'E' if longitude >= 0 else 'W'
        # 转换为绝对值并转为度分秒
        lat_dms = decimal_to_dms(abs(latitude))
        lon_dms = decimal_to_dms(abs(longitude))
        # 构建GPS信息字典
        gps_ifd = {
            piexif.GPSIFD.GPSVersionID: (2, 3, 0, 0),
            piexif.GPSIFD.GPSLatitudeRef: lat_ref,
            piexif.GPSIFD.GPSLatitude: lat_dms,
            piexif.GPSIFD.GPSLongitudeRef: lon_ref,
            piexif.GPSIFD.GPSLongitude: lon_dms,
            piexif.GPSIFD.GPSAltitudeRef: 0,  # 0表示高于海平面
            piexif.GPSIFD.GPSAltitude: (int(altitude * 100), 100)  # 海拔高度
        }
        # 更新EXIF数据中的GPS信息
        exif_data['GPS'] = gps_ifd
        # 将EXIF数据转换为字节
        exif_bytes = piexif.dump(exif_data)
        # 写入新文件
        piexif.insert(exif_bytes, image_path, output_path)
    # 使用示例
    if __name__ == "__main__":
        # 读取示例
        img_path = "photo.jpg"
        gps = read_gps_info(img_path)
        print(f"读取到的GPS信息: {gps}")
        # 写入示例
        new_lat = 39.9087  # 北京纬度
        new_lon = 116.3975  # 北京经度
        write_gps_info(img_path, "photo_with_gps.jpg", new_lat, new_lon, 50)
        print("GPS信息已写入新文件")
    注意事项
    [ol]
  • 不是所有图片格式都支持EXIF,常见支持格式有JPEG、TIFF等
  • 部分图片可能被去除了EXIF信息或包含不完整的GPS数据
  • 写入GPS信息时,建议保存为新文件,避免损坏原图
  • 度分秒与十进制的转换需要精确计算,确保地理位置准确
    [/ol]
    使用上述方法可以方便地处理照片的GPS信息,适用于照片管理、地理标记等应用场景。
  • dazuyishi1314   

    有没有显示能显示带坐标照片的定位的
    igaoyuan
    OP
      


    dazuyishi1314 发表于 2025-9-11 22:05
    有没有显示能显示带坐标照片的定位的

    查询照片是否有定位信息最简单的办法就是对照片点鼠标右键-属性-详细信息-GPS栏有数字边是可定位的照片,或者把照片放到我在这儿/我在哪儿,也可以显示这些信息
    xiang8866   

    这软件太漂亮了,🤩🤩🤩
    yfd2329   

    这个倒是实用,有时候忘记了,但在相片信息,还是存在信息。
    dazuyishi1314   


    igaoyuan 发表于 2025-9-11 22:18
    查询照片是否有定位信息最简单的办法就是对照片点鼠标右键-属性-详细信息-GPS栏有数字边是可定位的照片, ...

    我可能表述错了,就是带gps信息的照片显示在地图上对应的地点~
    totomm   

    还真挺实用的,先下来试试,感谢感谢!
    fengjixy   

    感谢分享,比较实用的工具,添加后能定位到具体的照相位置,也算是留个回忆了。
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部