MapGuide os 的Map frame methods,提供了ScreenToMapUnits,用于屏幕坐标到地图坐标的转换。
api文档如下:
Point
object:
Point { X; Y; }
Parameters:x
- the x coordinate, expressed in pixels.y
- the y coordinate, expressed in pixels.
See Also: GetMapUnitsType()
可是,mos并没有提供对应的MapUnitsToScreen(x, y) 。不知道这是为什么?
如果自己编写,用什么方法?
如果用数值计算的方法,逐步逼近,应该可以。不过,那样太复杂,性能也不好。
可不可以直接线性内插?
step1.计算屏幕中心的x-pixel, y-pixel,
step2, 用ScreenToMapUnits,得到x-map, y-map
step3, 根据上面的两点,按比例,进行线性插值。
因为只涉及到单个屏幕,单副地图的坐标,应该没有多大的误差。
我又查了一下js源代码在viewerfiles目录下找到了以下源代码
function ScreenToMapUnits(x, y)
{
if(x > mapDevW - 1)
x = mapDevW - 1;
else if(x < 0)
x = ""0"";
if(y="" >mapDevH - 1)
y = mapDevH - 1;
else if(y < 0)
y = ""0"";
x = ""extX1"" + (extX2="" -="" extX1="") * (x="" / mapDevW);
y = extY1 - (extY1 - extY2) * (y / mapDevH);
return new Point(x, y);
}
这说明,这个函数本身就是采用的线性插值,所以,我们反过来用,肯定没有问题。