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