AE中SDE空间内移动要素类FeatureClass,提示参考系不一样(程序中修改了参照系)

/// <summary>
        /// 在SDE空间内移动要素类
        /// </summary>
        /// <param name="TargetDatasetName"></param>
        /// <param name="FCName"></param>
        public void MoveFeatureClass(string TargetDatasetName, string FCName)
        {
            IWorkspaceName targetWorkspaceName = getWorkspaceName("esriDataSourcesGDB.SdeWorkspaceFactory", sdePath);
            IName targetWorkspaceIName = (IName)targetWorkspaceName;
            IWorkspace targetWorkspace = (IWorkspace)targetWorkspaceIName.Open();

            BaseFunctions bf = new BaseFunctions();
            IDataset pDS_temp = bf.getDataset(TargetDatasetName);//目标要素集
            IFeatureClass pFC_temp = bf.GetFeatClass(pDS_temp, FCName);//目标要素集中的要素类(待删除)
            IDataset delFeatCls = pFC_temp as IDataset;
            //if (delFeatCls.CanDelete()) delFeatCls.Delete();
            //IDataset tempDs = sourceFeatureClass as IDataset;
            //tempDs.Rename(str_featureClassName);
            IFeatureWorkspace pFeatureWorkspace = targetWorkspace as IFeatureWorkspace;
            IFeatureDataset pFeatureDataset = pFeatureWorkspace.OpenFeatureDataset(TargetDatasetName);
            IFeatureClass pFC_add = pFeatureWorkspace.OpenFeatureClass(targetFCName);//新增的要素类

            //更改源要素类的参考空间
            IGeoDataset sourceGeoDataset = pFC_add as IGeoDataset;
            IGeoDataset targetGeoDataset = pFeatureDataset as IGeoDataset;
            IGeoDatasetSchemaEdit pGeoDatasetSchemaEdit = sourceGeoDataset as IGeoDatasetSchemaEdit;
            if (pGeoDatasetSchemaEdit.CanAlterSpatialReference == true)
                pGeoDatasetSchemaEdit.AlterSpatialReference(targetGeoDataset.SpatialReference);

            IDatasetContainer pDatasetContainer = pFeatureDataset as IDatasetContainer;
            pDatasetContainer.AddDataset(pFC_add as IDataset);
        }

1.png

 
已邀请:

石羽

赞同来自: why小飞 朱新颖

1,首先,这事从逻辑上其实讲不通,假如一个西瓜是红瓤的,改一下标签就能当作黄瓤西瓜卖么?
同理,一份数据改一下SR,也只是改了标签,但并不是真正改了数据。
2,然后,在ArcGIS中SpatialReference和CoordinateSystem是有区别的,SR包含CS,tolerance,domain等,至于为什么这样略有些复杂,不提了。
而这里实际上只改了CS,并没有改domain等其他几个参数,它们是在create featureclass时就确定下来,并且不能改的。因此,这里提示CS不匹配也是合理的,只是AlterSpatialReference名不副实。
 
解决办法:建议做坐标转换,可以用Project工具,也可以用project函数;如果不想转也可以新建一个要素类,然后一条一条的导入记录。

要回复问题请先登录注册