现在的位置: 首页 > 综合 > 正文

从MapX到MapXtreme2004[11]-坐标概论

2012年06月03日 ⁄ 综合 ⁄ 共 1105字 ⁄ 字号 评论关闭

        坐标的问题是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级别)

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

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

抱歉!评论已关闭.