mapx寸法の詳細


以前gisをしていたとき、あまりマークを使っていなかったので、今日やっとマークに触れて、demoテストをしました.
 
まずmapxを操作するユニットを書きました.その中に関数があります.
function TMapModule.CreateTempAnimationLayer(var currentMap: TMap;
  layerName: string): CMapXLayer;
var
  layerInfo:CMapXLayerInfo;
  flds : CMapXFields;
  ANewLayer : CMapXLayer;
begin
  try
    flds := CoFields.Create;
    flds.AddIntegerField('ID',EmptyParam);
    flds.AddStringField('captiontoshow',254,EmptyParam);
    flds.AddStringField('name',254,EmptyParam);

    layerInfo := CoLayerInfo.Create;
    layerInfo.type_ := miLayerInfoTypeTemp;
    layerInfo.AddParameter('FileSpec',layerName);
    layerInfo.AddParameter('Name',layerName);
    layerInfo.AddParameter('Fields',flds);

    ANewLayer := currentMap.Layers.Add(layerInfo,1);

    currentMap.DataSets.Add( miDataSetLayer , ANewLayer , 'ds_'+layerName , EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);

    currentMap.Layers.AnimationLayer := ANewLayer;

    result := ANewLayer;
  except
    result := nil;
  end;
end;

 
 
2.新しいフォームでtmapxコントロールをドラッグし、ロードされたgeosetを設定します.
フォームを作成するときに、一時レイヤーを作成します.
procedure TForm1.FormCreate(Sender: TObject);
var
  AMapModule:TMapModule;
  ALayer:CMapXLayer;
begin
  AMapModule := TMapModule.Create;
  ALayer := AMapModule.CreateTempAnimationLayer(MainMap,'temp_layer');
  ALayer.AutoLabel := True;

end;

3.フォームにボタンをドラッグします.onclickイベントは次のとおりです.
procedure TForm1.Button1Click(Sender: TObject);
var
  APoint:CMapXPoint;
  ACreatePoint,ANewPoint:CMapXFeature;
  ALayer:CMapXLayer;
  AMapXDateset:CMapXDataset;
  ARowValue:CMapXRowValues;
begin
  APoint := CoPoint.Create;
  APoint.Set_(114.337552895699,30.5367033707355);
  ALayer := MainMap.Layers['temp_layer'];

  ACreatePoint := MainMap.FeatureFactory.CreateSymbol(APoint,EmptyParam);

  ANewPoint := ALayer.AddFeature(ACreatePoint,EmptyParam);

  ALayer.KeyField := 'captiontoshow';
  ANewPoint.KeyValue := 'this is caption' + #13#10 + 'hello! i am peirenlei';
  ANewPoint.Update(EmptyParam,EmptyParam);

  ALayer.KeyField := 'name';
  ANewPoint.KeyValue := 'this is name';
  ANewPoint.Update(EmptyParam,EmptyParam);

  ALayer.KeyField := 'ID';
  ANewPoint.KeyValue := IntToStr(1);
  ANewPoint.Update(EmptyParam,EmptyParam);

  ALayer.KeyField := 'name';
  ShowMessage(ANewPoint.KeyValue);

  ANewPoint.Update(EmptyParam,EmptyParam);

  AMapXDateset := MainMap.DataSets.Item['ds_temp_layer'] ;
  ARowValue := AMapXDateset.RowValues[ANewPoint];

  ShowMessage(ARowValue.Item['id'].Value);
end;

 
上記のコードを通じて、mapxのlableは作成したフィールドの最初の文字型のフィールドの値しか表示できず、ALayerなどの手動で指定する必要があると結論した.KeyField := 'captiontoshow'; id、またはnameを指定した場合、labelは表示されません.この点は覚えておいてください.