Exemplo n.º 1
0
        public bool AddRasterDatesetToMD(IMosaicDataset pMosaicDataset, IRasterDataset pRasteDataset, IRasterType pRasterType)
        {
            try
            {
                IRasterDatasetCrawler pRasterDatasetCrawler = new RasterDatasetCrawlerClass();

                pRasterDatasetCrawler.RasterDataset = pRasteDataset;

                IDataset pDataset = pRasteDataset as IDataset;

                ESRI.ArcGIS.esriSystem.IName pName = pDataset.FullName;

                pRasterDatasetCrawler.DatasetName = pName;

                IMosaicDatasetOperation pMosaicDatasetOperation = (IMosaicDatasetOperation)pMosaicDataset;

                IAddRastersParameters AddRastersArgs = new AddRastersParametersClass();

                AddRastersArgs.Crawler = pRasterDatasetCrawler as IDataSourceCrawler;

                AddRastersArgs.RasterType = pRasterType;

                pMosaicDatasetOperation.AddRasters(AddRastersArgs, null);

                return(true);
            }
            catch (System.Exception ex)
            {
                return(false);
            }
        }
Exemplo n.º 2
0
        public IFeatureClass CreateShapefile(
            string sParentDirectory,
            string sWorkspaceName,
            string sFileName)
        {
            if (System.IO.Directory.Exists(sParentDirectory + sWorkspaceName))
            {
                System.IO.Directory.Delete(sParentDirectory + sWorkspaceName, true);
            }

            IWorkspaceFactory pWf = new ShapefileWorkspaceFactoryClass();
            IWorkspaceName    pWn = pWf.Create(sParentDirectory, sWorkspaceName, null, 0);

            ESRI.ArcGIS.esriSystem.IName name = pWn as ESRI.ArcGIS.esriSystem.IName;

            IWorkspace        pW  = (IWorkspace)name.Open();
            IFeatureWorkspace pFw = pW as IFeatureWorkspace;

            IFields     pFs  = new FieldsClass();
            IFieldsEdit pFse = pFs as IFieldsEdit;

            IFieldEdit pFe = new FieldClass();

            pFe.Name_2      = "OID";
            pFe.AliasName_2 = "序号";
            pFe.Type_2      = esriFieldType.esriFieldTypeOID;
            pFse.AddField((IField)pFe);//IFieldEdit.AddField是AO隐藏属性

            pFe             = new FieldClass();
            pFe.Name_2      = "Name";
            pFe.AliasName_2 = "名称";
            pFe.Type_2      = esriFieldType.esriFieldTypeString;
            pFse.AddField((IField)pFe);

            IGeometryDefEdit  pGde = new GeometryDefClass();
            ISpatialReference pSr  = m_map.SpatialReference;

            pGde.SpatialReference_2 = pSr;
            pGde.GeometryType_2     = esriGeometryType.esriGeometryPoint;

            pFe = new FieldClass();
            string sShapeFieldName = "Shape";

            pFe.Name_2        = sShapeFieldName;
            pFe.AliasName_2   = "形状";
            pFe.Type_2        = esriFieldType.esriFieldTypeGeometry;
            pFe.GeometryDef_2 = pGde;
            pFse.AddField((IField)pFe);

            IFeatureClass pFc = pFw.CreateFeatureClass(sFileName, pFs, null, null, esriFeatureType.esriFTSimple, "Shape", "");

            if (pFc == null)
            {
                return(null);
            }
            return(pFc);
        }
        public IFeatureClass CreateShapefile(String sParentDirectory, String sWorkspaceName, String sFileName)
        {
            IWorkspaceFactory workspaceFactory;
            IWorkspace        workspace;
            IFeatureWorkspace featureWorkspace;
            IFeatureClass     featureClass;

            if (System.IO.Directory.Exists(sParentDirectory + sWorkspaceName))
            {
                workspaceFactory = new ShapefileWorkspaceFactoryClass();
                workspace        = workspaceFactory.OpenFromFile(sParentDirectory + sWorkspaceName, 0);
                featureWorkspace = workspace as IFeatureWorkspace;
                featureClass     = featureWorkspace.OpenFeatureClass(sFileName);
            }
            else
            {
                workspaceFactory = new ShapefileWorkspaceFactoryClass();
                IWorkspaceName workspaceName      = workspaceFactory.Create(sParentDirectory, sWorkspaceName, null, 0);
                ESRI.ArcGIS.esriSystem.IName name = workspaceName as ESRI.ArcGIS.esriSystem.IName;
                workspace        = (IWorkspace)name.Open();
                featureWorkspace = workspace as IFeatureWorkspace;

                IFields     fields     = new FieldsClass();
                IFieldsEdit fieldsEdit = fields as IFieldsEdit;

                IFieldEdit fieldEdit = new FieldClass();
                fieldEdit.Name_2      = "OID";
                fieldEdit.AliasName_2 = "序号";
                fieldEdit.Type_2      = esriFieldType.esriFieldTypeOID;
                fieldsEdit.AddField((IField)fieldEdit);

                fieldEdit             = new FieldClass();
                fieldEdit.Name_2      = "Name";
                fieldEdit.AliasName_2 = "名称";
                fieldEdit.Type_2      = esriFieldType.esriFieldTypeString;
                fieldsEdit.AddField((IField)fieldEdit);

                IGeometryDefEdit  geoDefEdit       = new GeometryDefClass();
                ISpatialReference spatialReference = m_map.SpatialReference;
                geoDefEdit.SpatialReference_2 = spatialReference;
                geoDefEdit.GeometryType_2     = esriGeometryType.esriGeometryPoint;

                fieldEdit               = new FieldClass();
                fieldEdit.Name_2        = "Shape";
                fieldEdit.AliasName_2   = "形状";
                fieldEdit.Type_2        = esriFieldType.esriFieldTypeGeometry;
                fieldEdit.GeometryDef_2 = geoDefEdit;
                fieldsEdit.AddField((IField)fieldEdit);

                featureClass = featureWorkspace.CreateFeatureClass(sFileName, fields, null, null, esriFeatureType.esriFTSimple, "Shape", "");
                if (featureClass == null)
                {
                    return(null);
                }
            }
            return(featureClass);
        }
Exemplo n.º 4
0
        public void IFeatureDataConverter(IWorkspace pSourceWorkspace, IWorkspace pTargetWorkspace, string pSFeatureClass, string pDFeatureClass)
        {
            IDataset       sourceWorkspaceDataset = (IDataset)pSourceWorkspace;
            IWorkspaceName sourceWorkspaceName    = (IWorkspaceName)sourceWorkspaceDataset.FullName;

            IFeatureClassName sourceFeatureClassName = new FeatureClassNameClass();
            IDatasetName      sourceDatasetName      = (IDatasetName)sourceFeatureClassName;

            sourceDatasetName.WorkspaceName = sourceWorkspaceName;
            sourceDatasetName.Name          = pSFeatureClass;

            IDataset       targetWorkspaceDataset = (IDataset)pTargetWorkspace;
            IWorkspaceName targetWorkspaceName    = (IWorkspaceName)targetWorkspaceDataset.FullName;

            IFeatureClassName targetFeatureClassName = new FeatureClassNameClass();
            IDatasetName      targetDatasetName      = (IDatasetName)targetFeatureClassName;

            targetDatasetName.WorkspaceName = targetWorkspaceName;
            targetDatasetName.Name          = pDFeatureClass;

            ESRI.ArcGIS.esriSystem.IName sourceName = (ESRI.ArcGIS.esriSystem.IName)sourceFeatureClassName;
            IFeatureClass sourceFeatureClass        = (IFeatureClass)sourceName.Open();

            IFieldChecker   fieldChecker = new FieldCheckerClass();
            IFields         targetFeatureClassFields;
            IFields         sourceFeatureClassFields = sourceFeatureClass.Fields;
            IEnumFieldError enumFieldError;

            fieldChecker.InputWorkspace    = pSourceWorkspace;
            fieldChecker.ValidateWorkspace = pTargetWorkspace;
            fieldChecker.Validate(sourceFeatureClassFields, out enumFieldError, out targetFeatureClassFields);

            IField geometryField;

            for (int i = 0; i < targetFeatureClassFields.FieldCount; i++)
            {
                if (targetFeatureClassFields.get_Field(i).Type == esriFieldType.esriFieldTypeGeometry)
                {
                    geometryField = targetFeatureClassFields.get_Field(i);

                    IGeometryDef geometryDef = geometryField.GeometryDef;

                    IGeometryDefEdit targetFCGeoDefEdit = (IGeometryDefEdit)geometryDef;
                    targetFCGeoDefEdit.GridCount_2 = 1;
                    targetFCGeoDefEdit.set_GridSize(0, 0);

                    targetFCGeoDefEdit.SpatialReference_2 = geometryField.GeometryDef.SpatialReference;

                    IQueryFilter queryFilter = new QueryFilterClass();
                    queryFilter.WhereClause = "";

                    IFeatureDataConverter fctofc     = new FeatureDataConverterClass();
                    IEnumInvalidObject    enumErrors = fctofc.ConvertFeatureClass(sourceFeatureClassName, queryFilter, null, targetFeatureClassName, geometryDef, targetFeatureClassFields, "", 1000, 0);
                    break;
                }
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// 获取栅格类型
        /// </summary>
        /// <param name="pTypeName"></param>
        /// <returns></returns>
        public IRasterType GetRasterType(string pTypeName)
        {
            IRasterTypeName pRasterTypeName = new RasterTypeNameClass();

            pRasterTypeName.Name = pTypeName;

            ESRI.ArcGIS.esriSystem.IName pName = pRasterTypeName as ESRI.ArcGIS.esriSystem.IName;

            IRasterType pRasterType = pName.Open() as IRasterType;


            return(pRasterType);
        }
Exemplo n.º 6
0
        //通过IName获取到CadDrawingDataset
        private static ICadDrawingDataset GetCadDataset(string cadWorkspacePath, string cadFileName)
        {
            //Create a WorkspaceName object
            IWorkspaceName workspaceName = new WorkspaceNameClass();

            workspaceName.WorkspaceFactoryProgID = "esriDataSourcesFile.CadWorkspaceFactory";
            workspaceName.PathName = cadWorkspacePath;

            //Create a CadDrawingName object
            IDatasetName cadDatasetName = new CadDrawingNameClass();

            cadDatasetName.Name          = cadFileName;
            cadDatasetName.WorkspaceName = workspaceName;

            //Open the CAD drawing
            ESRI.ArcGIS.esriSystem.IName name = (ESRI.ArcGIS.esriSystem.IName)cadDatasetName;
            return((ICadDrawingDataset)name.Open());
        }
Exemplo n.º 7
0
        internal static ESRI.ArcGIS.Geodatabase.IWorkspace CreateInMemoryWorkspace(string workspacename)
        {
            // Create an in-memory workspace factory.
            Type factoryType = Type.GetTypeFromProgID(
                "esriDataSourcesGDB.InMemoryWorkspaceFactory");

            ESRI.ArcGIS.Geodatabase.IWorkspaceFactory workspaceFactory = (ESRI.ArcGIS.Geodatabase.IWorkspaceFactory)
                                                                         Activator.CreateInstance(factoryType);


            // Create an in-memory workspace.
            ESRI.ArcGIS.Geodatabase.IWorkspaceName workspaceName = workspaceFactory.Create("", workspacename,
                                                                                           null, 0);

            // Cast for IName and open a reference to the in-memory workspace through the name object.
            ESRI.ArcGIS.esriSystem.IName name = (ESRI.ArcGIS.esriSystem.IName)workspaceName;

            ESRI.ArcGIS.Geodatabase.IWorkspace workspace = (ESRI.ArcGIS.Geodatabase.IWorkspace)name.Open();
            return(workspace);
        }
Exemplo n.º 8
0
        ////数据复制
        public IFeatureClass IFeatureDataConverter_ConvertFeatureClass(IWorkspace sourceWorkspace, IWorkspace targetWorkspace, string nameOfSourceFeatureClass, string nameOfTargetFeatureClass)
        {
            //create source workspace name
            IDataset       sourceWorkspaceDataset = (IDataset)sourceWorkspace;
            IWorkspaceName sourceWorkspaceName    = (IWorkspaceName)sourceWorkspaceDataset.FullName;
            //create source dataset name
            IFeatureClassName sourceFeatureClassName = new FeatureClassNameClass();
            IDatasetName      sourceDatasetName      = (IDatasetName)sourceFeatureClassName;

            sourceDatasetName.WorkspaceName = sourceWorkspaceName;
            sourceDatasetName.Name          = nameOfSourceFeatureClass;
            //create target workspace name
            IDataset       targetWorkspaceDataset = (IDataset)targetWorkspace;
            IWorkspaceName targetWorkspaceName    = (IWorkspaceName)targetWorkspaceDataset.FullName;
            //create target dataset name
            IFeatureClassName targetFeatureClassName = new FeatureClassNameClass();
            IDatasetName      targetDatasetName      = (IDatasetName)targetFeatureClassName;

            targetDatasetName.WorkspaceName = targetWorkspaceName;
            targetDatasetName.Name          = nameOfTargetFeatureClass;
            //Open input Featureclass to get field definitions.
            ESRI.ArcGIS.esriSystem.IName sourceName = (ESRI.ArcGIS.esriSystem.IName)sourceFeatureClassName;
            IFeatureClass sourceFeatureClass        = (IFeatureClass)sourceName.Open();

            //Validate the field names because you are converting between different workspace types.
            IFieldChecker   fieldChecker = new FieldCheckerClass();
            IFields         targetFeatureClassFields;
            IFields         sourceFeatureClassFields = sourceFeatureClass.Fields;
            IEnumFieldError enumFieldError;

            // Most importantly set the input and validate workspaces!
            fieldChecker.InputWorkspace    = sourceWorkspace;
            fieldChecker.ValidateWorkspace = targetWorkspace;
            fieldChecker.Validate(sourceFeatureClassFields, out enumFieldError, out targetFeatureClassFields);
            // Loop through the output fields to find the geomerty field
            IField geometryField;

            for (int i = 0; i < targetFeatureClassFields.FieldCount; i++)
            {
                if (targetFeatureClassFields.get_Field(i).Type == esriFieldType.esriFieldTypeGeometry)
                {
                    geometryField = targetFeatureClassFields.get_Field(i);
                    // Get the geometry field's geometry defenition
                    IGeometryDef geometryDef = geometryField.GeometryDef;
                    //Give the geometry definition a spatial index grid count and grid size
                    IGeometryDefEdit targetFCGeoDefEdit = (IGeometryDefEdit)geometryDef;
                    targetFCGeoDefEdit.GridCount_2 = 1;
                    targetFCGeoDefEdit.set_GridSize(0, 0);
                    //Allow ArcGIS to determine a valid grid size for the data loaded
                    targetFCGeoDefEdit.SpatialReference_2 = geometryField.GeometryDef.SpatialReference;
                    // we want to convert all of the features
                    IQueryFilter queryFilter = new QueryFilterClass();
                    queryFilter.WhereClause = "";
                    // Load the feature class
                    IFeatureDataConverter fctofc     = new FeatureDataConverterClass();
                    IEnumInvalidObject    enumErrors = fctofc.ConvertFeatureClass(sourceFeatureClassName, queryFilter, null, targetFeatureClassName, geometryDef, targetFeatureClassFields, "", 1000, 0);
                    break;
                }
            }

            //Open input Featureclass to get field definitions.
            ESRI.ArcGIS.esriSystem.IName targetName = (ESRI.ArcGIS.esriSystem.IName)targetFeatureClassName;
            return((IFeatureClass)targetName.Open());
        }
Exemplo n.º 9
0
        public static void CopyPasteGeodatabaseData(IWorkspace sourceWorkspace, IWorkspace targetWorkspace, string objectName, esriDatasetType esriDataType)
        {
            // Validate input

            if ((sourceWorkspace.Type == esriWorkspaceType.esriFileSystemWorkspace) || (targetWorkspace.Type == esriWorkspaceType.esriFileSystemWorkspace))
            {
                return; // Should be a throw
            }
            //create source workspace name

            IDataset sourceWorkspaceDataset = (IDataset)sourceWorkspace;

            IWorkspaceName sourceWorkspaceName = (IWorkspaceName)sourceWorkspaceDataset.FullName;

            //create target workspace name

            IDataset targetWorkspaceDataset = (IDataset)targetWorkspace;

            IWorkspaceName targetWorkspaceName = (IWorkspaceName)targetWorkspaceDataset.FullName;

            //Create Name Object Based on data type

            IDatasetName datasetName;

            switch (esriDataType)
            {
            case esriDatasetType.esriDTFeatureDataset:

                IFeatureDatasetName inFeatureDatasetName = new FeatureDatasetNameClass();

                datasetName          = (IDatasetName)inFeatureDatasetName;
                inFeatureDatasetName = null;
                break;

            case esriDatasetType.esriDTFeatureClass:

                IFeatureClassName inFeatureClassName = new FeatureClassNameClass();

                datasetName        = (IDatasetName)inFeatureClassName;
                inFeatureClassName = null;

                break;

            case esriDatasetType.esriDTTable:

                ITableName inTableName = new TableNameClass();

                datasetName = (IDatasetName)inTableName;
                inTableName = null;

                break;

            case esriDatasetType.esriDTGeometricNetwork:

                IGeometricNetworkName inGeometricNetworkName = new GeometricNetworkNameClass();

                datasetName            = (IDatasetName)inGeometricNetworkName;
                inGeometricNetworkName = null;

                break;

            case esriDatasetType.esriDTRelationshipClass:

                IRelationshipClassName inRelationshipClassName = new RelationshipClassNameClass();

                datasetName             = (IDatasetName)inRelationshipClassName;
                inRelationshipClassName = null;
                break;

            case esriDatasetType.esriDTNetworkDataset:

                INetworkDatasetName inNetworkDatasetName = new NetworkDatasetNameClass();

                datasetName          = (IDatasetName)inNetworkDatasetName;
                inNetworkDatasetName = null;

                break;

            case esriDatasetType.esriDTTopology:

                ITopologyName inTopologyName = new TopologyNameClass();

                datasetName    = (IDatasetName)inTopologyName;
                inTopologyName = null;

                break;

            default:

                return;     // Should be a throw
            }

            // Set the name of the object to be copied

            datasetName.WorkspaceName = (IWorkspaceName)sourceWorkspaceName;

            datasetName.Name = objectName;

            //Setup mapping for copy/paste

            IEnumNameMapping fromNameMapping;

            ESRI.ArcGIS.esriSystem.IEnumNameEdit editFromName;

            ESRI.ArcGIS.esriSystem.IEnumName fromName = new NamesEnumerator();

            editFromName = (ESRI.ArcGIS.esriSystem.IEnumNameEdit)fromName;

            editFromName.Add((ESRI.ArcGIS.esriSystem.IName)datasetName);

            ESRI.ArcGIS.esriSystem.IName toName = (ESRI.ArcGIS.esriSystem.IName)targetWorkspaceName;

            // Generate name mapping


            ESRI.ArcGIS.Geodatabase.IGeoDBDataTransfer geoDBDataTransfer = new GeoDBDataTransferClass();

            bool targetWorkspaceExists;

            targetWorkspaceExists = geoDBDataTransfer.GenerateNameMapping(fromName, toName, out fromNameMapping);

            // Copy/Pate the data

            geoDBDataTransfer.Transfer(fromNameMapping, toName);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(geoDBDataTransfer);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(datasetName);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(fromName);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(editFromName);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(fromNameMapping);
            geoDBDataTransfer = null;
            datasetName       = null;
            editFromName      = null;
            fromName          = null;

            sourceWorkspaceDataset = null;
            sourceWorkspaceName    = null;
            targetWorkspaceDataset = null;
            targetWorkspaceName    = null;
            toName          = null;
            fromNameMapping = null;
        }
Exemplo n.º 10
0
        public IFeatureClass CreateShapefile(string ParentDirectory, string sWorkspaceName, string FileName, string geotype)
        {
            if (System.IO.Directory.Exists(ParentDirectory + sWorkspaceName))
            {
                System.IO.Directory.Delete(ParentDirectory + sWorkspaceName, true);
            }
            //创建针对shape文件的工作空间工场对象
            //通过参数创建相关工作空间(文件夹),用于包含shape文件
            IWorkspaceFactory WorkspaceFactory = new ShapefileWorkspaceFactoryClass();
            IWorkspaceName    WorkspaceName    = WorkspaceFactory.Create(ParentDirectory, sWorkspaceName, null, 0);

            ESRI.ArcGIS.esriSystem.IName name = WorkspaceName as ESRI.ArcGIS.esriSystem.IName;

            //打开新建的工作空间,并通过IFeatureWorkspace接口访问它
            IWorkspace        workspace        = (IWorkspace)name.Open();
            IFeatureWorkspace featureworkspace = workspace as IFeatureWorkspace;

            //创建、编辑shape文件的字段
            IFields     fields     = new FieldsClass();
            IFieldsEdit fieldsedit = fields as IFieldsEdit;

            //创建并编辑“序号”字段
            //“序号”字段是要素类必备字段
            IFieldEdit fieldedit = new FieldClass();

            fieldedit.Name_2      = "OID";
            fieldedit.AliasName_2 = "序号";
            fieldedit.Type_2      = esriFieldType.esriFieldTypeOID;
            fieldsedit.AddField((IField)fieldedit);

            //创建并编辑“名称”字段
            fieldedit             = new FieldClass();
            fieldedit.Name_2      = "Name";
            fieldedit.AliasName_2 = "名称";
            fieldedit.Type_2      = esriFieldType.esriFieldTypeString;
            fieldsedit.AddField((IField)fieldedit);

            IGeometryDefEdit  geodefedit       = new GeometryDefClass();
            ISpatialReference spatialreference = m_map.SpatialReference;

            geodefedit.SpatialReference_2 = spatialreference;
            //geotype这个字符串变量代表了要素类的几何类型
            switch (geotype)
            {
            case "Point":
                geodefedit.GeometryType_2 = esriGeometryType.esriGeometryPoint;
                break;

            case "Line":
                geodefedit.GeometryType_2 = esriGeometryType.esriGeometryPolyline;
                break;

            case "Polygon":
                geodefedit.GeometryType_2 = esriGeometryType.esriGeometryPolygon;
                break;

            default:
                geodefedit.GeometryType_2 = esriGeometryType.esriGeometryPoint;
                break;
            }
            fieldedit = new FieldClass();
            //创建“形状”字段来表示要素类的集合类型
            string shapename = "Shape";

            fieldedit.Name_2        = shapename;
            fieldedit.AliasName_2   = "形状";
            fieldedit.Type_2        = esriFieldType.esriFieldTypeGeometry;
            fieldedit.GeometryDef_2 = geodefedit;
            fieldsedit.AddField((IField)fieldedit);

            IFeatureClass featureclass = featureworkspace.CreateFeatureClass(FileName, fields, null, null,
                                                                             esriFeatureType.esriFTSimple, "Shape", "");

            if (featureclass == null)
            {
                return(null);
            }
            return(featureclass);
        }
Exemplo n.º 11
0
        /// <summary>
        /// 字段匹配
        /// </summary>
        /// <param name="sourceFeatClass"></param>
        /// <param name="targetFeatClass"></param>
        /// <param name="FieldPair"></param>
        /// <returns></returns>
        public static ESRI.ArcGIS.Geoprocessing.IGPFieldMapping GetGPFieldMapping(ESRI.ArcGIS.Geodatabase.IFeatureClass sourceFeatClass,
                                                                                  ESRI.ArcGIS.Geodatabase.IFeatureClass targetFeatClass, string FieldPair)
        {
            ESRI.ArcGIS.Geodatabase.IDataset       sourceDataset = sourceFeatClass as ESRI.ArcGIS.Geodatabase.IDataset;
            ESRI.ArcGIS.esriSystem.IName           pName         = sourceDataset.FullName;
            ESRI.ArcGIS.Geoprocessing.IGPUtilities gputilities   = new ESRI.ArcGIS.Geoprocessing.GPUtilitiesClass();
            ESRI.ArcGIS.Geodatabase.IDETable       inputTableA   = (ESRI.ArcGIS.Geodatabase.IDETable)gputilities.MakeDataElementFromNameObject(pName);

            ESRI.ArcGIS.esriSystem.IArray inputtables = new ESRI.ArcGIS.esriSystem.ArrayClass();
            inputtables.Add(inputTableA);

            ESRI.ArcGIS.Geoprocessing.IGPFieldMapping pGPFieldMapping = new ESRI.ArcGIS.Geoprocessing.GPFieldMappingClass();
            pGPFieldMapping.Initialize(inputtables, null);

            string[] sFieldPairs = FieldPair.Split(';');
            if (sFieldPairs == null)
            {
                return(null);
            }

            foreach (string sFieldPair in sFieldPairs)
            {
                try
                {
                    if (string.IsNullOrWhiteSpace(sFieldPair))
                    {
                        continue;
                    }
                    string[] sourceAndtarget = sFieldPair.Split(',');
                    if (sourceAndtarget == null || sourceAndtarget.Length <= 0)
                    {
                        continue;
                    }
                    string targetFieldName = sourceAndtarget[0];
                    string sourceFieldName = sourceAndtarget[1];
                    int    sourceindex     = sourceFeatClass.FindField(sourceFieldName);
                    int    targetindex     = targetFeatClass.FindField(targetFieldName);
                    if (sourceindex < 0 || targetindex < 0)
                    {
                        continue;
                    }

                    ESRI.ArcGIS.Geoprocessing.IGPFieldMap trackid = new ESRI.ArcGIS.Geoprocessing.GPFieldMapClass();
                    trackid.OutputField = targetFeatClass.Fields.get_Field(targetFeatClass.FindField(targetFieldName));
                    trackid.MergeRule   = ESRI.ArcGIS.Geoprocessing.esriGPFieldMapMergeRule.esriGPFieldMapMergeRuleLast;
                    int fieldmap_index = pGPFieldMapping.FindFieldMap(sourceFieldName);
                    ESRI.ArcGIS.Geoprocessing.IGPFieldMap stfid_fieldmap = pGPFieldMapping.GetFieldMap(fieldmap_index);
                    int field_index = stfid_fieldmap.FindInputField(inputTableA, sourceFieldName);
                    ESRI.ArcGIS.Geodatabase.IField inputField = stfid_fieldmap.GetField(field_index);
                    //if (inputField.Name == "STLLZ")
                    //{
                    //    ESRI.ArcGIS.Geodatabase.IField field = targetFeatClass.Fields.get_Field(targetFeatClass.FindField(targetFieldName));
                    //}
                    trackid.AddInputField(inputTableA, inputField, -1, -1);
                    pGPFieldMapping.AddFieldMap(trackid);
                }
                catch (Exception ex)
                {
                }
            }

            return(pGPFieldMapping);
        }
Exemplo n.º 12
0
        //Function: Create Shapefile
        //Date: 2019/4/12
        public IFeatureClass CreateShapefile(IFields fields, string sParentDirectory,
                                             string sWorkspaceName, //the name of the folder that contains the shapefile
                                             string sFilename,
                                             string sGeometryType)  //the geometry type of shapefile
        {
            IWorkspaceFactory workspaceFactory = new ShapefileWorkspaceFactoryClass();
            IWorkspaceName    workspaceName    = workspaceFactory.Create(sParentDirectory, sWorkspaceName, null, 0);

            ESRI.ArcGIS.esriSystem.IName name = workspaceName as ESRI.ArcGIS.esriSystem.IName;

            IWorkspace        workspace        = (IWorkspace)name.Open();
            IFeatureWorkspace featureWorkspace = workspace as IFeatureWorkspace;

            IFieldsEdit fieldsEdit = fields as IFieldsEdit;

            IFieldEdit fieldEdit = new FieldClass();

            fieldEdit.Name_2      = "OID";
            fieldEdit.AliasName_2 = "序号";
            fieldEdit.Type_2      = esriFieldType.esriFieldTypeOID;
            fieldsEdit.AddField((IField)fieldEdit);

            fieldEdit             = new FieldClass();
            fieldEdit.Name_2      = "Name";
            fieldEdit.AliasName_2 = "名称";
            fieldEdit.Type_2      = esriFieldType.esriFieldTypeString;
            fieldsEdit.AddField((IField)fieldEdit);

            //Change shape type
            IGeometryDefEdit  geoDefEdit       = new GeometryDefClass();
            ISpatialReference spatialReference = m_map.SpatialReference;

            geoDefEdit.SpatialReference_2 = spatialReference;
            if (sGeometryType == "Point")
            {
                geoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint;
            }
            else if (sGeometryType == "Line")
            {
                geoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryLine;
            }
            else if (sGeometryType == "Polygon")
            {
                geoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon;
            }

            //change shapetype
            fieldEdit = new FieldClass();
            string sShapeFieldName = "Shape";

            fieldEdit.Name_2        = sShapeFieldName;
            fieldEdit.AliasName_2   = "形状";
            fieldEdit.Type_2        = esriFieldType.esriFieldTypeGeometry;
            fieldEdit.GeometryDef_2 = geoDefEdit;
            fieldsEdit.AddField((IField)fieldEdit);

            //create feature class
            IFeatureClass featureClass = featureWorkspace.CreateFeatureClass(sFilename,
                                                                             fields, null, null, esriFeatureType.esriFTSimple, "Shape", "");

            if (featureClass == null)
            {
                return(null);
            }
            return(featureClass);
        }