1

マッピングを行うために C# スクリプトに取り組んでいます。私は、緯度と経度、距離、および回転角度が与えられる場所で作業している関数を 1 つ持っています。

次に、渡された距離の幅を持つ長方形を作成します (長さは他の何かに依存します)。この正方形は、その中心に緯度と経度の点があり、0 から任意の角度で回転します-360.

渡される double の距離は、フィートまたはメートルのいずれかであり、単位は isMetric ブール値を使用して決定されます。

私が信じている問題は、私が使用している数式に関係していると思われます。これは、4 つの点から正方形を描画すると、正方形のサイズが大きすぎるためです。同様に、角度 0.0 を渡すと、回転角度が 45 度に設定されるようです。

これが私がこれまでに持っているものです:

パラメータ: 緯度、経度 (10 進形式)、(倍) 距離、(倍) 角度

            double diagonal = Math.Sqrt(Math.Pow((distance / 2), 2) * 2); //a^2 + b^2 = d^2

        if (isMetric) //Convert meters to km.
        {
            diagonal = diagonal / 1000;
        }

        else   //Convert feet to km.
        {
            diagonal = diagonal * 0.0003048;
        }

        MessageBox.Show("Diagonal: " + diagonal, "DEBUG"); //DEBUG

        double pt1_lat = latDistance(diagonal * Math.Sin(angle), latitude);
        double pt1_long = longDistance(diagonal * Math.Cos(angle), latitude, longitude);

        double pt2_lat = latDistance(diagonal * Math.Cos(angle), latitude);
        double pt2_long = longDistance(-diagonal * Math.Sin(angle), latitude, longitude);

        double pt3_lat = latDistance(-diagonal * Math.Sin(angle), latitude);
        double pt3_long = longDistance(-diagonal * Math.Cos(angle), latitude, longitude);

        double pt4_lat = latDistance(-diagonal * Math.Cos(angle), latitude);
        double pt4_long = longDistance(diagonal * Math.Sin(angle), latitude, longitude); 

残りの方法は次のとおりです。

        private double latDistance(double distance, double latitude)
    {
        return latitude + degToRad(distance / EARTH_RADIUS);
    }

    private double longDistance(double distance, double latitude, double longitude)
    {
        return longitude + degToRad(distance / EARTH_RADIUS / Math.Cos(latitude));
    }

    private double degToRad(double degrees)
    {
        return (degrees * Math.PI) / 180;
    }

    public double radToDeg(double radians)
    {
        return (180.0 * radians) / Math.PI;
    }

どんな助けでも大歓迎です:)

4

1 に答える 1

0

まず第一に、あなたは地球半径に関して「小さな」正方形を持っていると思います。この場合、距離が辺の長さで、角度が回転角の場合、正方形の中心を基準にした1つの頂点のデカルト座標であるdx、dyを計算する必要があります。

dx = 0.5 * Math.Sqrt(2.0) * distance * Math.Cos(angle+0.25*Math.PI);
dy = 0.5 * Math.Sqrt(2.0) * distance * Math.Sin(angle+0.25*math.PI);

(ここでは、角度はラジアンであると想定しています。そうでない場合は、変換する必要があります)他の3つの頂点のデカルト座標は、それぞれ(-dy、dx)、(-dx、-dy)、(dy、-dx)です。

デカルト座標を(経度、緯度)に変換するには、次の式を使用できます。

pt_lat = latDistance(latitude,dy)
pt_long = longDistance(dx,latitude,longitude)
于 2013-02-02T08:48:18.300 に答える