4

マップ上で半径 5 KM をカバーしようとしています。真ん中の座標を持っています。

その円にある点の座標を計算して与える方法が必要です。

説明:

ここに画像の説明を入力

(サーバーから半径 __Km の座標点を取得する必要があります。それを行うためのより良い方法があれば、共有してください。ty!)

座標が円の内側にあるかどうかを確認します。

(lan,lon) はポイントです。

if ((lat<x1 && lat>x2) && (lon<y1 && lon>y2))

    then the point is inside the circle.

しかし、世界の一部の地域では機能しないという問題があります...

よくわかりません。レーダーはどうやって作るの?

(アンドロイドアプリ)

ありがとう!

4

2 に答える 2

5

極に近すぎないときは、緯度経度空間の楕円を使用して、地表の小さな真円を近似できます。楕円は赤道上の円ですが、極に近づくにつれてどんどんつぶれていきます。

関心のある円の中心の座標が で(lat0, lon0)、半径がr = 5kmであると仮定すると、次のように設定します。

C = 40075.04km                - Earth circumference
A = 360*r/C                   - semi-minor in north-south direction 
B = 360*r/(C*cos(lat0))       - semi-major in east-west direction

(lat,lon)楕円内の点は次の条件を満たします。

(lat-lat0)²/A² + (lon-lon0)²/B² < 1

Java の場合:

boolean pointInCircle(double lat0, double lon0, double r, double lat, double lon) {
    double C = 40075.04, A = 360*r/C, B = A/Math.cos(Math.toRadians(lat0));
    return Math.pow((lat-lat0)/A, 2) + Math.pow((lon-lon0)/B, 2) < 1;
}

より正確な結果を得るには、中心と指定された点の間の距離を計算できます(通常はhasersine 式を使用します) が、式はより複雑になり、多くの点の距離を計算する必要がある場合は計算コストが高くなる可能性があります。

于 2013-09-25T18:39:44.720 に答える
1
double dx = x - x0;
double dy = y - y0;
if (dx * dx + dy * dy < r * r) {
    // point (x, y) is inside the circle centered (x0, y0) with radius r
}
于 2013-09-25T18:20:51.700 に答える