PHP将Exif GPS数据转换为Google友好值

时间:2012-06-13 00:45:58

标签: maps exif

我正在尝试将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

任何人都可以告诉我我做错了什么,或者更好的方法来实现这一目标。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

我发现了相同的公式,但它对我也没有用。我最终想到的,以及对我有用的是:

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

答案 1 :(得分:1)

我发现最佳近似值(基于谷歌地图翻译的坐标)

$deg + ($min/60) + ($sec/36000000)