动态图层中的图元移动,我的程序中为什么不动?

citybug_nj 2006-09-08 10:34:24
刚开始用MAPINFO,用DELPHI开发的。试着写了一个例子,但是图元不能移动,请问为什么呢?程序如下
procedure TForm1.RzBitBtn5Click(Sender: TObject);
var
MyLayer: variant;
unusedVt: OleVariant;
fNewSymbol: Variant;
fMapSymbol: Variant;
fFtrFactory : Variant;
fNewStyle: CMapxStyle;
pItem : Variant;
begin
//创建图层
TVarData(unusedVt).vType := varError;
TVarData(unusedVt).vError := 2147614724;
MyLayer:=Map1.Layers.CreateLayer('MyLayer',unusedVt,1,unusedVt,unusedVt);
Map1.Layers.AnimationLayer:=Map1.Layers.Item[MyLayer.Name];

//创建图元
fFtrFactory := Map1.FeatureFactory;
MyLayer.OverrideStyle :=True;

pItem := CreateOleObject('MapX.Point.5');
pItem.Set(Map1.CenterX, Map1.CenterY);
//设置图元显示格式

fNewStyle:=Map1.Layers.Item[MyLayer.Name].Style;
fNewStyle.SymbolType:=miSymbolTypeBitmap;
fNewStyle.SymbolBitmapSize:=32;
fNewStyle.SymbolBitmapName:='POLI1-32.BMP';
fNewStyle.SymbolBitmapTransparent:=True;

fNewSymbol := fFtrFactory.CreateSymbol(pItem, fNewStyle);
//添加到图层
fMapSymbol := MyLayer.AddFeature(fNewSymbol);

Timer1.Enabled :=True;
end;

上面是创建动态图层,设置显示样式,并且启动定时器。定时器程序如下:
procedure TForm1.Timer1Timer(Sender: TObject);
var
fFeatures: variant;
fSelFeature: variant;
NewX,NewY: integer;
iSpeed: integer;
dHeading: double;
dYcomp,dXcomp: Double;
OldPoint,NewPoint: string;
begin
Timer1.Enabled :=False;
fFeatures:=Map1.Layers.Item['MyLayer'].AllFeatures;
iSpeed:=2000;
dHeading:=20;
dYcomp := iSpeed * Sin(dHeading * 3.14159 / 180);
dXcomp := iSpeed * Cos(dHeading * 3.14159 / 180);
Newy := fFeatures.item[1].CenterY + (1 / 69 * dYcomp * Timer1.interval / 1000 * 1 /3600);
Newx := fFeatures.item[1].CenterX + (1 / 69 * dXcomp * Timer1.interval / 1000 * 1 /3600);
OldPoint:='X=' + FloatToStr(fFeatures.item[1].CenterX) + ' Y=' + FloatToStr(fFeatures.item[1].CenterY);
NewPoint:='X=' + FloatToStr(NewX)+ ' Y=' + FloatToStr(NewY);
showmessage(OldPoint + ' ' + NewPoint);
fFeatures.Item[1].point.Set(Newx,Newy);


fFeatures.item[1].Update;
Timer1.Enabled:=True;
end;

定时器程序中有一点是从MAPINFO中拷过来的。程序运行后,图标一直就是在地图中心。请问高手,程序哪里写的不对?
...全文
494 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
citybug_nj 2006-09-11
  • 打赏
  • 举报
回复
我自己解决了。问题出在NEWX和NEWY的类型定义上,不能定义为整数,要定义为DOUBLE类型的
citybug_nj 2006-09-10
  • 打赏
  • 举报
回复
to tecsky() :
你看看我的程序,我就是刷新图元,但就是不动
tecsky 2006-09-09
  • 打赏
  • 举报
回复
不要刷新整个地图,只刷新图元
citybug_nj 2006-09-08
  • 打赏
  • 举报
回复
试过刷新地图,闪烁太厉害。
也曾打印过X,Y左边,每次的新坐标和旧坐标是不一样,但是因为没有移动,所以下一个循环进来,坐标和上一个循环坐标一样
letheanwater 2006-09-08
  • 打赏
  • 举报
回复
偶没仔细的校验代码
提两个建议
1 修改完feature 后刷新地图
2 将X,Y坐标持续打印出来,看看是否真的变化了

2,156

社区成员

发帖
与我相关
我的任务
社区描述
它是一种特定的十分重要的空间信息系统。它是在计算机硬、软件系统支持下,对整个或部分地球表层(包括大气层)空间中的有关地理分布数据进行采集、储存、管理、运算、分析、显示和描述的技术系统。
社区管理员
  • 地理信息系统
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧