zoukankan      html  css  js  c++  java
  • 从MapX到MapXtreme2004[11]坐标概论

            坐标的问题是Mapxtreme中最郁闷的问题,前几天在这上面耗了很多时间,没有搞定,今天又是不得不钻研,还好,小有心得。

            1、分类:
                    1)图层的坐标:或者说图元的坐标,只能通过ftr.Geometry.CoordSys来获得坐标系的信息(通过图层无法获得坐标系的信息,我试过很多次反正没成功。有时不得不采用一个笨办法,先查出一个图元,再通过该图元访问坐标系)。我碰到的大多是横轴墨卡托(也许跟从MapGis转换过来有关),单位是米(通过CoordSys.units获得)。因而,通过ftr.Geometry取得的坐标,都是这个坐标系下的。
                    2)图的显示坐标:我理解这是整体的坐标系(我用的是GeoSet),因为我一般都事先设成经纬度,而它们也都是经纬度。访问方法:Map.GetDisplayCoordSys()。单位degree。
                    显示坐标和图元坐标之间的转换,通过CoordinateTransform来完成。代码示例:

        CoordinateTransform dtf=new CoordinateTransform(ftr.Geometry.CoordSys,MapControl1.Map.GetDisplayCoordSys());

        DPoint dp2=dtf.CoordSys1ToCoordSys2(ftr.Geometry.Centroid);

                    上面是从图元坐标(米为单位)向显示坐标转换(度为单位)。
                    3)屏幕坐标:象素为单位的屏幕坐标,不用多说,但问题也很多,最突出的就是转换。可以通过Map.DisplayTransform.ToDisplay和FromDisplay来进行。但是必须注意,DPoint坐标(显示坐标)必须是显示坐标,不能是图元坐标。上次吃亏就在这儿,每次都是把ftr.Geometry.centrelid去转换,转出来全是溢出值!
                    CoordSys本身有几个静态的转换函数,但似乎都没啥用处,只能换算一下公制英制之类的。
            2、其它的结论
                    1)同一组地图中的不同图层,其中的图元坐标基本相同。(经过取点,转换成显示坐标,再转换成另一层坐标,误差仅为0.01m级别)

                    太多了,坐标转换,长度计算,查询...                

                    咳,每个字得来都太不容易了!

  • 相关阅读:
    设计模式(八): 策略模式
    设计模式(七): 迭代器模式
    设计模式(六): 建造者模式
    设计模式(五): 装饰者模式
    设计模式(四): 适配器模式
    设计模式(三): 抽象工厂模式
    设计模式(二): 工厂模式
    设计模式(一): 单例模式
    Hibernate三种状态,缓存,以及update更新问题
    Servlet 生命周期、工作原理
  • 原文地址:https://www.cnblogs.com/jetz/p/265948.html
Copyright © 2011-2022 走看看