Swift

Swift:参ったタヌキは目を見ればわかる?

昔、麻雀に夢中になっていた頃、よくそう言われました。北緯・東経の範囲はアドレッシングできるのに、なぜか南緯・西経は北緯・東経になってしまいます。

これはExifの仕様の問題なのか、AppleのMapKitの解釈上の問題なのか、よくわかりません。2日間、真剣に悩みましたが、ようやくワークアラウンドを見つけました。

まず、MapKit上の取り扱いとして、地図の座標はプラスまたはマイナスの浮動小数点での表記になります。ということは、Exifにしまうときにどういう仕様にするかという問題ということになります。つまり、Exif仕様をどう解釈するかの問題。Exif仕様では次のようにしか書かれていません。

緯度(数値) GPSLatitude

緯度を表す。緯度は、3 つの RATIONAL によって表現し、それぞれ度、分、秒を表す。緯度の表記 を度分秒で表す場合、例として dd/1、mm/1、ss/1 で表現する。度分単位の場合は例として分単 位を小数点第 2 位以下まで表記する場合、dd/1、mmmm/100、0/1 で表現する。

Tag = 2 (2.H) Type = RATIONAL Count = 3 Default = なし

いっそのこと、Googleの地図の座標表記にしてほしかった。こういうとき、なぜGoogleが支持されてきたか、理解できます。

この問題解決を図っている間に、幾つかのバグと単純ミスを検出し、修正しました。

単純になっていないロジックは決まって障害を隠し持っています。次に見たとき追いにくいコードは、ロジックがすっきりせず、迷いがあり、バグっています。単純であること、きれいであることには、それなりに大きな意味があります。

間違いは学習する最良の機会ですが、この年齢になってしまうと何か身につけたところですぐに剥がれてしまうので、若い頃とは違う苦痛が伴います。

参考:
位置情報対応プログラミングガイド.pdf
MKMapView のメモ

Categories: Swift, 技術