2006年02月22日
invGeocoderのアクセス。
今年に入ってからinvGeocoderのアクセスが急増している模様です(うちのレンタルサーバへの総アクセスの8割を占めてます)。
アクセス急増の理由はMyGMap という、XoopsのGoogleMapAPIのモジュールのオプションの機能の現在地の住所表示機能として利用されているからみたいです。
とても面白い組み合わせだと感心しておりますが、こちらも利用が多いならちゃんとデータのメンテナンスとかの方法も考えないといかんですな。
あと、このアクセスの急増にレンタルサーバの負荷とか大丈夫かどうか心配になったのでちょこっと調査してみました。今のレンタルレンタルサーバのWebとDBが分かれている構成ですが、Web側はまだまだ全然平気みたいです。ただ、どうもDB側で多少負荷になっているみたいです。今後、負荷が増えていくようでしたらDBへの接続回数を減らすような処理でも組み込むかもしれませんです。
つーか、そのうちもっと精度が良くて使い勝手も良いWebServiceが出てきそうですけどね。
投稿者 nishioka : 22:36 | コメント (0) | トラックバック
2005年09月14日
インチキGeocoderプレビュー
先ほどBLOGにアドレスマッチングのSOAP版があるというタレコミ情報を頂きました。
http://www.geoap.jp/service/trial/trial_adrmatch.htm
日本にもついにSOAPのGeocoder誕生ですね。
実は私もひそかにMySQLを使ってGeocoderを作っておりまして、予定では10月くらいまでにテスト版RESTを公開してみたいと思っていたのですが、いつのまにか日本語GeoCoderのWebサービスがいろいろ出てきているようなので、私もちょっぴり頑張っていることをアピールすべくちょっことだけ公開。
http://ws.podzone.net/share/test.cgi
http://ws.podzone.net/share/geocoder.cgi( 改良版 追記参照)
(自宅サーバなので落ちている可能性あり)
住所を入力していただき、データベースに問い合わせて、住所の位置がわかった場合に、GoogleMap API上に表示します。(つまり出来の悪いGooge Mapsの住所検索ですな)
GoogleMap上に吹きだしとして、その住所が正しいかどうかの確認画面がでますので、正しい場合Yes,違う場合はNoをクリックすると返却した住所データが正しいかどうかの情報をサーバに蓄積します。このデータは今後の修正時の参考にします。
※測地系の問題で、GoogleMaps上のアイコンを表示する際に新座標の位置データから旧座標に一律平行移動させていますので数メートル程度の誤差があります。
Google Localや他の商用サービスそして、東大のアドレスマッチングサービスの精度に比べるとまだまだ使い物にならない(今のところ精度が6割強くらい)とは思いますが、プレビューということで弄って頂いてフィードバックしていただけると幸いです。
このGeoCoderの実装について
MySQL+Python+Mecabを利用しています。入力した住所を分かち書きし、それをMySQLの全文検索を使い、一番マッチした住所の緯度経度を返す方式です。この方法は、検索速度が速く文章の揺らぎには強いものの100%の精度を出すことは出来ませんが、Mecabが利用している辞書(ipadic)を住所専用にチューニングしていくことにより徐々に精度を上げていくことができると踏んでいます。(あと、マッチング処理をDBとMecabにやらせるのでプログラムが短いためメンテナンス性も良いと思われる)
問題点・課題も多くありそうですが、その辺をこれから洗い出していき、使えるレベルになりそうでしたら、Webサービス化します。
対応する予定のバグ(直す予定)
- 県から入力しないとダメな場合がある
- 郡部の実装がダメダメ
- 市町村合併への対応。
- 丁目を省いた表記
対応方法が未定の問題(無理かな?)
- 略字の対応(竜・龍などの)
9/20 追記
先ほど気づいたのですが、
Geocoding.jpさんも動き出していますね。精度が全く違います。商用データを使っているようなのでかなり精度が高いです。完敗ですなorz...
(Google先生とほぼ同じような動きをしているような???)
完敗していますが、まああきらめずに、ちょこっとだけ精度を上げたバージョンを提供してみます。
私の作ったテストでは、市レベルでは9割以上の精度が出ていると思います、これ以上の精度向上は、とても泥臭い作業になりそう...
あと、hogemanさんのコメントのとおり、郡レベルでは思いっきり使い物にならん悪寒。役場の住所の街区情報ですら全国の半分も入っていないんじゃないでしょうか?
- 郡・町村に対応
- 9月前半までの合併に対応
- 1-1-1を1丁目1-1に置き換え
投稿者 nishioka : 12:21 | コメント (3) | トラックバック
2005年07月12日
invGeocoder のRESTを作ってみました。
InvGeocoder用のWebServiceにむけての第一段としてREST化してみました。
WebServiceは入門書を斜め読みしただけ、RESTもWeb上のリソース読んだだけなのであんまりよく分かっていません。見当違いのことをしていたら申し訳ありません。
WebServiceアドレス
http://nishioka.sakura.ne.jp/google/ws.php
引数のリスト
| パラメータ | 値 | 説明 |
|---|---|---|
| lat | 緯度の値 | 10進緯度(ex 35.9955)または度分秒緯度(ex 37度0分36.5秒) |
| lon | 経度の値 | 10進経度(ex 135.9955)または度分秒経度(ex 137度0分36.5秒) |
| px | 任意のX座標 | 任意座標のX値を指定。ただし、sridの設定が必須 |
| py | 任意のY座標 | 任意座標のY値を指定。ただし、sridの設定が必須 |
| srid | 投影法の識別子 | 任意座標での検索を行う場合の投影法の識別子を指定。任意座標を利用する場合に必須. |
| format | simple or gxml | 出力の形式simle 住所情報を持つ適当なXMLとG-XMLを選択できます。G-XMLについてはいまのところテスト的な実装です |
| version | 0.1 | WebServiceのVersionを指定します。Versionがあがった場合でも出力するXMLの内容の互換性を保つためにあります。 |
example
http://nishioka.sakura.ne.jp/google/ws.php?lon=137.243183&lat=35.091722&format=simple
かえってくるXMLの説明(Simple)
<?xml version='1.0' encoding='UTF-8' ?>
<geometry>
<version>0.1 </version>
<point>
<lat>35.09491 </lat> <------ 住所(返却値)の緯度
<lon>137.229332 </lon> <------ 住所(返却値)の経度
<address>愛知県豊田市矢並町香沢253 </address> <------ 住所(返却値)
<pref>愛知県 </pref>
<city>豊田市 </city>
<town>矢並町香沢 </town>
<number>253 </number>
<distance>1311.58281657</distance> <------ 検索位置(入力値)と住所(返却値)との距離(m)
</point >
</geometry >
注意書き
- WebServiceの利用に制限はありません(将来的にID管理くらいはしたい。)
- サービスの提供期間はレンタルサーバの契約期間、または僕のやる気に依存します。
- 負荷がかかるほど利用されるとは思いませんが、負荷が多いようなら何らかの対応をします。
- サービスが止まってたらごめんなさい。
- 次はSOAPを作りたい(未定)
投稿者 nishioka : 22:31 | コメント (7) | トラックバック
2005年07月07日
Google Codeの ajaxsltを試してみました。
しこしこと作成しているこちらにAjaxとGoogle codeの ajaxsltを組み込んでみました。
1.地図をクリックしたときにAJAXで住所を取得する。
2.検索をGoogle Apiを選択した場合、AJAXで取得したXMLをajaxsltで展開。
ってな流れです。
正直XSLT使うほどのXMLでもなかったのでDOMで全部やっても良かったんですけどね。
他にもWebサービス化に向けて緯度経度から住所を取得する部分をXML呼び出しに変更したりと細かいところを拡張・変更してますけど、こちらももう眠いので説明は省略。
http://nishioka.sakura.ne.jp/google/map.php
投稿者 nishioka : 00:31 | コメント (0) | トラックバック
2005年06月08日
InvGeocoderのメモ1
先のエントリの逆Geocoderですが、ぼちぼちと頑張ろうと思ってましたが、ここギコさんに取り上げられたおかげで結構なアクセスがあり気合が入っています、これが瞬間最大風速にならないようにしっかり機能を拡張して見捨てられないように頑張りますよ。
http://nishioka.sakura.ne.jp/google/index.php
今日の新機能
入力値と近接街区の距離を表示するようになりました。
これで検索結果の信頼度の目安になると思うし、緯度経度間の距離計測はいろいろ使い廻せそうなので早速実装してみました。
距離計測はレンタルサーバに構築している都合上、PostGISのlength_spheroid なんて気の利いた関数を使うことが出来ないのでPHPで計算させました。球面三角法を使用しましたので計算自体の精度は高いはずですが、GRS1980の離心率の算出方法(概念を含めて)が良くわからないので多少誤差があります orz ... もうちょっと調べてみます。
他にはエラーとかの表示部分を調整したので幾分わかりやすくなったと思います。
20080427
リバースジオコーダサービスとしてはすでに、データソースが古くなっています!!!
http://refits.cgk.affrc.go.jp/tsrv/jp/rgeocode.html
http://www.alpslab.jp/api_altitude.html
上記のサービスの方が、データのフレッシュ度、パフォーマンスが良いと思います。
Daily 11万あるので、もうレンタルサーバでは無理っす。すいません。
投稿者 nishioka : 08:48 | コメント (0) | トラックバック