图寻第一期:从 EXIF 找到照片拍摄地 的文章封面
返回文章列表
Neuroblue writing

图寻第一期:从 EXIF 找到照片拍摄地

记录一次图像真实性鉴定实验。用 ExifTool 读取 GPS,换算地图坐标,再结合画面里的船、桥和塔做位置核验。

这次实验拿到的是一张嫌疑人手机里的照片。尽可能从图里找信息,最后判断照片大概是在哪里拍的。

原始照片

先看图片本身

解压拿到 IMG_5660.JPG 后,先在系统详细信息里看了一遍。照片是 iPhone 12 拍的,带有 GPS 信息和拍摄时间。这里的内容只是一个初步线索,不能因为照片里有 EXIF 就直接认定它没有被处理过。

系统详细信息

用 ExifTool 再读一次。这个工具把 JPEG 里的 EXIF、GPS、Apple MakerNote 等字段都列得比较清楚,比系统属性页更适合留作取证记录。

exiftool IMG_5660.JPG

# 需要十进制度时加 -n
exiftool -n -GPSLatitude -GPSLongitude -GPSAltitude \
  -GPSHPositioningError IMG_5660.JPG

ExifTool 输出

从输出里能读到几个比较有用的字段:

Camera Model Name               : iPhone 12
Date/Time Original              : 2023:03:05 16:41:09.359+08:00
GPS Latitude                    : 28 deg 43' 7.24" N
GPS Longitude                   : 115 deg 53' 0.73" E
GPS Horizontal Positioning Error: 3.937998073 m
GPS Img Direction               : 43.41012572

GPS Horizontal Positioning Error 是这次定位的水平误差估计,约 3.94 米。它不是说拍摄点一定就在半径 3.94 米的圆里,而是手机当时给出的精度信息。周围遮挡、卫星信号和网络辅助定位都会影响它。

经纬度是怎么来的

ExifTool 默认给的是度分秒:

28 deg 43' 7.24" N
115 deg 53' 0.73" E

地图搜索一般更方便用十进制度。公式很简单:

十进制度 = 度 + 分 / 60 + 秒 / 3600

算下来:

纬度 = 28 + 43 / 60 + 7.24 / 3600 = 28.7186778
经度 = 115 + 53 / 60 + 0.73 / 3600 = 115.8835361

所以谷歌地图里可以直接搜索:

28.718678, 115.883536

这里有一个容易填反的点。纬度范围是 -9090,经度范围是 -180180。在普通地图搜索框里,按“纬度, 经度”输入。如果某个地图接口要求 longitude,latitude,就要按它自己的参数格式来。

照片 EXIF 里的 GPS 一般是 WGS-84 坐标。谷歌地图可以直接用原值;高德地图常用 GCJ-02,如果直接把 WGS-84 原值填进高德,点位会偏一段距离。按常见转换算法,本图在谷歌地图中应使用:

28.715340, 115.888394

这类几百米的偏移是坐标系造成的,和手机自身的几米定位误差不是一回事。

第一次定位

把坐标直接放进地图后,定位结果落在南昌市区。最开始地图上的行政区显示和我预期的不太一致,而且点位在城镇街道附近。照片里却很明显有水面、船、桥和一座塔。

第一次在地图中定位

所以我没有直接把第一个地名当成答案,而是沿着坐标附近的赣江去看。照片如果确实在这附近拍,画面里的东西应该能在地图上找到对应。

顺着赣江找船和桥

在江边区域查看后,很快找到了南昌舰主题园和赣江大桥。这个位置和原图的水面、船体、桥梁关系比较接近。

在江边寻找可疑地物

我又用地图测距看了一下,坐标点到南昌舰一带大约四百米。这个距离不能单独作为结论,但至少没有出现隔着一大片城区或完全不在同一段江岸的情况。

地图测距

接着打开附近全景图。这里是最花时间的一步,因为地理坐标只能告诉我“人在附近”,桥和塔能不能从这个角度看见,才更接近拍摄现场。

全景图中的塔

全景图中的桥

全景里的塔和桥与原图中的地物能对应上。结合坐标、江岸环境、南昌舰、赣江大桥和全景图,最终区域判断为:江西省南昌市红谷滩区,赣江市民公园绿道、南昌舰主题园附近。