有三种方法:
1. 由Layer对象的KeyField属性来设立要读取属性值的字段名。
接着,由Feature对象的keyValue读取此行的属性值。
2. 将图层加入到Datasets, 由Dataset对象的Value(x,y)属性,通过设置行号,列号来获得属性值。
3. 将图层加入到Datasets,之后由RowValues(ftr)获取整行的值。
这里是绑定的代码:
procedure TForm1.btn3Click(Sender: TObject);
var
oBLayer : BindLayer;
SearchLayer : Layer;
ds : Dataset;
begin
//使用这个过程必须保证aqXUnit表已经打开!
if not aqXUnit.Active then
begin
ShowMessage('系统基础表没有打开!');//调用自定义提示方法
exit;
end;
if MainMap.DataSets.Contains('DS_SK') then
begin
CnDebugger.TraceMsg('already contains the layer named DS_SK');
Exit;
end;
oBLayer := coBindLayer.Create;
oBLayer.LayerName := LAYERNAME;
oBLayer.LayerType := miBindLayerTypeXY;//必须使用这个参数才能绑定XY坐标
oBLayer.RefColumn1 := 'X';//第一个参数必须指定为横坐标
oBLayer.RefColumn2 := 'Y';//纵坐标
//添加数据集
ds := MainMap.Datasets.Add(miDataSetADO,//数据集类型,这是miDataSetADO,即ADO专用的
aqXUnit.Recordset,//使用这个方法获得ADO中的_Recordset类型
'DS_SK',//数据集名称
'ID',//传入的是Xunit表中的字段ID的名称
EmptyParam,
oBLayer,//BindLayer
EmptyParam,
EmptyParam);
//下边将设置新图层的各项属性
searchLayer := MainMap.Layers.Item[LAYERNAME];
//字体颜色
searchLayer.LabelProperties.Style.TextFontColor := miColorPurple;
searchLayer.LabelProperties.Style.TextFontHalo := true;
searchLayer.LabelProperties.Style.TextFontBackColor := miColorWhite;
//设置图元显示的标签
searchLayer.LabelProperties.Dataset := ds;
searchLayer.LabelProperties.DataField := ds.Fields.Item['NAME'];
searchLayer.LabelProperties.LabelZoom := true;
//设置图层缩放比例范围
searchLayer.ZoomMin := 0;
searchLayer.ZoomMax := 200;
searchLayer.ZoomLayer := true;
//设置标签缩放比例范围
searchLayer.LabelProperties.LabelZoomMin := 0;
searchLayer.LabelProperties.LabelZoomMax := 200;
searchLayer.LabelProperties.LabelZoom := true;
//自动标记图元
searchLayer.AutoLabel := true;
end;
下面是读取属性的方法:
var
dss:CMapXDatasets;
ds:CMapXDataset;
features:CMapXFeatures;
feature:CMapXFeature;
rowvalues:CMapXRowValues;
rowvalue:CMapXRowValue;
i,j:Integer;
value: string ;
begin
ds : = MainMap.DataSets.Item[ ' DS_SK ' ];
features : = MainMap.Layers.Item[LAYERNAME].AllFeatures;
for i: = 1 to features.Count do
begin
feature: = features.Item[i];
rowvalues : = ds.RowValues[feature];
CnDebugger.TraceMsg(rowvalues.Item[ ' name ' ].Value);
// for j:=1 to rowvalues.Count do
// begin
// rowvalue := rowvalues.Item[j];
// value := rowvalue.Value ;
// CnDebugger.TraceMsg('value='+value);
// end;
end;
CnDebugger.TraceMsg( ' ==================== ' );
// 或者
for i: = 1 to features.Count do
begin
feature: = features.Item[i];
CnDebugger.TraceMsg(ds.Value[feature, ' name ' ]);
end;
end;