返回首页
当前位置: 主页 > GPS学院 > 应用软件 >

用MapX快速开发(7)

时间:2008-01-18 10:58来源:GPS之家-导航之家 作者:www.gpsuu.com
5、 创建工具句柄 系统已经定义工具句柄都以整数(包括16进制)常数存在,句柄号大于1000和小于12基本都为系统使用。 A. 定义常数:必须为全局变量 Global Const CreateSymbolTool = 13 创建节点 Global Const Crea

5、 创建工具句柄
系统已经定义工具句柄都以整数(包括16进制)常数存在,句柄号大于1000和小于12基本都为系统使用。
A. 定义常数:必须为全局变量
Global Const CreateSymbolTool = 13   ´创建节点
Global Const CreateLineTool = 15     ´创建管线
Global Const InfoTipTool = 16        ´信息工具
Global Const MoveFeature = 17        ´移动地图
Global Const ScaleDistanceTool = 18  ´测量两点间的距离

 

B. 使用CreateCustomTool创建新的工具句柄:
MainMap.CreateCustomTool CreateSymbolTool, miToolTypePoint, miSymbolCursor
MainMap.CreateCustomTool CreateLineTool, miToolTypeLine, miCrossCursor
MainMap.CreateCustomTool InfoTipTool, miToolTypePoint, miCrossCursor
MainMap.CreateCustomTool MoveFeature, miToolTypeLine, miPanCursor
MainMap.CreateCustomTool ScaleDistanceTool, miToolTypeLine, miPanCursor
C. 如何使用? 
在Map对象的ToolUsed事件的ToolNum参数为当前所激活的工具使当前操作指向某行为:MainMap.CurrentTool=工具句柄号,如放大:MainMap.CurrentTool=miZoomInTool,移动图元:MainMap.CurrentTool=MoveFeature
操作具体的工具句柄时,执行该捕捉到的工具句柄的代码:
在ToolUsed事件中:

 

Select Case ToolNum
   Case MoveFeature
      ‘执行代码
End Select

 

删除图元:Lyr.DeleteFeature Ftr

 


三、查询

 

1、 属性查找。Find、Search方法:注意的是Find方法只支持TAB表文件,不支持空间数据表。
Find :与FoxPro中Locate定位命令想类似。
Search:支持SQL语句。写法:仅指SQL语句的WHERE 部分,且From语句中只能有一个表——仅对单表进行操作:

Select * from LayerName WHERE ID LIKE “%北京%”
示例:
A、查找
Dim Ftrs AS MapXlib.Features     ‘图元集合

 

SET Ftrs=Lyr.Search(“ID LIKE ““%北京%”””)
For I=1 to Ftrs.Count
   ‘执行语句
Next
B、高亮显示
Lyr.Selection.Replace Ftrs    ‘将当前查询所得的结果集全部高亮显示(隐含执行:Lyr.ClearSelection语句)——加入selection集合闪烁:不能用Selection,否则会对整个屏幕进行整个刷新(抖动)。使用更新Style的方法进行选定图元的闪烁。
记载图元的老样式:Set Oldsytle=Ftr.Style

 

Lyr.Selection.Add Ftrs    ‘将当前查询所得的结果集添加到已有的结果集中,再全部高亮显示


C、对查询的结果集进行属性修改
示例程序:完成的是Professional中信息工具功能
Dim ds AS MapXlib.Dataset
Dim Flds AS MapXlib.Fields
Dim Ftr AS MapXlib.Feature

 

Set Lyr=MainMap.Layers.Item(LayerName)
Set ds=Lyr.Datasets.item(1)
Set Flds=ds.Fields
‘查找
SET Ftrs=Lyr.Search(“ID LIKE ““%北京%”””)
If Ftrs.count=0 then exit sub

 

‘读取属性值
For I=1 to Ftrs.Count
   Set Ftr=Ftrs.Item(I)
   For j=1 to Flds.count
FldsName(J)=Flds.Item(J).Name    ‘字段列表
Lyr.KeyField=FldsName(J)
  ValueStr(I,J)=Ftr.KeyValue        ‘值列表
   Next
Next

 

‘修改属性
MainMap.AuyoRedraw=False
Lyr.Editable=True

 

For j=1 to Flds.count
Lyr.KeyField= Flds.Item(J).Name
Ftrs.Item(j).KeyValue =ValueStr(J)     ‘更新值列表
Ftrs.Item(j).Update True
Next

 

Lyr.Refresh
Lyr.Editable=False
MainMap.AuyoRedraw=True

 

‘修改样式
Dim NewStyle AS MapXlib.Style

 

With NewStyle
‘设置样式
End With

 

MainMap.AuyoRedraw=False
Lyr.Editable=True

 

For i=1 to Ftrs.count
Set Ftr =Ftrs.Item(I)
SET Ftr.Style=NewStyle        ‘更新样式
Ftr.Update True
Next

 

Lyr.Refresh
Lyr.Editable=False
MainMap.AuyoRedraw=True

 

2、 空间查找
² 点查找:SearchAtPoint,结果集为Features类型
Dim Pnt AS MapXlib.Point

 

Pnt.Set X,Y
Set Ftrs=Lyr.SearchAtPoint(Pnt,miSearchResultAll)
For I=1 to Ftrs.Count
   ‘执行语句
Next
注意:点查找时,一般情况下结果集在一个以上的图层都存在。所以取值时应分别提取

 

(责任编辑:admin)
[ GPSUU整理发布,版权归原作者所有。]
顶一下
(1)
50%
踩一下
(1)
50%
------分隔线----------------------------

推荐内容