Calculate average latitude and longitude in C#
I have (minLatitude,maxLatitude) and (minLongitude,maxLongitude) pairs in decimal degrees, and I need to calculate the mean point of the box those pairs define, how can I开发者_开发技巧 get their average latitude/longitude? I get a pretty big offset when the simple arithmetic mean is calculated.
Thanks!
The solution suggested by Pierre-Luc Champigny is wrong.
In the image bellow you can see two lines:
- (lat1,lon1) --> (lat2,lon2)
- (lat1,lon2) --> (lat2,lon1)
Half length of each line in green, the other half in blue.
You can see that the center of both lines is not the same point, and both centers are not the center of the polygon.
In order to find the center of the polygon:
- lat= avrg(lat1,lat2)
- lon= avrg(lon1,lon2)
To get these values you can use the link suggested by Pierre-Luc Champigny, but:
- Take the lat of the midpoint of (lat1,lon1) --> (lat2,lon1)
- Take the lon of the midpoint of (lat1,lon1) --> (lat1,lon2)
From: http://www.movable-type.co.uk/scripts/latlong.html
Your values should be all in radian, so using the midpoint formula:
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);
精彩评论