フォーム内のアドレス補完のためのサービスの比較

アドレスのオートコンプリート








Habréでは、形式(1、2、3)のアドレスの自動補完の問題が繰り返し提起されました。



しかし、ここで私は小さなオンラインストアにそのような自動補完を実装するタスクに直面しました。 基準は次のとおりです。





しかし、どのデータソースを選択するのでしょうか? 4つを選択し、それらを比較することにしました。海外のリングの1つのコーナーであるGoogle GeocodeGoogle Autococomplete 、および他の国内のKLADRのクラウドDaDataプロンプト



免責事項:著者は提示されたサービスの開発者とは何の関係もありません。





Google Geocode(Google Maps API)



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 Geocodeによる自動補完






ユーザーがなんてナンセンスだろうと、Googleは「モスクワ、ロシア」を提供します。 さらに、彼は3番目または4番目の文字を入力した後にのみ、通りの名前を提供し、その前にはすべて同じ「モスクワ、ロシア」。

「bounds」パラメーター(ジオコーディングするフレームの南西および北東隅の座標)を使用して結果を制限できますが、これは厳密な制限ではないため、結果は他の領域から表示されます。



もちろん、アドレスをオートコンプリートすることを意図していないサービスから奇跡を期待するべきではありませんが、それでも要約します:

信頼できるデータソース

データをリクエスト/配信するための便利な方法(通常のGETでリクエスト、戻る-JSON)

コンポーネント(国、地域、都市、通り、家)による1行の自動補完や受信データの内訳も可能です。



検索を制限するのは難しい

サービスは自動補完を目的としていません



試す(jsFiddle)



Google Autocomplete(Google Places API)



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.ru








DaDataサービスのヒントを思い出したように、私はすでに自分の夢のサービスを見つけることに必死で、Google Geocodeに戻るところだった。



すぐに比較に移動します。

単一行の補完が可能

あなたが通りの最初の文字を入力し始めると、彼はすぐにこの通りの家番号を提供します

クラウド内のCLADER






ロシアの開発者

コンポーネントによる受信データの内訳(インデックスとコードKLADRおよびOKATOを含む)



不明なデータベース

無料のユーザーは、100%の稼働時間を保証されません

非自明のデータ要求形式(GETではなくPOST)

リーンAPI



+ボーナス:名前のオートコンプリートも。



しかし、モスクワでのみ制限を整理する方法は? クエリパラメータの先頭に「モスクワ」を渡すことほど良いものは思いつきませんでした。 そしてそれはうまく動作します:





試す(jsFiddle)



その結果、私は個人的に、最後のオプションに留まり、同時にオートコンプリート名を使用することにしました。 確かに、誰もが独自のタスクを持ち、特定のタスクごとに独自のツールが必要だと思います。



All Articles