要素类在不同坐标系间转换的问题

Posted by 蒋波涛 19 September,2006 Views (3)Comment

这两天接到一个关于要素类在不同坐标系之间转换的任务。由于许多城市的基础测绘都是使用本地坐标系,而并非一定使用54,80或84座标,因此往往需要进行座标转换。这种转换也不能象在ArcMap中改变投影那么简单,往往是一个座标系中的某个点通过某种转换,得到在另一个坐标系的点座标。

其实这种转换方式说穿了非常简单,既然可以一个点一个点转换,那么对于点要素类,可以直接计算出新点后保存到新的要素类;多义线和多边形则使用IPointCollection接口逐个取出点计算,然后再组成一个要素保存到新要素类中。源要素类与新要素类的字段结构是一致的。但是,问题就出在这里,我们知道,这样改变以后,新要素类的空间范围spatial extent与源要素类的空间范围完全不一致,因此我遇到的第一个问题就是,如何在知道新的空间范围的情况下,新建一个与源要素类结构相同的新要素类。

有没有可能改变一个要素类的spatial extent呢,EDN讨论的结果是完全没有可能。那解决这个问题的方法只能是这样,新建一个Fields对象,除了Geometry字段自己手动设计外,其它字段都从源要素类中copy,这样就可以新建一个字段结构一致但空间范围不一样的要素类。在这个字段集的设计中,还要注意,如果是点要素类,则需要设置Z M值可用,如果是多义线或多边形,Z和M值就设置为false。

        Dim pFieldsEdit As IFieldsEdit
        Set pFieldsEdit = New Fields

   
        '产生geometry字段
        Dim pGeomDef As IGeometryDef
        Set pGeomDef = New GeometryDef
        Dim pGeomDefEdit As IGeometryDefEdit
        Set pGeomDefEdit = pGeomDef
   
        Dim pSR As ISpatialReference
        Set pSR = New UnknownCoordinateSystem
        '设置新的spatial domain
        pSR.SetDomain pEnvs.XMin, pEnvs.XMax, pEnvs.YMin, pEnvs.YMax

        With pGeomDefEdit
            .GeometryType = geomType
            .GridCount = 1
            .GridSize(0) = 10
            .AvgNumPoints = 2
            Set .SpatialReference = pSR
        End With
       
        '如果是点,则设置M和Z值
        Select Case geomType
        Case esriGeometryPoint
            pGeomDefEdit.HasM = True
            pGeomDefEdit.HasZ = True
        Case Else
            pGeomDefEdit.HasM = False
            pGeomDefEdit.HasZ = False
        End Select
     
        Dim pField As IField
        Dim pFieldEdit As IFieldEdit
        Set pField = New Field
        Set pFieldEdit = pField
     
        pFieldEdit.Name = "SHAPE"
        pFieldEdit.AliasName = "Geometry"
        pFieldEdit.Type = esriFieldTypeGeometry
        Set pFieldEdit.GeometryDef = pGeomDef
        pFieldsEdit.AddField pField

在座标转换中,需要特别注意标注要素类的转换,Annotation要素类本身有一个SHAPE,它还关联一个TextElement对象,而TextElement也有SHAPE,因此在转换的时候,必须将两个SHAPE都进行转换,否则要素根本添加不进要素类中,因为不在空间范围之内。但问题也出在这里,我在转换中发现,靠近边缘的某些Annotation要素的TextElement转换后,其位置落在了转换后的空间范围之外,这点需要特别注意。

Related Items

Categories : ArcObjects Tags : ArcGIS  ArcObjects  
Comments
2008-10-2 16:46:42

怎样在arcgis中的一个涂层里面的点要素 转变为另一个shp文件(点元素)中的点元素呢? 请教啊!

Posted by liangyalinzhuo Gravatar Icon

2008-10-4 13:41:35

国庆过后能买到书了吗 ?

Posted by AEHunter Gravatar Icon

2008-10-6 15:12:29

编辑说可以,已经严重延期了,我也在不停催促

Posted by 蒋波涛 Gravatar Icon

Leave a comment

Or, take a look at Archives and Categories

目录

存档