if(function_exists('date_default_timezone_set')){date_default_timezone_set('Hongkong');}
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]);
}
}
echo '<pre>';
print_r(ImgHelper::get_img_info('111133333.jpg','111111222223333'));
echo '</pre>';