0

私はテーブルがで、何千もの店舗があります。店舗ごとにlatlngdelivery_radiusがある場合は(point列を追加することができます)、どの店舗が現在の店舗に配送できるかを確認する最も効率的な方法は何ですか?設定ポイントに配信するすべての行を検索するためのMySQL空間クエリ

自分と各行の距離がdelivery_radiusよりも小さいかどうかを確認することは非常に長いプロセスになると感じています。各行の情報から計算されたポリゴンを格納するカラムを追加し、現在のポイントがそのポリゴン(ポイントポリゴン)に含まれているかどうかを確認するのが最善でしょうか?その他の提案はありますか?

答えて

1

SQLクエリで次のコードセグメントを使用すると、2つのジオポイント間の距離を取得できます。

ROUND((3959 * acos(cos(radians(IFNULL(P1.LAT, 0))) * cos(radians(IFNULL(P2.LAT, 0))) * cos(radians(IFNULL(P2.LNG, 0)) - radians(IFNULL(P1.LNG, 0))) + sin(radians(IFNULL(P1.LAT, 0))) * sin(radians(IFNULL(P2.LAT, 0))))),3) AS DISTANCE 

ただし、これは非常にコストがかかる操作であり、データが大きくなると間違いなくパフォーマンスの問題が発生します。ポリゴンを新規に追加するたびにポリゴンを更新する必要があり、データが大きくなると更新プロセスが急激に遅くなるため、ポリゴンを維持することも難しい場合があります。

RDMBSでこれを使用する必要がない場合は、この種の操作をネイティブにサポートするelasticsearchなどの他のテクノロジーを使用することを検討してください。参考にしてくださいhttps://www.elastic.co/guide/en/elasticsearch/reference/current/geo-queries.html

+0

多角形を誤解している可能性があります。これは、すべての店舗を含む単一のポリゴンではありません。これは、各店舗用に保存されたポリゴンになります。そうすれば、私の現在の位置をそのポリゴンと比較することができます。私の理論では、これにより、各店舗の「保守可能領域」を作成する計算がもう1度不要になります。これにより、あなたはそれをまったく変えますか? 確かにelasticsearchを探しています。 –

+0

私は実際にあなたが言及しているポリゴンの概念を理解していません。明確にするために、あなたの場所は動的か静的な場所ですか?新しい店舗が追加されたら、ポリゴンにどのような影響がありますか?あなたの現在の場所に配送できる店舗のリストを特定することが要件ですか?ポリゴンが新しいストアの追加でこれをどのように扱うか? – Aruna

+0

私の場所は動的です、私の場所に応じて作成されます。私が言及しているポリゴンの概念は、ポリゴンのアイデアの一点です。私の現在の位置はポイントですが、私は各店舗の配送半径をポリゴンとして保存することができます。現在のポイントが各店舗のポリゴンにあるかどうかを調べることで、各ポイント間の距離を計算するのではなく、その半径が半径以下かどうかを調べることで検索する方が速いのですか? –

関連する問題