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);              

            }       

 

        }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值