Delphi ArcEngine 根据条件添加文本注记
function Annotation4Layer(aeMapControl: TMapControl; pLayer: ILayer; sField: string; pColor: IRgbColor;
pFeatureLayer: IFeatureLayer;
pFeatureCursor: IFeatureCursor;
pFeature: IFeature;
pFields: IFields;
pEnvelope: IEnvelope;
pPoint: IPoint;
pTextSymbol: ITextSymbol;
pTextElement: ITextElement;
pElement: IElement;
pActiveView: IActiveView;
pGraphicsContainer: IGraphicsContainer;
pQueryFilter: IQueryFilter;
i: Integer;
begin
pFeatureLayer := pLayer as IFeatureLayer;
if sWhere = '' then
begin
pFeatureCursor := pFeatureLayer.Search(nil, True);
end
else
begin
pQueryFilter := CoQueryFilter.Create as IQueryFilter;
pQueryFilter.WhereClause := sWhere;
try
pFeatureCursor := pFeatureLayer.Search(pQueryFilter, True);
except
on E: Exception do
begin
ShowMessage('查询表达式错误!');
Exit(False);
end;
end;
end;
pFeature := pFeatureCursor.NextFeature;
if pFeature = nil then //空图层时 退出
Exit(False);
pFields := pFeature.Fields;
i := pFields.FindField(sField);
if i < 0 then //字段错误 退出
Exit(False);
pActiveView := aeMapControl.ActiveView;
pGraphicsContainer := aeMapControl.Map as IGraphicsContainer;
//文本符号
pTextSymbol := CoTextSymbol.Create as ITextSymbol;
pTextSymbol.Size := iTextSize;
pTextSymbol.Color := pColor;
pPoint := CoPoint.Create as IPoint;
while pFeature <> nil do
begin
//文本元素
pTextElement := CoTextElement.Create as ITextElement;
pTextElement.ScaleText := True;
pTextElement.Symbol := pTextSymbol;
pTextElement.Text := VarToStr(pFeature.Value[i]);
pEnvelope := pFeature.Extent;
pPoint.PutCoords(pEnvelope.XMin + pEnvelope.Width / 2, pEnvelope.YMin + pEnvelope.Height / 2);
pElement := pTextElement as IElement;
pElement.Geometry := pPoint;
pGraphicsContainer.AddElement(pElement, 0);
pFeature := pFeatureCursor.NextFeature;
end;
pActiveView.PartialRefresh(esriViewGraphics, nil, nil);
Result := True;
end;
sWhere: string = ''; iTextSize: SmallInt = 9): Boolean;
//带条件的 文字标注 ,指定图层 ,字段,颜色 和 条件表达式 ,文字大小
pFeatureLayer: IFeatureLayer;
pFeatureCursor: IFeatureCursor;
pFeature: IFeature;
pFields: IFields;
pEnvelope: IEnvelope;
pPoint: IPoint;
pTextSymbol: ITextSymbol;
pTextElement: ITextElement;
pElement: IElement;
pActiveView: IActiveView;
pGraphicsContainer: IGraphicsContainer;
pQueryFilter: IQueryFilter;
i: Integer;
begin
pFeatureLayer := pLayer as IFeatureLayer;
if sWhere = '' then
begin
pFeatureCursor := pFeatureLayer.Search(nil, True);
end
else
begin
pQueryFilter := CoQueryFilter.Create as IQueryFilter;
pQueryFilter.WhereClause := sWhere;
try
pFeatureCursor := pFeatureLayer.Search(pQueryFilter, True);
except
on E: Exception do
begin
ShowMessage('查询表达式错误!');
Exit(False);
end;
end;
end;
pFeature := pFeatureCursor.NextFeature;
if pFeature = nil then //空图层时 退出
Exit(False);
pFields := pFeature.Fields;
i := pFields.FindField(sField);
if i < 0 then //字段错误 退出
Exit(False);
pActiveView := aeMapControl.ActiveView;
pGraphicsContainer := aeMapControl.Map as IGraphicsContainer;
//文本符号
pTextSymbol := CoTextSymbol.Create as ITextSymbol;
pTextSymbol.Size := iTextSize;
pTextSymbol.Color := pColor;
pPoint := CoPoint.Create as IPoint;
while pFeature <> nil do
begin
//文本元素
pTextElement := CoTextElement.Create as ITextElement;
pTextElement.ScaleText := True;
pTextElement.Symbol := pTextSymbol;
pTextElement.Text := VarToStr(pFeature.Value[i]);
pEnvelope := pFeature.Extent;
pPoint.PutCoords(pEnvelope.XMin + pEnvelope.Width / 2, pEnvelope.YMin + pEnvelope.Height / 2);
pElement := pTextElement as IElement;
pElement.Geometry := pPoint;
pGraphicsContainer.AddElement(pElement, 0);
pFeature := pFeatureCursor.NextFeature;
end;
pActiveView.PartialRefresh(esriViewGraphics, nil, nil);
Result := True;
end;
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步