0

私は Android アプリに取り組んでおり、地理的な地点の緯度と経度があり、X メートル (北) と Y メートル (西) から位置する場所の座標を取得したいと考えています。GeoPoint はこの種の機能を実装していないので、自分でそれを行う方法を見つけなければなりません...

いくつか検索しましたが、興味深いものは見つかりませんでした。どうすればよいか分かりますか?

4

2 に答える 2

2

2 つの完全な経度間の距離は緯度に依存し、距離は高度にも依存するため、注意が必要です...

簡単にするために、経度と緯度を推測してみて、推測と原点の間の距離を確認します。2 点間の距離の取得は既に行われているため、これは簡単です。

1 つの軸から始めて、北 X メートルの位置が見つかるまで一種の二分探索を行います。次に、もう一方の軸についても同じことを行います。

于 2012-09-29T15:12:37.760 に答える
1

次のメソッドを使用すると、緯度と経度を取得して元の場所に追加し、最終的な場所に到達します。これは、地球の曲率を無視しているため、比較的短い距離でのみ機能することに注意してください。

private static final float GAP_LAT_LON = 0.00005f; //aprox 5 meters
private float results[] = new float[1];

private PointF getGaps(Location initial, float distanceX, float distanceY, PointF gaps){
    Location.distanceBetween(initial.getLatitude(), initial.getLongitude(), initial.getLatitude(), initial.getLongitude() + GAP_LAT_LON, results);
    double factorX = GAP_LAT_LON / results[0];
    Location.distanceBetween(initial.getLatitude(), initial.getLongitude(), initial.getLatitude() + GAP_LAT_LON, initial.getLongitude(), results);
    double factorY = GAP_LAT_LON / results[0];
    if(gaps == null)
        gaps = new PointF();
    gaps.set((float)(distanceX * factorX), (float)(distanceY * factorY));
    return gaps;
}

//to use
private void teste(){
    PointF gaps = null;
    Location initial = new Location("");

    initial.setLatitude(23.5);
    initial.setLongitude(13.2);

    //100 meters West/East and 300 meters North/South
    getGaps(initial, 100, 300, gaps);

    //gaps.x returns x offset to add/subtract to initial latitude
    //gaps.y returns y offset to add/subtract to initial longitude
}

幸運を

于 2012-09-29T17:22:34.400 に答える