mapx寸法の詳細
3290 ワード
以前gisをしていたとき、あまりマークを使っていなかったので、今日やっとマークに触れて、demoテストをしました.
まずmapxを操作するユニットを書きました.その中に関数があります.
2.新しいフォームでtmapxコントロールをドラッグし、ロードされたgeosetを設定します.
フォームを作成するときに、一時レイヤーを作成します.
3.フォームにボタンをドラッグします.onclickイベントは次のとおりです.
上記のコードを通じて、mapxのlableは作成したフィールドの最初の文字型のフィールドの値しか表示できず、ALayerなどの手動で指定する必要があると結論した.KeyField := 'captiontoshow'; id、またはnameを指定した場合、labelは表示されません.この点は覚えておいてください.
まず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は表示されません.この点は覚えておいてください.