抽取PHP中的GPS EXIF数据

57

我希望使用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,以在地图上显示图片位置!


1
@Kami:我更新了我的回答并添加了一些代码。 - Kip
12个回答

0

短故事。 第一部分N 离开等级 将分钟乘以60 将秒数除以100。 计算等级、分钟和秒数。

第二部分E 离开等级 将分钟乘以60 将秒数除以...1000 将等级、分钟和秒数相加


0
我看到没有人提到过这个:https://pypi.python.org/pypi/LatLon/1.0.2
from fractions import Fraction
from LatLon import LatLon, Longitude, Latitude

latSigned = GPS.GPSLatitudeRef == "N" ? 1 : -1
longSigned = GPS.GPSLongitudeRef == "E" ? 1 : -1

latitudeObj = Latitude(
              degree = float(Fraction(GPS.GPSLatitude[0]))*latSigned , 
              minute = float(Fraction(GPS.GPSLatitude[0]))*latSigned , 
              second = float(Fraction(GPS.GPSLatitude[0])*latSigned)
longitudeObj = Latitude(
              degree = float(Fraction(GPS.GPSLongitude[0]))*longSigned , 
              minute = float(Fraction(GPS.GPSLongitude[0]))*longSigned , 
              second = float(Fraction(GPS.GPSLongitude[0])*longSigned )
Coordonates = LatLon(latitudeObj, longitudeObj )

现在使用坐标对象,您可以做任何想做的事情: 例如: (如维基百科上的46°56′48″N 7°26′39″E)
print Coordonates.to_string('d%°%m%′%S%″%H')

然后你需要将其转换为ASCII码,就完成了:

('5\xc2\xb052\xe2\x80\xb259.88\xe2\x80\xb3N', '162\xc2\xb04\xe2\x80\xb259.88\xe2\x80\xb3W')

然后打印示例:

print "Latitude:" + Latitude.to_string('d%°%m%′%S%″%H')[0].decode('utf8')

>> Latitude: 5°5259.88″N

3
是的,因为这是一个关于 PHP 问题的 Python 答案。 - CodeBrauer

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