php exif gps,php exif_read_data() 获取GPS
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相关推荐
- 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 ...
- 获取手机Gps地理位置并获取Gps信号强弱
在项目终需要开启gps用来获取地理位置,获取不到地理位置时发送一条广播,进行通知 1,启动服务,在服务中每隔3秒检测gps是否开启以及获取到当前的地理位置 2,将获取到的地理位置发送一条全局广播,便于 ...
- Java获取照片的Exif信息,并解析GPS
Java获取照片的Exif信息,并解析GPS 1. 效果图 2. 什么是Exif? 3. 源代码 参考 ❤️ 这篇博客将介绍什么EXIF,以及如何用Java语言读取Exif信息,并转换经纬度为位置信息 ...
- android照片添加gps,如何利用Exif为图片文件添加GPS坐标信息
今天主要给大家分享一个知识点--如何利用Exif为图片文件添加GPS坐标信息,关于这个知识点网上的资料很多,而且这个知识点本身应该是不难的,但是当我在项目使用时却遇到了一个问题:在读取某个图片的坐标信 ...
- android网络获取经纬,Android中透过GPS或NetWork获取当前位置的经纬度
Android中通过GPS或NetWork获取当前位置的经纬度 private double latitude=0.0; private double longitude =0.0; Location ...
- SIM7600X 获取GPS信号 TCP/IP连接与PPP拨号上网 4G上网
如果设备是基于Ubuntu.树莓派等,参考:https://www.cnblogs.com/little-kwy/p/11296426.html 用户在使用模块前除了micro USB线.LTE天线. ...
- android 获取GPS定位,
/** * 得到位置信息 */ private void getLocation() { // 获取位置管理服务 LocationManager locationManager; String ser ...
- Android 完美解决9.0的机型,必须请求GPS权限并打开GPS才可以正确获取到WIFI名称
//获取SSID//完美解决9.0的机型,必须请求GPS权限并打开GPS才可以正确获取到WIFI名称private String getNetConfListForSSID(){String ssid ...
- Matlab Mobile手机版获取gps数据和加速度信号融合
Matlab Mobile手机版获取gps数据和加速度信号融合 前言 安装matlab mobile Matlab Drive Connector 安装 Matlab Mobile 记录数据 Matl ...
最新文章
- python(numpy,pandas5)——numpy中copy 和 deep copy
- stack overflow at line
- 考虑玩家移动速度的射击
- MRI骨水肿是早期未分化关节炎演变为RA的独立预测预测因素
- win7系统找不到我的电脑图标的应对办法
- 自己封装的ASP.NET的SQLITE数据库的操作类
- Error in loadNamespace(name) : there is no package called ‘yaml’
- 转载:真正高人的解读——《三体 读后感》【宇宙尺度的战争】
- tomcat的access日志配置
- python识别手写数字knn_手写数字识别以及Python sklearn KNN实现
- ip变更导致连接不到mysql的解决办法
- pycharm下载思维导图插件 idea mind map
- testflight测试的直播软件,TestFlight - Apple
- 二维坐标基本变换(平移、旋转、缩放、镜像、阵列)
- 适合生产制造企业用的ERP系统有哪些?
- python:小鱼的航程
- Vue3.0源码解读 - 响应式系统
- 狼人杀要做社交,绕不开音视频连麦
- HTML5适合的情人节礼物有纪念日期功能
- Spring Security使用(三) 安全框架内使用QQ登录以及不加安全框架使用QQ登录