現在、オンラインExifリーダーのウェブサイトを製作中。
さっき解決したエラーが一つあったので書いておきます。このミスのためにどれだけ時間を費やしたことか・・・org
そのエラーとは、Exifに埋め込まれたGPS情報を読み出してみると、実際の場所と違う地点を指している、ということ。
ExifのGPSデータをPHPで読み出してみると、その値は
["GPSVersion"]=>
string(4) " "
["GPSLatitudeRef"]=>
string(1) "N"
["GPSLatitude"]=>
array(3) {
[0]=>
string(4) "34/1"
[1]=>
string(4) "35/1"
[2]=>
string(8) "4963/100"
}
["GPSLongitudeRef"]=>
string(1) "E"
["GPSLongitude"]=>
array(3) {
[0]=>
string(5) "135/1"
[1]=>
string(4) "30/1"
[2]=>
string(8) "5756/100"
}
["GPSMapDatum"]=>
string(6) "WGS-84"
["GPSProcessingMode"]=>
string(16) "ASCII AFLT-FIX"
のようになっています。この GPSLatitude と GPSLongitude がそれぞれ緯度・経度を表していて、配列の[0]は度、[1]は分、[2]は秒を表しています。
これをPHPで操作するのに、余分な /1 や /100 を削り、一つの 135.305736 といった値にすればOKだと思ってたのですが、なぜかずれてしまい、「大阪市住吉区」を指すはずが「大阪市泉南郡」を指してしまうという状態に・・・org
そして、緯度・経度の数値には10進数表記と60進数表記の2種類があることにやっと気づきました。
- $lat = floatval($exif['GPSLatitude'][0])
- +floatval($exif['GPSLatitude'][1]) / 100
- +(floatval($exif['GPSLatitude'][2])/1000000);
- $lon = floatval($exif['GPSLongitude'][0])
- +floatval($exif['GPSLongitude'][1]) / 100
- +(floatval($exif['GPSLongitude'][2])/1000000):
のようにしていたのを
- $lat = floatval($exif['GPSLatitude'][0])
- +floatval($exif['GPSLatitude'][1]) / 60
- +(floatval($exif['GPSLatitude'][2])/360000);
- $lon = floatval($exif['GPSLongitude'][0])
- +floatval($exif['GPSLongitude'][1]) / 60
- +(floatval($exif['GPSLongitude'][2])/360000):
とすることでうまくいきました。