点绕一点o旋转
若o不是原点,则可先将a点坐标转换为相对坐标计算,计算结果再加上o点坐标。
参与计算的a点坐标实际应为 a - 0,逆时针旋转的最终计算公式如下:
b.x = ( a.x - o.x) * cos (-angle) + (a.y - o.y) * sin (-angle) + o.x
b.y =(a.y - o.y) * cos (-angle) - (a.x - o.x) * sin (-angle)+ o.y
顺时针旋转的最终计算公式如下:
b.x = ( a.x - o.x) * cos (angle) + (a.y - o.y) * sin (angle) + o.x
b.y =(a.y - o.y) * cos (angle) - (a.x - o.x) * sin (angle)+ o.y
旋转的问题解决了,但是地图上直接旋转,旋转后的多边形会变形。将经纬度坐标投影成屏幕坐标进行旋转计算,再将计算的结果投影成经纬度坐标绘制多边形。
根据地图的CRS投影投影投影一个地理坐标板条,然后根据缩放和CRS的变换对其进行缩放。结果是相对于CRS原点的像素坐标。