cl991036
管理员
管理员
  • 注册日期2003-07-25
  • 发帖数5917
  • QQ14265545
  • 铜币29669枚
  • 威望217点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • GIS帝国铁杆
阅读:1381回复:0

[转帖]AO叠置分析 使用delphi

楼主#
更多 发布于:2009-07-20 15:55
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>
喜欢0 评分0
没钱又丑,农村户口。头可断,发型一定不能乱。 邮箱:gisempire@qq.com
游客

返回顶部