ArcGIS Engine+C#二次开发中队加载的shp文件进行投影

       /// <summary>
       /// 输入shp文件进行投影
       /// </summary>
       /// <param name="_pSWorkspaceFactory"></param>
       /// <param name="_pSourceFilePath"></param>
       /// <param name="_pSName"></param>
       /// <param name="_pTWorkspaceFactory"></param>
       /// <param name="_pTargetFilePath"></param>
       /// <param name="_pTName"></param>
       /// <param name="wkid"></param>
        public void ConvertFeatureClass( String _pSourceFilePath, string _pSName, String _pTargetFilePath, string _pTName,int <span style="font-family: Arial, Helvetica, sans-serif;">factoryCode)</span>
        {
            try
            {
                IWorkspaceFactory _pSWorkspaceFactory = new ShapefileWorkspaceFactory();
                // 打开工作空间
                IWorkspace pSWorkspace = _pSWorkspaceFactory.OpenFromFile(_pSourceFilePath, 0);
                IWorkspace pTWorkspace = _pSWorkspaceFactory.OpenFromFile(_pTargetFilePath, 0);

                IFeatureWorkspace pFtWs = pSWorkspace as IFeatureWorkspace;
                IFeatureClass pSourceFeatureClass = pFtWs.OpenFeatureClass(_pSName);
                IDataset pSDataset = pSourceFeatureClass as IDataset;
                IFeatureClassName pSourceFeatureClassName = pSDataset.FullName as IFeatureClassName;

                IDataset pTDataset = (IDataset)pTWorkspace;
                IName pTDatasetName = pTDataset.FullName;
                IWorkspaceName pTargetWorkspaceName = (IWorkspaceName)pTDatasetName;
                IFeatureClassName pTargetFeatureClassName = new FeatureClassNameClass();
                IDatasetName pTargetDatasetName = (IDatasetName)pTargetFeatureClassName;
                pTargetDatasetName.Name = _pTName;
                pTargetDatasetName.WorkspaceName = pTargetWorkspaceName;

                // 创建字段检查对象
                IFieldChecker pFieldChecker = new FieldCheckerClass();
                IFields sourceFields = pSourceFeatureClass.Fields;
                IFields pTargetFields = null;
                IEnumFieldError pEnumFieldError = null;

                pFieldChecker.InputWorkspace = pSWorkspace;
                pFieldChecker.ValidateWorkspace = pTWorkspace;
                // 验证字段
                pFieldChecker.Validate(sourceFields, out pEnumFieldError, out pTargetFields);
                if (pEnumFieldError != null)
                {
                    Console.WriteLine("Errors were encountered during field validation.");
                }

                // 获取源要素类的空间参考,可以通过获取源要素类中Shape字段的GeometryDef字段获得
                // 这里应该也可以自定义GeometryDef,实现源要素类的投影变换?
                //String pShapeFieldName = pSourceFeatureClass.ShapeFieldName;
                //int pFieldIndex = pSourceFeatureClass.FindField(pShapeFieldName);
                //IField pShapeField = sourceFields.get_Field(pFieldIndex);
                //IGeometryDef pSourceGeometryDef = pShapeField.GeometryDef;
                //int factoryCode = pSourceGeometryDef.SpatialReference.FactoryCode;
              

                IGeometryDef geometryDef = new GeometryDefClass();
                IGeometryDefEdit geometryDefEdit = (IGeometryDefEdit)geometryDef;
                geometryDefEdit.GeometryType_2 = ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon;
                // 定义新的空间参考
                ISpatialReferenceFactory pSpatialReferFac = new SpatialReferenceEnvironmentClass();
                ISpatialReference pSpatialRefer = pSpatialReferFac.CreateProjectedCoordinateSystem(wkid);
                if (pSpatialRefer != null)
                {
                    geometryDefEdit.SpatialReference_2 = pSpatialRefer;
                }
                IGeometryDef pTargetGeometryDef = geometryDef;

                // 创建要素转换对象
                IFeatureDataConverter pFDConverter = new FeatureDataConverterClass();
                IEnumInvalidObject pEnumInvalidObject = pFDConverter.ConvertFeatureClass
                    (pSourceFeatureClassName, null, null, pTargetFeatureClassName,
                    pTargetGeometryDef, pTargetFields, "", 1000, 0);
                IInvalidObjectInfo pInvalidInfo = null;
                pEnumInvalidObject.Reset();
                while ((pInvalidInfo = pEnumInvalidObject.Next()) != null)
                {
                    Console.WriteLine("Errors occurred for the following feature: {0}",
                        pInvalidInfo.InvalidObjectID);
                }
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值