Habréでは、形式(1、2、3)のアドレスの自動補完の問題が繰り返し提起されました。
しかし、ここで私は小さなオンラインストアにそのような自動補完を実装するタスクに直面しました。 基準は次のとおりです。
- モスクワのみでの住所記入
- 単一行アドレス補完
- ソリューションは無料である必要があります(リクエストの制限は1日あたり少なくとも1000です)
- 追加のJSライブラリなしで接続する機能。 (フォーム補完を実装するTypeaheadディレクティブを持つAngularJS Bootstrap-UIを使用します)
- 絶対稼働時間はオプションです
しかし、どのデータソースを選択するのでしょうか? 4つを選択し、それらを比較することにしました。海外のリングの1つのコーナーであるGoogle GeocodeとGoogle Autococomplete 、および他の国内のKLADRのクラウドとDaDataプロンプト 。
免責事項:著者は提示されたサービスの開発者とは何の関係もありません。
Google Geocode(Google Maps API)
AngularJS Boostrap UIのドキュメントのTypeaheadプラグインの例では、住所の自動補完に使用されたのはGoogle Geocodeでした 。 既製のコードがある場合は、試してみませんか?
パラメータを使用してアドレスhttp://maps.googleapis.com/maps/api/geocode/jsonに getリクエストを行います
params: { address: val, sensor: false, language: 'ru' }
それに応じて、jsonを取得して解析しますが、すべて問題ないようです。 ただし、検索範囲をモスクワに限定するだけです。 追加:
components: 'country:ru|administrative_area:Moscow'
パラメータに追加し、興味深い動作を取得します。
ユーザーがなんてナンセンスだろうと、Googleは「モスクワ、ロシア」を提供します。 さらに、彼は3番目または4番目の文字を入力した後にのみ、通りの名前を提供し、その前にはすべて同じ「モスクワ、ロシア」。
「bounds」パラメーター(ジオコーディングするフレームの南西および北東隅の座標)を使用して結果を制限できますが、これは厳密な制限ではないため、結果は他の領域から表示されます。
もちろん、アドレスをオートコンプリートすることを意図していないサービスから奇跡を期待するべきではありませんが、それでも要約します:
信頼できるデータソース
データをリクエスト/配信するための便利な方法(通常のGETでリクエスト、戻る-JSON)
コンポーネント(国、地域、都市、通り、家)による1行の自動補完や受信データの内訳も可能です。
検索を制限するのは難しい
サービスは自動補完を目的としていません
試す(jsFiddle)
Google Autocomplete(Google Places API)
Google Autocompleteから、私は最初から一緒に成長していませんでした:通常のGETで情報を要求すると、GoogleサーバーはCORSエラーで応答し(Origin ...はAccess-Control-Allow-Originでは許可されません)、APIの第3バージョンのリリース後にJSONPをサポートしません。 Web開発でJSライブラリを使用するために、これが特に行われたと言う人もいます。 もちろん、データを通過させるプロキシを作成することもできますが、そのような些細なことを気にしないことにしました。
しかし、比較客観性のために、私はまだJSライブラリを通してGoogle Autocompleteを試しました。 要約すると:
信頼できるデータソース
単一行の補完が可能
接続が簡単(JSライブラリを使用する場合)
CORSが原因で、フロントエンドからAPIにアクセスできません
検索を1つの都市に厳密に制限することはできません(国のみを厳密に制限することも、「bounds」パラメーターを使用して緩やかに制限することもできます)
試す(jsFiddle)
クラウド内のCLADER
クラウド内のKLADRは 、ハブで繰り返し言及されている国内サービスです
個人的には、私には不適当であることが判明しました。 1行の補完は許可されません。 地域、都市、道路、家番号のいずれかを検索できますが、これらすべてを1行で検索することはできません。 つまり、1つのフォームを複数に分割するか、モスクワのストリート名のみで検索する必要があります。
これは私には合いませんが、長所と短所を挙げます。
信頼できるデータソース(CLADR)
継続的なデータベース更新
ロシアの開発者
良いAPI
オープンソース
単一行の補完は不可能
ここで試すことができます
DaDataのヒント
DaDataサービスのヒントを思い出したように、私はすでに自分の夢のサービスを見つけることに必死で、Google Geocodeに戻るところだった。
すぐに比較に移動します。
単一行の補完が可能
あなたが通りの最初の文字を入力し始めると、彼はすぐにこの通りの家番号を提供します
ロシアの開発者
コンポーネントによる受信データの内訳(インデックスとコードKLADRおよびOKATOを含む)
不明なデータベース
無料のユーザーは、100%の稼働時間を保証されません
非自明のデータ要求形式(GETではなくPOST)
リーンAPI
+ボーナス:名前のオートコンプリートも。
しかし、モスクワでのみ制限を整理する方法は? クエリパラメータの先頭に「モスクワ」を渡すことほど良いものは思いつきませんでした。 そしてそれはうまく動作します:
- 通りに入るとき、モスクワには明らかに何もない
- ユーザーがリクエストの最初に「モスクワ」と入力した場合でも、すべてが配置されています
試す(jsFiddle)
その結果、私は個人的に、最後のオプションに留まり、同時にオートコンプリート名を使用することにしました。 確かに、誰もが独自のタスクを持ち、特定のタスクごとに独自のツールが必要だと思います。