C#找到两个纬度/经度的中点
我需要找到两个纬度/经度点之间的中点 我正试图在我绘制的两个位置之间将地图居中,并需要找到该点 我从我发现的其他示例中编写了这个函数,但它似乎不起作用C#找到两个纬度/经度的中点,c#,geolocation,latitude-longitude,C#,Geolocation,Latitude Longitude,我需要找到两个纬度/经度点之间的中点 我正试图在我绘制的两个位置之间将地图居中,并需要找到该点 我从我发现的其他示例中编写了这个函数,但它似乎不起作用 public static void midPoint(double lat1, double lon1, double lat2, double lon2, out double lat3_OUT, out double lon3_OUT) { //http:// stackoverflow.com/questi
public static void midPoint(double lat1, double lon1, double lat2, double lon2, out double lat3_OUT, out double lon3_OUT)
{
//http:// stackoverflow.com/questions/4656802/midpoint-between-two-latitude-and-longitude
double dLon = DistanceAlgorithm.Radians(lon2 - lon1);
//convert to radians
lat1 = DistanceAlgorithm.Radians(lat1);
lat2 = DistanceAlgorithm.Radians(lat2);
lon1 = DistanceAlgorithm.Radians(lon1);
double Bx = Math.Cos(lat2) * Math.Cos(dLon);
double By = Math.Cos(lat2) * Math.Sin(dLon);
double lat3 = Math.Atan2(Math.Sin(lat1) + Math.Sin(lat2), Math.Sqrt((Math.Cos(lat1) + Bx) * (Math.Cos(lat1) + Bx) + By * By));
double lon3 = lon1 + Math.Atan2(By, Math.Cos(lat1) + Bx);
lat3_OUT = lat3;
lon3_OUT = lon3;
}
下面是一个示例输出
lat1 37.7977008
lat2 37.798392
lon1 -122.1637914
lon2 -122.161464
lat3 0.65970036060147585
lon3 -2.1321400763480485
参见Lat3和Lon3
谢谢 我猜你指的是大圆距离
如果是这样的话,这个问题以前就有人问过,不过如果你不知道大圆这个词,可能很难找到。看来你的输出是正确的,只是它是以弧度为单位的,你期望的是度?您可能需要将弧度转换为度以满足预期输出
-(2.1321400763480485 radians) = -122.162628 degrees
0.65970036060147585 radians = 37.7980464 degrees
看起来您已经在使用Jon Martin和IanDotKelly提到的大圆算法。这很有意义。尽管看起来解决方案仍然是一个单元问题。结果以弧度为单位,OP预期为度。就是这样!。。。我把弧度转换成了度,效果非常好!。。。谢谢看起来OP已经在使用大圆距离算法了。