失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > php exif gps php exif_read_data() 获取GPS

php exif gps php exif_read_data() 获取GPS

时间:2023-06-29 06:20:42

相关推荐

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./geocoder/v2/

*/

$url = "http://api./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》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。