|
阅读:1381回复:0
[转帖]AO叠置分析 使用delphi
AO叠置分析 <br>最近使用delphi写的 <br><br>网上delphi +AO的资料不多 <br>存此备查!<br><br>
<br>implementation<br>function DoClip(var MapControl1:TMapControl;var InputLayerName:WideString;<br> var OverlayLayerName:WideString;Tol:Double):Boolean;<br> var<br> pLayer1,pLayer2:ILayer;<br> pfeaLayer1,pFeaLayer2:IFeatureLayer;<br> pInputTable,pOverlayTable:ITable;<br> pInputFeaClass:IFeatureClass;<br> pFeaClassName:IFeatureClassName;<br> pInputFeaType:TOleEnum;<br> pNewWSName:IWorkspaceName ;<br> pDatasetName:IDatasetName ;<br> pSR:ISpatialReference;<br> pBGP:IBasicGeoprocessor ;<br> pOutputFeaClass : IFeatureClass;<br> pOutputFeaLayer :IFeatureLayer ;</p> <p> LayerName:WideString;<br> hr:integer;<br> begin<br> //MapControl1.Map.Get_Layer(0,pLayer1);<br> //MapControl1.Map.Get_Layer(1,pLayer2);<br> if (GetLayerByName(InputLayerName,Mapcontrol1,pLayer1)) and<br> (GetLayerByName(OverlayLayerName,Mapcontrol1,pLayer2))then<br> begin<br> pFealayer1:=pLayer1 as IFeatureLayer;<br> pFealayer2:=pLayer2 as IFeatureLayer;<br> end<br> else<br> begin<br> ShowMessage('查找图层出错');<br> result:=false;<br> exit;<br> end;</p> <p><br> pInputTable := pFeaLayer1 as ITable;<br> pOverlayTable := pFeaLayer2 as ITable;</p> <p> pFeaLayer1.Get_FeatureClass(pInputFeaClass);</p> <p> if (pInputTable=Nil) or (pOverlayTable=Nil) then<br> showMessage('Table Check Failed');</p> <p> pFeaClassName := CoFeatureClassName.Create as IFeatureClassName;</p> <p> pInputFeaClass.Get_FeatureType(pInputFeaType);<br> pFeaClassName.Set_FeatureType(pInputFeaType);</p> <p> pFeaClassName.Set_ShapeFieldName('Shape');</p> <p> pInputFeaClass.Get_ShapeType(pInputFeaType);<br> pFeaClassName.Set_ShapeType(pInputFeaType);</p> <p> pNewWSName:=CoWorkspaceName.Create as IWorkspaceName;<br> pNewWSName.Set_PathName('d:\temp');<br> pNewWSName.Set_WorkspaceFactoryProgID('esriDataSourcesFile.ShapefileWorkspaceFactory');</p> <p> pDatasetName:= pFeaClassName as IDatasetName;<br> pLayer1.Get_Name(LayerName);<br> pDatasetName.Set_Name(LayerName+'_Clip');<br> pDatasetName._Set_WorkspaceName(pNewWSName);</p> <p> tol:=0;<br> pBGP := CoBasicGeoprocessor.Create as IBasicGeoProcessor;<br> MapControl1.Map.Get_SpatialReference(pSR);<br> pBGP.Set_SpatialReference(pSR);</p> <p> try<br> hr:=pBGP.Clip(pInputTable,false,pOverlayTable,false,tol,<br> pFeaClassName,pOutputFeaClass);<br> finally<br> if hr<0 then<br> begin<br> ShowMessage('执行Clip出现错误');<br> result:=false;<br> end;</p> <p> end;<br> pOutputFeaLayer := CoFeatureLayer.Create as IFeatureLayer;<br> pOutputFeaLayer._Set_FeatureClass(pOutputFeaClass);<br> pOutputFeaClass.Get_AliasName(LayerName);<br> pOutputFeaLayer.Set_Name(LayerName);<br> MapControl1.Map.AddLayer(pOutputFeaLayer);<br> result:=true;<br> end;<br>//根据图层名找到图层,找到图层返回true,否则返回false<br>function GetLayerByName(var LayerName:WideString;var MapControl1:TMapControl;<br> out pLayer:ILayer):Boolean;<br>var<br>i,layerCount:Integer;<br>tempName:widestring;<br>pLayerTemp:ILayer;</p> <p>begin<br> MapControl1.Map.Get_LayerCount(layerCount);<br> for i := 0 to layerCount-1 do<br> begin<br> MapControl1.Map.Get_Layer(i,pLayerTemp);<br> pLayerTemp.Get_Name(tempName);<br> if tempName=LayerName then<br> begin<br> MapControl1.Map.Get_Layer(i,pLayer);<br> result:=true;<br> exit;<br> end;<br> end;<br> result:=false;<br>end;<br>end.</p> |
|
|