PHP 取得刷么照片EXIF中GPS的经纬度,并根据GPS进行GOOGLE地图定位
2016-06-06 15:38
716 查看
在php4.2之后有一个函数可以取得EXIF的內容
exif_read_data()
只可以用在JPG跟TIFF的图片
首先當然就是先取得EXIF的內容
第一个栏位是档案 第二个栏位是要取哪些項目(可以去文件看)的資訊
第三個是將各項目的值以array返回$exif = exif_read_data('my.jpg', 0, true); //纬度$latitude = $exif['GPS']['GPSLatitude']; //经度 $longitude = $exif['GPS']['GPSLongitude'];都是各有三個元素的array 各代表度,分,秒
但是他們都長得怪怪的 會是分數的形式
所以需要再將他們解析
找到一篇解法
PHP extract GPS EXIF data
把兩個值丟進去就可以了
//Pass in GPS.GPSLatitude or GPS.GPSLongitude or something in that format
functiongetGps($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);
}
returnarray('degrees'=> $degrees, 'minutes'=> $minutes, 'seconds'=> $seconds);
}
functiongps2Num($coordPart)
{
$parts= explode('/', $coordPart);
if(count($parts)) <= 0)
return0;
if(count($parts)) == 1)
return$parts[0];
returnfloatval($parts[0]) / floatval($parts[1]);
}
也就是這樣
$latitude= getGps($latitude);
$longitude= getGps($longitude);
/*
output:
緯度
度:$latitude['degrees']
分:$latitude['minutes']
秒:$latitude['seconds']
經度
度:$longitude['degrees']
分:$longitude['minutes']
秒:$longitude['seconds']
*/
就可以再做之後的應用啦
可以用google map確認一下對不對
http://maps.google.com.tw/?q=31 49 35,117 13 20.7
===update===
發現還要判斷南北半球 東西半球
//這會出現S或是N 也就是南北半球
$exif['GPS']['GPSLatitudeRef'];
//如果是S的話 緯度還要乘-1喔
//這會出現W或是E 也就是東西半球
$exif['GPS']['GPSLongitudeRef'];
//如果是W的話 經度還要乘-1喔
exif_read_data()
只可以用在JPG跟TIFF的图片
首先當然就是先取得EXIF的內容
第一个栏位是档案 第二个栏位是要取哪些項目(可以去文件看)的資訊
第三個是將各項目的值以array返回$exif = exif_read_data('my.jpg', 0, true); //纬度$latitude = $exif['GPS']['GPSLatitude']; //经度 $longitude = $exif['GPS']['GPSLongitude'];都是各有三個元素的array 各代表度,分,秒
但是他們都長得怪怪的 會是分數的形式
所以需要再將他們解析
找到一篇解法
PHP extract GPS EXIF data
把兩個值丟進去就可以了
//Pass in GPS.GPSLatitude or GPS.GPSLongitude or something in that format
functiongetGps($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);
}
returnarray('degrees'=> $degrees, 'minutes'=> $minutes, 'seconds'=> $seconds);
}
functiongps2Num($coordPart)
{
$parts= explode('/', $coordPart);
if(count($parts)) <= 0)
return0;
if(count($parts)) == 1)
return$parts[0];
returnfloatval($parts[0]) / floatval($parts[1]);
}
也就是這樣
$latitude= getGps($latitude);
$longitude= getGps($longitude);
/*
output:
緯度
度:$latitude['degrees']
分:$latitude['minutes']
秒:$latitude['seconds']
經度
度:$longitude['degrees']
分:$longitude['minutes']
秒:$longitude['seconds']
*/
就可以再做之後的應用啦
可以用google map確認一下對不對
http://maps.google.com.tw/?q=31 49 35,117 13 20.7
===update===
發現還要判斷南北半球 東西半球
//這會出現S或是N 也就是南北半球
$exif['GPS']['GPSLatitudeRef'];
//如果是S的話 緯度還要乘-1喔
//這會出現W或是E 也就是東西半球
$exif['GPS']['GPSLongitudeRef'];
//如果是W的話 經度還要乘-1喔
相关文章推荐
- 利用“PHP彩蛋”进行敏感信息获取
- 十一个常见的PHP安全细则
- 解决THINKPHP错误操作不能跳转
- windows下自动执行PHP脚本
- ssh jxl导出Excel时报错:getOutputStream() has already been called for this response
- laravel POST请求失败的原因
- PHP7 + iis7配置
- php解析word文档
- laravel5 --开箱准备事项
- 解决thinkphp设置session周期无效的问题
- 有关PHP不利于和MYSQL建立长连接的原因
- php怎么读取word文档
- 有关PHP函数:array_diff()与array_diff_assoc()的一些理解点
- PHP处理数据--excel与scv与json
- ftp命令批处理下载文件
- php进程的SIGBUS故障
- PHP操作mysql数据库
- 10条PHP高级技巧
- 跟我学习php数组常用函数-下篇
- PHPDesigner默认编码方式