4

地球の表面上の特定の点の周りに正方形を描こうとしています。

私はここここから取得した情報を使用しており、最終的にこれを思いつきました:-

        // Converting degrees to radians
        double latInDecimals = (Math.PI / 180) * latitude;
        double longInDecimals = (Math.PI / 180) * longitude;

        List<string> lstStrCoords = new List<string>();

        double changeInLat;
        double changeInLong;
        double lineOfLat;      

        // Calculating change in latitude for square of side 
        changeInLong = (side / 1000) * (360.0 / 40075);

        // Calculating length of longitude at that point of latitude
        lineOfLat = Math.Cos(longitude) * 40075;

        // Calculating change in longitude for square of side 'side'
        changeInLat = (side / 1000) * (360.0 / lineOfLat);

        // Converting changes into radians
        changeInLat = changeInLat * (Math.PI / 180);
        changeInLong = changeInLong * (Math.PI / 180);


        double nLat = changeInLat * (Math.Sqrt(2) / 2);
        double nLong = changeInLong * (Math.Sqrt(2) / 2);

        double coordLat1 = latInDecimals + nLat;
        double coordLong1 = longInDecimals + nLong;

        double coordLat2 = latInDecimals + nLat;
        double coordLong2 = longInDecimals - nLong;

        double coordLat3 = latInDecimals - nLat;
        double coordLong3 = longInDecimals - nLong;

        double coordLat4 = latInDecimals - nLat;
        double coordLong4 = longInDecimals + nLong;

        // Converting coords back to degrees

        coordLat1 = coordLat1 * (180 / Math.PI);
        coordLat2 = coordLat2 * (180 / Math.PI);
        coordLat3 = coordLat3 * (180 / Math.PI);
        coordLat4 = coordLat4 * (180 / Math.PI);

        coordLong1 = coordLong1 * (180 / Math.PI);
        coordLong2 = coordLong2 * (180 / Math.PI);
        coordLong3 = coordLong3 * (180 / Math.PI);
        coordLong4 = coordLong4 * (180 / Math.PI);

これは機能しますが、これらを結合して得られるポリゴンは長方形です。

ここに画像の説明を入力

コードの何が問題なのか混乱しています。

4

1 に答える 1

7

球面上の緯度と経度が 1 度の長方形は、赤道上にない限り、km 単位の長さが同じではありません。極に向かって狭くなります。両側を同じサイズにしたい場合は、補正を行う必要があります

longitudinal_length = latitudinal_length / cos(latitude)

したがって、正方形の縦の長さを で割る必要がありますcos(latitude)

さて、あなたの正方形はまだ曲がっているかもしれませんが、これは地図がどのように投影されるかに依存し、これはまったく別の話です. 補正を行うために Google が使用する投影式を知る必要があります。

地球が完全な球体ではないという事実を考慮した、より複雑な式が見つかるかもしれませんが、位置マーカーにはこれで十分だと思います。また、+/-90 度でゼロ除算が行われることにも注意してください。そのため、棒に長方形を配置するには、別のアプローチが必要です。

ここに画像の説明を入力
出典: IBM Knowledge Center /地理座標系/ 図 4. 経緯線上の位置間の異なる寸法

于 2012-12-13T14:41:24.207 に答える