📄 render.txt
字号:
unit Renderer;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ExtCtrls, StdCtrls, MapObjects2_TLB;
type
TRendererFrm = class(TForm)
GroupBox1: TGroupBox;
RbDensityCheck: TRadioButton;
RbChartCheck: TRadioButton;
RbBreaksCheck: TRadioButton;
RbValueCheck: TRadioButton;
GroupBox2: TGroupBox;
CbbLayer: TComboBox;
Label1: TLabel;
Label2: TLabel;
CbbField: TComboBox;
Label3: TLabel;
EdtSize: TEdit;
UpDownSize: TUpDown;
Panel1: TPanel;
ColorDialog1: TColorDialog;
BtOk: TButton;
procedure CbbLayerChange(Sender: TObject);
procedure BtOkClick(Sender: TObject);
procedure Panel1Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
RendererFrm: TRendererFrm;
implementation
uses Unitmain;
{$R *.dfm}
procedure TRendererFrm.Panel1Click(Sender: TObject);
begin
if ColorDialog1.Execute then
Panel1.Color:=ColorDialog1.Color;
end;
procedure TRendererFrm.FormActivate(Sender: TObject);
var
MapLayers: ImoMapLayer;
i: Integer;
begin
CbbLayer.Clear;
for i := 0 to mainfrm.mainmap.Layers.Count - 1 do
begin
MapLayers := ImoMapLayer(mainfrm.mainmap.Layers.Item(i));
CbbLayer.items.add(MapLayers.Name);
end;
CbbLayer.ItemIndex := 0;
CbbLayer.OnChange(Sender);
end;
procedure TRendererFrm.CbbLayerChange(Sender: TObject);
var
MyTableDesc:imoTableDesc;
i:integer;
begin
MyTableDesc:=CoTableDesc.Create;
Currentlayer:=ImoMaplayer(MainFrm.MainMap.Layers.Item(CbbLayer.Text));
MyTableDesc:=Currentlayer.Records.TableDesc;
CbbField.Clear;
for i:=0 to MyTableDesc.FieldCount-1 do
begin
CbbField.Items.Add(MyTableDesc.FieldName[i]);
//添加字段
end;
CbbField.ItemIndex:=0;
end;
procedure TRendererFrm.BtOkClick(Sender: TObject);
Var
MyRenderer:ImoDotDensityRenderer;
MyValueRenDerer:ImoValueMapRenderer;
MyChartRenderer:ImoChartRenderer;
MyLayer:imoMapLayer;
MyStatistics:ImoStatistics;
MyRecord:ImoRecordSet;
MyStrings:ImoStrings;
i:integer;
begin
MyLayer:=CoMapLayer.Create;
MyLayer:=ImoMapLayer(MainFrm.MainMap.Layers.Item(CbbLayer.Text));
if RbDensityCheck.Checked then
//点密度专题图
begin
MyRenderer:=CoDotDenSityRenderer.Create;
MyStatistics:=MyLayer.Records.CalculateStatistics(CbbField.Text);
MyRenderer.Field:=CbbField.Text;
MyRenderer.DotValue:=(MyStatistics.Min+(MyStatistics.Max-MyStatistics.Min)/2)/100;
MyRenderer.DotColor:=Panel1.Color;
MyRenderer.DotSize:=UpDownSize.Position;
MyLayer.Renderer:=MyRenderer;
MainFrm.MainMap.Refresh;
MyRenderer:=Nil;
end
else if RbValueCheck.Checked then
//独立值专题图
begin
MyStrings:=CoStrings.Create;
MyValueRenderer:=CoValueMapRenderer.Create;
MyRecord:=MyLayer.Records;
Myrecord.MoveFirst;
While not MyRecord.EOF do
begin
//过滤重复值
MyStrings.Add(Myrecord.Fields.Item(CbbField.Text).ValueAsString);
Myrecord.MoveNext;
end;
MyValueRenderer.Field:=CbbField.Text;
MyValueRenderer.ValueCount:=MyStrings.Count;
//开始渲染
For i:=0 to MyStrings.Count-1 do
MyValueRenderer.Value[i]:=MyStrings.Item(i);
MyLayer.Renderer:=MyValueRenderer;
MainFrm.MainMap.Refresh;
MyRecord:=Nil;
MyStrings:=Nil;
MyValueRenderer:=nil;
end
else if RbChartCheck.Checked then
//图表专题图
begin
MyChartRenderer:=CoChartRenderer.Create;
MyChartRenderer.ChartType:=MoBar;
MyChartRenderer.MaxPieSize:=8;
MyChartRenderer.FieldCount:=3;
for i:=0 to 2 do
begin
MyChartRenderer.Field[i]:= CbbField.Items.Strings[i];
MyChartRenderer.Color[i]:=RGB(Random(255),Random(255),Random(255));
end;
MyLayer.Renderer:= MyChartRenderer;
MainFrm.MainMap.Refresh;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -