◯ CakePHP3 写真から位置情報(GPS)を取得するサンプルコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | 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; } } |