C#的经度和经度边界框?
发布时间:2020-12-15 18:28:26 所属栏目:百科 来源:网络整理
导读:我只想找到一个简单的C#类,它接收起始纬度和经度以及距离并找到边界框(max lat,min lat,max lon,min lon).在这里还有其他类似的问题,但是没有一个真正回答这个问题,那些问题不在C#中. 救命. 解决方法 这就是你要求的.感谢Federico A. Ramponi在 Python here
我只想找到一个简单的C#类,它接收起始纬度和经度以及距离并找到边界框(max lat,min lat,max lon,min lon).在这里还有其他类似的问题,但是没有一个真正回答这个问题,那些问题不在C#中.
救命. 解决方法
这就是你要求的.感谢Federico A. Ramponi在
Python
here中编写原文.
public class MapPoint { public double Longitude { get; set; } // In Degrees public double Latitude { get; set; } // In Degrees } public class BoundingBox { public MapPoint MinPoint { get; set; } public MapPoint MaxPoint { get; set; } } // Semi-axes of WGS-84 geoidal reference private const double WGS84_a = 6378137.0; // Major semiaxis [m] private const double WGS84_b = 6356752.3; // Minor semiaxis [m] // 'halfSideInKm' is the half length of the bounding box you want in kilometers. public static BoundingBox GetBoundingBox(MapPoint point,double halfSideInKm) { // Bounding box surrounding the point at given coordinates,// assuming local approximation of Earth surface as a sphere // of radius given by WGS84 var lat = Deg2rad(point.Latitude); var lon = Deg2rad(point.Longitude); var halfSide = 1000 * halfSideInKm; // Radius of Earth at given latitude var radius = WGS84EarthRadius(lat); // Radius of the parallel at given latitude var pradius = radius * Math.Cos(lat); var latMin = lat - halfSide / radius; var latMax = lat + halfSide / radius; var lonMin = lon - halfSide / pradius; var lonMax = lon + halfSide / pradius; return new BoundingBox { MinPoint = new MapPoint { Latitude = Rad2deg(latMin),Longitude = Rad2deg(lonMin) },MaxPoint = new MapPoint { Latitude = Rad2deg(latMax),Longitude = Rad2deg(lonMax) } }; } // degrees to radians private static double Deg2rad(double degrees) { return Math.PI * degrees / 180.0; } // radians to degrees private static double Rad2deg(double radians) { return 180.0 * radians / Math.PI; } // Earth radius at a given latitude,according to the WGS-84 ellipsoid [m] private static double WGS84EarthRadius(double lat) { // http://en.wikipedia.org/wiki/Earth_radius var An = WGS84_a * WGS84_a * Math.Cos(lat); var Bn = WGS84_b * WGS84_b * Math.Sin(lat); var Ad = WGS84_a * Math.Cos(lat); var Bd = WGS84_b * Math.Sin(lat); return Math.Sqrt((An*An + Bn*Bn) / (Ad*Ad + Bd*Bd)); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |