【SuperMap .Net 组件】投影坐标与大地坐标转换

最近刚刚从ArcGIS尝试转到国产的超图二次开发组件上。毕竟是国产的,用起来挺顺手的。 超图 .Net组件的联机帮助其实写得很详细了,而且有超图桌面组件技术支持(QQ 2193372962)在,不会的问题基本能很快的帮我解决。 我就把一些用起来和自己的想法不同的地方记录下来,如果能帮到别人最好,不然就当做一个笔记也是极好的。


投影坐标与大地坐标的转换,帮助上说的清楚:

CoordSysTranslator.Forward(Point2Dspoints, PrjCoordSysprjCoordSys) 在同一地理坐标系下,该方法用于将指定的 Point2Ds 类型的点对象的地理坐标转换到投影坐标。

CoordSysTranslator.Inverse(Point2Ds points, PrjCoordSys prjCoordSys) 在同一地理坐标系下,该方法用于将指定的Point2Ds 类型的点对象的投影坐标转换到地理坐标。

但执行代码后发现组成points的几个点都没有变化。经本人验证发现,这个函数类似值传递而不是引用传递,也就是说想得到变换后的点需要从points里取,具体看代码:


        Dim points As Point2Ds = New Point2Ds(New Point2D() {Point1, Point2, Point3})
        Dim prjCoordSys As PrjCoordSys = m_Workspace.Datasources.Item(DataSourceName).PrjCoordSys

        Dim b As Boolean = CoordSysTranslator.Inverse(points, prjCoordSys)

        Dim geoPoint1 As Point2D = points.ToArray()(0)
        Dim geoPoint2 As Point2D = points.ToArray()(1)
        Dim geoPoint3 As Point2D = points.ToArray()(2)

虽然执行了CorrdSysTranslater.Inverse() ,并且返回值为true,但Point1,Point2,Point3是没变换的,变换后得值在points数组里,需要另外赋值。想来这样做也是为了不破坏原来的数据。


你可能感兴趣的:(【SuperMap .Net 组件】投影坐标与大地坐标转换)