《MapX4.5新功能培训教程》由会员分享,可在线阅读,更多相关《MapX4.5新功能培训教程(38页珍藏版)》请在金锄头文库上搜索。
1、MapX4.5新功能培训教程创建新表创建新表数据类型 字符串 miTypeString = 0 数字 miTypeNumeric = 1日期 miTypeDate = 2整型 miTypeInt = 3短整型 miTypeSmallInt = 4浮点型 miTypeFloat = 5逻辑类型 miTypeLogical = 6增加字段的方法 Fields.Add method - 增加字段 Fields.AddDateField method - 增加日期类型字段 Fields.AddFloatField method - 增加浮点类型的字段 Fields.AddIntegerField me
2、thod - 增加浮点类型的字段 Fields.AddLogicalField method - 增加整数类型的字段 Fields.AddNumericField method - 增加数字类型的字段 Fields.AddSmallIntField method - 增加短整数类型的字段 Fields.AddStringField method - 增加字符类型的字段删除字段 Fields.Remove method - 删除一个字段 Fields.RemoveAll method - 删除所有字段 创建新表 - LayerInfo对象 LayerInfo.type常数 miLayerInfo
3、TypeTemp = 6 - 临时表 miLayerInfoTypeNewTable = 7 - 磁盘表 创建新表 LayerInfo参数 layerinfotype ; parameter ; required ; type miLayerInfoTypeTemp: Name: No; String; Name of the added layer ; Default: LayerX”。 Fields:No ; Fields collection ; Specifies the column(s) the table will have。 Features:Yes, if no fields
4、 ; Features collection ; Specifies the rows to fill the table with ; Default: none。TableStorageType:No ; String ; Default: Native,Valid options: Native(临时tab表), MemTable(存在于内存)。 miLayerInfoTypeNewTab FileSpec:Yes ; String ; Name of .tab file for new table. Name:No ; String ; Name of the added layer
5、; Default: built on filespec. Fields:No ; Fields collection ; Specifies the column the table will have. Features:Yes,if no Fields ; Features collection; Specifies the rows to fill the table with ; Default: NONE .示例示例 For i = 1 To Grid1.Rows - 1 If InStr(StrType, 字符型) 0 Then flds.AddStringField StrNa
6、me, NumWidthElseIf InStr(StrType, 整型) Then flds.AddIntegerField StrNameElseIf InStr(StrType, 短整型) Then flds.AddSmallIntField StrNameElseIf InStr(StrType, 浮点型) Then flds.AddFloatField StrNameElseIf InStr(StrType, 十进制型) Then flds.AddNumericField StrName, NumWidth, NumDecElseIf InStr(StrType, 日期型) Then
7、 flds.AddDateField StrNameElseIf InStr(StrType, 逻辑型) Then flds.AddLogicalField StrNameEnd If Next iIf Check2.Value = 1 Then创建新表 LayerInfo.Type = 7 miLayerInfoTypeNewTab LayerInfo.AddParameter filespec, filespec ElseIf Check2.Value = 0 Then创建临时表 LayerInfo.Type = 6 miLayerInfoTypeTemp LayerInfo.AddPar
8、ameter TableStorageType, MemTable 临时文件保存在磁盘上还是内存。 End If LayerInfo.AddParameter Name, layername LayerInfo.AddParameter Fields, flds If Option_AddToDataset = True Then 加入数据集 LayerInfo.AddParameter AutoCreate, 1 LayerInfo.AddParameter DatasetName, Text1.Text End If支持日期类型MapX4.5 支持Date 类型的字段,还有 Numeric
9、 和 String类型的字段.也就是说,若从外部数据源引入数据到数据集时,日期类型的字段将作为日期类型被引入,而不是以字符串类型引入,或者不引入。日期的格式由控制面板上区域设置中的日期来定义。Dim DateFld As Date定义数据源 OdbcQueryInfo.ConnectString = odbc; OdbcQueryInfo.DataSource = “gcgl” oracle数据库 OdbcQueryInfo.SqlQuery = select * from team 定义绑定层 bindlayer.layername = Team bindlayer.LayerType =
10、miBindLayerTypeXY bindlayer.RefColumn1 = lng 坐标字段-经度 bindlayer.RefColumn2 = “lat” 坐标字段-纬度绑定 Set ds = Formmain.Map1.Datasets.add(miDataSetODBC, OdbcQueryInfo, team, Team, , bindlayer) DateFld = ds.Value(1, ds.Fields.Count)读出第一行日期值 MsgBox DateFld紧缩在Mapx4.0下作紧缩时,只能事先创建一个带结构的空表。然后将记录加入到空表中。在Mapx4.5下可以使用
11、LayerInfo 的创建带结构的临时表和新表的功能来完成紧缩的功能。Set lyr = Formmain.Map1.Layers(ToolBbo1.Text) Set ds = Formmain.Map1.Datasets.add(6, lyr) 获取被紧缩表的路径及表名 filespec = Formmain.Map1.Layers.Item(ToolBbo1.Text).filespec layername = lyr.Name 将表临时存放于内存 紧缩LayerInfo.Type = 6 miLayerInfoTypeTemp LayerInfo.AddParameter TableS
12、torageType, MemTable 临时文件保存在磁盘上还是内存。 LayerInfo.AddParameter Name, lyrpack LayerInfo.AddParameter Fields, ds.Fields LayerInfo.AddParameter Features, lyr.AllFeatures Formmain.Map1.Layers.add LayerInfo, LayerPos 注意: Set LayerInfo = Nothing 紧缩从地图窗口删除原表 Formmain.Map1.Datasets.Remove (ds.Name) Formmain.Ma
13、p1.Layers.Remove (lyr.Name) Formmain.Map1.Refresh Set lyr = Nothing Set ds = Nothing Set lyr = Formmain.Map1.Layers(lyrpack) Set ds = Formmain.Map1.Datasets.add(6, lyr) 从磁盘删除原表 Kill filespec紧缩创建新表LayerInfo.Type = 7 miLayerInfoTypeNewTabLayerInfo.AddParameter filespec, filespecLayerInfo.AddParameter
14、Name, layernameLayerInfo.AddParameter Fields, ds.FieldsLayerInfo.AddParameter Features, lyr.AllFeaturesFormmain.Map1.Layers.add LayerInfo, LayerPos 紧缩从地图窗口删除临时表从地图窗口删除临时表 Formmain.Map1.Datasets.Remove (ds.Name) Formmain.Map1.Layers.Remove (lyr.Name) Formmain.Map1.Refresh 注意: Set ds = Nothing Set lyr
15、 = Nothing Set LayerInfo = Nothing紧缩SQL查询 Layer.search方法,使用Where子句,查询定位所需数据。Variable 对象和Variables集合: MapX4.5 在表达式中支持变量替换.通过Variable 对象和 Variables集合,一个表达式中将包含对任意变量的引用,如字符串类型,feature对象类型的数据。Layer.search将之作为一个可选参数。地理运算符的使用 object1 CONTAINS object2:object2的中心点在object1中 object1 CONTAINS_ENTIRE object2:ob
16、ject2完全在object1中.object1 CONTAINS_PART object2: object1与object2相交.object1 ENTIRELY_WITHIN object2:object1完全在object2中.object1 INTERSECTS object2:object1与object2相交object1 PARTIALY_WITHIN object2:object1与object2相交.object1 WITHIN object2:object1的中心点在object2中.Dim f As MapXLib.FeatureDim v As New MapXLib.
17、Variables 查找州中的某一个城市Set f = Map1.Layers.Item(“states”).Selection.Item(1) 选择州 将城市的图层加入数据集Map1.Datasets.Add miDatasetLayer, Map1.Layers(us cities), citiesds.v.Add “var1”, f 加入 feature 变量v.Add “svar”, “TX” 加入string 变量v.Add “dvar”, Date 加入 date 变量 查找并将结果放入features collection Set ftrs = Map1.Layers.Item(
18、us cities).Search(obj within var1 and year(dvar) = 2000 and state svar , v) 高亮显示 Map1.Layers.Item(us cities).Selection.Replace ftrs节点编辑编辑条件编辑条件: 1、具有节点的对象,如点(point),线(line),折线(polyline),区域(region)。节点可选择的对象有点,线,折线,区域。节点可增加的对象有点,线,面。不具有节点的对象有弧段(Arc),圆域(ellipse/circle),矩形(rectangle),圆角矩形(round rect),文本
19、(text) 2、对象处于被选中且可编辑状态。 3、Map控件处于获得焦点状态。选择节点选择节点: 选择工具(选择工具(miSelectTool ) 1. Click鼠标,选择一个 2. Ctrl+Click:在选择与不选择间切换;选择多个;或选择范围的首点 3. Shift+Click: 选择范围的尾点,离首点距离最短 4. Shift+Ctrl+click:选择范围的尾点,离首点距离最长编辑模式:由编辑模式:由Map1.FeatureEditMode来设置来设置图元编辑模式 - 拖动四个句柄,改变图元的形状:Map1.FeatureEditMode = miEditModeFeature,
20、默认值节点编辑模式: Map1.FeatureEditMode = miEditModeNode 移动或删除重叠的节点模式:Map1.FeatureEditMode = miEditModeNode | miMoveDuplicateNodes | miDeleteDuplicateNodes 增加节点模式: Map1.FeatureEditMode = miEditModeNode | miEditModeAddNodeFeatureEditMode的常量设置的常量设置miEditModeFeature = 0x1 miEditModeNode = 0x2 miMoveDuplicateNo
21、des = 0x4 miDeleteDuplicateNodes = 0x8 miEditModeAddNode = 0x40 增加节点增加节点 Private Sub Command1_Click() Map1.Layers.Add c:program filesmapinfomapx 4.0mapsusa.tab Map1.Layers.Item(1).Editable =True Map1.Layers.Item(1).ShowNodes = True Map1.CurrentTool = miSelectTool Map1.FeatureEditMode = miEditModeNod
22、e Or miEditModeAddNode End Sub移动或删除移动或删除单个图元上的节点,而与之邻接的图元上的节点并不移动或删除。 Formmain.Map1.FeatureEditMode = miEditModeNode Formmain.Map1.SetFocus 获取焦点移动移动相邻图元重叠重叠(重合)的节点节点 Formmain.Map1.FeatureEditMode = miEditModeNode or miMoveDuplicateNodes Formmain.Map1.SetFocus 获取焦点删除相邻图元重叠(重合)的节点删除相邻图元重叠(重合)的节点 Formm
23、ain.Map1.FeatureEditMode = miEditModeFeature or miDeleteDuplicateNodes Formmain.Map1.SetFocus 获取焦点新加函数新加函数用于创建专题图,标注,用于创建专题图,标注,SQL的的表达式表达式BufferDeformatNumber$Format$ FormatDate$FormatNumber$StringCompareStringCompareIntlStringToDateObjectType以buffer为例 region object= Buffer( inputobject, resolution
24、, width, unit_name )Private Sub BufferState_Click() Dim ftr As MapXLib.Feature Dim ftrs As MapXLib.Features Dim vars As New MapXLib.Variables获取第一个州 Set ftr = Map1.Layers.Item(USA).AllFeatures.Item(1) vars.Add varFirstState, ftr 对图层 “USA”中每个对象做距离为 10 英里的buffer Set ftrs = Map1.Layers.Item(USA).Search
25、_ (buffer(obj, 4, 10, mi) contains entire varFirstState, vars) MsgBox ftrs.CountEnd Sub其他其他支持支持DAO 3.6连接连接Oracle8.1.6VB6.0使用使用LayerInfo对象加入对象加入oracle8i数据数据。 Dim lInfo As ObjectSet lInfo = CreateObject(mapx.layerinfo.4)lInfo.Type = 4 Dim ConnectStr As StringConnectStr = SRVR= + Combo1 + ;UID= + txtUs
26、erName.Text + ;PWD= + txtPassword.TextlInfo.AddParameter connectstring, ConnectStr lInfo.AddParameter name, TempConnect lInfo.AddParameter toolkit, ORAINETlInfo.AddParameter query, select OBJECT from states where 1=0 lInfo.AddParameter cache, OFF lInfo.AddParameter mbrsearch, ON g_map.Layers.Add lIn
27、fo Set lInfo = Nothing连接连接Oracle8.1.6 CMapXLayersCMapXLayers layers = layers = m_ctrlMapX.GetLayersm_ctrlMapX.GetLayers();(); CMapXLayerInfoCMapXLayerInfo layerInfolayerInfo; ; layerInfo.CreateDispatchlayerInfo.CreateDispatch( MapX.LayerInfo.4);( MapX.LayerInfo.4); layerInfo.SetType(4);layerInfo.Set
28、Type(4); if(dlg.DoModalif(dlg.DoModal()=IDOK)()=IDOK) CStringCString ConnectStrConnectStr = = SRVR=SRVR=;UID;UID= =dzn;PWDdzn;PWD= =dzndzn;连接连接Oracle8.1.6VC6.0 layerInfo.AddParameter(connectstring,COleVariant(ConnectlayerInfo.AddParameter(connectstring,COleVariant(ConnectStr);Str); layerInfo.AddPara
29、meter(name,COleVariant(USA);layerInfo.AddParameter(name,COleVariant(USA); layerInfo.AddParameter(toolkit,COleVariant(ORAINET);layerInfo.AddParameter(toolkit,COleVariant(ORAINET); layerInfo.AddParameter(query,COleVariant(Select * fromlayerInfo.AddParameter(query,COleVariant(Select * from China);China
30、); layerInfo.AddParameter(cache,COleVariant(ON);layerInfo.AddParameter(cache,COleVariant(ON); layerInfo.AddParameter(mbrsearch,COleVariant(OFF);layerInfo.AddParameter(mbrsearch,COleVariant(OFF); layers.RemoveAll();layers.RemoveAll(); layers.Add(layerInfo);layers.Add(layerInfo);连接连接Oracle8.1.6VC6.0缓冲
31、区Cache ON - 下载数据放在内存和磁盘(*.map,*.id),这将有助于提高选择速度、刷新速度,平移,放大的操作的速度。缺点下载速度较OFF慢。平移若超出缓冲区所存的数据范围,将从数据库中读取数据,这将影响缩小及平移的速度。OFF 下载速度快,选择速度慢、平移和缩小、放大慢MBR SearchON -在从数据库载入数据时要占用一定的时间。下载下载Oracle8iOracle8i的各参数含义的各参数含义PII 333 64M 数据表为数据表为31002条记录情况下:条记录情况下: cashe MBRsearch Time off off 0:0:56 on on 0:3:56 on o
32、ff 0:2:12 off on 0:1:20不同参数设置时下载时间对比增加图元增加图元-PRINX Dim rv As New MapXLib.RowValue Dim rvs As New MapXLib.RowValues Set ftr = FtrFac.CreateRegion(points, Map1.DefaultStyle) Set rv.Dataset = Map1.Datasets.Item(1) Set rv.Field = Map1.Datasets.Item(1).Fields(mi_prinx) rv.Value = Str(Map1.Layers(ToolBars.Combo1).AllFeatures.Count + 1) rvs.Add rv lyr.AddFeature ftr, rvs谢谢!