7

Web サイトで住所のオートコンプリートを作成するために、Google Places API を使用する予定です。私の質問は、私の要件が Google プレイスを使用して可能かどうかについてです。

ユーザーが住所 (都市、通り、番地) を投稿する「投稿リクエスト」ページがあります。ユーザーが都市に応じて投稿を検索できる「検索」ページもあります。ここでは、ユーザーは番地や番地なしで都市名のみを挿入します。

私の質問:

  1. ユーザーに市区町村、番地、番地を強制的に挿入させることはできますか (市区町村のみ、または市区町村と番地のみを挿入すると、無効な入力が警告されるか、オートコンプリートで市区町村、番地、番地の結果のみが返されます)。

  2. ユーザーに強制的に都市のみを挿入させることはできますか (番地と番地なし)?

  3. ユーザーが「MyCity, MyStreet 12」というアドレスを投稿したとします。アプリケーションのバックグラウンドで、この特定の場所の ID を取得して保存します。別のユーザーが投稿を検索し、「MyCity」を挿入しています。バックグラウンドで、「MyCity」の特定の ID を取得し、この ID を使用してデータベースを検索します。「MyCity」キーを使用して、最初のユーザー「MyCity、MyStreet 12」の結果を見つけるにはどうすればよいですか?
    つまり、都市を表すロケーション ID と、完全な住所 (都市、通り、番地) を表す他のロケーション ID があると仮定すると、ID のみを使用して完全な住所が都市に属しているかどうかを確認するにはどうすればよいでしょうか?

4

3 に答える 3

10

Autocompleteユーザーが開発ガイドに関連付けられている入力ボックスに入力する内容に関しては、入力内容を制御するためにできることはあまりありません。Autocompleteただし、 api-docを設定するときに、返される結果を制御するオプションを定義できます。typesあなたにとっての鍵は、オプションを正しく設定することです。

質問#1に固有に、次の例に示すようにに設定することで、Autocompleteアドレスに返される結果を制限できます。typesgeocode

var defaultBounds = new google.maps.LatLngBounds(
  new google.maps.LatLng(-33.8902, 151.1759),
  new google.maps.LatLng(-33.8474, 151.2631));

var input = document.getElementById('searchTextField');
var options = {
  bounds: defaultBounds,
  types: ['geocode']
};

autocomplete = new google.maps.places.Autocomplete(input, options);

質問#2に固有に、次のように設定することで、に戻ってくる結果Autocompleteを都市に制限できます。typescities

var input = document.getElementById('searchTextField');
var options = {
  types: ['(cities)'],
  componentRestrictions: {country: 'fr'}
};

autocomplete = new google.maps.places.Autocomplete(input, options);

Autocompleteまた、に制限されているため、都市を検索する国(この場合はフランス)を設定するための指定子を(cities)追加し、指定子を削除したことにも注意してください。componentRestrictionsbounds

次のUML図に示すように、質問#3に固有に、2つのテーブルを作成できます。1つは都市データを格納し、もう1つは住所データを格納します。

ここに画像の説明を入力してください

質問の説明に基づいて、この設計にはいくつかの重要な側面があります。

  • からへは1対多の関係がありCityますAddressAddressこれにより、多くのレコードを1つのレコードに関連付けることができますCityAddressまた、任意のに入力されたすべてのレコードを簡単に取得できるようになりますCity
  • Addressとの間の関係はCityすべて Addressに対して、Cityが存在する必要があることを示しています。つまり、ユーザーがを入力するときは、次のアクションを実行する必要があります。1-データベースにがすでに存在するAddressかどうかを確認します。2-存在する場合は、それを取得し、新しいを格納するときに外部キー値として使用します。3-が存在しない場合は、の新しい一意を作成し、データベースに保存する必要があります。次に、forを格納するときに外部キー値として使用できます。すべてに関連付けられていることを確認するCityAddressCity IDCity-IDAddressCity IDCityCityIDCityCity-IDAddressAddressCity質問の一部として尋ねる質問の1つに答えます#3:最初のユーザーの結果を見つけるにはどうすればよいですか:「MyCity」キーを使用して「MyCity、MyStreet12」?「MyCity、MyStreet 12」Adressレコードを保存したときに、「MyCity」レコードがCityテーブルに存在することを確認したためです。別のユーザーが同じものを入力した場合、または同じものに関連付けられたものが将来ユーザーによって入力された場合、のIDの取得Cityは簡単です。CityAddressCity
  • Cityとの間の関係はAddress、いずれの場合も、関連付けられたレコードCityが0個以上ある可能性があることを示しています。これにより、フォローアップ検索が行われなくてもAddress、aだけを検索する説明内のユーザーCityが保存できるようになります。は保存され、があり、後で追加される可能性のある新しいレコードを待機しているだけです。CityAddressCityIDAddress

最後に、質問3の一部としてもう1つ質問しました。IDのみを使用して、完全な住所が都市に属しているかどうかを確認するにはどうすればよいですか。この質問に答えることができるCity-IDのは、すべてのAddressレコードの一部である外部キーがある理由です。Cityに関連付けられているを明確に定義しますAddress。したがって、foraとforaがある場合、それらが一致するかどうかを判断する最も簡単な方法は次のとおりです。1-IDデータベースからを使用してを取得します。2-データベースから取得したばかりの値の一部である値を、最初に使用した値と比較します。それらが一致する場合、あなたはに関連付けられていることを知っていますCityIDAddressAddressAddress IDCity-IDAddressIDCityAddressCityそれらが一致しない場合は、それとそれの間に関係がないことを確認できAddressますCity

住所や都市で何を達成しようとしているのか完全にはわかりませんが、質問で説明したことをカバーする確実な解決策を提供しようとしました。私はあなたのすべてのポイントが扱われるように、そしてそれが私の説明を明確で理解しやすいものにすることを願って、非常に多くの詳細を含めました。これがお役に立てば幸いです-

于 2012-05-22T09:45:58.877 に答える
0

これは、Google プレイスというより Javascript に関する質問です。

Javascript ルーチンを使用してフォームを検証し、たとえばケース #1 では、すべてのフィールドが入力されていることを確認します。一方、ケース #2 では、入力したくないフィールドを無効化/削除し、送信したいものだけを含むリクエストを投稿できます。

#3 については、単にキャッシングの問題です。localStorage または配列を使用して、都市をキーとして格納し、結果を値として格納します。

于 2012-05-22T05:37:17.753 に答える
0

Sean Mickey が次のように説明しているように、Google プレイスはユーザーが住所をオートコンプリートするのに役立ちます。

  1. 彼らは 1 つのフィールドに住所を入力し始めます
  2. Google は、一致する可能性のある住所のリストを提供します。
  3. 彼らが 1 つ選ぶと、次のような応答が返ってきます。

そのid応答の は、市区町村ではなく、番地になります。したがって、あなたが望む方法では役に立ちません。都市で一致させたい場合は、都市の名前を保存する必要があります(必要に応じて、独自の ID テーブルを作成できます)。

データベースに場所検索を実装する方法を考えてみましょう。

  • 市区町村で検索 (市区町村のすぐ外に住んでいる人を見逃します)
  • 距離で検索 (特定の半径内にいる全員を検索)

距離で検索する場合は、ユーザーが住所を入力したときに Google プレイスが返す緯度と経度も保存する必要があります。また、データベース (特に geodist) で空間検索を行う方法についても読む必要があります。

于 2012-05-26T03:28:35.873 に答える