当前位置: 首页 > 面试题库 >

PHP提取GPS EXIF数据

郎聪
2023-03-14
问题内容

我想使用php从图片中提取GPS EXIF标签。我正在使用exif_read_data()返回所有标签+数据的数组的:

GPS.GPSLatitudeRef: N
GPS.GPSLatitude:Array ( [0] => 46/1 [1] => 5403/100 [2] => 0/1 ) 
GPS.GPSLongitudeRef: E
GPS.GPSLongitude:Array ( [0] => 7/1 [1] => 880/100 [2] => 0/1 ) 
GPS.GPSAltitudeRef: 
GPS.GPSAltitude: 634/1

我不知道如何解释46/1 5403/100和0/1?46可能是46°,但是其余的尤其是0/1呢?

angle/1 5403/100 0/1

这个结构是关于什么的?

如何将它们转换为“标准”(例如,维基百科的46°56′48″ N 7°26′39″ E)?我想将这些坐标传递给Google Maps
API,以在地图上显示图片位置!


问题答案:

根据http://en.wikipedia.org/wiki/Geotagging,( [0] => 46/1 [1] => 5403/100 [2] => 0/1 )应表示46/1度,5403/100分钟,0/1秒,即46°54.03′0″
N。对秒进行归一化得到46°54′1.8″ N。

只要您没有得到负坐标(只要您将N / S和E /
W作为单独的坐标,就永远不要有负坐标),下面的代码就可以工作。让我知道是否存在错误(目前没有方便的PHP环境)。

//Pass in GPS.GPSLatitude or GPS.GPSLongitude or something in that format
function getGps($exifCoord)
{
  $degrees = count($exifCoord) > 0 ? gps2Num($exifCoord[0]) : 0;
  $minutes = count($exifCoord) > 1 ? gps2Num($exifCoord[1]) : 0;
  $seconds = count($exifCoord) > 2 ? gps2Num($exifCoord[2]) : 0;

  //normalize
  $minutes += 60 * ($degrees - floor($degrees));
  $degrees = floor($degrees);

  $seconds += 60 * ($minutes - floor($minutes));
  $minutes = floor($minutes);

  //extra normalization, probably not necessary unless you get weird data
  if($seconds >= 60)
  {
    $minutes += floor($seconds/60.0);
    $seconds -= 60*floor($seconds/60.0);
  }

  if($minutes >= 60)
  {
    $degrees += floor($minutes/60.0);
    $minutes -= 60*floor($minutes/60.0);
  }

  return array('degrees' => $degrees, 'minutes' => $minutes, 'seconds' => $seconds);
}

function gps2Num($coordPart)
{
  $parts = explode('/', $coordPart);

  if(count($parts) <= 0)// jic
    return 0;
  if(count($parts) == 1)
    return $parts[0];

  return floatval($parts[0]) / floatval($parts[1]);
}


 类似资料:
  • 问题内容: 我正在php中学习pdo,以便使数据库访问更轻松,更高效。我读到的_class的一个解释是,在调用构造函数之前已设置了对象的属性,这是什么意思?任何方向都将不胜感激。 问题答案: 这意味着在使用PDO将结果返回到自定义对象时,需要设置与查询结果键相对应的成员变量。 如: 这样,PDO可以将变量设置为超出其内部范围的对象。 如果您的用户类是这样的: 那么PDO将无法从范围之外设置值,因为

  • 问题内容: 这旨在作为一般参考问题和答案,涵盖许多永无止境的 “如何访问JSON中的数据?” 问题。它是在这里处理在PHP中解码JSON和访问结果的广泛基础知识。 我有JSON: 如何在PHP中对此进行解码并访问结果数据? 问题答案: 介绍 首先,您有一个字符串。JSON不是数组,对象或数据结构。JSON是基于文本的序列化格式,因此是花哨的字符串,但仍然只是字符串。使用解码PHP。 在其中您可能会

  • 问题内容: 我有一个看起来像这样的csv文件 我想要一张桌子: 如果我使用,我会得到 吗?有什么优雅的方法吗? 问题答案: 您可以用来解析CSV文件,而不必担心自己解析。 PHP手册中的示例:

  • 问题内容: 我在服务器上调用PHP cURL方法,响应为XML类型。cURL将输出(在删除标记之后)保存在标量类型变量中。有没有一种方法可以将其存储在对象/哈希/数组中,以便于解析? 问题答案:

  • 问题内容: 我有来自远程服务器的一些json,结果返回如下: 我如何获得a1和a2的值? 谢谢 问题答案: 使用如果数据仍然是字符串形式: 演示:http://jsfiddle.net/mattball/WK9gz/ 由于您使用jQuery的,换出了和jQuery将自动地解析JSON你。在回调内部,您将使用普通的JavaScript对象- 无需解析。

  • 主要内容:1. 创建提取,2. 应用提取过滤器,3. 将新数据添加到提取,4. 提取历史在Tableau中,数据提取从数据源创建数据子集。数据提取对于通过应用过滤器来提高性能非常有用。它还有助于使用Tableau的某些功能。可能在数据源中不可用,例如在数据中查找不同的值。但是,数据提取功能最常用于创建Tableau的脱机访问本地驱动器。 1. 创建提取 按照以下菜单提取数据:数据(Data) -> 提取数据(Extract Data)。 它创建了多个选项,例如对要提取的行数应用限制以