gpt4 book ai didi

c# - 围绕经纬度点画一个正方形

转载 作者:太空狗 更新时间:2023-10-30 01:06:58 25 4
gpt4 key购买 nike

我正在尝试围绕地球表面上的给定点绘制一个正方形

我正在使用从 here 中检索到的信息和 here并最终想出了这个:-

        // 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);

现在即使这可行,我通过加入这些得到的多边形是一个矩形。

enter image description here

我对我的代码有什么问题感到困惑。

最佳答案

除非位于赤道上,否则球面上经纬度为 1 度的矩形的长度(以千米为单位)是不同的。它向两极变窄。如果你想让两边的大小一样,你必须做一个修正

longitudinal_length = latitudinal_length / cos(latitude)

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

现在,您的正方形可能仍然是弯曲的,但这取决于 map 的投影方式,这是一个完全不同的故事。您需要了解 Google 用于进行更正的投影公式。

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

enter image description here
发件人:IBM Knowledge Center/Geographic coordinate system/图 4. 标线位置之间的不同维度

关于c# - 围绕经纬度点画一个正方形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13861616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com