大家帮我想想!!!!急急急急急急~(50分)

  • 主题发起人 主题发起人 ranyang
  • 开始时间 开始时间
R

ranyang

Unregistered / Unconfirmed
GUEST, unregistred user!
我用delphi+mapx4.5开发的gis系统,通过socket服务器回传某车台地理位置信息,但是在地图上绘制这台车的具体位置时发现了一个奇怪的问题:

我下载了一个上海市地图,在程序中使用,当回传位置后,在地图上不能标记,而且软件系统死掉!

但是奇怪的是,我换了别的地图后,没有这样的问题!!!!

大家帮我想想!!!!急急急急急急~

我dubug程序发现:

里面有一个函数,不好意思,这个函数不是我自己写的,发现在这里发生了太多循环,而程序就是在这里死掉的:

帮我看一下有什么问题:

procedure TF_Main.AreaFind(lon, lat:do
uble;
Distance: integer;
Listbox: TListBox;
Edit: TEdit;CarNum:string);
var
ftrs: MapXLib_tlb.CMapXFeatures;
Pt:MapXlib_tlb.CMapXPoint;
i,k:integer;
begin

Listbox.Clear;
Edit.Text:='';
pt := CoPoint.Create;
pt.Set_(lon,lat);
for i:=map1.Layers.Countdo
wnto 1do

begin

ftrs:=map1.Layers.Item.SearchWithinDistance(pt,distance,miUnitMeter, miSearchTypePartiallyWithin);
if ftrs.Count>0 then

begin

for k:=1 to ftrs.Countdo

begin

if (ftrs.Item[k].KeyValue<>'') and (IsNumber(ftrs.Item[k].KeyValue)='No') and (Listbox.Count<5) then

begin

Listbox.Items.Add(ftrs.Item[k].KeyValue);
if Edit.Text='' then

Edit.Text:=Edit.Text+ftrs.Item[k].KeyValue
else

Edit.Text:=Edit.Text+' , '+ftrs.Item[k].KeyValue;
end;

end;

end;

end;

Edit.Text:=Edit.Text+'附近';
if Listbox.Count=0 then

begin

Distance:=Distance*2;
AreaFind(lon,lat,Distance,Listbox,Edit,CarNum);
end;

end;
 
if Listbox.Count=0 then

begin

Distance:=Distance*2;
AreaFind(lon,lat,Distance,Listbox,Edit,CarNum);
end;

有可能造成无限递归啊,
再设置个条件可以保证退出啊,
要不然你有可能一直areafind。。

另外你的这个东西我没用过,
ftrs.Item[k] 下标是从1开始的?
 
同意楼上,肯定是造成无限递归拉,在检查检查你的判断条件。

ftrs.Item的下标是从1开始的。
 
我明白是无限递归,现在有个问题???为什么有的地图查不出搜索指定距离内的地图图元,将搜索结果作为 Features 集合返回???是不是这样呢?
 
我已经知道是什么回事了!等会公布
 
多人接受答案了。
 

Similar threads

I
回复
0
查看
782
import
I
I
回复
0
查看
816
import
I
D
回复
0
查看
801
DelphiTeacher的专栏
D
I
回复
0
查看
625
import
I
I
回复
0
查看
850
import
I
后退
顶部