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);
}
/// 在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 个回复
石羽
赞同来自: why小飞 、朱新颖
同理,一份数据改一下SR,也只是改了标签,但并不是真正改了数据。
2,然后,在ArcGIS中SpatialReference和CoordinateSystem是有区别的,SR包含CS,tolerance,domain等,至于为什么这样略有些复杂,不提了。
而这里实际上只改了CS,并没有改domain等其他几个参数,它们是在create featureclass时就确定下来,并且不能改的。因此,这里提示CS不匹配也是合理的,只是AlterSpatialReference名不副实。
解决办法:建议做坐标转换,可以用Project工具,也可以用project函数;如果不想转也可以新建一个要素类,然后一条一条的导入记录。
要回复问题请先登录或注册