2

DBにリストされている場所がユーザーの運転距離にあるかどうかを判断する必要があるWebアプリを設計しています。

これが私が現在使用しているプロセスの大まかな概要です-

  1. GoogleのマップAPIを介してユーザーの現在地を取得する
  2. 私のデータベース(約100)の各場所を調べて、その場所がgooglePlacesAPIを使用してユーザーの運転距離内にあるかどうかを確認します。JSONファイルをPHPで返し、解析して、ユーザーの座標を指定して場所が存在するかどうかを確認します。
  3. 場所がユーザーの運転距離表示の上位の場所にある場合(Googleの場所では20に制限されています)、それ以外の場合は表示されません

このプロセスは、少数の場所を実行している場合は正常に機能しますが、100の場所を実行するとはるかに遅くなり、100のAPI呼び出しが行われます。Googleの現在の1日あたりの通話数は100,000に制限されているため、これは将来的に問題になる可能性があります。

それで、私のデータベースのどの場所がユーザーの運転距離内にあるかを判断するためのより良い方法はありますか?DB内のアドレスを追跡したくないので、Googleに頼りたいです。

ありがとう。

4

2 に答える 2

-1

私はあなたのために型破りなアイデアを持っています。これは、あなたが期待することとは正反対の順序で行われるため、初めて考えるときは非常に奇妙です。ただし、ロジックが表示される場合があります。

それを実行に移すには、ユーザーに見てもらいたいものの幅広いカテゴリが必要です。たとえば、「スーパーマーケット」に行きます。

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 か所しかない場合は、それぞれの場所を個別に検索する方が理にかなっています。

于 2013-04-23T18:33:54.850 に答える