예제 #1
0
 private void btnPolygonDataset_Click(object sender, EventArgs e)
 {
     try
     {
         SaveFileDialog fbd = new SaveFileDialog();
         fbd.Title = "新建File Geodatabase";
         if (fbd.ShowDialog() == DialogResult.OK)
         {
             if (System.IO.Directory.Exists(fbd.FileName + ".gdb") == true)
             {
                 MessageBox.Show("GDB已存在", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                 return;
             }
             //IWorkspaceFactory workspaceFactory = new FileGDBWorkspaceFactoryClass();
             //IWorkspaceName workspaceName = workspaceFactory.Create(System.IO.Path.GetDirectoryName(fbd.FileName), System.IO.Path.GetFileName(fbd.FileName), null, 0);
             ClsGDBDataCommon com = new ClsGDBDataCommon();
             com.Create_FileGDB(System.IO.Path.GetDirectoryName(fbd.FileName), System.IO.Path.GetFileName(fbd.FileName) + ".gdb");
             IWorkspace pws = com.OpenFromFileGDB(fbd.FileName + ".gdb");
             pFeatureDataset = creatdataset(pws, System.IO.Path.GetFileName(fbd.FileName), pMapControl.SpatialReference);
             creatfeatureclass(System.IO.Path.GetFileName(fbd.FileName));
             txtPolygonDataset.Text = fbd.FileName + ".gdb";
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
         return;
     }
 }
예제 #2
0
        public void Execute(ProgressReporterEvent reporter)
        {
            if (_serialized == null)
            {
                throw new Exception("can't execute. No config!");
            }

            #region Instance Creator

            var assembly = Assembly.LoadFrom(SystemVariables.ApplicationDirectory + @"\" + _serialized.NetworkCreatorAssembly);
            if (assembly == null)
            {
                throw new Exception("Assembly not found: " + _serialized.NetworkCreatorAssembly);
            }
            var creator = assembly.CreateInstance(_serialized.NetworkCreatorType) as INetworkCreator;
            if (creator == null)
            {
                throw new Exception("Type " + _serialized.NetworkCreatorType + " is not a network creator");
            }

            #endregion

            #region Open Dataset

            IFeatureDataset dataset = PlugInManager.Create(new Guid(_serialized.DatasetGuid)) as IFeatureDataset;
            if (dataset == null)
            {
                throw new Exception("Unable to crete dataset");
            }
            dataset.ConnectionString = _serialized.ConnectionString;
            dataset.Open();
            this.FeatureDataset  = dataset;
            this.FeatureDatabase = dataset.Database as IFeatureDatabase3;
            if (this.FeatureDatabase == null)
            {
                throw new Exception("Featuredatabase no implements IFeatureDatabase3");
            }

            #endregion

            creator.NetworkName                 = _serialized.FeatureClasses.NetworkName;
            creator.FeatureDataset              = this.FeatureDataset;
            creator.EdgeFeatureClasses          = this.EdgeFeatureclasses;
            creator.NodeFeatureClasses          = this.NodeFeatureclasses;
            creator.SnapTolerance               = this.SnapTolerance;
            creator.ComplexEdgeFcIds            = this.ComplexEdgeFcIds;
            creator.GraphWeights                = this.GraphWeights;
            creator.SwitchNodeFcIdAndFieldnames = this.SwitchNodeFcIds;
            creator.NodeTypeFcIds               = this.NetworkNodeTypeFcIds;

            if (reporter != null && creator is IProgressReporter)
            {
                ((IProgressReporter)creator).ReportProgress += (ProgressReport progressEventReport) =>
                {
                    reporter(progressEventReport);
                };
            }

            creator.Run();
        }
예제 #3
0
        public CreateTileGridClass(
            string name,
            IFeatureDataset targetDataset,
            ISpatialIndexDef spatialIndexDef,
            IRasterDataset sourceDataset,
            double tileSizeX, double tileSizeY,
            double resX, double resY,
            int levels,
            string cacheDirectory,
            TileGridType gridType)
        {
            _name            = name;
            _cacheDirectory  = cacheDirectory;
            _targetDataset   = targetDataset;
            _spatialIndexDef = spatialIndexDef;
            _sourceDataset   = sourceDataset;
            _tileSizeX       = tileSizeX;
            _tileSizeY       = tileSizeY;
            _resX            = resX;
            _resY            = resY;
            _levels          = levels;
            _gridType        = gridType;

            _fdb = (SqlFDB)_targetDataset.Database;

            _createLevels = new List <int>();
            for (int i = 0; i < _levels; i++)
            {
                _createLevels.Add(i);
            }
        }
예제 #4
0
        //在文件数据库中新建要素数据集
        public IFeatureDataset CreateDatasetInGDB(IWorkspace pWorkspace, string name, ISpatialReference pSpatialReference)
        {
            IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace;
            IFeatureDataset   pFeatureDataset   = pFeatureWorkspace.CreateFeatureDataset(name, pSpatialReference);

            return(pFeatureDataset);
        }
예제 #5
0
        private void AddFeatureDatasetToTree(TreeNode parentNode, IFeatureDataset featDataset)
        {
            TreeNode featDSNode = parentNode.Nodes.Add(featDataset.Name);

            featDSNode.Tag                = featDataset;
            featDSNode.ImageIndex         = 9;
            featDSNode.SelectedImageIndex = 9;
            featDSNode.StateImageIndex    = 0;

            IEnumDataset datasets = featDataset.Subsets;

            datasets.Reset();
            IDataset dataset = datasets.Next();

            while (dataset != null)
            {
                if (dataset is IFeatureClass)
                {
                    AddFeatureClassToTree(featDSNode, dataset as IFeatureClass);
                }
                else if (dataset is IFeatureDataset)
                {
                    AddFeatureDatasetToTree(featDSNode, dataset as IFeatureDataset);
                }
                dataset = datasets.Next();
            }
        }
예제 #6
0
        public void SpecialFeaClsTopoCheck2(IArcgisDataCheckHook hook, IFeatureDataset pFeaDataset, DataTable pTable, esriTopologyRuleType pTopoRule, out Exception eError)
        {
            eError = null;
            List <string> feaclsNameList = new List <string>();

            for (int i = 0; i < pTable.Rows.Count; i++)
            {
                string FeaClsName = pTable.Rows[i]["图层"].ToString().Trim();  //图层名
                if (FeaClsName == "")
                {
                    eError = new Exception("图层名为空!");
                    return;
                }
                if (!feaclsNameList.Contains(FeaClsName))
                {
                    feaclsNameList.Add(FeaClsName);
                }
            }
            if (feaclsNameList.Count == 0)
            {
                return;
            }

            CommonTopologyCheckClass commonTopologyCheckClass = new CommonTopologyCheckClass();

            commonTopologyCheckClass.DataErrTreat += new DataErrTreatHandle(DataCheckRealize_DataErrTreat);
            commonTopologyCheckClass.OrdinaryTopoCheck(hook, pFeaDataset, feaclsNameList, pTopoRule, out eError);
            if (eError != null)
            {
                return;
            }
        }
예제 #7
0
        public static IFeatureClass CreateFClassInPDB(IWorkspace accessworkspace, string feaDSname, string FCname, esriGeometryType esriGeometryType, ISpatialReference sprf)
        {
            try
            {
                IFeatureDataset featureDataset = ((IFeatureWorkspace)accessworkspace).OpenFeatureDataset(feaDSname);
                //IGeoDataset geoDataset = featureDataset as IGeoDataset;

                IFields     pFields     = new FieldsClass();
                IFieldsEdit pFieldsEdit = pFields as IFieldsEdit;
                IField      pField      = new FieldClass();
                IFieldEdit  pFieldEdit  = pField as IFieldEdit;
                pFieldEdit.Name_2 = "SHAPE";
                pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;

                IGeometryDef     pGeometryDef     = new GeometryDefClass();
                IGeometryDefEdit pGeometryDefEdit = pGeometryDef as IGeometryDefEdit;
                pGeometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint;
                pFieldEdit.GeometryDef_2        = pGeometryDef;
                pFieldsEdit.AddField(pField);


                IFeatureClass fc = featureDataset.CreateFeatureClass(FCname, pFields, null, null, esriFeatureType.esriFTSimple, "Shape", "");
                return(fc);
            }

            catch (Exception ee)
            {
                MessageBox.Show(ee.Message.ToString());
                return(null);
            }
        }
예제 #8
0
        private void buttonX_ok_Click(object sender, EventArgs e)
        {
            CGmpPoint xml    = new CGmpPoint();
            bool      result = xml.ReadGmpXML(XMLPath);
            Regex     regNum = new Regex("^[0-9]");

            if (regNum.IsMatch(textBoxX3.Text) == true)
            {
                MessageBox.Show("数据集名称不能以数字开头命名", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }
            if (result == true)
            {
                try
                {
                    IWorkspaceFactory workspaceFactory = new FileGDBWorkspaceFactoryClass();
                    gdbPath = textBoxX2.Text;
                    IFeatureWorkspace        pFeatureWorkspace        = workspaceFactory.OpenFromFile(gdbPath, 0) as IFeatureWorkspace;
                    ISpatialReferenceFactory pSpatialReferenceFactory = new SpatialReferenceEnvironment();

                    //ISpatialReference pSpatialReference = new UnknownCoordinateSystemClass();
                    ISpatialReference pSpatialReference = ClsGDBDataCommon.CreateProjectedCoordinateSystem();
                    pSpatialReference.SetDomain(-8000000, 8000000, -800000, 8000000);
                    IFeatureDataset pFeatureDataset = pFeatureWorkspace.CreateFeatureDataset(textBoxX3.Text, pSpatialReference);
                    IFeatureClass   pFeatureclass   = CreatePointFeatureClass(pFeatureDataset, xml);
                    IFeatureClass   pFCLine         = CreatLineFC(pFeatureDataset, pFeatureclass);
                    if (pFeatureclass == null || pFCLine == null)
                    {
                        MessageBox.Show("数据生成失败", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        return;
                    }

                    IFeatureLayer pFPointLayer = new FeatureLayerClass();
                    pFPointLayer.FeatureClass = pFeatureclass;
                    pFPointLayer.Name         = textBoxX3.Text + "_Gmppoint";

                    IFeatureLayer pFLintLayer = new FeatureLayerClass();
                    pFLintLayer.FeatureClass = pFCLine;
                    pFLintLayer.Name         = textBoxX3.Text + "_GmpLine";

                    m_pMapCtl.AddLayer(pFLintLayer as ILayer, 0);
                    m_pMapCtl.AddLayer(pFPointLayer as ILayer, 0);
                    m_pMapCtl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);

                    if (cmbImpSymbol.Text != null && symFilePath != null)
                    {
                        ImpSymbolFromFile(symFilePath, pFPointLayer, pFLintLayer);
                    }


                    //MessageBox.Show("数据已经生成", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    this.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return;
                }
            }
        }
예제 #9
0
파일: Program.cs 프로젝트: jugstalt/gview5
        async static Task <bool> ImportFiles(IFeatureDataset ds, string[] filenames, Dictionary <string, Guid> providers)
        {
            FDBImageDataset import = new FDBImageDataset(ds.Database as IImageDB, ds.DatasetName);

            import.handleNonGeorefAsError = !(rootPath != String.Empty);

            import.ReportProgress += (sender, progress) =>
            {
                ProgressCounter++;

                if (ProgressCounter % 100 == 0)
                {
                    Console.WriteLine($"... { ProgressCounter }");
                }
            };

            foreach (string filename in filenames)
            {
                //Console.WriteLine("Import: " + filename);
                if (!await import.Import(filename, providers))
                {
                    Console.WriteLine("Error: " + import.lastErrorMessage);
                    if (!continueOnError)
                    {
                        return(false);
                    }
                }
            }
            return(true);
        }
예제 #10
0
        public NetworkEdgeWeightsControl(IFeatureDataset dataset, SelectFeatureclassesControl selected)
        {
            InitializeComponent();

            if (dataset != null)
            {
                _database = dataset.Database as IFeatureDatabase3;
            }

            if (_database == null)
            {
                throw new ArgumentException();
            }

            _selected = selected;

            PlugInManager pluginMan = new PlugInManager();

            foreach (var calcType in pluginMan.GetPlugins(Plugins.Type.ISimpleNumberCalculation))
            {
                ISimpleNumberCalculation calc = pluginMan.CreateInstance <ISimpleNumberCalculation>(calcType);
                if (calc == null)
                {
                    continue;
                }

                _calculators.Add(calc);
            }
        }
예제 #11
0
        // Methods
        public static IFeatureClass CreateAnnoFeatureClass(string string_0, IFeatureDataset ifeatureDataset_0,
                                                           double double_0)
        {
            IObjectClassDescription  description  = new AnnotationFeatureClassDescription();
            IFeatureClassDescription description2 = (IFeatureClassDescription)description;
            IFields requiredFields               = description.RequiredFields;
            IFeatureWorkspaceAnno workspace      = (IFeatureWorkspaceAnno)ifeatureDataset_0.Workspace;
            IGraphicsLayerScale   referenceScale = new GraphicsLayerScale
            {
                ReferenceScale = double_0,
                Units          = esriUnits.esriMeters
            };
            UID instanceCLSID                  = description.InstanceCLSID;
            UID classExtensionCLSID            = description.ClassExtensionCLSID;
            ISymbolCollection symbolCollection = new SymbolCollection();

            symbolCollection.set_Symbol(0, (ISymbol)MakeTextSymbol("宋体", 3.0));
            symbolCollection.set_Symbol(1, (ISymbol)MakeTextSymbol("宋体", 3.5));
            symbolCollection.set_Symbol(2, (ISymbol)MakeTextSymbol("宋体", 3.0));
            symbolCollection.set_Symbol(3, (ISymbol)MakeTextSymbol("宋体", 2.5));
            symbolCollection.set_Symbol(4, (ISymbol)MakeTextSymbol("黑体", 2.0));
            symbolCollection.set_Symbol(5, (ISymbol)MakeTextSymbol("黑体", 1.5));
            symbolCollection.set_Symbol(6, (ISymbol)MakeTextSymbol("宋体", 1.0));
            symbolCollection.set_Symbol(7, (ISymbol)MakeTextSymbol("宋体", 0.4));
            symbolCollection.set_Symbol(8, (ISymbol)MakeTextSymbol("宋体", 0.3));
            symbolCollection.set_Symbol(9, (ISymbol)MakeTextSymbol("黑体", 1.0));
            symbolCollection.set_Symbol(10, (ISymbol)MakeTextSymbol("宋体", 0.5));
            symbolCollection.set_Symbol(11, (ISymbol)MakeTextSymbol("宋体", 0.6));
            symbolCollection.set_Symbol(12, (ISymbol)MakeTextSymbol("宋体", 0.7));
            symbolCollection.set_Symbol(13, (ISymbol)MakeTextSymbol("宋体", 0.8));
            symbolCollection.set_Symbol(14, (ISymbol)MakeTextSymbol("宋体", 0.9));
            symbolCollection.set_Symbol(15, (ISymbol)MakeTextSymbol("宋体", 1.2));
            return(workspace.CreateAnnotationClass(string_0, requiredFields, instanceCLSID, classExtensionCLSID,
                                                   description2.ShapeFieldName, "", ifeatureDataset_0, null, null, referenceScale, symbolCollection, true));
        }
예제 #12
0
        public FormNewFeatureclass(IFeatureDataset dataset)
        {
            InitializeComponent();

            if (dataset == null)
            {
                return;
            }

            cmbGeometry.SelectedIndex            = 0;
            spatialIndexControl.SpatialReference = dataset.SpatialReference;

            foreach (FieldType fieldType in Enum.GetValues(typeof(FieldType)))
            {
                if (fieldType == FieldType.unknown ||
                    fieldType == FieldType.ID ||
                    fieldType == FieldType.Shape)
                {
                    continue;
                }

                colFieldtype.Items.Add(fieldType);
            }

            tabControl1.Invalidate();

            this.IndexTypeIsEditable = false;
            if (dataset is IFDBDataset)
            {
                this.SpatialIndexDef = ((IFDBDataset)dataset).SpatialIndexDef;
            }
        }
예제 #13
0
        //3/10/2009	删除工作空间内的所有要素类 yh
        public static void DeleteAllFeatCls(IWorkspace pworkspace)
        {
            IEnumDataset    pEnumFeatDataset = default(IEnumDataset);
            IDataset        pDataset         = default(IDataset);
            IFeatureDataset pFeatDataset     = default(IFeatureDataset);

            pEnumFeatDataset = pworkspace.get_Datasets(esriDatasetType.esriDTAny);
            pEnumFeatDataset.Reset();
            pDataset = pEnumFeatDataset.Next();
            while ((pDataset != null))
            {
                if (pDataset.CanDelete())
                {
                    if (pDataset.Type == esriDatasetType.esriDTFeatureDataset)
                    {
                        pFeatDataset = (IFeatureDataset)pDataset;
                        pFeatDataset.Delete();
                    }
                    else
                    {
                        pDataset.Delete();
                    }
                    //pDataset.Delete()
                    pDataset = pEnumFeatDataset.Next();
                }
            }
        }
예제 #14
0
        /// <summary>
        /// 获取要素集空间参考
        /// </summary>
        /// <param name="pFeatureDataset">要素集</param>
        /// <returns></returns>
        public static ISpatialReference GetSpatialReference(IFeatureDataset pFeatureDataset)
        {
            IGeoDataset       pGeoDataset       = pFeatureDataset as IGeoDataset;
            ISpatialReference pSpatialReference = pGeoDataset.SpatialReference;

            return(pSpatialReference);
        }
예제 #15
0
        async private Task ExportDatasetObject_fdb(object datasetObject)
        {
            if (datasetObject is IFeatureDataset)
            {
                IFeatureDataset dataset = (IFeatureDataset)datasetObject;
                foreach (IDatasetElement element in await dataset.Elements())
                {
                    if (element is IFeatureLayer)
                    {
                        await ExportDatasetObject(((IFeatureLayer)element).FeatureClass);
                    }
                }
            }
            if (datasetObject is IFeatureClass)
            {
                if (_fdbExport == null)
                {
                    _fdbExport = new FDBImport();
                }
                else
                {
                    MessageBox.Show("ERROR: Import already runnung");
                    return;
                }

                FeatureClassImportProgressReporter reporter = await FeatureClassImportProgressReporter.CreateAsync(_fdbExport, (IFeatureClass)datasetObject);

                FormTaskProgress progress = new FormTaskProgress(reporter, ExportAsync_fdb(datasetObject));
                progress.Text = "Export Features: " + ((IFeatureClass)datasetObject).Name;
                progress.ShowDialog();
                _fdbExport = null;
            }
        }
		// Adds barriers from object dataset
		private void AddBarriersFromDataset(IDataset objDS)
		{
			if (objDS.Type == esriDatasetType.esriDTFeatureClass)
			{
				// It is Feature Class
				AddBarriersFromFeatureClass(objDS as IFeatureClass);

			}
			else if (objDS.Type == esriDatasetType.esriDTFeatureDataset)
			{
				// It is Feature DatasetClass

				IFeatureDataset objFeatureDS = null;
				objFeatureDS = objDS as IFeatureDataset;

				// Enum Dataset subsets
				IEnumDataset objEnumDS = null;
				objEnumDS = objFeatureDS.Subsets;

				IDataset objSubDS = null;
				objSubDS = objEnumDS.Next();
				while ( objSubDS != null)
				{
					// Add Barriers from subset Feature Class 
					if (objSubDS.Type == esriDatasetType.esriDTFeatureClass)
							AddBarriersFromFeatureClass(objSubDS as IFeatureClass);

					objSubDS = objEnumDS.Next();
				}
			}
		}
예제 #17
0
        /// <summary>
        /// 以迭代形式返回工作空间下的所有要素类,包括数据集中的要素类
        /// </summary>
        /// <param name="workspace">工作空间</param>
        /// <returns>要素类枚举数(要素类集合)</returns>
        private static IEnumerable GetDataset(this IWorkspace workspace)
        {
            //工作空间下的要素类
            IEnumDataset  enumDataset  = workspace.Datasets[esriDatasetType.esriDTFeatureClass];
            IFeatureClass featureClass = enumDataset.Next() as IFeatureClass;

            while (featureClass != null)
            {
                yield return(featureClass);

                featureClass = enumDataset.Next() as IFeatureClass;
            }

            //工作空间下的要素集
            IEnumDataset dsEnumDataset = workspace.Datasets[esriDatasetType.esriDTFeatureDataset];
            IDataset     dataset       = dsEnumDataset.Next();

            while (dataset != null)//遍历要数集
            {
                IFeatureDataset        featureDataset        = (IFeatureDataset)dataset;
                IFeatureClassContainer featureclassContainer = (IFeatureClassContainer)featureDataset;
                IEnumFeatureClass      enumFeatureClass      = featureclassContainer.Classes;
                IFeatureClass          dsFeatureClass        = enumFeatureClass.Next();
                while (dsFeatureClass != null)//在每一个数据集中遍历数据层IFeatureClass
                {
                    yield return(dsFeatureClass);

                    dsFeatureClass = enumFeatureClass.Next();
                }
                dataset = dsEnumDataset.Next();
            }
        }
예제 #18
0
        private void Progarm()
        {
            IWorkspace workspace = ArcClass.GetmdbWorkspace(mdbFilePath);

            if (workspace == null)
            {
                return;
            }
            IFeatureDataset featureDataset = ArcClass.GetFeatureDataset(workspace, "WJL");
            ISchemaLock     schemalock     = featureDataset as ISchemaLock;

            try
            {
                schemalock.ChangeSchemaLock(esriSchemaLock.esriExclusiveSchemaLock);
                ITopologyContainer topologyContainer = featureDataset as ITopologyContainer;
                ITopology          topology          = topologyContainer.CreateTopology("ttt", topologyContainer.DefaultClusterTolerance, -1, "");
                IFeatureClass      featureClass      = ArcClass.GetFeatureClass(workspace, "PARK");

                AddRuleToTopology(topology, esriTopologyRuleType.esriTRTAreaNoOverlap, "NO Block OverLap", featureClass);

                IGeoDataset geoDataset = topology as IGeoDataset;
                IEnvelope   envelop    = geoDataset.Extent;
                ValidateTopology(topology, envelop);
            }catch (COMException comEx)
            {
            }
        }
예제 #19
0
        //通过IWokspace和图层名称获取图层
        public static List <IFeatureClass> GetFeatureClass(IWorkspace pWorkspace, string DatasetName)
        {
            List <IFeatureClass> newlist = new List <IFeatureClass>();

            if (pWorkspace == null || DatasetName == "")
            {
                return(newlist);
            }
            IEnumDataset pEnumDataset = pWorkspace.get_Datasets(esriDatasetType.esriDTFeatureDataset);

            pEnumDataset.Reset();
            IFeatureDataset pFeaDataset = pEnumDataset.Next() as IFeatureDataset;

            while (pFeaDataset != null)
            {
                if (pFeaDataset.Name == DatasetName)
                {
                    IFeatureClassContainer pFeatureClassContainer = pFeaDataset as IFeatureClassContainer;
                    IEnumFeatureClass      pEnumFeatureClass      = pFeatureClassContainer.Classes;
                    IFeatureClass          pFeatureClass          = pEnumFeatureClass.Next();
                    while (pFeatureClass != null)
                    {
                        newlist.Add(pFeatureClass);
                        pFeatureClass = pEnumFeatureClass.Next();
                    }
                }
                pFeaDataset = pEnumDataset.Next() as IFeatureDataset;
            }
            return(newlist);
        }
예제 #20
0
        /// <summary>
        /// 同层线重叠检查
        /// </summary>
        /// <param name="hook"></param>
        /// <param name="pFeaDataset"></param>
        /// <param name="pTable"></param>
        /// <param name="eError"></param>
        public void SpecialFeaClsTopoCheck(IArcgisDataCheckHook hook, IFeatureDataset pFeaDataset, DataTable pTable, esriTopologyRuleType pTopoRule, out Exception eError)
        {
            eError = null;

            //设置进度条
            ProgressChangeEvent eInfo = new ProgressChangeEvent();

            eInfo.Max = pTable.Rows.Count;
            int pValue = 0;


            for (int i = 0; i < pTable.Rows.Count; i++)
            {
                string FeaClsName = pTable.Rows[i]["图层"].ToString().Trim();  //图层名
                if (FeaClsName == "")
                {
                    eError = new Exception("图层名为空!");
                    return;
                }
                CommonTopologyCheckClass commonTopologyCheckClass = new CommonTopologyCheckClass();
                commonTopologyCheckClass.DataErrTreat += new DataErrTreatHandle(DataCheckRealize_DataErrTreat);
                commonTopologyCheckClass.OrdinaryTopoCheck(hook, pFeaDataset, FeaClsName, pTopoRule, out eError);
                if (eError != null)
                {
                    return;
                }

                //进度条加1
                pValue++;
                eInfo.Value = pValue;
                GeoDataChecker.GeoDataChecker_ProgressShow((object)GeoDataChecker._ProgressBarInner, eInfo);
            }
        }
예제 #21
0
        //确定
        private void button6_Click(object sender, EventArgs e)
        {
            if (textBox1.Text.Trim() == "" || textBox2.Text.Trim() == "" || textBox3.Text.Trim() == "")
            {
                MessageBox.Show("请输入正确的信息!", "提示");
                return;
            }
            if (listBox1.Items.Count == 0)
            {
                MessageBox.Show("请选择要导入的要素类!", "提示");
                return;
            }
            //数据库中新建要素数据集
            IFeatureDataset pFeatureDataset = CreateDatasetInGDB(pWorkspace, textBox3.Text, pSpatialReference);

            //建好的要素数据集中导入要素类
            foreach (IFeatureClass eachFeatureClass in pFeatureClassList)
            {
                string f = pFeatureDataset.Workspace.PathName;
                if (ImportFeatureIntoDS(eachFeatureClass, pFeatureDataset.Workspace.PathName + "\\" + pFeatureDataset.Name, eachFeatureClass.AliasName) == false)
                {
                    return;
                }
            }
            MessageBox.Show("创建成功!", "提示");
        }
예제 #22
0
        private void button5_Click(object sender, EventArgs e)
        {
            axMapControl1.Map.ClearLayers();
            string     _pInstance = "sde:oracle11g:172.31.2.90/orcl";
            string     _pUser     = "******";
            string     _pPassword = "******";
            string     _pVersion  = "sde.DEFAULT";
            IWorkspace pWS        = null;

            pWS = GetSDEWorkspace(_pInstance, _pUser, _pPassword, _pVersion) as IWorkspace;

            try
            {
                IEnumDatasetName pEDatasetNames = pWS.get_DatasetNames(esriDatasetType.esriDTAny);



                IDatasetName pDatasetName = pEDatasetNames.Next();
                while (pDatasetName != null)
                {
                    string name = pDatasetName.Name;
                    if (pDatasetName.Name.Equals("CSTEST.QDTEST"))
                    {
                        if (pDatasetName.Type.Equals(esriDatasetType.esriDTFeatureDataset))
                        {
                            IFeatureWorkspace pFeatureWorkspace = (IFeatureWorkspace)pWS;
                            IFeatureDataset   pFeatureDataset   = pFeatureWorkspace.OpenFeatureDataset("CSTEST.QDTEST");
                            IEnumDataset      pEnumDataset      = pFeatureDataset.Subsets;
                            pEnumDataset.Reset();
                            IDataset pDataset = pEnumDataset.Next();
                            comboBox1.Items.Clear();

                            while (pDataset != null)
                            {
                                if (pDataset.Type == esriDatasetType.esriDTFeatureClass)
                                {
                                    comboBox1.Items.Add(pDataset.Name);
                                    if (pDataset is IFeatureClass)
                                    {
                                        IFeatureLayer pFeatureLayer = new FeatureLayerClass();
                                        pFeatureLayer.FeatureClass = pFeatureWorkspace.OpenFeatureClass(pDataset.Name);
                                        pFeatureLayer.Name         = pFeatureLayer.FeatureClass.AliasName;

                                        axMapControl1.Map.AddLayer(pFeatureLayer);
                                    }
                                }
                                pDataset = pEnumDataset.Next();
                            }
                            comboBox1.Text = comboBox1.Items[0].ToString();
                        }
                    }

                    pDatasetName = pEDatasetNames.Next();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.StackTrace);
            }
        }
예제 #23
0
 //按照名称与类型打开数据集,针对featureDataset和rasterDataset
 public static object openByTypeAndName(string name, string type)
 {
     try
     {
         if (type.Equals("featureDataset"))
         {
             IFeatureWorkspace w    = vec_workspace as IFeatureWorkspace;
             IFeatureDataset   data = w.OpenFeatureDataset(name);
             return(data);
         }
         else if (type.Equals("rasterDataset"))
         {
             IRasterWorkspace2 w    = ras_workspace as IRasterWorkspace2;
             IRasterDataset    data = w.OpenRasterDataset(name);
             return(data);
         }
         else
         {
             LogHelper.writeLog("error openByTypeAndName wrong type");
             MessageBox.Show("wrong type");
         }
     }
     catch (System.Exception ex)
     {
         LogHelper.writeLog("error openByTypeAndName " + ex.Message);
         MessageBox.Show("error : " + ex.Message);
     }
     return(null);
 }
예제 #24
0
 private IFeatureClass GetUpdateRegionFC()
 {
     try
     {
         string            path = Config.GetConfigValue("2DMdbPipe");
         IWorkspaceFactory pWsF = new AccessWorkspaceFactory();
         IFeatureWorkspace pFWs = pWsF.OpenFromFile(path, 0) as IFeatureWorkspace;
         this.pCurWorkspace = pFWs;
         IFeatureDataset pFDs = pFWs.OpenFeatureDataset("Assi_10");
         if (pFDs == null)
         {
             return(null);
         }
         IEnumDataset  pEnumDs = pFDs.Subsets;
         IDataset      fDs;
         IFeatureClass fc = null;
         while ((fDs = pEnumDs.Next()) != null)
         {
             if (fDs.Name == "UpdataRegionPLY500")
             {
                 fc = fDs as IFeatureClass;
             }
         }
         return(fc);
     }
     catch (System.Exception ex)
     {
         return(null);
     }
 }
예제 #25
0
        /// <summary>
        /// 面拓扑检查,面含面检查
        /// </summary>
        /// <param name="pDataCheckClass"></param>
        /// <param name="pFeaDataset"></param>
        /// <param name="pTable"></param>
        /// <param name="topoRule"></param>
        /// <param name="eError"></param>
        public void AreaTopoCheck2(IArcgisDataCheckHook hook, IFeatureDataset pFeaDataset, DataTable pTable, esriTopologyRuleType topoRule, out Exception eError)
        {
            eError = null;

            List <string> FeaClsNameDic = new List <string>();

            for (int i = 0; i < pTable.Rows.Count; i++)
            {
                string FeaClsName = pTable.Rows[i]["图层"].ToString().Trim();  //图层名
                if ((FeaClsName == "") || (!FeaClsName.Contains(";")))
                {
                    eError = new Exception("图层名为空或配置不正确!");
                    return;
                }

                string[] feaNameArr    = FeaClsName.Split(new char[] { ';' });
                string   oriFeaClsName = feaNameArr[0].Trim(); //源要素类名
                string   desFeaClsName = feaNameArr[1].Trim(); //目标要素名
                if (!FeaClsNameDic.Contains(oriFeaClsName + ";" + desFeaClsName))
                {
                    FeaClsNameDic.Add(oriFeaClsName + ";" + desFeaClsName);
                }
            }
            CommonTopologyCheckClass commonTopologyCheckClass = new CommonTopologyCheckClass();

            commonTopologyCheckClass.DataErrTreat += new DataErrTreatHandle(DataCheckRealize_DataErrTreat);
            commonTopologyCheckClass.OrdinaryDicTopoCheck(hook, pFeaDataset, FeaClsNameDic, topoRule, out eError);
            if (eError != null)
            {
                return;
            }
        }
예제 #26
0
        /// <summary>
        /// 线穿面检查
        /// </summary>
        /// <param name="hook"></param>
        /// <param name="pFeaDataset"></param>
        /// <param name="pTable"></param>
        /// <param name="eError"></param>
        public void LineCrossAreaCheck(IArcgisDataCheckHook hook, IFeatureDataset pFeaDataset, DataTable pTable, out Exception eError)
        {
            eError = null;

            for (int i = 0; i < pTable.Rows.Count; i++)
            {
                string FeaClsName = pTable.Rows[i]["图层"].ToString().Trim();  //图层名
                if ((FeaClsName == "") || (!FeaClsName.Contains(";")))
                {
                    eError = new Exception("图层名为空或配置不正确!");
                    return;
                }

                string[] feaNameArr    = FeaClsName.Split(new char[] { ';' });
                string   oriFeaClsName = feaNameArr[0].Trim(); //源要素类名
                string   desFeaClsName = feaNameArr[1].Trim(); //目标要素名


                CommonTopologyCheckClass commonTopologyCheckClass = new CommonTopologyCheckClass();
                commonTopologyCheckClass.DataErrTreat += new DataErrTreatHandle(DataCheckRealize_DataErrTreat);
                commonTopologyCheckClass.CrossTopoCheck(hook, pFeaDataset, oriFeaClsName, desFeaClsName, out eError);
                if (eError != null)
                {
                    return;
                }
            }
        }
예제 #27
0
파일: AddData.cs 프로젝트: siszoey/geosufan
        /* private void FeatureLayer(object featureClass)
         * {
         *   object[] dataName = GetData();
         *
         *   IFeatureClass pFeatureClass = featureClass as IFeatureClass;
         *   // IFeatureLayer pFeaturelayer;
         *   // pFeaturelayer = new FeatureLayerClass();
         *   // pFeaturelayer.FeatureClass = pFeatureClass;
         *   // pFeaturelayer.Name = pFeaturelayer.FeatureClass.AliasName;
         *   m_pFeaturelayer.FeatureClass = pFeatureClass;
         * }*/
        /// <summary>
        /// 加载Dataset
        /// </summary>
        /// <param name="fileFullPath"></param>
        /// <param name="dsName"></param>
        private void AddDataset(object dataSet, IMap pMap)
        {
            //获取FeatureDataset
            IFeatureDataset   pFeatureDataset = (IFeatureDataset)dataSet;
            IWorkspace        pWorkspace      = pFeatureDataset.Workspace;
            IFeatureWorkspace pFeatureWorkspace;
            IFeatureLayer     pFeatureLayer;

            pFeatureWorkspace = pWorkspace as IFeatureWorkspace;
            IEnumDataset pEnDS = pFeatureDataset.Subsets;

            pEnDS.Reset();
            //遍历Dataset
            IDataset pDS = pEnDS.Next();

            while (pDS is IFeatureClass)
            {
                pFeatureLayer = new FeatureLayerClass();
                pFeatureLayer.FeatureClass = pFeatureWorkspace.OpenFeatureClass(pDS.Name);
                pFeatureLayer.Name         = pFeatureLayer.FeatureClass.AliasName;
                m_pFeaturelayer            = pFeatureLayer;
                pMap.AddLayer(pFeatureLayer);//加载Dataset中的FeatureClass
                pDS = pEnDS.Next();
            }
            m_pActiveView.Refresh();//刷新
        }
예제 #28
0
        private IFeatureClass LoadMetaData()
        {
            string            path = Config.GetConfigValue("2DMdbPipe");
            IWorkspaceFactory pWsF = new AccessWorkspaceFactory();
            IFeatureWorkspace pFWs = pWsF.OpenFromFile(path, 0) as IFeatureWorkspace;

            if (pFWs == null)
            {
                return(null);
            }
            IFeatureDataset pFDs = pFWs.OpenFeatureDataset("Assi_10");

            if (pFDs == null)
            {
                return(null);
            }
            IEnumDataset  pEnumDs = pFDs.Subsets;
            IDataset      fDs;
            IFeatureClass fc = null;

            while ((fDs = pEnumDs.Next()) != null)
            {
                if (fDs.Name == "Metadata")
                {
                    fc = fDs as IFeatureClass;
                }
            }
            return(fc);
        }
예제 #29
0
 public ITopology Create_Topology(IFeatureWorkspace featureWorkspace, string featuredatasetName, string featureClassName, string topologyName)
 {
     try
     {
         //1.---打开拓朴所在的要素数据集,并创建拓朴
         IFeatureDataset featureDataset = featureWorkspace.OpenFeatureDataset(featuredatasetName);
         if (featureDataset != null)
         {
             ITopologyContainer topologyContainer = (ITopologyContainer)featureDataset;
             ITopology          topology          = topologyContainer.CreateTopology("topo", topologyContainer.DefaultClusterTolerance, -1, ""); //在这个地方报错
             //2.---给拓朴加入要素集
             IFeatureClassContainer featureclassContainer = (IFeatureClassContainer)featureDataset;
             IFeatureClass          featureClass          = featureclassContainer.get_ClassByName(featureClassName);
             topology.AddClass(featureClass, 5, 1, 1, false);  // Parameters: AddClass(IClass, double weight, int xyrank, int zrank, Boolean EventNotificationOnValidate).
             //3.---返回拓朴
             return(topology);
         }
     }
     catch (Exception ex)
     {
         //System.Diagnostics.Debug.WriteLine(ex.ToString());
         MessageBox.Show(ex.ToString());
     }
     return(null);
 }
예제 #30
0
 /// <summary>
 /// SDE要素类导出mdb(要素集下要素类)
 /// </summary>
 /// <param name="IN_SourceWorkspace">源工作空间</param>
 /// <param name="IN_TargetWorkspace">目标要素数据集</param>
 /// <param name="IN_SourceFeatureClassName">源要素类名</param>
 /// <param name="IN_TargetFeatureClassName">目标要素类名</param>
 private void ConvertFeatureClass(IWorkspace IN_SourceWorkspace, IFeatureDataset IN_TargetWorkspace, string IN_SourceFeatureClassName, string IN_TargetFeatureClassName)
 {
     #region 环境配置
     //创建源工作空间名
     IDataset       Temp_SourceWorkspaceDataset = (IDataset)IN_SourceWorkspace;
     IWorkspaceName Temp_SourceWorkspaceName    = (IWorkspaceName)Temp_SourceWorkspaceDataset.FullName;
     //创建源要素数据集名
     IFeatureClassName Temp_SourceFeatureClassName = new FeatureClassNameClass();
     IDatasetName      Temp_SourceDatasetName      = (IDatasetName)Temp_SourceFeatureClassName;
     Temp_SourceDatasetName.WorkspaceName = Temp_SourceWorkspaceName;
     Temp_SourceDatasetName.Name          = IN_SourceFeatureClassName;
     //创建目标工作空间名
     IDataset       Temp_TargetWorkspaceDataset = (IDataset)IN_TargetWorkspace.Workspace;
     IWorkspaceName Temp_TargetWorkspaceName    = (IWorkspaceName)(Temp_TargetWorkspaceDataset.FullName);
     //创建目标要素类名
     IFeatureClassName Temp_TargetFeatureClassName = new FeatureClassNameClass();
     IDatasetName      Temp_TargetDatasetName      = (IDatasetName)Temp_TargetFeatureClassName;
     Temp_TargetDatasetName.WorkspaceName = Temp_TargetWorkspaceName;
     Temp_TargetDatasetName.Name          = IN_TargetFeatureClassName;
     //创建目标要素数据集名
     IFeatureDatasetName Temp_TargetFeatureDatasetName = new FeatureDatasetNameClass();
     IDatasetName        Temp_TargetDatasetName2       = (IDatasetName)Temp_TargetFeatureDatasetName;
     Temp_TargetDatasetName2.WorkspaceName = Temp_TargetWorkspaceName;
     Temp_TargetDatasetName2.Name          = IN_TargetWorkspace.Name;
     #endregion
     //打开源要素类获取字段定义
     ESRI.ArcGIS.esriSystem.IName Temp_SourceName = (ESRI.ArcGIS.esriSystem.IName)Temp_SourceFeatureClassName;
     IFeatureClass Temp_SourceFeatureClass        = (IFeatureClass)Temp_SourceName.Open();
     //验证字段
     IFieldChecker   Temp_FieldChecker = new FieldCheckerClass();
     IFields         Temp_TargetFeatureClassFields;
     IFields         Temp_SourceFeatureClassFields = Temp_SourceFeatureClass.Fields;
     IEnumFieldError enumFieldError;
     Temp_FieldChecker.InputWorkspace    = IN_SourceWorkspace;
     Temp_FieldChecker.ValidateWorkspace = IN_TargetWorkspace.Workspace;
     Temp_FieldChecker.Validate(Temp_SourceFeatureClassFields, out enumFieldError, out Temp_TargetFeatureClassFields);
     //批量导入
     IField Temp_GeometryField;
     for (int i = 0; i < Temp_TargetFeatureClassFields.FieldCount; i++)
     {
         if (Temp_TargetFeatureClassFields.get_Field(i).Type == esriFieldType.esriFieldTypeGeometry)
         {
             Temp_GeometryField = Temp_TargetFeatureClassFields.get_Field(i);
             //获取空间定义
             IGeometryDef     Temp_GeometryDef        = Temp_GeometryField.GeometryDef;
             IGeometryDefEdit Temp_TargetFCGeoDefEdit = (IGeometryDefEdit)Temp_GeometryDef;
             Temp_TargetFCGeoDefEdit.GridCount_2 = 1;
             Temp_TargetFCGeoDefEdit.set_GridSize(0, 0);
             Temp_TargetFCGeoDefEdit.SpatialReference_2 = Temp_GeometryField.GeometryDef.SpatialReference;
             //定义筛选条件
             IQueryFilter Temp_QueryFilter = new QueryFilterClass();
             Temp_QueryFilter.WhereClause = "";
             //导入要素类至要素数据集
             IFeatureDataConverter Temp_FeatureDataConverter = new FeatureDataConverterClass();
             IEnumInvalidObject    enumErrors = Temp_FeatureDataConverter.ConvertFeatureClass(Temp_SourceFeatureClassName, Temp_QueryFilter, Temp_TargetFeatureDatasetName, Temp_TargetFeatureClassName, Temp_GeometryDef, Temp_TargetFeatureClassFields, "", 1000, 0);
             break;
         }
     }
 }
예제 #31
0
        public static IFeatureClass CreateFeatureClass(IFeatureDataset fds,FeatureClassInfo fcInfo)
        {
            if (fds == null || fcInfo == null)
                return null;

            if ((fds.Workspace as IWorkspace2).get_NameExists(esriDatasetType.esriDTFeatureClass, fcInfo.Name))
            {
                ((fds.Workspace as IFeatureWorkspace).OpenFeatureClass(fcInfo.Name) as IDataset).Delete();
            }
            return fds.CreateFeatureClass(fcInfo.Name, CreateFields(fcInfo), null, null, fcInfo.FeatureType, fcInfo.ShapeFieldName, null);
        }
예제 #32
0
        /// <summary>
        /// 检查数据集是否有锁,一旦检测到数据集内有图层含有锁,就返回有锁信息
        /// </summary>
        /// <param name="ipFeatDataset">被检查的数据集</param>
        /// <returns>是否有锁</returns>
        public static bool CheckFeatureDatasetHasLock(IFeatureDataset ipFeatDataset)
        {
            IFeatureClassContainer ipFeatClassContainer = (IFeatureClassContainer)ipFeatDataset;
            int numFeatClasses = ipFeatClassContainer.ClassCount;

            IFeatureClass ipFeatClass = null;
            bool hasLock = false;

            for (int i = 0; i < numFeatClasses; i++)
            {
                ipFeatClass = ipFeatClassContainer.get_Class(i);
                if (CheckFeatureClassHasLock(ipFeatClass))
                {
                    hasLock = true;
                    break;
                }
            }
            return hasLock;
        }
예제 #33
0
 public static IGeometricNetwork getNetworkByName(IFeatureDataset pFeaDataset)
 {
     return null;
 }
예제 #34
0
        public static StandardItem Import(IFeatureDataset fds)
        {
            if (fds == null)
                return null;

            StandardItem sItem = new StandardItem();
            sItem.Type = enumItemType.FeatureDataset;
            sItem.Name = fds.Name;
            sItem.SpatialReference = (fds as IGeoDataset).SpatialReference;
            sItem.ID = Guid.NewGuid().ToString("N");

            IList<StandardItem> subList = new List<StandardItem>();
            sItem.SubItems = subList;
            IFeatureClassContainer fcContianer = fds as IFeatureClassContainer;
            for (int i = 0; i < fcContianer.ClassCount; i++)
            {
                StandardItem sItemClass = Import(fcContianer.get_Class(i));
                sItemClass.Parent = sItem;

                subList.Add(sItemClass);
            }

            return sItem;
        }
예제 #35
0
 //初始化几何网络和地图
 private bool InitializeNetworkAndMap(IFeatureDataset FeatureDataset)
 {
     IFeatureClassContainer ipFeatureClassContainer;
     IFeatureClass ipFeatureClass;
     IGeoDataset ipGeoDataset;
     ILayer ipLayer;
     IFeatureLayer ipFeatureLayer;
     IEnvelope ipEnvelope, ipMaxEnvelope;
     double dblSearchTol;
     INetworkCollection ipNetworkCollection = FeatureDataset as INetworkCollection;
     int count = ipNetworkCollection.GeometricNetworkCount;
     //获取第一个几何网络工作空间
     m_ipGeometricNetwork = ipNetworkCollection.get_GeometricNetwork(0);
     INetwork ipNetwork = m_ipGeometricNetwork.Network;
     if (m_ipMap != null)
     {
         //m_ipMap = new MapClass();
         ipFeatureClassContainer = m_ipGeometricNetwork as IFeatureClassContainer;
         count = ipFeatureClassContainer.ClassCount;
         for (int i = 0; i < count; i++)
         {
             ipFeatureClass = ipFeatureClassContainer.get_Class(i);
             ipFeatureLayer = new FeatureLayerClass();
             ipFeatureLayer.FeatureClass = ipFeatureClass;
             for (int j = 0; j < m_ipMap.LayerCount; j++)
             {
                 if (m_ipMap.get_Layer(j).Name.ToUpper() == ipFeatureLayer.Name.ToUpper())
                 {
                     continue;
                 }
             }
             m_ipMap.AddLayer(ipFeatureLayer);
         }
         m_ipActiveView.Refresh();
     }
     count = m_ipMap.LayerCount;
     ipMaxEnvelope = new EnvelopeClass();
     for (int i = 0; i < count; i++)
     {
         ipLayer = m_ipMap.get_Layer(i);
         ipFeatureLayer = ipLayer as IFeatureLayer;
         ipGeoDataset = ipFeatureLayer as IGeoDataset;
         ipEnvelope = ipGeoDataset.Extent;
         ipMaxEnvelope.Union(ipEnvelope);
     }
     m_ipPointToEID = new PointToEIDClass();
     m_ipPointToEID.SourceMap = m_ipMap;
     m_ipPointToEID.GeometricNetwork = m_ipGeometricNetwork;
     double dblWidth = ipMaxEnvelope.Width;
     double dblHeight = ipMaxEnvelope.Height;
     if (dblWidth > dblHeight)
         dblSearchTol = dblWidth / 100;
     else
         dblSearchTol = dblHeight / 100;
     m_ipPointToEID.SnapTolerance = dblSearchTol;
     return true;
 }
예제 #36
0
 public void OpenFeatureDatasetNetwork(IFeatureDataset FeatureDataset)
 {
     CloseWorkspace();
     if (!InitializeNetworkAndMap(FeatureDataset))
         Console.WriteLine("打开network出错");
 }
예제 #37
0
        /// <summary>
        /// Sets the task.
        /// </summary>
        /// <param name="task">The task.</param>
        public void SetTask(CheckTask task)
        {
            XGifProgress progressbar = new XGifProgress();
            try
            {

                //���taskΪnull����Ϊ�ͷ���Դ
                if (task == null)
                {
                    UCDispose();
                    return;
                }

                //�����Ϊ�գ�������
                m_CurrentTask = task;

                //������½�������
                progressbar.ShowHint("���ڴ򿪵�ǰ�ʼ�����.....");
                //��ʼ��������

                this.ucRulesTree.CurrentSchemaId = task.SchemaID;
                this.ucRulesTree.CurrentTaskName = task.Name;
                //����ί�У��ڴ����˿ؼ����߳��ϵ��ü���tree��������ֹ���֡���ǰ�������������ط�ʹ�á��Ĵ���;
                LoadRules Load = new LoadRules(this.ucRulesTree.LoadRulesTree);
                this.BeginInvoke(Load);

                this.ucResult.CurrentTask = m_CurrentTask;
                if (File.Exists(task.GetMXDFile()))
                {
                    //�����õ�mxdģ��ͼ��
                    UcMap.LoadMxFile(task.GetMXDFile());
                    TocControl.SetBuddyControl(UcMap.Object);
                    TocControl.Update();
                    UcMap.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
                    m_MapLayersController = new MapLayersController(UcMap.Map);
                }
                else
                {
                    progressbar.Hide();
                    MessageBoxApi.ShowErrorMessageBox(task.GetMXDFile() + "�����ڣ��޷��򿪴�����");
                    return;
                }
                //���ؽ��
                if (task.ResultConnection != null)
                {
                    //�����Ѿ������ɵ�����
                    this.TabCtrl.ShowTabHeader = DefaultBoolean.True;
                    this.TabCtrl.SelectedTabPage = this.TabPageCheckResults;
                    this.ucResultsTree.CurrentSchemaId = task.SchemaID;
                    this.ucResultsTree.CurrentTaskName = task.Name;
                    Sundary.ResultDbOper resultOper = new Hy.Check.UI.UC.Sundary.ResultDbOper(task.ResultConnection);
                    this.ucResultsTree.LayersResultsDt = resultOper.GetLayersResults();
                    this.ucResultsTree.ResultsDt = resultOper.GetAllResults();
                    this.ucResultsTree.CheckResultsCount = resultOper.GetResultsCount();
                    this.ucResultsTree.LoadResultsTree();

                }
                else
                {
                    TabCtrl.SelectedTabPage = this.TabPageRules;
                    this.TabCtrl.ShowTabHeader = DefaultBoolean.False;
                    this.ucResultsTree.CurrentTreeList.Nodes.Clear();
                }
                //����top����ͼ�㵽map
                if (task.TopoWorkspace != null)
                {
                    //��ȡ��ǰ�����ӿ��е�ͼ�㼯��
                    m_pDatasetSon = TopoOperAPI.GetCurrentSonDataSet(task.TopoWorkspace as IFeatureWorkspace);
                    // ��ȡ�ӿ������е�Ҫ���������
                    TopoOperAPI.GetFcTopoNameInSon(UcMap, task.TopoWorkspace as IFeatureWorkspace, m_pDatasetSon);
                }
                this.dockTree.Visibility = DockVisibility.Visible;
                this.dockTree.Text = "�����б�";
                this.dockTree.Width = 260;
                this.dockLegend.Visibility = DockVisibility.Visible;
            }
            catch (Exception ex)
            {
                progressbar.Hide();
                //GT_CONST.LogAPI.CheckLog.AppendErrLogs(ex.Message);
                XtraMessageBox.Show("�򿪽����ʧ�ܣ�", "��ʾ");
            }
            finally
            {
                progressbar.Hide(); //�رմ򿪽������ȷ���
            }
        }
예제 #38
0
        /// <summary>
        /// 创建注记层
        /// </summary>
        /// <param name="strFeaClsName">注记层名称</param>
        /// <param name="destDataset">待创建的注记层所在的featuredataset</param>
        /// <param name="ipInputFields">注记层字段</param>
        public static IFeatureClass CreateAnnotation(IFeatureClass pInputCls, IFeatureDataset destDataset, IFields ipInputFields)
        {
            try
            {
                //要素类标识信息
                IObjectClassDescription ipObjectClassDesc = new AnnotationFeatureClassDescription();
                IFeatureClassDescription ipFeatClassDesc = (IFeatureClassDescription)ipObjectClassDesc;

                IAnnoClass pAnnoClass = pInputCls.Extension as IAnnoClass;
                double scale = pAnnoClass.ReferenceScale;

                IUID ipCLSID = ipObjectClassDesc.InstanceCLSID;
                ipCLSID.Value = "esriCore.AnnotationFeature";

                IUID ipExtCLSID = ipObjectClassDesc.ClassExtensionCLSID;
                ipExtCLSID.Value = "esriCore.AnnotationFeatureClassExtension";

                //IField ipField;
                IFields ipFields = ipObjectClassDesc.RequiredFields;
                IFieldsEdit ipFieldsEdit = (IFieldsEdit)ipFields;
                int numFields = ipInputFields.FieldCount;

                esriFieldType type;
                for (int i = 0; i < numFields; i++)
                {
                    IField ipField = ipInputFields.get_Field(i);
                    type = ipField.Type;
                    if (type != esriFieldType.esriFieldTypeOID && type != esriFieldType.esriFieldTypeGeometry)
                    {
                        string fldName = ipField.Name;
                        int fldIndex = ipFields.FindField(fldName);

                        if (fldIndex == -1)
                            ipFieldsEdit.AddField(ipField);
                    }
                }

                //工作空间
                IWorkspace ipWorkspace = destDataset.Workspace;
                IFeatureWorkspaceAnno ipFeatureWorkspaceAnno = (IFeatureWorkspaceAnno)ipWorkspace;

                //显示比例
                IGraphicsLayerScale ipGraphicsLayerScale = new GraphicsLayerScaleClass();
                ipGraphicsLayerScale.ReferenceScale = scale;
                ipGraphicsLayerScale.Units = pAnnoClass.ReferenceScaleUnits;

                //符号信息
                //' set up symbol collection
                ISymbolCollection pSymbolColl = new SymbolCollectionClass();

                ITextSymbol myTxtSym = new TextSymbolClass();
                //Set the font for myTxtSym
                stdole.IFontDisp myFont = new stdole.StdFontClass() as stdole.IFontDisp;
                IFont pFt = (IFont)myFont;
                pFt.Name = "Courier New";

                myTxtSym.Font = myFont;

                // Set the Color for myTxtSym to be Dark Red
                IRgbColor myColor = new RgbColorClass();
                myColor.Red = 150;
                myColor.Green = 0;
                myColor.Blue = 0;
                myTxtSym.Color = myColor;

                // Set other properties for myTxtSym
                myTxtSym.Angle = 0;
                myTxtSym.RightToLeft = false;
                myTxtSym.VerticalAlignment = esriTextVerticalAlignment.esriTVABaseline;
                myTxtSym.HorizontalAlignment = esriTextHorizontalAlignment.esriTHAFull;
                myTxtSym.Size = 9;

                ISymbol pSymbol = (ISymbol)myTxtSym;
                pSymbolColl.set_Symbol(0, pSymbol);

                //set up the annotation labeling properties including the expression
                IAnnotateLayerProperties pAnnoProps = new LabelEngineLayerPropertiesClass();
                pAnnoProps.FeatureLinked = true;
                pAnnoProps.AddUnplacedToGraphicsContainer = false;
                pAnnoProps.CreateUnplacedElements = true;
                pAnnoProps.DisplayAnnotation = true;
                pAnnoProps.UseOutput = true;

                ILabelEngineLayerProperties pLELayerProps = (ILabelEngineLayerProperties)pAnnoProps;
                IAnnotationExpressionEngine aAnnoVBScriptEngine = new AnnotationVBScriptEngineClass();
                pLELayerProps.ExpressionParser = aAnnoVBScriptEngine;
                pLELayerProps.Expression = "[DESCRIPTION]";
                pLELayerProps.IsExpressionSimple = true;
                pLELayerProps.Offset = 0;
                pLELayerProps.SymbolID = 0;
                pLELayerProps.Symbol = myTxtSym;

                IAnnotateLayerTransformationProperties pATP = (IAnnotateLayerTransformationProperties)pAnnoProps;
                double dRefScale = ipGraphicsLayerScale.ReferenceScale;
                pATP.ReferenceScale = dRefScale;
                pATP.Units = esriUnits.esriMeters;
                pATP.ScaleRatio = 1;

                IAnnotateLayerPropertiesCollection pAnnoPropsColl = new AnnotateLayerPropertiesCollectionClass();
                pAnnoPropsColl.Add(pAnnoProps);

                //' use the AnnotationFeatureClassDescription co - class to get the list of required fields and the default name of the shape field
                IObjectClassDescription pOCDesc = new AnnotationFeatureClassDescriptionClass();
                IFeatureClassDescription pFDesc = (IFeatureClassDescription)pOCDesc;

                IFields pReqFields = pOCDesc.RequiredFields;
                IUID pInstCLSID = pOCDesc.InstanceCLSID;
                IUID pExtCLSID = pOCDesc.ClassExtensionCLSID;
                string bsShapeFieldName = pFDesc.ShapeFieldName;

                IDataset pDs = (IDataset)pInputCls;

                //创建
                string bstName = ipFeatClassDesc.ShapeFieldName;
                IFeatureClass pOutFcls =
                    ipFeatureWorkspaceAnno.CreateAnnotationClass(pDs.Name, ipFields, pOCDesc.InstanceCLSID,
                                                                 pOCDesc.ClassExtensionCLSID, pInputCls.ShapeFieldName, "", destDataset, null, pAnnoPropsColl,
                                                                 ipGraphicsLayerScale, pSymbolColl, true);
                return pOutFcls;
            }
            catch(Exception exp)
            {
                Hy.Common.Utility.Log.OperationalLogManager.AppendMessage(exp.ToString());

                return null;
            }
            return null;
        }
 //初始化
 private bool InitializeNetworkAndMap(IFeatureDataset Featuredataset,System.Collections.ArrayList array1,System.Collections.ArrayList array2,int flag)
 {
     IFeatureClassContainer ipFeatureClassContainer;
     IFeatureClass ipFeatureClass;
     IGeoDataset ipGeoDataset;
     ILayer ipLayer;
     IFeatureLayer ipFeatureLayer;
     IEnvelope ipEnvelope, ipMaxEnvelope;
     double dblSearchTol;
     INetworkCollection ipNetworkCollection = Featuredataset as INetworkCollection;
     int count = ipNetworkCollection.GeometricNetworkCount;
     barrierarray1 =(System.Collections.ArrayList)array1.Clone();
     barrierarray2 = (System.Collections.ArrayList)array2.Clone();
     barrierflag = flag;
     //获取几何网络工作空间
     m_ipGeometricNetwork = ipNetworkCollection.get_GeometricNetwork(0);
     INetwork ipNetwork = m_ipGeometricNetwork.Network;
     if (m_ipMap != null)
     {
         m_ipMap = new MapClass();
         ipFeatureClassContainer = m_ipGeometricNetwork as IFeatureClassContainer;
         count = ipFeatureClassContainer.ClassCount;
         for (int i = 0; i < count; i++)
         {
             ipFeatureClass = ipFeatureClassContainer.get_Class(i);
             ipFeatureLayer = new FeatureLayerClass();
             ipFeatureLayer.FeatureClass = ipFeatureClass;
             m_ipMap.AddLayer(ipFeatureLayer);
         }
     }
     count = m_ipMap.LayerCount;
     ipMaxEnvelope = new EnvelopeClass();
     for (int i = 0; i < count; i++)
     {
         ipLayer = m_ipMap.get_Layer(i);
         ipFeatureLayer = ipLayer as IFeatureLayer;
         ipGeoDataset = ipFeatureLayer as IGeoDataset;
         ipEnvelope = ipGeoDataset.Extent;
         ipMaxEnvelope.Union(ipEnvelope);
     }
     m_ipPointToEID = new PointToEIDClass();
     m_ipPointToEID.SourceMap = m_ipMap;
     m_ipPointToEID.GeometricNetwork = m_ipGeometricNetwork;
     double dblWidth = ipMaxEnvelope.Width;
     double dblHeight = ipMaxEnvelope.Height;
     if (dblWidth > dblHeight)
         dblSearchTol = dblWidth / 100;
     else
         dblSearchTol = dblHeight / 100;
     m_ipPointToEID.SnapTolerance = dblSearchTol;
     return true;
 }
예제 #40
0
        private static void WriteOutputBack(IFeatureDataset theInFDataset, IFeatureDataset theOutFDataset)
        {
            //Debug.Print("Can delete " + theInFDataset.Name + "? " + theInFDataset.CanDelete());
            //Debug.Print("Can rename " + theOutFDataset.Name + "? " + theOutFDataset.CanRename());
            string origName = theInFDataset.Name;
            theInFDataset.Delete();
            theOutFDataset.Rename(origName);

            IEnumDataset theEnumDS = theOutFDataset.Subsets;
            IDataset theDS = theEnumDS.Next();

            while (theDS != null)
            {
                //Debug.Print("Need to rename " + theDS.Name);

                string theNewName = theDS.Name;
                while (theNewName.EndsWith("_1"))
                    theNewName = theNewName.Substring(0, theNewName.Length - 2);

                theDS.Rename(theNewName);
                //Debug.Print("Renamed to " + theNewName);
                theDS = theEnumDS.Next();
            }
        }
예제 #41
0
파일: GDBData.cs 프로젝트: chinasio/minegis
        public void ConvertFeatureClassToGDB(IWorkspace sourceWorkspace, IWorkspace targetWorkspace, string nameOfSourceFeatureClass, string nameOfTargetFeatureClass, IFeatureDataset feaDS)
        {
            //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;

            IFeatureDatasetName feaName = null;
            if (feaDS != null)
            {
                feaName = (IFeatureDatasetName)feaDS.FullName;
            }

            //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, feaName, targetFeatureClassName, geometryDef, targetFeatureClassFields, "", 1000, 0);
                    break;
                }
            }
        }
예제 #42
0
 private IFeatureClass CreateGridFeatureClass(Grid grid, IFeatureWorkspace workspace, IFeatureDataset dataset,
                                              string featureClassName)
 {
     try
     {
         IFields fields;
         if (workspace is IGxFolder)
         {
             MessageBox.Show(@"Creating Shapefile " + featureClassName + @" in " +
                             ((IWorkspace)workspace).PathName);
             if (!ValidateShapefileName())
             {
                 MessageBox.Show(@"Shapefile may exist, name may be too long," +
                                 @"folder may not exist, folder may be readonly,", @"Error");
                 return null;
             }
             fields = CreateShapefileFields();
         }
         else
         {
             string msg = dataset == null
                              ? string.Format("Creating {0} in {1}", featureClassName,
                                              ((IWorkspace)workspace).PathName)
                              : string.Format("Creating {0} in {1}\\{2}", featureClassName,
                                              ((IWorkspace)workspace).PathName, dataset.Name);
             MessageBox.Show(msg);
             if (!ValidateGdbfileName())
                 return null;
             fields = CreateGdbFields();
         }
         IFeatureClass generatedFeatureClass = CreateFeatureClass((IWorkspace2)workspace, dataset,
                                                                  featureClassName, fields, null, null, "");
         if (generatedFeatureClass == null)
             return null;
         PutGridInFeatureClass(generatedFeatureClass, grid);
         return generatedFeatureClass;
     }
     catch (Exception)
     {
         //Debug.Print("Exception Creating Feature Class: {0}",ex);
         return null;
     }
 }
예제 #43
0
        /// <summary>
        /// 获取IFeatureDataset所有的要素类,返回IFeatureClass列表
        /// </summary>
        /// <param name="ipDataset"></param>
        /// <param name="arrayFeatLayer"></param>
        public static void GetFeatLayerInDs(IFeatureDataset ipDataset, ref List<IFeatureLayer> arrayFeatLayer)
        {
            try
            {
                if (ipDataset == null)
                {
                    return;
                }

                IFeatureClassContainer ipFcContain = (IFeatureClassContainer)ipDataset;

                IEnumFeatureClass ipFcEnum = ipFcContain.Classes;

                IFeatureClass ipFtClass = ipFcEnum.Next();

                arrayFeatLayer = new List<IFeatureLayer>();

                while (ipFtClass != null)
                {
                    IFeatureLayer pFLayer = new FeatureLayer();
                    pFLayer.FeatureClass = ipFtClass;
                    pFLayer.Name = ipFtClass.AliasName;

                    arrayFeatLayer.Add(pFLayer);

                    Marshal.ReleaseComObject(ipFtClass);

                    ipFtClass = ipFcEnum.Next();
                }
            }
            catch (Exception exp)
            {
                Hy.Common.Utility.Log.OperationalLogManager.AppendMessage(exp.ToString());

                return;
            }
        }
예제 #44
0
        /// <summary>
        ///  获取IFeatureDataset所有的要素类,返回IDataset列表
        /// </summary>
        /// <param name="ipDataset"></param>
        /// <param name="arrayDs"></param>
        public static void GetFcNameInDs(IFeatureDataset ipDataset, ref Hashtable arrayDs)
        {
            try
            {
                if (ipDataset == null)
                {
                    return;
                }

                IFeatureClassContainer ipFcContain = (IFeatureClassContainer)ipDataset;

                IEnumFeatureClass ipFcEnum = ipFcContain.Classes;

                IFeatureClass ipFtClass = ipFcEnum.Next();

                while (ipFtClass != null)
                {
                    arrayDs.Add(((IDataset)ipFtClass).Name, (IDataset)ipFtClass);

                    ipFtClass = ipFcEnum.Next();
                }
            }
            catch (Exception exp)
            {
                Hy.Common.Utility.Log.OperationalLogManager.AppendMessage(exp.ToString());

                return;
            }
        }
예제 #45
0
        public static void initNetwork(IFeatureDataset pFeaDataset,IMap pMap,out IGeometricNetwork m_ipGeometricNetwork)
        {
            INetworkCollection pNetworkCollection;
            //IGeometricNetwork m_ipGeometricNetwork;
            INetwork pNetwork;
            IFeatureClassContainer ipFeatureClassContainer;
            IFeatureClass ipFeatureClass;
            IFeatureLayer ipFeatureLayer;
            IDataset pDataset;

            //get the network collection
            pNetworkCollection=pFeaDataset as INetworkCollection;

            if(pNetworkCollection.GeometricNetworkCount==0)
            {
                MessageBox.Show("������û������");
                m_ipGeometricNetwork=null;
                return;
            }

            m_ipGeometricNetwork=pNetworkCollection.get_GeometricNetworkByName("Water_Network");

            //m_ipGeometricNetwork.

            //Use the INetwork interface when you want to query the network for general information
            //such as the status of the network or the number of edges in your network.

            pNetwork=m_ipGeometricNetwork.Network;

            //Add each of the Feature Classes in this Geometric Network as a map Layer

            ipFeatureClassContainer=pNetworkCollection as IFeatureClassContainer;

            if(ipFeatureClassContainer.ClassCount==0)
            {
                MessageBox.Show("û������featureClass");
                m_ipGeometricNetwork=null;
                return;
            }

            for(int ii=0;ii<ipFeatureClassContainer.ClassCount;ii++)
            {

                ipFeatureClass=ipFeatureClassContainer.get_Class(ii);

                pDataset=ipFeatureClass as IDataset;

                if(pDataset.Name=="water_arc"||pDataset.Name.Equals("water_point")||pDataset.Name.Equals("Water_Network_Junctions"))
                {

                    ipFeatureLayer=new FeatureLayerClass();

                    ipFeatureLayer.FeatureClass=ipFeatureClass;

                    ipFeatureLayer.Name=pDataset.Name;

                    pMap.AddLayer(ipFeatureLayer);
                }

            }
        }
예제 #46
0
        private IFeatureClass CreateFeatureClass(IFeatureDataset featureDataset,TableStructureNode tableStructureNode, FeatureCodeNode featureCodeNode)
        {
            try
            {
                if (featureDataset != null)
                {
                    IFeatureClassDescription fcDesc = new FeatureClassDescriptionClass();
                    IObjectClassDescription ocDesc = (IObjectClassDescription)fcDesc;

                    ///�������ݱ��ֶ�
                    IFieldChecker fieldChecker = new FieldCheckerClass();
                    IEnumFieldError enumFieldError = null;
                    IFields validatedFields = CreateFileds(tableStructureNode, featureCodeNode);
                    ///�ֶ���Ϣ��֤
                    IFields fixFields = null;
                    fieldChecker.ValidateWorkspace = featureDataset.Workspace;
                    fieldChecker.Validate(validatedFields, out enumFieldError, out fixFields);

                    ////����FeatureClass
                    IFeatureClass featureClass = null;
                    if (tableStructureNode.IsGeometryTable)
                    {
                        ////������ע��FeatureClass
                        if (featureCodeNode.GeometryType != "")
                        {
                            featureClass = featureDataset.CreateFeatureClass(featureCodeNode.TableName,
                               fixFields, ocDesc.InstanceCLSID, ocDesc.ClassExtensionCLSID,
                               esriFeatureType.esriFTSimple, fcDesc.ShapeFieldName, "");
                        }
                        else
                        {
                            ///����ע��
                            IFormattedTextSymbol pTxtSymbo=new TextSymbolClass();

                            IFeatureWorkspaceAnno pFeatureWorkspaceAnno = this.m_pIDataset.Workspace as IFeatureWorkspaceAnno;

                            IGraphicsLayerScale pGraphSacle = new GraphicsLayerScaleClass();
                            pGraphSacle.Units = ESRI.ArcGIS.esriSystem.esriUnits.esriFeet;
                            //pGraphSacle.ReferenceScale=1000;

                            ISymbolCollection pSymbolCollection = new SymbolCollectionClass();

                            IAnnotateLayerProperties pAnnoLayerProp = new LabelEngineLayerPropertiesClass();
                            pAnnoLayerProp.FeatureLinked = true;
                            pAnnoLayerProp.CreateUnplacedElements = false;
                            pAnnoLayerProp.DisplayAnnotation = true;
                            pAnnoLayerProp.UseOutput = true;

                            IAnnotationExpressionEngine pAnnoExpressionEngine =new AnnotationVBScriptEngineClass();
                            ILabelEngineLayerProperties pLabelEngineLayerProperties = pAnnoLayerProp as ILabelEngineLayerProperties;
                            pLabelEngineLayerProperties.ExpressionParser = pAnnoExpressionEngine;
                            pLabelEngineLayerProperties.Expression = "[DESCRIPTION]";
                            pLabelEngineLayerProperties.IsExpressionSimple = true;
                            pLabelEngineLayerProperties.Offset = 0;
                            pLabelEngineLayerProperties.SymbolID = 0;
                            pLabelEngineLayerProperties.Symbol = pTxtSymbo;

                            IAnnotateLayerTransformationProperties pAnnoLayerTransProp = pAnnoLayerProp as IAnnotateLayerTransformationProperties;
                            pAnnoLayerTransProp.ReferenceScale=200;
                            pAnnoLayerTransProp.Units= ESRI.ArcGIS.esriSystem.esriUnits.esriFeet;
                            pAnnoLayerTransProp.ScaleRatio=1;

                            IAnnotateLayerPropertiesCollection pAnnoLayerProptyCollection =new AnnotateLayerPropertiesCollectionClass();
                           pAnnoLayerProptyCollection.Add(pAnnoLayerProp);

                           featureClass= pFeatureWorkspaceAnno.CreateAnnotationClass(featureCodeNode.TableName,fixFields,ocDesc.InstanceCLSID
                               ,ocDesc.ClassExtensionCLSID,fcDesc.ShapeFieldName,"",featureDataset,null,
                               pAnnoLayerProptyCollection, pGraphSacle, pSymbolCollection,true);
                        }
                    }
                    else
                    {
                        ///�����ǿռ�����
                    }
                    return featureClass;
                }
                return null;
            }
            catch(Exception ex)
            {
                LogAPI.WriteErrorLog(ex);
                return null;
            }
        }
예제 #47
0
        public static IFeatureClass CreateFeatureClass(IWorkspace workspace, IFeatureDataset featureDataset, String featureClassName, IFields fields)
        {
            IFeatureClass featureClass;
            String strShapeField = "";
            var featureWorkspace = workspace as IFeatureWorkspace;
            IObjectClassDescription objectClassDescription = new FeatureClassDescriptionClass();

            #region 简单校验
            if (featureClassName == "") return null;
            //if (workspace.get_NameExists(esriDatasetType.esriDTFeatureClass, featureClassName))
            //{
            //    featureClass = featureWorkspace.OpenFeatureClass(featureClassName);
            //    return featureClass;
            //}

            if (fields == null)
            {
                fields = objectClassDescription.RequiredFields;
                IFieldsEdit fieldsEdit = (IFieldsEdit)fields;
                IField field = new FieldClass();
                IFieldEdit fieldEdit = (IFieldEdit)field;
                fieldEdit.Name_2 = "Name";
                fieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
                fieldsEdit.AddField(field);
                fields = (IFields)fieldsEdit;
            }

            var feaClsDes = objectClassDescription as IFeatureClassDescription;
            strShapeField = feaClsDes.ShapeFieldName;
            #endregion

            //查询几何字段
            if (strShapeField == "")
            {
                for (int j = 0; j < fields.FieldCount; j++)
                {
                    if (fields.get_Field(j).Type == esriFieldType.esriFieldTypeGeometry)
                    {
                        strShapeField = fields.get_Field(j).Name;
                    }
                }
            }

            // 字段检查
            IFieldChecker fieldChecker = new FieldCheckerClass();
            IEnumFieldError enumFieldError = null;
            IFields validatedFields = null;
            fieldChecker.ValidateWorkspace = (IWorkspace)workspace;
            fieldChecker.Validate(fields, out enumFieldError, out validatedFields);

            //创建要素类
            if (featureDataset == null)
            {
                featureClass = featureWorkspace.CreateFeatureClass(featureClassName, validatedFields, objectClassDescription.InstanceCLSID, objectClassDescription.ClassExtensionCLSID, esriFeatureType.esriFTSimple, strShapeField, "");
            }
            else
            {
                featureClass = featureDataset.CreateFeatureClass(featureClassName, validatedFields, objectClassDescription.InstanceCLSID, objectClassDescription.ClassExtensionCLSID, esriFeatureType.esriFTSimple, strShapeField, "");
            }
            return featureClass;
        }
예제 #48
0
        /// <summary>
        /// 创建无向网络
        /// </summary>
        /// <param name="_pFeatureDataset"></param>
        /// <param name="_pDENetDataset"></param>
        /// <returns></returns>
        public INetworkDataset Create(IFeatureDataset _pFeatureDataset, IDENetworkDataset2  _pDENetDataset)
        {
            IFeatureDatasetExtensionContainer pFeatureDatasetExtensionContainer = (IFeatureDatasetExtensionContainer) _pFeatureDataset;

            IFeatureDatasetExtension pFeatureDatasetExtension = pFeatureDatasetExtensionContainer.FindExtension
                (esriDatasetType.esriDTNetworkDataset);

            IDatasetContainer2 pDatasetContainer2 = (IDatasetContainer2)pFeatureDatasetExtension;

            IDEDataset pDENetDataset = (IDEDataset)_pDENetDataset;

            INetworkDataset pNetworkDataset = (INetworkDataset)pDatasetContainer2.CreateDataset
                (pDENetDataset);

            return pNetworkDataset;
        }
예제 #49
0
파일: GDBData.cs 프로젝트: chinasio/minegis
        public static IFeatureClass CreateFeatureClassInPGDB(IWorkspace2 workspace, IFeatureDataset featureDataset, string featureClassName, IFields fields, UID CLSID, UID CLSEXT, string strConfigKeyword, esriGeometryType esriGeometryType)
        {
            if (featureClassName == "") return null; // name was not passed in
            ESRI.ArcGIS.Geodatabase.IFeatureClass featureClass;
            ESRI.ArcGIS.Geodatabase.IFeatureWorkspace featureWorkspace = (ESRI.ArcGIS.Geodatabase.IFeatureWorkspace)workspace; // Explicit Cast
            if (workspace.get_NameExists(ESRI.ArcGIS.Geodatabase.esriDatasetType.esriDTFeatureClass, featureClassName)) //feature class with that name already exists
            {

                featureClass = featureWorkspace.OpenFeatureClass(featureClassName);
                return featureClass;
            }

            // assign the class id value if not assigned

            if (CLSID == null)
            {
                CLSID = new ESRI.ArcGIS.esriSystem.UIDClass();
                CLSID.Value = "esriGeoDatabase.Feature";
            }

            ESRI.ArcGIS.Geodatabase.IObjectClassDescription objectClassDescription = new ESRI.ArcGIS.Geodatabase.FeatureClassDescriptionClass();

            // if a fields collection is not passed in then supply our own

            if (fields == null)
            {

                // create the fields using the required fields method

                fields = objectClassDescription.RequiredFields;

                ESRI.ArcGIS.Geodatabase.IFieldsEdit fieldsEdit = (ESRI.ArcGIS.Geodatabase.IFieldsEdit)fields; // Explicit Cast
                ESRI.ArcGIS.Geodatabase.IField field = new ESRI.ArcGIS.Geodatabase.FieldClass();

                // create a user defined text field
                ESRI.ArcGIS.Geodatabase.IFieldEdit fieldEdit = (ESRI.ArcGIS.Geodatabase.IFieldEdit)field; // Explicit Cast

                // setup field properties
                fieldEdit.Name_2 = "SampleField";
                fieldEdit.Type_2 = ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeString;
                fieldEdit.IsNullable_2 = true;
                fieldEdit.AliasName_2 = "Sample Field Column";
                fieldEdit.DefaultValue_2 = "test";
                fieldEdit.Editable_2 = true;
                fieldEdit.Length_2 = 100;

                // add field to field collection
                fieldsEdit.AddField(field);
                fields = (ESRI.ArcGIS.Geodatabase.IFields)fieldsEdit; // Explicit Cast
            }

            System.String strShapeField = "";

            // locate the shape field
            for (int j = 0; j < fields.FieldCount; j++)
            {
                if (fields.get_Field(j).Type == esriFieldType.esriFieldTypeGeometry)
                {
                    strShapeField = fields.get_Field(j).Name;
                    ((IGeometryDefEdit)fields.get_Field(j).GeometryDef).GeometryType_2 = esriGeometryType;
                }
            }

            // Use IFieldChecker to create a validated fields collection.
            ESRI.ArcGIS.Geodatabase.IFieldChecker fieldChecker = new ESRI.ArcGIS.Geodatabase.FieldCheckerClass();
            ESRI.ArcGIS.Geodatabase.IEnumFieldError enumFieldError = null;
            ESRI.ArcGIS.Geodatabase.IFields validatedFields = null;
            fieldChecker.ValidateWorkspace = (ESRI.ArcGIS.Geodatabase.IWorkspace)workspace;
            fieldChecker.Validate(fields, out enumFieldError, out validatedFields);
            // The enumFieldError enumerator can be inspected at this point to determine
            // which fields were modified during validation.

            // finally create and return the feature class

            if (featureDataset == null)// if no feature dataset passed in, create at the workspace level
            {
                featureClass = featureWorkspace.CreateFeatureClass(featureClassName, validatedFields, CLSID, CLSEXT, ESRI.ArcGIS.Geodatabase.esriFeatureType.esriFTSimple, strShapeField, strConfigKeyword);
            }
            else
            {
                featureClass = featureDataset.CreateFeatureClass(featureClassName, validatedFields, CLSID, CLSEXT, ESRI.ArcGIS.Geodatabase.esriFeatureType.esriFTSimple, strShapeField, strConfigKeyword);
            }
            return featureClass;
        }
예제 #50
0
        /// <summary>
        ///  获取子库中所有的拓扑图层
        /// </summary>
        /// <param name="axMapControl"></param>
        /// <param name="strSonPath"></param>
        /// <param name="ipSonFWS"></param>
        /// <param name="ipDataset"></param>
        /// <returns></returns>
        public static bool GetFcTopoNameInSon(AxMapControl axMapControl, IFeatureWorkspace ipSonFWS, 
            IFeatureDataset ipDataset)
        {
            ITopologyWorkspace ipTopologyWS = null;
            IFeatureClassContainer pFeatClassContainer = null;
            try
            {
                ipTopologyWS = (ITopologyWorkspace)ipSonFWS;

                if (ipDataset == null)
                {
                    return false;
                }

                pFeatClassContainer = (IFeatureClassContainer)ipDataset;

                List<string> arrayTopoLayers = new List<string>();

                arrayTopoLayers.Add(COMMONCONST.Topology_Name);

                //-------------------------------获取拓扑图层,并在地图上显示------------------------------------//
                AddTopoLayer(ref axMapControl, arrayTopoLayers[0], ipTopologyWS, pFeatClassContainer, ipDataset);

            }
            catch (Exception ex)
            {
                //GT_CONST.LogAPI.CheckLog.AppendErrLogs(ex.Message);
                return false;
            }
            finally
            {
                //释放接口
                if (pFeatClassContainer != null)
                {
                    Marshal.ReleaseComObject(pFeatClassContainer);
                    pFeatClassContainer = null;
                }

                if (ipTopologyWS != null)
                {
                    Marshal.ReleaseComObject(ipTopologyWS);
                    ipTopologyWS = null;
                }
            }
            return true;
            //------------------------------------------------------------------------------------------------//
        }
예제 #51
0
        //加载拓扑图层
        public static void AddTopoLayer(ref AxMapControl pMapCtrl, string strTopoLayerName, ITopologyWorkspace ipTopologyWS,IFeatureClassContainer ipFeatClassContainer, IFeatureDataset ipFeatDataset)
        {
            int nOriginClassID, nDestClassID;

            ITopology ipTopology;

            //打开数据集
            //ITopologyContainer ipTopoContainer = (ITopologyContainer)ipFeatDataset;

            IWorkspace2 pWorkspace = (IWorkspace2)ipFeatDataset.Workspace;

            if (pWorkspace.get_NameExists(esriDatasetType.esriDTTopology, strTopoLayerName))
            {
                ipTopology = ipTopologyWS.OpenTopology(strTopoLayerName);

                if (ipTopology == null)
                {
                    return;
                }

                ITopologyLayer ipTopologyLayer = new TopologyLayerClass();
                ipTopologyLayer.Topology = ipTopology;

                ILegendInfo legendInfo = (ILegendInfo)ipTopologyLayer;

                for (int i = 0; i < legendInfo.LegendGroupCount; i++)
                {
                    ILegendGroup legendgroup = legendInfo.get_LegendGroup(i);

                    ILegendClass legendclass = legendgroup.get_Class(0);

                    switch (legendgroup.Heading)
                    {
                        case "Area Errors":
                            {
                                legendgroup.Heading = "";
                                legendclass.Label = "面状错误";
                                legendclass.Description = "面状错误";
                                break;
                            }
                        case "Line Errors":
                            {
                                legendgroup.Heading = "";
                                legendclass.Label = "线状错误";
                                legendclass.Description = "线状错误";
                                break;
                            }
                        case "Point Errors":
                            {
                                legendgroup.Heading = "";
                                legendclass.Label = "点状错误";
                                legendclass.Description = "点状错误";
                                break;
                            }
                    }

                }

                ILayer ipLayer = (ILayer)ipTopologyLayer;
                ipLayer.Name = strTopoLayerName; //将拓扑检查合并后,将拓扑图层名指定为“拓扑错误”后,采用此方法命名  hehy20080724

                /*  将拓扑检查合并后,将拓扑图层名指定为“拓扑错误”后,注销以下代码 hehy20080724
                ///////////////////////////////////////////////////
                //得到拓扑层相对应的规则名称
                CModelSchema pModelSchema = new CModelSchema();
                string strRuleName = pModelSchema.GetRuleNameByTopoLayerName(m_pTask.pSchema, strTopoLayerName);
                //////////////////////////////////////////////////
                if (strRuleName.Length == 0)
                {
                    ipLayer.Name = strTopoLayerName;
                }
                else
                {
                    ipLayer.Name = strRuleName;
                }
                */
                //把拓扑图层加载到map控件中
                //pMapCtrl.AddLayer(ipLayer, pMapCtrl.LayerCount);
                pMapCtrl.Map.AddLayer(ipLayer);
                //pMapCtrl.ActiveView.Extent = ipLayer.AreaOfInterest;
            }
        }
예제 #52
0
파일: Form1.cs 프로젝트: dalinhuang/CUIT3D
        private INetworkDataset OpenNetworkDataset_Other(IWorkspace workspace, string strNDName, string strRoadFeatureDataset)
        {
            if (workspace == null || strNDName == "" || strRoadFeatureDataset == null)
            {
                return null;
            }
            IDatasetContainer3 pDatasetContainer3;
            IFeatureWorkspace pFeatureWorkspace = workspace as IFeatureWorkspace;
            pFeatureDataset = pFeatureWorkspace.OpenFeatureDataset(strRoadFeatureDataset);
            IFeatureDatasetExtensionContainer pFeatureDatasetExtensionContainer = pFeatureDataset as IFeatureDatasetExtensionContainer;
            IFeatureDatasetExtension pFeatureDatasetExtension = pFeatureDatasetExtensionContainer.FindExtension(esriDatasetType.esriDTNetworkDataset);
            pDatasetContainer3 = pFeatureDatasetExtension as IDatasetContainer3;

            if (pDatasetContainer3 == null)
                return null;
            IDataset pDataset = pDatasetContainer3.get_DatasetByName(esriDatasetType.esriDTNetworkDataset, strNDName);
            return pDataset as INetworkDataset;
        }
 //打开网络
 public void OpenFeatureDatasetNetwork(IFeatureDataset Featuredataset,System.Collections.ArrayList array1,System.Collections.ArrayList array2,int flag)
 {
     CloseWorkspace();
     if (!InitializeNetworkAndMap(Featuredataset,array1,array2,flag))
         Console.WriteLine("打开出错");
 }
예제 #54
0
 internal FeatureData(String theName, IFeatureClass theFClass)
 {
   this.Name = theName;
   this.theGType = theFClass.ShapeType;
   this.theAlias = theFClass.AliasName;
   this.OIDName = theFClass.OIDFieldName;
   this.ShapeName = theFClass.ShapeFieldName;
   this.theDS = theFClass.FeatureDataset;
   this.theST = (ISubtypes)theFClass;
   this.theFlds = theFClass.Fields;
   this.isIdentical = 0;
 }
예제 #55
0
        ///<summary>Simple helper to create a featureclass in a geodatabase.</summary>
        /// 
        ///<param name="workspace">An IWorkspace2 interface</param>
        ///<param name="featureDataset">An IFeatureDataset interface or Nothing</param>
        ///<param name="featureClassName">A System.String that contains the name of the feature class to open or create. Example: "states"</param>
        ///<param name="fields">An IFields interface</param>
        ///<param name="clsid">A UID value or Nothing. Example "esriGeoDatabase.Feature" or Nothing</param>
        ///<param name="clsext">A UID value or Nothing (this is the class extension if you want to reference a class extension when creating the feature class).</param>
        ///<param name="strConfigKeyword">An empty System.String or RDBMS table string for ArcSDE. Example: "myTable" or ""</param>
        ///  
        ///<returns>An IFeatureClass interface or a Nothing</returns>
        ///  
        ///<remarks>
        ///  (1) If a 'featureClassName' already exists in the workspace a reference to that feature class 
        ///      object will be returned.
        ///  (2) If an IFeatureDataset is passed in for the 'featureDataset' argument the feature class
        ///      will be created in the dataset. If a Nothing is passed in for the 'featureDataset'
        ///      argument the feature class will be created in the workspace.
        ///  (3) When creating a feature class in a dataset the spatial reference is inherited 
        ///      from the dataset object.
        ///  (4) If an IFields interface is supplied for the 'fields' collection it will be used to create the
        ///      table. If a Nothing value is supplied for the 'fields' collection, a table will be created using 
        ///      default values in the method.
        ///  (5) The 'strConfigurationKeyword' parameter allows the application to control the physical layout 
        ///      for this table in the underlying RDBMSfor example, in the case of an Oracle database, the 
        ///      configuration keyword controls the tablespace in which the table is created, the initial and 
        ///     next extents, and other properties. The 'strConfigurationKeywords' for an ArcSDE instance are 
        ///      set up by the ArcSDE data administrator, the list of available keywords supported by a workspace 
        ///      may be obtained using the IWorkspaceConfiguration interface. For more information on configuration 
        ///      keywords, refer to the ArcSDE documentation. When not using an ArcSDE table use an empty 
        ///      string (ex: "").
        ///</remarks>
        internal IFeatureClass CreateFeatureClass(IWorkspace2 workspace, IFeatureDataset featureDataset,
                                                  string featureClassName,
                                                  IFields fields, ESRI.ArcGIS.esriSystem.UID clsid,
                                                  ESRI.ArcGIS.esriSystem.UID clsext, string strConfigKeyword)
        {
            if (string.IsNullOrEmpty(featureClassName))
                return null;

            IFeatureClass featureClass;
            var featureWorkspace = (IFeatureWorkspace)workspace; // Cast may throw exception

            if (workspace.NameExists[esriDatasetType.esriDTFeatureClass, featureClassName])
            //feature class with that name already exists
            {
                featureClass = featureWorkspace.OpenFeatureClass(featureClassName);
                return featureClass;
            }

            // assign the class id value if not assigned
            if (clsid == null)
            {
                clsid = new ESRI.ArcGIS.esriSystem.UIDClass { Value = "esriGeoDatabase.Feature" };
                //Works for shapefiles as well
            }

            IObjectClassDescription objectClassDescription = new FeatureClassDescriptionClass();

            // if a fields collection is not passed in then supply our own
            if (fields == null)
            {
                // create the fields using the required fields method
                fields = objectClassDescription.RequiredFields;
                var fieldsEdit = (IFieldsEdit)fields; // Explicit Cast
                IField field = new FieldClass();

                // create a user defined text field
                var fieldEdit = (IFieldEdit)field; // Explicit Cast

                // setup field properties
                fieldEdit.Name_2 = "SampleField";
                fieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
                fieldEdit.IsNullable_2 = true;
                fieldEdit.AliasName_2 = "Sample Field Column";
                fieldEdit.DefaultValue_2 = "test";
                fieldEdit.Editable_2 = true;
                fieldEdit.Length_2 = 100;

                // add field to field collection
                fieldsEdit.AddField(field);
                fields = fieldsEdit;
            }

            string strShapeField = "";

            // locate the shape field
            for (int j = 0; j < fields.FieldCount; j++)
            {
                if (fields.Field[j].Type != esriFieldType.esriFieldTypeGeometry)
                    continue;
                strShapeField = fields.Field[j].Name;
                break;
            }

            // Use IFieldChecker to create a validated fields collection.
            IFieldChecker fieldChecker = new FieldCheckerClass();
            IEnumFieldError enumFieldError;
            IFields validatedFields;
            fieldChecker.ValidateWorkspace = (IWorkspace)workspace;
            fieldChecker.Validate(fields, out enumFieldError, out validatedFields);

            // The enumFieldError enumerator can be inspected at this point to determine
            // which fields were modified during validation.

            // finally create and return the feature class
            featureClass = featureDataset == null
                               ? featureWorkspace.CreateFeatureClass(featureClassName, validatedFields, clsid, clsext,
                                                                     esriFeatureType.esriFTSimple, strShapeField,
                                                                     strConfigKeyword)
                               : featureDataset.CreateFeatureClass(featureClassName, validatedFields, clsid, clsext,
                                                                   esriFeatureType.esriFTSimple, strShapeField,
                                                                   strConfigKeyword);
            return featureClass;
        }
예제 #56
0
        /// <summary>
        /// 获得需要的几何网络
        /// </summary>
        /// <param name="_pFeatureDataset"></param>
        /// <param name="_pGeometricName"></param>
        /// <returns></returns>
        IGeometricNetwork GetGeometricNetwork(IFeatureDataset _pFeatureDataset,string _pGeometricName)
        {
            INetworkCollection pNetworkCollection = _pFeatureDataset as INetworkCollection;

               return pNetworkCollection.get_GeometricNetworkByName(_pGeometricName);
        }