class UsersController extends AppController
{
public function index()
{
// Exif取得(EXIFヘッダを読み込む)
$exif_data = @exif_read_data('画像パス');
// GPS(緯度・経度)取得
if (isset($exif_data) && !empty($exif_data['GPSLatitudeRef']) && !empty($exif_data['GPSLatitude']) && !empty($exif_data['GPSLongitudeRef']) && !empty($exif_data['GPSLongitude'])) {
$gps_lat = $this->exif_get_10_from_60($exif_data['GPSLatitudeRef'], $exif_data['GPSLatitude']);
$gps_long = $this->exif_get_10_from_60($exif_data['GPSLongitudeRef'], $exif_data['GPSLongitude']);
}
// GPS(高度)取得
if (isset($exif_data['GPSAltitude']) && !empty($exif_data['GPSAltitude'])) {
$gps_altitude = $this->exif_convert_float($exif_data['GPSAltitude']);
if (isset($exif_data['GPSAltitudeRef']) && ($exif_data['GPSAltitudeRef'] == '1') && !empty($gps_altitude)) {
// 海抜0m未満だったら
$gps_altitude = ($gps_altitude * -1);
}
}
var_dump($gps_lat); // 緯度:35.728466666667
var_dump($gps_long); // 経度:139.70668055556
var_dump($gps_altitude); // 高度:42.364415862808
}
// Exifの位置情報を60進数から10進数に変換
private function exif_get_10_from_60($ref, $gps)
{
// 60進数から10進数に変換
$data = $this->exif_convert_float($gps[0]) + ($this->exif_convert_float($gps[1]) / 60) + ($this->exif_convert_float($gps[2]) / 3600);
//南緯または西経の場合はマイナスにして返却
return ($ref=='S' || $ref=='W') ? ($data * -1) : $data;
}
// 「x/y」という文字列を受け取り、「x÷y」の結果を返す
private function exif_convert_float($str)
{
$val = explode('/', $str);
return isset($val[1]) ? ($val[0] / $val[1]) : $str;
}
}