using ProjectBase.Data.Logs; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SIASUN.Autopilot.GNSS { /// /// WGS84和平面坐标系转换 /// public class CoordinateConversion { // minLongitude, maxLatitude private WGS84Points point0; // maxLongitude, minLatitude private WGS84Points point1; //// minLongitude, maxLatitude //private WGS84Points point2; //// 显示区域的宽度 //private double screenx; //// 显示区域的高度 //private double screeny; private PointF imagePoint0; private PointF imagePoint1; // x轴比例因子 private double scalex; // y轴比例因子 private double scaley; //public CoordinateConversion(double imageWidth,double imageHeight, WGS84Points point0, WGS84Points point1, WGS84Points point2) //{ // this.screenx = imageWidth; // this.screeny = imageHeight; // this.point0 = point0; // this.point1 = point1; // this.point2 = point2; //} public CoordinateConversion(PointF imagePoint0, PointF imagePoint1, WGS84Points point0, WGS84Points point1) { this.imagePoint0 = imagePoint0; this.imagePoint1 = imagePoint1; this.point0 = point0; this.point1 = point1; } /// /// 获取WGS84转换到屏幕坐标的x轴比例因子 /// private void GetScaleX() { try { double lon = 0.0; float x = 0.0F; lon = point0.x - point1.x; x = imagePoint0.X - imagePoint1.X; //scalex = ((point1.x - point0.x) * 3600) / screenx; scalex = (lon * 3600) / x; } catch(Exception ex) { LogHelper.log.Error("计算x比例因子出现错误", ex); } } /// /// 获取WGS84转换到屏幕坐标的Y轴比例因子 /// private void GetScaleY() { try { double lat = 0.0; float y = 0.0F; lat = point0.y - point1.y; y = imagePoint0.Y - imagePoint1.Y; scaley = (lat * 3600) / y; //scaley = ((point0.y - point2.y) * 3600) / screeny; } catch (Exception ex) { LogHelper.log.Error("计算y比例因子出现错误", ex); } } /// /// 从WGS84转换成屏幕坐标 /// /// /// /// /// public void GetWGS84ToGauss(double lon, double lat, out double x, out double y) { x = 0.0; y = 0.0; try { GetScaleX(); GetScaleY(); //x = (lon - point0.x) * 3600 / scalex; //y = (point0.y - lat) * 3600 / scaley; x = imagePoint0.X -( (point0.x - lon) * 3600 / scalex); y = imagePoint0.Y - ((point0.y - lat) * 3600 / scaley); } catch (Exception ex) { LogHelper.log.Error("从WGS84转换成屏幕坐标出现错误", ex); } } /// /// 从屏幕坐标转换成WGS84 /// /// /// /// /// public void GetGaussToWGS84(double x, double y, out double lon, out double lat) { lon = 0.0; lat = 0.0; try { GetScaleX(); GetScaleY(); //lon = x * scalex /3600 + point0.x; //lat = point0.y - y * scaley / 3600; lon = point0.x - ((imagePoint0.X - x) * scalex / 3600); lat = point0.y - ((imagePoint0.Y - y) * scaley / 3600); } catch (Exception ex) { LogHelper.log.Error("从屏幕坐标转换成WGS84出现错误", ex); } } } }