質問: 緯度/経度範囲内のすべてのレコードを照会するにはどうすればよいですか? 私は、世界の指定された領域内にあるすべてのレコードを見つけるMySQLクエリを作成しようとしています。各レコードにはポイント(緯度/経度)があり、指定されたエリアの右上(緯度/経度)と左下(緯度/経度)のコーナーがあります。 この情報を使用して、適切な記録をどのように見つけることができますか?
回答: LAT1 = MIN(右上の緯度、左下の緯度) LAT2 = MAX(右上の緯度、左下の緯度) LON1 = MIN(右上、左下、左下) LON2 = MAX(右上、左下、左下) ``` SELECT fields FROM points WHERE lat BETWEEN LAT1 AND LAT2 AND lon BETWEEN LON1 AND LON2 ``` この方法では、Prime Meridianまたは赤道とあなたの箱を交差させた場合、クエリーが処理する必要があります。 180番目の子午線(または反アミメリアン)を扱うためには、右の数字と左の数字を比較し、正しい数字が負であり、左の数値が正であるかどうかを調べる必要があります。もしそうなら、あなたは180度の子午線を越えました。あなたのクエリは次のようになります。 ``` SELECT fields FROM points WHERE lat BETWEEN LAT1 AND LAT2 AND (lon BETWEEN LON1 AND -180 OR lon BETWEEN LON2 AND 180) ``` 私はむしろ真の極の上の惑星の上か下に座っている箱をどう扱うか考えるのではない。 =)