ArcEngine 切换要素类的空间坐标系

7 篇文章 0 订阅

切换要素类空间坐标系的集中方式

1.使用arcgis自带的工具箱也就是GP工具去切换要素类的空间坐标系

评价:稳定,方便,但是对于正在使用IFeatureClass对象不友好

2.使用AE带的常用类去切换要素类的空间坐标系

评价:需要多写代码去做功能,但是对于IFeatureClass的修改及时不用重新获取对象

实现第2种方式:

第一步:修改要素类的空间坐标系

/// <summary>
/// 修改要素类的空间坐标系
/// </summary>
/// <param name="fc"></param>
/// <param name="spatialRef10">新坐标系</param>
/// <returns></returns>
public static bool AlterSpatialRef(IFeatureClass fc, ISpatialReference newSpatialRef)
        {
            IGeoDataset pGeoDataset = fc as IGeoDataset;
            IGeoDatasetSchemaEdit pGeoDatasetSchemaEdit = pGeoDataset as IGeoDatasetSchemaEdit;
            if (pGeoDatasetSchemaEdit.CanAlterSpatialReference == true)
            {
                pGeoDatasetSchemaEdit.AlterSpatialReference(newSpatialRef);
                return false;
            }
            return true;
        }

第二步:对要素类的矢量图形进行坐标转换,必须要有第二步,不然图形位置不对

/// <summary>
/// 矢量数据坐标转换
/// </summary>
/// <param name="featureClass"></param>
/// <param name="oldSpatil">featureClass转换之前的坐标系</param>
/// <param name="newSpatil">featureClass当前的坐标系</param>
private void featureClassTransSpatialRef(IFeatureClass featureClass, ISpatialReference oldSpatil, ISpatialReference newSpatil)
        {

            IFeatureCursor cursor = featureClass.Search(null, false);
            IFeature feature = null;
            while ((feature = cursor.NextFeature()) != null)
            {
                IGeometry2 pGeometry = null;
                pGeometry = feature.Shape as IGeometry2;
                pGeometry.SpatialReference = oldSpatil;
                pGeometry.Project(newSpatil);
                feature.Shape = pGeometry;
                //feature.Store(); 
                feature.Store();
            }
            cursor.Flush();
            if (feature != null)
            { ESRI.ArcGIS.ADF.ComReleaser.ReleaseCOMObject(feature); }
            if (cursor != null)
            { ESRI.ArcGIS.ADF.ComReleaser.ReleaseCOMObject(cursor); }
        }

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用C# ArcObjects代码来更改GDB中要素数据集的坐标系。下面是一个简单的示例代码: ```csharp //打开工作空间 IWorkspaceFactory workspaceFactory = new FileGDBWorkspaceFactory(); IWorkspace workspace = workspaceFactory.OpenFromFile("C:\data.gdb", 0); //获取要素数据集 IFeatureWorkspace featureWorkspace = workspace as IFeatureWorkspace; IFeatureDataset featureDataset = featureWorkspace.OpenFeatureDataset("datasetName"); //获取要素 IFeatureClass featureClass = featureDataset.OpenFeatureClass("className"); //获取要素空间参考信息 ISpatialReference spatialReference = featureClass.Fields.get_Field(featureClass.FindField(featureClass.ShapeFieldName)).GeometryDef.SpatialReference; //创建新的空间参考对象 ISpatialReferenceFactory spatialReferenceFactory = new SpatialReferenceEnvironmentClass(); ISpatialReference newSpatialReference = spatialReferenceFactory.CreateProjectedCoordinateSystem(12345); //更新数据集的空间参考 IDataset dataset = featureDataset as IDataset; dataset.AlterSpatialReference(newSpatialReference); //更新要素空间参考 IClassSchemaEdit classSchemaEdit = featureClass as IClassSchemaEdit; classSchemaEdit.AlterSpatialReference(newSpatialReference); ``` 在这个示例代码中,我们首先打开工作空间并获取要素数据集和要素。然后,我们获取要素空间参考信息,并使用它创建新的空间参考对象。接下来,我们使用AlterSpatialReference方法更新数据集和要素空间参考。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值