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

除非它位于赤道上,否则球体上一个纬度和经度的矩形的长度以千米为单位不同。它向两极变窄。如果你想让两边的大小相同,你必须进行修正

longitudinal_length = latitudinal_length / cos(latitude)

因此,您需要将正方形的纵向长度除以cos(latitude)

现在,您的广场可能仍然是弯曲的,但这取决于地图的投影方式,这是一个完全不同的故事。您需要知道 Google 使用的投影公式才能进行更正。

您可能会发现考虑到地球不是完美球体这一事实的更复杂的公式,但我认为这对于您的位置标记应该足够了。另请注意,您将在 +/-90 度处除以零。所以在杆子上放置一个矩形需要另一种方法。

在此处输入图像描述
来自:IBM Knowledge Center /地理坐标系/ 图 4. 刻度上位置之间的不同维度

于 2012-12-13T14:41:24.207 回答