关于 MapObject 的问题(二)(200分)

  • 主题发起人 主题发起人 question
  • 开始时间 开始时间
Q

question

Unregistered / Unconfirmed
GUEST, unregistred user!
在 Delphi 中,使用 MapObject ,如何对制定的信息进行定位,并突出显示?
如:
我知道一个图的 ID 号,我希望在地图中这个ID号对应的区域用指定的颜色显示!
想知道的:
1)如何在IMoRecordset中利用关键字查询数据(我现在用的是循环)代码在后。
2)如何对符合要求的数据区域上色或进行相应的处理。
想实现的:代码注释的!
谢谢!
var
l : IMoMapLayer;
recs : IMoRecordset;
tdesc: IMoTableDesc;
flds : IMoFields;
fld : IMoField;
I:Integer;
begin
l := IMoMapLayer(CreateOleObject('MapObjects2.MapLayer'));
l :=IMoMapLayer(Map1.layers.item('bount.pat'));
recs := l.Records;
if recs.Count>0 then
begin
recs.MoveFirst;
While not recs.EOFdo
begin
tdesc := IMoTableDesc(CreateOleObject('MapObjects2.TableDesc'));
tdesc := recs.TableDesc;
flds := recs.Fields;
for i := 0 to tdesc.FieldCount-1do
begin
fld := flds.Item(tdesc.FieldName);
if (fld.Name = 'BOUNT-ID') and (fld.valueasstring='360124') then
begin
StringGrid1.Cells[0,i+1] := fld.name ;
StringGrid1.Cells[1,i+1] :=fld.valueasstring;
//想在这里对符合要求的数据处理,可不会。
//想标记为红色,同时画个三角符号!
end;
end;
recs.MoveNext;
end;
end;

end;
 
1.Why becomes an unskilled question... ?
2.想法很好,但是实现并不如你想象的那样,在注释的位置添加代码解决。
3.应该在AfterlayerDraw事件中进行编程。
4.给你一个解决线索,希望你能自己Overcome it,Not Complex。
a 定义一个全局的记录集变量V1,查询过程中按要检索的条件找到满足条件的
地理对象,放在V1中,不要忘了调用MAP1.Refresh,它将激活AfterlayerDraw事件。
b 在AfterlayerDraw事件中,定义一个SHP变量,类型为IMoPolygon(我想你要变成红
色的地理对象是一个面状的吧)。再定义一个Symbol对象,根据你的要求来设置表现方式,
Symbol.COLOR:=clred;两个变量FLDS、FLD
FLDS:=V1.FIELDS;
FLD:=FLDS.ITEMS('SHAPE');
SHP:=Imopolygon(Idispatch(fld.value));
map1.drawshape(shp,symbol);
SHP:=NIL;
C.画个三角形应该很简单了吧(提示:还用此法,SHP为点状,SYMBOL用MO提供的缺省
三角形符号)
祝你成功
 
接受答案了.
 
后退
顶部