1

我正在使用 phpexif_read_data函数来获取 long 和 lat,然后我将它们转换为谷歌可以使用的格式,但是它们似乎总是在几英里之外。同一个国家,只是位置不正确(但是 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功能错了吗?

4

1 回答 1

3

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

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

应该:

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

一分钟是 1/60 度,一秒是 1/60 分钟。


如需更全面的答案,请参见此处:PHP 提取 GPS EXIF 数据

于 2013-08-15T01:47:56.083 回答