実は初めてiPhoneで位置情報をGPSで取得し、それを投稿するシステムを作った。投稿後はMySQLというデータベースに格納され上記のようにGoogle Masp API v3を使って位置情報を登録した地点にカエルマークを表示しています。
これが、こんなに精度が良いのか!と思われたのは、この交差点の角。
日本工学院の正門前の交差点でやってみたんですが、2〜3mの誤差もありそうな気がしますが、いい線行っていると思います。
実は内部的にはiPhoneから取得できる緯度経度の小数点以下6桁から下は切っています。というか、小数点以下の桁数が異常にあって、これは誤差範囲だからどちらにしても切ってしまって良いのだろうかと思っています。
なぜならば、少し根拠が違うかもしれませんが、
Google マップと PHP/MySQL を使用 – Google Maps API ファミリー – Google Codeより引用:
Google マップの現在のズーム機能では、小数点以下 6 桁までの精度しか必要ありません。作成するテーブルの保存に必要な容量を最小限に抑えるため、lat
属性とlng
属性をサイズ(10,6)の浮動小数点数として指定できます。これにより、小数点以下 6 桁と整数部 4 桁(たとえば -123.456789 度)をそのフィールドで保存できます。
という話がありました。これは2007年4月の記事ですが、もっと新しい記事でも同じような表現がありました。
PHP/MySQL と Google Maps API for Flash の使用 – Google Maps API ファミリー – Google Code
MySQL テーブルの作成時には、lat
属性とlng
属性に特に注意することをおすすめします。Google マップの現在のズーム機能では、小数点以下 6 桁までの精度しか必要ありません。作成するテーブルの保存に必要な容量を最小限に抑えるため、lat
属性とlng
属性をサイズ(10,6)の浮動小数点数として指定できます。これにより、小数点以下 6 桁と整数部 4 桁(たとえば -123.456789 度)をそのフィールドで保存できます。
これは2008年9月のもので、同じように「小数点以下 6 桁までの精度しか必要ありません。」とのこと。
じゃあ、それでいいかーってことで、MySQLのテーブル構造も変えました。
結論から言えば、必要な桁数だけのデータベースに格納するということで、decimal(10,6)という形で緯度経度の格納場所を指定してやれば良いかと思います。
コメント
質問がありコメントします。
楽天、ヤフーショッピング、アマゾンなどを一括検索して表示するアフィリエイトをしたいと検索していたところ、貴ブログの2009 年 1 月 29 日にたどり着きました。コメントのやりとりの中で、「楽天APIとバリューコマースAPIとのコラボ」というのは検索結果が楽天とバリュコマ、つまり楽天とヤフーショッピングとAmazon・・・などの検索結果をごちゃまぜにして表示する、というイメージで良いでしょうか?」という記述があります。正にそういう機能が欲しいのですが、何か良い方法はないでしょうか?
素人的な質問で恐縮です。アドバイス頂けましたら幸いです。