现在的位置: 首页 > 综合 > 正文

MapX数据绑定后,读取属性的代码

2013年03月09日 ⁄ 综合 ⁄ 共 2646字 ⁄ 字号 评论关闭

有三种方法:
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;

下面是读取属性的方法:

procedure TForm1.btn7Click(Sender: TObject);
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;

抱歉!评论已关闭.