gpt4 book ai didi

c# - 从中心纬度/经度计算平方 X 英里的西南和东北纬度/经度

转载 作者:太空宇宙 更新时间:2023-11-03 13:22:37 25 4
gpt4 key购买 nike

我正在努力从 Noaa API 获取数据。

当与 Noaa API 对话时,您可以获得一个广场内的气象站列表。他们称它们为“范围”,它们是两组纬度/经度。左下方的经纬度和右上方的经纬度

详情如下:

http://www.ncdc.noaa.gov/cdo-web/webservices/v2#stations

我得到了美国多个城市的纬度/经度列表,我正在尝试找出放置方框的最佳方法。

因此,我的第一个猜测是采用中央纬度/经度,计算出向西 75 英里的纬度/经度,然后计算出该点以南 75 英里处的点的纬度/经度。

理想情况下,我希望将其作为 C# 函数。

请问有人对编写此代码的最佳方式有任何想法吗?

谢谢

最佳答案

嘿嘿! - 找到解决方案...

首先是一个简单的类:

public class LatLonAlt
{
public double Latitude { get; set; }
public double Longitude { get; set; }
public double Altitude { get; set; }
}

然后是计算新位置的函数:

public static HelpersModel.LatLonAlt CalculateDerivedPosition(HelpersModel.LatLonAlt source, double range, double bearing)
{
double latA = Convert.ToDouble(source.Latitude) * (Math.PI / 180);
double lonA = Convert.ToDouble(source.Longitude) * (Math.PI / 180);
double angularDistance = range / 6371;
double trueCourse = bearing * (Math.PI / 180);

double lat = Math.Asin(
Math.Sin(latA) * Math.Cos(angularDistance) +
Math.Cos(latA) * Math.Sin(angularDistance) * Math.Cos(trueCourse));

double dlon = Math.Atan2(
Math.Sin(trueCourse) * Math.Sin(angularDistance) * Math.Cos(latA),
Math.Cos(angularDistance) - Math.Sin(latA) * Math.Sin(lat));

double lon = ((lonA + dlon + Math.PI) % (Math.PI * 2)) - Math.PI;

HelpersModel.LatLonAlt results = new HelpersModel.LatLonAlt();
results.Latitude = lat * (180 / Math.PI);
results.Longitude = lon * (180 / Math.PI);
results.Altitude = source.Altitude;

return results;
}

然后,我知道我可以做得更好......但它现在有效......

2 个计算左下角和右上角范围的函数:

public static HelpersModel.LatLonAlt FindBottomLeftExtent(HelpersModel.LatLonAlt startpoint)
{
// first move left
HelpersModel.LatLonAlt movedleft = CalculateDerivedPosition(startpoint, 72.42, 270);
// move down
HelpersModel.LatLonAlt moveddown = CalculateDerivedPosition(movedleft, 72.42, 180);

return moveddown;
}
public static HelpersModel.LatLonAlt FindTopRightExtent(HelpersModel.LatLonAlt startpoint)
{
// first move right
HelpersModel.LatLonAlt movedright = CalculateDerivedPosition(startpoint, 72.42, 90);
// move up
HelpersModel.LatLonAlt movedup = CalculateDerivedPosition(movedright, 72.42, 0);

return movedup;
}

喂!

崔维

关于c# - 从中心纬度/经度计算平方 X 英里的西南和东北纬度/经度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23653161/

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