【发布时间】:2015-09-30 20:43:16
【问题描述】:
我正在编写一个 bash 脚本,它根据 JPG 文件的 EXIF 标签重命名它们。我的原始文件是这样命名的:
IMG_2110.JPG
IMG_2112.JPG
IMG_2113.JPG
IMG_2114.JPG
我需要像这样重命名它们:
2015-06-07_11-21-38_iPhone6Plus_USA-CA-Los_Angeles_IMG_2110.JPG
2015-06-07_11-22-41_iPhone6Plus_USA-CA-Los_Angeles_IMG_2112.JPG
2015-06-13_19-05-10_iPhone6Plus_Morocco-Fez_IMG_2113.JPG
2015-06-13_19-12-55_iPhone6Plus_Morocco-Fez_IMG_2114.JPG
我的 bash 脚本使用 exiftool 来解析 EXIF 标头并重命名文件。对于那些不包含 EXIF 创建日期的文件,我使用的是文件修改时间。
#!/bin/bash
IFS=$'\n'
for i in *.*; do
MOD=`stat -f %Sm -t %Y-%m-%d_%H-%m-%S $i`
model=$( exiftool -f -s3 -"Model" "${i}" )
datetime=$( exiftool -f -s3 -"DateTimeOriginal" "${i}" )
stamp=${datetime//:/-}"_"${model// /}
echo ${stamp// /_}$i
done
我被困在这个位置上。我需要使用 EXIF 标签中的 GPS 信息来确定国家和城市。 exiftool 提供了一个名为“GPS 位置”的字段。在所有字段中,这似乎对确定位置最有用。
GPS Position : 40 deg 44' 49.36" N, 73 deg 56' 28.18" W
Google 提供了一个用于地理定位的公共 API,但它需要这种格式的纬度/经度坐标:
40.7470444°, -073.9411611°
API 返回相当多的信息(点击链接查看结果):
https://maps.googleapis.com/maps/api/geocode/json?latlng=40.7470444,-073.9411611
我的问题是:
如何将 GPS 位置格式化为纬度/经度值,以便为 Google 地理定位等服务提供可接受的输入?
如何解析 JSON 结果以仅提取国家和城市,以与许多不同类型的位置一致?卷曲,然后呢?理想情况下,我想以一种方式处理美国地点,而以另一种方式处理非美国地点。美国位置的格式为 USA-STATE-City,而非美国位置的格式为 COUNTRY-City。
我需要在 bash 脚本中完成这一切。我看过 pygeocoder 和 gpsbabel ,但它们似乎没有奏效。有一些免费的网络工具可用,但它们不提供 API (http://www.earthpoint.us/Convert.aspx)。
【问题讨论】:
-
一个有趣的任务。有关公式,请参阅此问题:stackoverflow.com/questions/15962939/…。做起来应该不会太难。记得
$(( math expressions ))可以提供帮助。祝你好运。 -
看起来我会适应这样的事情(thelinuxrain.com/articles/dms-to-dd-to-kml-with-awk-and-sed):
location=awk -v FS="[ \t]" '{print $0,substr($1,length($1),1)substr($2,length($2),1)}' $i \ | sed 's/\xc2\xb0\([0-9]\{1,2\}\).\([NEWS]\)/ \1 0 \2/g;s/\xc2\xb0\([NEWS]\)/ 0 0 \1/g;s/[^0-9NEWS]/ /g' \ | awk '{if ($9=="NE") {printf ("%.4f\t%.4f\n",$1+$2/60+$3/3600,$5+$6/60+$7/3600)}但我遇到了这个错误,有什么想法吗?:sed: RE error: illegal byte sequence -
xc2带给你什么?还是输出非ASCII?鉴于您对osx的需求,建议安装gawk并在其中完成所有操作。 (也许我错过了为什么你需要 3 个步骤(有时它是一个更简单的解决方案))。如果awk可以交出xc2(看起来如此),那么为什么不在那里做整件事呢。阅读match()及其设置的变量。您可以使用它复制大多数 seds\1捕获缓冲区。今晚很忙,所以帮不上什么忙。但祝你好运 ;-)! -
另外,我会重写你的问题只是为了专注于这种转换和你的问题。请务必包括示例输入、所需输出、当前输出、错误消息和代码。你越来越近了。祝你好运。
标签: bash google-maps awk gps reverse-geocoding