『公告』 预祝您龙年大吉,万事如意, 过节期间, 大家如需数据服务,请拨打400 或直接添加客服微信,再祝大家龙年,心想事成。
关注我们 新浪 腾讯

ArcGIS二次开发读写access,gdb数据库

ArcGIS二次开发读写access,gdb数据库
ArcGIS二次开发读写access,gdb数据库
       private void StartOper()

        {

            IWorkspaceFactoryWSF1 = null;

            IFeatureWorkspacepFeatureWorkspace = null;

            IWorkspaceFactoryWSF2 = null;

            IFeatureWorkspacepFeatureWorkspace2 = null;

            IWorkspaceEditpWorkspaceEdit = null;

            IWorkspaceEditpWorkspaceEdit2 = null;

            IFeatureClasspFeatureClassOfPointSource = null;

            IFeatureClasspFeatureClassOfSeawagCatchment = null;

            IFeatureClasspFeatureClassOfBuilding = null;

            try

            {

                 WSF1 = new AccessWorkspaceFactory();//mdb库

                 pFeatureWorkspace =WSF1.OpenFromFile(mdbPath, 0) as IFeatureWorkspace;

                 WSF2 = new FileGDBWorkspaceFactoryClass();//gdb库

                 pFeatureWorkspace2 =WSF2.OpenFromFile(gdbPath, 0) as IFeatureWorkspace;

 

                 pWorkspaceEdit =pFeatureWorkspace as IWorkspaceEdit;              

                 pWorkspaceEdit.StartEditing(false);

                pWorkspaceEdit.StartEditOperation();

 

                 pWorkspaceEdit2 =pFeatureWorkspace2 as IWorkspaceEdit;

                 pWorkspaceEdit2.StartEditing(false);

                pWorkspaceEdit2.StartEditOperation();

 

                 pFeatureClassOfPointSource =pFeatureWorkspace.OpenFeatureClass(pointSourceTableName);

                 pFeatureClassOfSeawagCatchment= pFeatureWorkspace.OpenFeatureClass(seawagCatachmentTable);

                 pFeatureClassOfBuilding =pFeatureWorkspace2.OpenFeatureClass(buildingTable);

 

                IFeatureCursorpCursorOfSeawage = pFeatureClassOfSeawagCatchment.Search(null, false);

                IFeaturepFeatureOfSeawageCatchment = pCursorOfSeawage.NextFeature();

                while(pFeatureOfSeawageCatchment != null)

                {

                    intOID = pFeatureOfSeawageCatchment.OID;

                    stringCatchmentName = pFeatureOfSeawageCatchment.get_Value(pFeatureOfSeawageCatchment.Fields.FindField("Name")).ToString();

 

                    //找到位于当前集水区内的点源

                    IFeatureCursorpCursorOfPointSource = pFeatureClassOfPointSource.Search(null, false);

                    IFeaturepFeatureOfPointSource = pCursorOfPointSource.NextFeature();

                    while(pFeatureOfPointSource != null)

                    {

                        IRelationalOperator2 relationOperator =pFeatureOfPointSource.ShapeCopy as IRelationalOperator2;

                        if (relationOperator.Within(pFeatureOfSeawageCatchment.ShapeCopy))break;//如果点在当前集水区内,结束

                        pFeatureOfPointSource =pCursorOfPointSource.NextFeature();

                    }

                    Marshal.ReleaseComObject(pCursorOfPointSource);

 

 

                    if(pFeatureOfPointSource != null)

                    {//如果找到了集水区内的点源

 

                        double totalBuildingAreaInCatachment = 0;

                        int totalPolulationInCatachemtn = 0;//

 

                        //找该集水区内的建筑物,求出其该集水区内的总建筑面积和总人口

                        #region                    

                        ISpatialFilter pSpatialFilter = newSpatialFilterClass();

                        pSpatialFilter.Geometry= pFeatureOfSeawageCatchment.ShapeCopy;

                       pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelContains;

                        IFeatureCursor pCursorOfBuilding =pFeatureClassOfBuilding.Search(pSpatialFilter, false);

                        int resultCount =pFeatureClassOfBuilding.FeatureCount(pSpatialFilter);//获取当前集水区内的建筑物数量

                        IFeature pFeatureOfBuilding = pCursorOfBuilding.NextFeature();

                        while (pFeatureOfBuilding != null)

                        {

                            int floorCount =Convert.ToInt32(pFeatureOfBuilding.get_Value(pFeatureOfBuilding.Fields.FindField("Floor")));

                            double area = Convert.ToDouble(pFeatureOfBuilding.get_Value(pFeatureOfBuilding.Fields.FindField("Shape_Area")));

                           totalBuildingAreaInCatachment += (area*floorCount);

                            //根据面积大小分两种情况

                            if (area > 10 && area < 150)

                            {//该区间按照3人

                               totalPolulationInCatachemtn = totalPolulationInCatachemtn+(3 *floorCount);

                            }

                            else if(area>=150)

                            {                              

                                int numberPerBuid=(int)Math.Floor(area/150);                         

                                if (area % 150 > 50) numberPerBuid = numberPerBuid+ 1;

                               totalPolulationInCatachemtn= totalPolulationInCatachemtn + (numberPerBuid * floorCount*3);

                            }

                            pFeatureOfBuilding= pCursorOfBuilding.NextFeature();

                        }

                        Marshal.ReleaseComObject(pCursorOfBuilding);

                        #endregion

 

                        //修改“点源”表中的Name,TotalArea,TotalPopulation

                        #region                    

                        pFeatureOfPointSource.set_Value(pFeatureOfPointSource.Fields.FindField("Name"), CatchmentName);

                       pFeatureOfPointSource.set_Value(pFeatureOfPointSource.Fields.FindField("TotalArea"),totalBuildingAreaInCatachment);

                       pFeatureOfPointSource.set_Value(pFeatureOfPointSource.Fields.FindField("TotalPopulation"),totalPolulationInCatachemtn);

                       pFeatureOfPointSource.Store();

                        #endregion

                    }

                    else

                    {//集水区没有点源存在,

                       pFeatureOfSeawageCatchment = pCursorOfSeawage.NextFeature();

                        continue;

                    }

                    pFeatureOfSeawageCatchment= pCursorOfSeawage.NextFeature();

                }

                Marshal.ReleaseComObject(pCursorOfSeawage);

            }

            catch(Exception ex)

            {

                ex = null;

            }

            finally

            {

                if(pWorkspaceEdit2 != null &&pWorkspaceEdit!=null)

                {

                   pWorkspaceEdit.StopEditOperation();

                    pWorkspaceEdit.StopEditing(true);

                    pWorkspaceEdit2.StopEditOperation();

                   pWorkspaceEdit2.StopEditing(true);

                }

              

                 Marshal.ReleaseComObject(WSF1);

                 Marshal.ReleaseComObject(pFeatureWorkspace);

                 Marshal.ReleaseComObject(WSF2);

                 Marshal.ReleaseComObject(pFeatureWorkspace2);

                 Marshal.ReleaseComObject(pWorkspaceEdit);

                 Marshal.ReleaseComObject(pWorkspaceEdit2);

                 Marshal.ReleaseComObject(pFeatureClassOfPointSource);

                 Marshal.ReleaseComObject(pFeatureClassOfSeawagCatchment);

                 Marshal.ReleaseComObject(pFeatureClassOfBuilding);              

            }       

 

        }
      京ICP备2025132830号-1 京公网安备 号