http://qa.atmarkit.co.jp/q/2309
qa内での引用元はstackoverflowのこれ。
http://stackoverflow.com/questions/5584602/determine-timezone-from-latitude-longitude-without-using-web-services-like-geona
って言ってる。
- Download the database of cities from geonames.org
- convert it to a compact lat/lon -> timezone list
- use an R-Tree implementation to efficiently lookup the nearest city (or rather, its timezone) to a given coordinate
この都市情報はすげー役に立つ。
データはタブ区切りのデータになっているのでExcelやらawkやらで必要なところだけを切り取る。
私は3行目の都市名、5行目の緯度、6行目の経度、18行目のタイムゾーンだけの簡易リストを作る。
この次が…。
R-Treeのロジック作れってあるんだけど
二分木レベルお勉強中の自分のレベルじゃわからず…。
pythonにはrtreeなんてパッケージもあるよう。
これみてないけど、これつかっても解決できるかもしれない。
http://shibaok.net/index.php?prog%2Fpython%2Frtree
データをMySQLとかにつっこんでとりあえずプロトタイプを作りたいのでオーダーやフルスキャンをおそれずにこれを参考にさせてもらった。
http://ziddy.japan.zdnet.com/qa6032321.html
適当にテーブルを作る。DBに保存している緯度経度リストが格納されているテーブル名が「location」
緯度が「latitude」フィールド、経度が「longitude」フィールドに格納されていたとしまして
以下のようなSQL文を実行すれば結果はだいたい近い順に並びますので
その一番上が一番近い1件となります。
SELECT * FROM `location` ORDER BY ABS(`latitude` - [調べたい緯度]) + ABS(`longitude` - [調べたい経度]) ASC
mysql> create table location ( city varchar(255), latitude double(10,5), longitude double(10,5));
さっき作った簡易リストをロードデータにして取り込み。
mysql> LOAD DATA LOCAL INFILE 'C:\\Users\\user\\Desktop\\city_lat_long_timezone.txt' INTO TABLE location FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\r\n' IGNORE 1 LINES;
これで引用したクエリにlimit 1 とかつけて投げれば期待値は返る。
パフォーマンス…。
0 件のコメント:
コメントを投稿