zoukankan      html  css  js  c++  java
  • MapGuide open source开发系列教程五: 屏幕坐标与地图坐标(问题)已修改

    MapGuide os 的Map frame methods,提供了ScreenToMapUnits,用于屏幕坐标到地图坐标的转换。
    api文档如下:

    ScreenToMapUnits(x, y)
    Converts a position expressed in pixels (screen units) to one expressed in map units, returning a 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);
    }
    这说明,这个函数本身就是采用的线性插值,所以,我们反过来用,肯定没有问题。

  • 相关阅读:
    Vue的style与class
    position记录
    JS 原型模式创建对象
    Js 栈和堆的实现
    slice深拷贝数组
    Vue路由query传参
    Object.prototype.toString.call(value)
    Node里面的对象创建问题
    Django模板语言 标签整理
    JavaScript基础
  • 原文地址:https://www.cnblogs.com/xiexiaokui/p/520342.html
Copyright © 2011-2022 走看看