私はこれまでにいくつかの読書をしました、そして私は岐路に立っています。
私の状況はこれです:
- 半径のあるlat/lng値(これらを「都市」と見なすことができます)のリストを含むテーブル
- lat/lngを含む移動値のリストを含むテーブル
私の要件は、移動のリストを返し、最も近い都市を含めることです(半径内にある場合)。これまで、PHPの半正矢関数を使用して、返すレコードごとにこれを実行しましたが、特に効率的ではありません。
私が見つけた2つのオプションは、次のいずれかです
。1 / MySQLでストアドプロシージャを作成して、その側のHaversineを実行します(このようなもの:近接検索)
2/円の代わりに都市を配置する「バウンディングボックス」方式を使用します。これは大きな問題ではなく、SQLを単純化することができます。
ただし、場合によっては、ポイントが左上と右下の間にあるかどうかを判断する一般的なロジックは、latとlngが負の場合に機能しないことがあります。PHPでは、これを回避するために、左上のlat / lngが右下よりも大きいかどうかを確認する簡単な「if」を実行し、結果に応じてAND/ORを使用します。