0

そのポイントからのメートル単位の距離に基づいて、そのポイントから新しい緯度経度を計算しようとしています。

ここや他の場所で役立ついくつかの投稿を見つけましたが、まだ少し問題があります.

これまでに得たコードは次のとおりです。

        public LatLon CalculateNewCoords(decimal startingLat, decimal startingLon, int distanceEast, int distanceNorth)
    {
        int r = 6378137;
        decimal dLat = Convert.ToDecimal(distanceNorth) / Convert.ToDecimal(r);

        decimal pi = Convert.ToDecimal(Math.PI);
        double cosInput = Convert.ToDouble(pi * startingLat / Convert.ToDecimal(180));

        decimal dLon = Convert.ToDecimal(distanceEast) / Convert.ToDecimal(Convert.ToDouble(r) * Math.Cos(cosInput));

        decimal lat0 = startingLat + dLat * (180 * pi);
        decimal lon0 = startingLon + dLon * (180 / pi);     

        LatLon output = new LatLon();
        output.Latitude = lat0;
        output.Longitude = lon0;

        return output;
    }

経度は正しいようですが、緯度がかなりずれて表示されています。

私は次のように使用しています:

CalculateNewCoords(Convert.ToDecimal(40.743461), Convert.ToDecimal(-74.175847), 0, 1000);

誰かが私が間違っていることを指摘できますか?

4

1 に答える 1

0

エラーは最初の行にあります:

    decimal lat0 = startingLat + dLat * (180 * pi);
    decimal lon0 = startingLon + dLon * (180 / pi);     

これは確かに正しくありません。両方の線で同じラジアンから度への変換を使用する必要があります。2 行目のように 180/pi に置き換え
ます。

于 2013-02-10T14:34:01.013 に答える