GIS坐标旋转
陈玉进 李泉 (南京跬步科技有限公司http://www.creable.cn )
在地理信息系统中有对地图进行旋转显示的需求,例如GPS导航系统,为了达到方便直观的效果,会自动将地图旋转,以至于能够将车辆前进的方向固定到窗口中的北方。下面讨论坐标旋转的原理。
一.旋转一般公式
1.以坐标原点为圆心的旋转
设图形上一点P(x,y)绕原点逆时针旋转a角后得到新的一点P’(x’,y’),则由解析集合方法可得
x’=x×cos(a)-y×sin(a)
y’=x×sin(a)+y×cos(a)
若顺时针旋转时,a角为负值。
2.以任意点为圆心的旋转
首先需要将坐标平移到坐标原点,再旋转坐标,最后在平移到该点。设圆心C(x0,y0),其他条件同上,可得到下面的公式
x’=(x-x0)×cos(a)-(y-y0)×sin(a)+x0
y’=(x-x0)×sin(a)+(y-y0)×cos(a)+y0
其中x-x0之后表示坐标平移到原点,最后加上x0表示将坐标平移到点C。
二.坐标旋转在地理信息系统中的实现
GIS中需要将地图坐标转换为屏幕坐标,之后再绘制到窗口中,基于将地图旋转显示的需求,我们可以将屏幕坐标旋转之后绘制到窗口,这样就实现了地图的旋转显示。由于屏幕坐标系的原点在窗口左上角,且y轴向下。故按照上述公式a角是正值的话,地图是顺时针旋转。
屏幕坐标向地图坐标的转换,由于地图旋转的原因,需要做些改变。首先将屏幕坐标旋转回到原来的位置,再使用转换公式转换成为地图坐标。
平移地图,用户单击的两个点,计算这两点之间的地图坐标差值,将当前地图显示范围移动,改变坐标转换公式,达到平移地图的目的。考虑地图旋转的因素,应该首先将用户单击的两个点旋转回到原来的位置,再计算其地图坐标差值。可以用图来说明这个道理,如下图所示,实线框表示旋转之后的地图(顺时针旋转45度),虚线框表示地图原来的位置,实线街头表示用户向右水平平移旋转之后的地图,那么相当于在原来的地图中,向右上方平移地图。将用户单击的两个点旋转到原来的位置上,刚好是这里。