私はあなたのために型破りなアイデアを持っています。これは、あなたが期待することとは正反対の順序で行われるため、初めて考えるときは非常に奇妙です。ただし、ロジックが表示される場合があります。
それを実行に移すには、ユーザーに見てもらいたいものの幅広いカテゴリが必要です。たとえば、「スーパーマーケット」に行きます。
nearSearch と呼ばれる Google プレイスの一部として、すばらしい API があります。その本当の不思議は、距離で場所をランク付けできることです。これを活用していきます。
前提条件
- データベースを変更し、nearSearch プレイスで返された一意の ID を保存します。これは ToS に違反するものではなく、これが必要になります
- それらの ID のリストを取得します。
計画
ユーザーの位置を取得したら、nearSearch でカテゴリをクエリし、次の制約を使用して結果をループします。
- 結果の ID がデータベース内の何かと一致する場合、その結果が得られます。ボーナス #1: 距離の昇順で並べ替えられます! ボーナス #2: すでに lat-loc を取得しています!
- 結果の ID が一致しない場合は、黙ってスキップするか、使用してデータベースに追加することができます。これは、追加のボーナスとして、手作業をほとんどまたはまったく行わずに、文字通りデータベースをオンザフライで更新できることを意味します。
リクエストを実行すると、結果に表示されなかった ID が表示されます。Google のデータで最も遠い結果のポイント間の距離を計算すると、ポイントからの最大距離が得られます。これが小さすぎる場合は、ここで説明した手法を使用して複合検索を行います。
唯一の要件は、何を探しているかを大まかに知る必要があるということです。ただし、これを考慮してください。通常のクエリ サイクルでは、1 ~ 100 の Google クエリが必要です。私の方法では、半径 50km に対して 1 が必要です。:-)
ちなみに、距離を計算するには、郵便番号の検索ではなく、Haversine の式が必要です。これには、真に国際的であるという追加の利点があります。
重要な注意事項
この検索方法は、知っている場所と距離の間のトレードオフに直接依存します。半径 10km 未満を探している場合は、このメソッドを使用して 1 つのリクエストのみを生成します。
ただし、複合検索を行う必要がある場合は、リクエスト サイクルごとに 3N のコストがかかることに注意してください。ここで、N は最後のサイクルで生成されたクエリの数です。したがって、半径 100 km 内に 3 か所しかない場合は、それぞれの場所を個別に検索する方が理にかなっています。