私は、すべてのユーザーが自分のアドレスを入力すると、ウェブサイトが最も近い人と一致するウェブサイトを作成しています。方向のためにGoogleマップAPIを埋め込みましたが、ウェブサイトはどのようにユーザーと一致しますか?
目標を達成するのに役立つ例や戦略を教えてください。
私は、すべてのユーザーが自分のアドレスを入力すると、ウェブサイトが最も近い人と一致するウェブサイトを作成しています。方向のためにGoogleマップAPIを埋め込みましたが、ウェブサイトはどのようにユーザーと一致しますか?
目標を達成するのに役立つ例や戦略を教えてください。
緯度/経度を取得する方法については、次の URL を参照してください: Get latitude and longitude automatically using php, API
各ユーザーの緯度/経度を DB 内のデータに保存します。
さらに、各ユーザーの COUNTRY を保存することをお勧めします。これにより、クエリが削減されます。クエリの負荷をさらに軽減するために、ZIP/POSTAL などの地域データも保存することを強くお勧めします。
次に、使用しているどの php ページでも、検索しているユーザーの地域データ (上記で説明したように) を既に持っています。そのデータを使用して、同じ ZIP/POSTAL 地域内の他のすべてのメンバーをループし、保存されている緯度/経度をクエリします。
同じ ZIP/POSTAL 地域内の他の緯度/経度を取得したら、次のような関数を使用できます: http://snipplr.com/view/2531/
または、 https://stackoverflow.com/a/7672821/797620で説明されているように、SQL ステートメントを介してこれの多くを実行できますが、そのステートメントを自分でテストしたことはありません。
Google のこのページでは、試してみることができる別の非常に詳細な方法を提供しています: https://developers.google.com/maps/articles/phpsqlsearch_v3
この質問は、PostgreSQL/POSTGIS ソリューションを切望しています。必要に応じて、メタ情報を含むテーブルに緯度経度を保存します。あとは POSTGIS の魔法に任せましょう。
PostgreSQL/Postgis は、これらの地理空間関連のクエリを作成するために最適化されています! 実際、新しいバージョン > 9.1 では、K-Nearest Neighbor 演算子が導入され、N-nearest neighbor を返します (名前の由来):
SELECT * FROM your_table ORDER BY your_table.geom <-> "your location..." LIMIT 10
それは簡単です:)
「<-> は「距離」演算子ですが、ORDER BY 句に表示された場合にのみインデックスを使用します。演算子を ORDER BY に配置してから、LIMIT を使用して結果セットを切り捨てるまでの間に、非常に多くのことができます。非常に迅速に (この場合、2M レコード テーブルで 10 ミリ秒未満)、テスト ポイントに最も近い 10 ポイントを取得します。」