Googleジオコーダがどのように機能するのか不思議です。Googleジオコーダはどのように機能しますか?
私は、geocommons' geocoderまたはPostGIS's new Tiger Geocoderのようなオープンソースジオコーダーのいくつかの実装を研究しています。これは私がこれまでに知っていることです(私が宿題をやっていることをうまく証明するためです):
オープンソースのジオコーダーのコアには、3つの主要な要素があります。
1.-任意の文字列を受け取り、それを正規化アドレス正規化(taking the example from here):
normalize_address('address string');
e.g.: SELECT naddy.* FROM normalize_address('29645 7th Street SW Federal Way 98023') AS naddy;
address | predirabbrev | streetname | streettypeabbrev | postdirabbrev | internal | location | stateabbrev | zip | parsed
---------+-------------+-----------------------+------------------+---------------+----------+----------+-------------+-------+--------
29645 | | 7th Street SW Federal | Way | | | | | 98023 |
と:
2.-名のいくつかの魔法のファジーマッチングを行いジオコーダコアアルゴリズムはLevenshtein Distanceです。
好例は、それが単語の子猫と座っ間のレーベンシュタイン距離を算出するWikipediaの記事(つまり、他に1つの文字列を変更するために必要な編集の数であるので、距離は3である)からのものである:
kitten → sitten (substitution of 's' for 'k')
sitten → sittin (substitution of 'i' for 'e')
sittin → sitting (insertion of 'g' at the end).
3 - 家のどこにあるかを推測するために、最後にストリートセグメントを補間します。この例を作成するには無料のCensus Tiger street datasetのチャンクをダウンロードしました。上記の例で
、関心の街路セグメント(シェーファーヒルズDR)は上の終了ノード、300(そう300シェーファーヒルズDR)から始まり、ノードからを有します400(400 Schaeffer Hills Drv)。私がこのSchaeffer Hills Drvに合っていて、リクエストが通り310だった場合、アルゴリズムは私の緑色の矢印があるところまでinterpolate(それの10%をトラバースする)になります。
これは、オープンソースのジオコーダツールの機能です。それにもかかわらず、Googleはそれよりもはるかにスマートで、伝統的でないヒントをすべて使用しています。
どのようにですか?
たとえば、680 Mission st(市、州、郡、何も指定しない)と入力できます。標準アドレス正規化器のほとんどは、あまりにも多くの一致を見つけるために爆発するでしょう。私はSFにいるので、私はと推測しています。 googleは私のIPを使ってgeoip-like informationを取得しています。some expanding boundingは、あいまい検索のヒントとして、すぐに一致する最も近いセグメントを見つけ、それは私の答えです!)。
Googleジオコーダの動作方法について、私が上記で説明した技術の他にどのように作用するかを明らかにする答えを探しています。
更新:
OK、これまでのところ、我々はヒント
- を記載されているヒントの2種類がありますが。
- 他にもありますか?
私はsuspec正確な情報のない者は、機密保持契約に違反することなく、あなたの質問に答えることができます。 –
あなたはこの質問をここで尋ねる方がいいかもしれません:http://gis.stackexchange.com/ –
@ Suvi私はgis.stackexchangeについて知っています。それにもかかわらず、このフォーラムにはより多くの目が揃っており、私はそれができることを期待していました: -/ – rburhum