PHP Convert Exif GPS data to Google friendly values
我正在尝试将Exif经度和纬度数据转换为Google友好的十进制值。我已经阅读了很多教程,但似乎对我没有任何帮助。我可能完全做错了。
我成功获取了Exif数据,如下所示:
$ exif_data = exif_read_data($ path。'/ user / images / 4.jpg');
1 2 3 4 | $egeoLong = $exif_data['GPSLongitude']; $egeoLat = $exif_data['GPSLatitude']; $egeoLongR = $exif_data['GPSLongitudeRef']; $egeoLatR = $exif_data['GPSLatitudeRef']; |
从那里我得到以下值数组:
1 2 3 4 5 6 7 8 9 | deg Long: 118/1 min Long: 2147/100 sec Long: 0/1 Longitude Ref: W deg Lat: 34/1 min Lat: 433/100 sec Lat: 0/1 Latitude Ref: N |
然后我通过此函数运行它们以获得十进制值(我在Stackoverflow上获得了此函数)。
1 2 3 4 5 6 7 | $geoLong = gpsDecimal($egeoLong[0], $egeoLong[1], $egeoLong[2], $egeoLongR); $geoLat = gpsDecimal($egeoLat[0], $egeoLat[1], $egeoLat[2], $egeoLatR); function gpsDecimal($deg, $min, $sec, $hemi) { $d = $deg+((($min*60)+($sec))/3600); return ($hemi=='S' || $hemi=='W') ? $d*=-1 : $d; } |
返回以下内容...将坐标放置在海洋中...而不是我拍摄照片的位置。
纬度:41.216666666667
经度:-153.78333333333
任何人都可以告诉我我做错了什么,或者更好的方法来实现这一目标。非常感谢您的帮助。
我发现了相同的公式,但它对我也不起作用。我终于弄清楚了,对我有用的是:
1 2 3 4 5 | function toDecimal($deg, $min, $sec, $hem) { $d = $deg + ((($min/60) + ($sec/3600))/100); return ($hem=='S' || $hem=='W') ? $d*=-1 : $d; } |
我发现最好的近似值是(基于google地图翻译的坐标)
1 | $deg + ($min/60) + ($sec/36000000) |