php 图片定位,php解析获取图片经纬度定位信息,拍摄时间,宽高(使用高德地图接口)...

get_img_info($img_url,$key);

echo json_encode($info);exit;

}

/**

* 输出结果

{img_time: "1970-01-01 08:00:00",

latitude: 23.120341666667,

longitude: 113.32146388889,

address: "广东省广州市天河区冼村街道高德置地广场写字楼A座(高德置地广场·春)通用电气大厦",

province: "广东省",

city: "广州市",

district: "天河区",

township: "冼村街道",

senic_spot: "通用电气大厦",

height: 3024,

width: 4032

}

*/

/**

* $img_url图片地址

* $gaode_key高德地图key

* 返回值:图片定位信息,拍摄时间,宽高

* 先解析出图片的经纬度,然后根据经纬度使用高德地图提供逆向地理编码接口获取定位信息;

* 需在高德申请key

* 高德接口地址:http://lbs.amap.com/api/webservice/guide/api/georegeo

*/

class ImgHelper{

public function get_img_info($img_url,$gaode_key){

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

if ($exif === false) {

return false;

} else {

$latitude = $exif['GPS']['GPSLatitude']; //纬度

$longitude = $exif['GPS']['GPSLongitude']; //经度

$GPSLatitudeRef = $exif['GPS']['GPSLatitudeRef']; //南半球 S 北半球 N

$GPSLongitudeRef = $exif['GPS']['GPSLongitudeRef']; //东半球 S 西半球 N

//计算经纬度信息

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

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

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

* 需在高德申请key

* 高德接口地址:http://lbs.amap.com/api/webservice/guide/api/georegeo

*/

$url = "http://restapi.amap.com/v3/geocode/regeo?key=$gaode_key&location=$longitude,$latitude&poitype=&radius=10000&extensions=all&batch=false&roadlevel=0";

$res = file_get_contents($url);

$res = json_decode($res, true);

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

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

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

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

$township = $res['regeocode']['addressComponent']['township'];

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

$senic_spot = $res['regeocode']['aois'][0]['name'];

}

//图片拍摄时间

$time = date("Y-m-d H:i:s", $exif['FILE']['FileDateTime']);

//图片宽高

$imgsize = getimagesize($img_url);

$width = $imgsize[0];

$height = $imgsize[1];

$data = array(

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

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

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

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

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

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

'district' => $district,//区

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

'senic_spot'=>$senic_spot,//景点名称

'height'=>$height,

'width'=>$width

);

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

}

}

?>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值