将PHP Exif GPS数据转换为适用于Google的值

4
我正在尝试将Exif经纬度数据转换为适用于Google的十进制值。我阅读了许多教程,但是似乎没有一篇适用于我。我可能完全做错了。成功获取Exif数据如下所示:$exif_data = exif_read_data($path . '/user/images/4.jpg');
$egeoLong = $exif_data['GPSLongitude'];
$egeoLat = $exif_data['GPSLatitude'];
$egeoLongR = $exif_data['GPSLongitudeRef'];
$egeoLatR = $exif_data['GPSLatitudeRef'];

从那里开始,我得到了以下值的数组:

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上找到了这个函数)。

$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

请问有人能告诉我我做错了什么,或者有更好的方法来实现这个目标吗? 非常感谢任何帮助。


看这里:https://dev59.com/nnE85IYBdhLWcg3w9ohJ#2526412 - mica
可能是PHP提取GPS EXIF数据的重复问题。 - Léo Léopold Hertz 준영
2个回答

3

我发现了同样的公式,但它对我也没有起作用。最终我找到了解决方法,以下是我得出的正确做法:

function toDecimal($deg, $min, $sec, $hem) 
{
    $d = $deg + ((($min/60) + ($sec/3600))/100);
    return ($hem=='S' || $hem=='W') ? $d*=-1 : $d;
}

1
我认为你犯了一个错误。不是分钟和秒都应该除以100,只有秒需要除以100。因此正确的公式应该是: $d = $deg + ((($min/60) + ($sec/3600)/100)); - Buzut

1
我发现最佳近似值是(基于由 Google 地图翻译的坐标)。
$deg + ($min/60) + ($sec/36000000)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接