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; }
}
}
联系客服