计算C#中的平均纬度和经度

时间:2011-08-31 15:02:19

标签: c# algorithm latitude-longitude average

我有(minLatitude,maxLatitude)和(minLongitude,maxLongitude)对十进制度,我需要计算这些对定义的框的平均点,我怎样才能获得他们的平均纬度/经度?当计算简单算术平均值时,我得到了相当大的偏移量。

谢谢!

2 个答案:

答案 0 :(得分:8)

Pierre-Luc Champigny建议的解决方案是错误的。

在下面的图像中,您可以看到两行:

  1. (lat1,lon1) - > (LAT2,lon2)
  2. (lat1,lon2) - > (LAT2,lon1)
  3. 每条线的半长为绿色,另一半为蓝色。

    您可以看到两条线的中心不是同一个点,两个中心都不是多边形的中心。

    earth

    为了找到多边形的中心:

    • lat = avrg(lat1,lat2)
    • lon = avrg(lon1,lon2)

    要获得这些值,您可以使用Pierre-Luc Champigny建议的链接,但是:

    • 取(lat1,lon1)中点的纬度 - > (LAT2,lon1)
    • 取(lat1,lon1)中点的lon - > (LAT1,lon2)

答案 1 :(得分:5)

来自:http://www.movable-type.co.uk/scripts/latlong.html

你的值应该都是弧度的,所以使用中点公式:

var lat1 = minLatitude;  // In radian
var lat2 = maxLatitude;  // In radian
var lon1 = minLongitude; // In radian
var lon2 = maxLongitude; // In radian

var dLon = (lon2-lon1); 


var Bx = Math.Cos(lat2) * Math.Cos(dLon);
var By = Math.Cos(lat2) * Math.Sin(dLon);
var avgLat = Math.Atan2(
           Math.Sin(lat1) + 
           Math.Sin(lat2), 
           Math.Sqrt((
           Math.Cos(lat1)+Bx) * (Math.Cos(lat1)+Bx) + By*By));

var avgLong = lon1 + Math.Atan2(By, Math.Cos(lat1) + Bx);