1. 控件坐标与地图坐标的转换 控件坐标是以左上角为基准点(原点0,0),往右为X轴正方向,往下为Y轴正方向的。而地图坐标则是以左下角为基准点,往右为X轴正方向,往上为Y轴正方向,并且可以通过平移缩放等功能,将基准点移到任意点上。这里需要使用坐标的转换来完成控件坐标到地图坐标的转换关系。 已知控件的高度(CtlHeight)和地图的基准点坐标(CorX,CorY),地图当前比例尺(MapScale),就可以完成坐标的转换关系,如下 ///<summary> ///坐标转换,从控件坐标到地图坐标 ///</summary> ///<param name="point"></param> ///<returns></returns> public PointClass ToMapPoint(Point point) { PointClass result =newPointClass (); result.X = point.X * MapScale + CorX; result.Y = (CtlHeight - point.Y) * MapScale + CorY; return result; } ///<summary> ///坐标转换,从地图坐标到控件坐标 ///</summary> ///<param name="point"></param> ///<returns></returns> public Point FromMapPoint(PointClass point) { Point result = new Point(); result.X = (int)((point.X - CorX) / MapScale); result.Y = CtlHeight - (int)((point.Y - CorY) / MapScale); return result; }
地图坐标点类: namespace GIS.HJ.Geometry { ///<summary> ///地图坐标 ///</summary> public class PointClass:GeometryClass { ///<summary> ///默认构造函数 ///</summary> public Point() { base.GeometryType = GeometryType.Point; } ///<summary> ///带初始化参数的构造函数 ///</summary> ///<param name="x"></param> ///<param name="y"></param> public Point(double x,double y) { X = x; Y = y; } ///<summary> /// X坐标 ///</summary> public double X { get; set; } ///<summary> /// Y坐标 ///</summary> public double Y { get; set; } } }
|
|