将 exif 数据映射到 long/lat

Posted

技术标签:

【中文标题】将 exif 数据映射到 long/lat【英文标题】:Mapping exif data to long/lat 【发布时间】:2013-08-15 00:56:54 【问题描述】:

我正在使用 php exif_read_data 函数来获取经纬度,然后我将它们转换为谷歌可以使用的格式,但是它们似乎总是在几英里之外。同一个国家,只是位置不正确(但是 iPhoto 会给我正确的位置)。代码如下

public function get_location() 
    global $the_image;

    if(!empty($the_image)) 
      $exif = $this->get_exif();

      $degLong = $exif['GPSLongitude'][0];
      $minLong = $exif['GPSLongitude'][1];
      $secLong = $exif['GPSLongitude'][2];
      $refLong = $exif['GPSLongitudeRef'];

      $degLat = $exif['GPSLatitude'][0];
      $minLat = $exif['GPSLatitude'][1];
      $secLat = $exif['GPSLatitude'][2];
      $refLat = $exif['GPSLatitudeRef'];

      $long = $this->to_decimal($degLong, $minLong, $secLong, $refLong);
      $lat  = $this->to_decimal($degLat, $minLat, $secLat, $refLat);
      echo $long . "<br />" . $lat . "<br/>";

     else 
      echo "Supply an image";
    


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

谁能看到它返回错误数据的原因,是我的to_decimal 函数错误吗?

【问题讨论】:

您使用的是哪个包?能否请您展示一下您是如何在 PHP 中提取 gps 信息的? 嗨@ultrasamad 这是一个非常古老的问题,不应该真正复活,但我使用的是PHP exif_read_data 方法php.net/manual/en/function.exif-read-data.php。没有包,只有 PHP。 【参考方案1】:

您将分钟和秒除以 100,但是,您不应该:

$d = $deg + ((($min/60) + ($sec/3600))/100);

应该是:

$d = $deg + (($min/60) + ($sec/3600));

one minute is 1/60 degree and a second is 1/60 minute.


如需更全面的答案,请参阅此处:PHP extract GPS EXIF data

【讨论】:

哇,我不敢相信我没有看到。我什至不知道我为什么要添加它。谢谢,现在是凌晨 3:40 - 这可能就是原因 :) 这里是 4:40,但是,是的,另一双眼睛有时会有所不同 :) 这段代码仍然不正确。地点仍然在几百英里之外。看看 Gerald Kaszuba 的这个例子,它工作得很好:***.com/questions/2526304/php-extract-gps-exif-data 谢谢,我会在我的答案中包含链接,以便更容易找到它,因为这个问题是笔误。

以上是关于将 exif 数据映射到 long/lat的主要内容,如果未能解决你的问题,请参考以下文章

在 T-SQL 中将 Lat Long 反转为 Long Lat [关闭]

是否有 API 将 long/lat 转换为城市、国家而不是 Google API [关闭]

Excel里怎么处理 XML 映射?

根据几个条件将列从一个数据帧映射到另一个数据帧,以考虑存在的多个映射中的一个映射

可以将一系列键映射到值的数据结构

利用核方法将低维数据映射到高维