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) |