2

私は最近、GPS マップに取り組んでいると述べました。緯度と経度のリストを含むデータベースがあります。ユーザーが私の Web アプリにアクセスしたときに、ユーザー ポイントから 1 km または指定した半径内の場所を表示したいと考えています。mysqlクエリを使ってみた

SELECT * FROM Locations
WHERE (MINLATITUDE と MAXLATITUDE の間の緯度)
および (MINLONGITUDE と MAXLONGITUDE の間の経度)

しかし、それは最小と最大の間の緯度と経度を表示します。ユーザーポイントから半径1km以内の緯度と経度を表示する方法を教えてください。
ありがとう。

4

1 に答える 1

2

約 1 km の距離では、Haversine はやり過ぎです。おなじみの x と y を取得するには、はるかに単純な正距円筒図法を使用します。lat と lon の下の式はラジアンであることに注意してください。地球の半径 (R) が km 単位であるため、距離 d は km 単位です。lat/lon はラジアンです (はい、もう一度言いました)。これにより、Haversine と比較していくつかの三角関数が排除され、クエリが高速化されます。

var R = 6371; // radius of the earth in km
var x = (lon2-lon1) * Math.cos((lat1+lat2)/2);
var y = (lat2-lat1);
var d = Math.sqrt(x*x + y*y) * R;  // distance in km

さて、これは Web アプリなので、サンタ (北極) と南極基地の人々はあなたのアプリを使用しないと仮定します。この仮定により、データベース内の緯度/経度ポイントを経度で整理できます。したがって、誰かの経度が -76.1 の場合、データベース内の -78 度未満の経度は 1 km より遠いことがわかります。また、-74 度を超える経度は遠く離れていることもわかっています。これにより、データベースでチェックする必要があるポイントの数が減ります。

于 2013-01-15T10:41:41.103 に答える