You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用ExifTool结合GPS信息自动重命名图片并获取街道信息?

解决思路:通过反向地理编码补充街道信息,再用ExifTool批量重命名

首先,你遇到的核心问题是GPS坐标转街道名称需要反向地理编码(Reverse Geocoding)——ExifTool本身只负责读取/写入元数据,不具备地理编码能力,所以得结合其他工具来完成这个环节。下面是几个可行的方案:

方案1:ExifTool + Python脚本(免费、自定义性强)

这个方案用Python的地理编码库获取街道信息,再写入图片元数据,最后用ExifTool重命名。

步骤1:提取图片的GPS原始坐标

先用ExifTool导出所有图片的GPS坐标(用-n参数获取原始数值,方便后续计算):

exiftool -r -GPSLatitude -GPSLongitude -n -csv ./your-photo-folder > coords.csv

这条命令会把文件夹下所有图片的路径、纬度、经度导出成CSV文件。

步骤2:用Python反向地理编码获取街道信息

用geopy库调用OpenStreetMap的Nominatim服务(免费无API密钥),批量获取街道信息:

  1. 先安装依赖:pip install geopy pandas
  2. 示例脚本(保存为get_streets.py):
import pandas as pd
from geopy.geocoders import Nominatim
from geopy.extra.rate_limiter import RateLimiter

# 初始化地理编码器(注意遵守Nominatim的使用规则,不要频繁请求)
geolocator = Nominatim(user_agent="photo-renamer")
reverse = RateLimiter(geolocator.reverse, min_delay_seconds=1)

# 读取坐标CSV
df = pd.read_csv("coords.csv")

# 批量获取地址信息
def get_street(row):
    if pd.notna(row["GPSLatitude"]) and pd.notna(row["GPSLongitude"]):
        location = reverse((row["GPSLatitude"], row["GPSLongitude"]), exactly_one=True)
        if location:
            address = location.raw.get("address", {})
            # 优先提取街道,没有的话用邻近的道路/区域
            return address.get("road") or address.get("suburb") or address.get("city_district")
    return "Unknown"

df["Street"] = df.apply(get_street, axis=1)

# 保存带街道信息的CSV
df.to_csv("coords_with_streets.csv", index=False)

运行脚本后,你会得到包含街道信息的CSV文件。

步骤3:用ExifTool写入街道信息并重命名

先把街道信息写入图片的UserComment字段(或者自定义字段),再批量重命名:

# 写入街道信息
exiftool -csv=coords_with_streets.csv "-UserComment<Street" ./your-photo-folder

# 批量重命名(格式:日期_国家代码_城市_街道.jpg)
exiftool "-FileName<CreateDate_%IPTC:CountryCode_%IPTC:City_%UserComment.jpg" -d "%Y%m%d" ./your-photo-folder
  • 用CreateDate作为日期来源(比GPS日期更准确,对应拍摄时间)
  • %IPTC:CountryCode和%IPTC:City调用你已经填充的IPTC字段
  • 如果街道名称有特殊字符,ExifTool会自动处理为合法文件名

方案2:用支持反向地理编码的批量工具(更简单)

如果你不想写脚本,可以用支持自动填充街道信息的图片管理工具:

  • GeoSetter进阶设置:其实GeoSetter本身支持反向地理编码,你可以在「地理标记」菜单里选择「从坐标获取地址」,选择包含街道的数据源(比如OpenStreetMap),重新批量更新元数据,就能把街道信息写入IPTC或Exif字段。
  • Adobe Lightroom:导入图片后,在「地图」模块选中所有带GPS的图片,右键选择「将位置信息写入元数据」,Lightroom会自动填充详细地址字段,之后再用ExifTool读取这些字段重命名。

注意事项

  • 反向地理编码的精度取决于GPS坐标的精度:如果你的图片GPS精度在10米以内,基本能拿到准确街道;如果精度低,可能只能拿到区域名称。
  • 免费地理编码服务(比如Nominatim)有请求频率限制,批量处理大量图片时要注意延迟(脚本里已经加了1秒延迟)。
  • 文件名中的特殊字符(比如空格、斜杠)会被ExifTool自动替换为下划线,确保文件名合法。

内容的提问来源于stack exchange,提问作者Ivan Viktorovic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:53:07