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