如何用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密钥),批量获取街道信息:
- 先安装依赖:
pip install geopy pandas - 示例脚本(保存为
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
相关产品推荐
相关产品推荐

