exif_read_data() 函数的作用是从 JPEG 或 TIFF 图像文件中读取 EXIF 头信息

PHP 7.2.10 版本 华为手机获取不到GPS,降版本到  7.1.28 或者 7.1.13 这俩版本亲测没问题

class ImgHelper

{

/**

* 获取图片信息

* @param $img_url

* @param $gaode_key

* @return array|bool

*/

public function get_img_info($img_url,$baidu_key,$type){

$data = array(

'img_time' => '',//图片拍摄时间

'latitude' => '',//纬度

'longitude' => '',//经度

'country' => '',

'address' => '',//详细地址

'province' => '',//省份

'city' => '',//城市

'district' => '',//区

'street' => '',//街道

);

if($type){

$arr = explode('/',$type);

if(!in_array(strtolower($arr[1]),['jpeg','tiff'])){

return $data;

}

}

$exif = @exif_read_data($img_url,0,true);

if ($exif === false) {

return $data;

} else {

$latitude = isset($exif['GPS']['GPSLatitude'])?$exif['GPS']['GPSLatitude']:[]; //纬度

$longitude = isset($exif['GPS']['GPSLongitude'])?$exif['GPS']['GPSLongitude']:[]; //经度

$GPSLatitudeRef = isset($exif['GPS']['GPSLatitudeRef'])?$exif['GPS']['GPSLatitudeRef']:''; //南半球 S 北半球 N

$GPSLongitudeRef = isset($exif['GPS']['GPSLongitudeRef'])?$exif['GPS']['GPSLongitudeRef']:''; //东半球 S 西半球 N

//计算经纬度信息

$latitude = self::get_gps($latitude, $GPSLatitudeRef);

$longitude = self::get_gps($longitude, $GPSLongitudeRef);

/**使用百度地图提供逆向地理编码接口获取定位信息;

* 需在百度申请key

* 百度接口地址:http://api.map.baidu.com/geocoder/v2/

*/

$url = "http://api.map.baidu.com/geocoder/v2/?location=$latitude,$longitude&output=json&ak=$baidu_key";

$res = file_get_contents($url);

$res = json_decode($res, true);

// var_dump($res);die;

if ($res['status'] == 0) {

$address = $res['result']['formatted_address'];

$country = $res['result']['addressComponent']['country'];

$province = $res['result']['addressComponent']['province'];

$district = $res['result']['addressComponent']['district'];

$street = $res['result']['addressComponent']['street'];

$city = $res['result']['addressComponent']['city'];

}

//图片拍摄时间

$time = isset($exif['IFD0']['DateTime'])?$exif['IFD0']['DateTime']:'';

$data = array(

'img_time' => $time,//图片拍摄时间

'latitude' => $latitude,//纬度

'longitude' => $longitude,//经度

'country' => $country,

'address' => $address,//详细地址

'province' => $province,//省份

'city' => $city,//城市

'district' => $district,//区

'street' => $street,//街道

);

return $data;

}

}

//计算经纬度

public function get_gps($exifCoord,$banqiu)

{

$degrees= count($exifCoord) > 0 ? self::gps2Num($exifCoord[0]) : 0;

$minutes= count($exifCoord) > 1 ? self::gps2Num($exifCoord[1]) : 0;

$seconds= count($exifCoord) > 2 ? self::gps2Num($exifCoord[2]) : 0;

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

$degrees= floor($degrees);

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

$minutes= floor($minutes);

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);

}

$lng_lat = $degrees + $minutes/60 + $seconds/60/60;

if(strtoupper($banqiu) == 'W' || strtoupper($banqiu) == 'S'){

//如果是南半球 或者 西半球 乘以-1

$lng_lat = $lng_lat * -1;

}

return $lng_lat;

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

}

/*

取得EXIF的內容

分数 转 小数

*/

public function gps2Num($coordPart)

{

$parts= explode('/', $coordPart);

if(count($parts) <= 0)

return 0;

if(count($parts) == 1)

return $parts[0];

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

}

}

php exif gps,php exif_read_data() 获取GPS相关推荐

  1. java编程手机gps定位_GPS 获取Gps定位信息的Android源码实例,通过这个JAVA 目,你可能学会GPS在 手机 238万源代码下载- www.pudn.com...

    文件名称: GPS下载 收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 59 KB 上传时间: 2013-04-08 下载次数: 22 详细说明:获取Gps定位信息的A ...

  2. 获取手机Gps地理位置并获取Gps信号强弱

    在项目终需要开启gps用来获取地理位置,获取不到地理位置时发送一条广播,进行通知 1,启动服务,在服务中每隔3秒检测gps是否开启以及获取到当前的地理位置 2,将获取到的地理位置发送一条全局广播,便于 ...

  3. Java获取照片的Exif信息,并解析GPS

    Java获取照片的Exif信息,并解析GPS 1. 效果图 2. 什么是Exif? 3. 源代码 参考 ❤️ 这篇博客将介绍什么EXIF,以及如何用Java语言读取Exif信息,并转换经纬度为位置信息 ...

  4. android照片添加gps,如何利用Exif为图片文件添加GPS坐标信息

    今天主要给大家分享一个知识点--如何利用Exif为图片文件添加GPS坐标信息,关于这个知识点网上的资料很多,而且这个知识点本身应该是不难的,但是当我在项目使用时却遇到了一个问题:在读取某个图片的坐标信 ...

  5. android网络获取经纬,Android中透过GPS或NetWork获取当前位置的经纬度

    Android中通过GPS或NetWork获取当前位置的经纬度 private double latitude=0.0; private double longitude =0.0; Location ...

  6. SIM7600X 获取GPS信号 TCP/IP连接与PPP拨号上网 4G上网

    如果设备是基于Ubuntu.树莓派等,参考:https://www.cnblogs.com/little-kwy/p/11296426.html 用户在使用模块前除了micro USB线.LTE天线. ...

  7. android 获取GPS定位,

    /** * 得到位置信息 */ private void getLocation() { // 获取位置管理服务 LocationManager locationManager; String ser ...

  8. Android 完美解决9.0的机型,必须请求GPS权限并打开GPS才可以正确获取到WIFI名称

    //获取SSID//完美解决9.0的机型,必须请求GPS权限并打开GPS才可以正确获取到WIFI名称private String getNetConfListForSSID(){String ssid ...

  9. Matlab Mobile手机版获取gps数据和加速度信号融合

    Matlab Mobile手机版获取gps数据和加速度信号融合 前言 安装matlab mobile Matlab Drive Connector 安装 Matlab Mobile 记录数据 Matl ...

最新文章

  1. python(numpy,pandas5)——numpy中copy 和 deep copy
  2. stack overflow at line
  3. 考虑玩家移动速度的射击
  4. MRI骨水肿是早期未分化关节炎演变为RA的独立预测预测因素
  5. win7系统找不到我的电脑图标的应对办法
  6. 自己封装的ASP.NET的SQLITE数据库的操作类
  7. Error in loadNamespace(name) : there is no package called ‘yaml’
  8. 转载:真正高人的解读——《三体 读后感》【宇宙尺度的战争】
  9. tomcat的access日志配置
  10. python识别手写数字knn_手写数字识别以及Python sklearn KNN实现
  11. ip变更导致连接不到mysql的解决办法
  12. pycharm下载思维导图插件 idea mind map
  13. testflight测试的直播软件,TestFlight - Apple
  14. 二维坐标基本变换(平移、旋转、缩放、镜像、阵列)
  15. 适合生产制造企业用的ERP系统有哪些?
  16. python:小鱼的航程
  17. Vue3.0源码解读 - 响应式系统
  18. 狼人杀要做社交,绕不开音视频连麦
  19. HTML5适合的情人节礼物有纪念日期功能
  20. Spring Security使用(三) 安全框架内使用QQ登录以及不加安全框架使用QQ登录

热门文章

  1. hadoop的操作命令(第3课)
  2. 智芯传感压力传感器赋能更加智慧的扫地机器人
  3. 完美的AIRMAN--1985!
  4. 女儿看到爸爸与别的女人上了床
  5. 红眼睛微型成像仪拍照、存储与参数复位
  6. 【USB笔记】 USB1.0与USB1.1差异概述
  7. 笑出腹肌!有些程序员真会玩代码注释
  8. jmeter压测过程及常见问题总结
  9. OpenFlow协议原理及基本配置-网络测试仪实操
  10. 计算机专业的工匠精神人物,高职计算机专业工匠精神培育研究.doc