1、7/28/202217/28/20221MapX4.5新功能培训教程7/28/202227/28/20222创建新表创建新表数据类型 字符串 miTypeString =0 数字 miTypeNumeric=1日期 miTypeDate=2整型 miTypeInt=3短整型 miTypeSmallInt=4浮点型 miTypeFloat=5逻辑类型 miTypeLogical=67/28/202237/28/20223增加字段的方法 Fields.Add method -增加字段 Fields.AddDateField method -增加日期类型字段 Fields.AddFloatField
2、 method-增加浮点类型的字段 Fields.AddIntegerField method-增加浮点类型的字段 Fields.AddLogicalField method-增加整数类型的字段 Fields.AddNumericField method-增加数字类型的字段 Fields.AddSmallIntField method-增加短整数类型的字段 Fields.AddStringField method-增加字符类型的字段删除字段 Fields.Remove method-删除一个字段 Fields.RemoveAll method -删除所有字段 7/28/202247/28/20
3、224创建新表-LayerInfo对象 LayerInfo.type常数 miLayerInfoTypeTemp=6-临时表 miLayerInfoTypeNewTable=7-磁盘表 7/28/202257/28/20225创建新表 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 ta
4、ble will have。Features:Yes,if no fields;Features collection;Specifies the rows to fill the table with;Default:none。TableStorageType:No;String;Default:Native,Valid options:Native(临时tab表),MemTable(存在于内存)。7/28/202267/28/20226 miLayerInfoTypeNewTab FileSpec:Yes;String;Name of.tab file for new table.Name
5、:No;String;Name of the added layer;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.7/28/202277/28/20227示例示例 For i=1 To Grid1.Rows-1 If InStr(StrType,字符
6、型)0 Then flds.AddStringField StrName,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 I
7、nStr(StrType,日期型)Then flds.AddDateField StrNameElseIf InStr(StrType,逻辑型)Then flds.AddLogicalField StrNameEnd If Next i7/28/202287/28/20228If Check2.Value=1 Then创建新表 LayerInfo.Type=7 miLayerInfoTypeNewTab LayerInfo.AddParameter filespec,filespec ElseIf Check2.Value=0 Then创建临时表 LayerInfo.Type=6 miLaye
8、rInfoTypeTemp LayerInfo.AddParameter 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 If7/28/202297/28/
9、20229支持日期类型MapX4.5 支持Date 类型的字段,还有 Numeric 和 String类型的字段.也就是说,若从外部数据源引入数据到数据集时,日期类型的字段将作为日期类型被引入,而不是以字符串类型引入,或者不引入。日期的格式由控制面板上区域设置中的日期来定义。7/28/2022107/28/202210 Dim DateFld As Date定义数据源 OdbcQueryInfo.ConnectString=odbc;OdbcQueryInfo.DataSource=“gcgl”oracle数据库 OdbcQueryInfo.SqlQuery=select*from team
10、定义绑定层 bindlayer.layername=Team bindlayer.LayerType=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 DateFld7/28/2022117/28/202211
11、紧缩在Mapx4.0下作紧缩时,只能事先创建一个带结构的空表。然后将记录加入到空表中。在Mapx4.5下可以使用LayerInfo 的创建带结构的临时表和新表的功能来完成紧缩的功能。7/28/2022127/28/202212 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 将表临时存放于内存 紧缩
12、7/28/2022137/28/202213LayerInfo.Type=6 miLayerInfoTypeTemp LayerInfo.AddParameter TableStorageType,MemTable 临时文件保存在磁盘上还是内存。LayerInfo.AddParameter Name,lyrpack LayerInfo.AddParameter Fields,ds.Fields LayerInfo.AddParameter Features,lyr.AllFeatures Formmain.Map1.Layers.add LayerInfo,LayerPos 注意:Set La
13、yerInfo=Nothing 紧缩7/28/2022147/28/202214从地图窗口删除原表 Formmain.Map1.Datasets.Remove(ds.Name)Formmain.Map1.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紧缩7/28/2022157/28/202215
14、 创建新表 LayerInfo.Type=7 miLayerInfoTypeNewTab LayerInfo.AddParameter filespec,filespec LayerInfo.AddParameter Name,layername LayerInfo.AddParameter Fields,ds.Fields LayerInfo.AddParameter Features,lyr.AllFeatures Formmain.Map1.Layers.add LayerInfo,LayerPos 紧缩7/28/2022167/28/202216从地图窗口删除临时表从地图窗口删除临时表
15、 Formmain.Map1.Datasets.Remove(ds.Name)Formmain.Map1.Layers.Remove(lyr.Name)Formmain.Map1.Refresh 注意:Set ds=Nothing Set lyr=Nothing Set LayerInfo=Nothing紧缩7/28/2022177/28/202217SQL查询 Layer.search方法,使用Where子句,查询定位所需数据。Variable 对象和Variables集合:MapX4.5 在表达式中支持变量替换.通过Variable 对象和 Variables集合,一个表达式中将包含对任意
16、变量的引用,如字符串类型,feature对象类型的数据。Layer.search将之作为一个可选参数。7/28/2022187/28/202218地理运算符的使用 object1 CONTAINS object2:object2的中心点在object1中 object1 CONTAINS_ENTIRE object2:object2完全在object1中.object1 CONTAINS_PART object2:object1与object2相交.object1 ENTIRELY_WITHIN object2:object1完全在object2中.object1 INTERSECTS obj
17、ect2:object1与object2相交object1 PARTIALY_WITHIN object2:object1与object2相交.object1 WITHIN object2:object1的中心点在object2中.7/28/2022197/28/202219Dim f As MapXLib.FeatureDim v As New MapXLib.Variables 查找州中的某一个城市Set f=Map1.Layers.Item(“states”).Selection.Item(1)选择州 将城市的图层加入数据集Map1.Datasets.Add miDatasetLayer
18、,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(us cities).Search(obj within var1 and year(dvar)=2000 and state svar,v)高亮显示 Map1.Layers.Item(us cities).Selection.Replace ftrs7/28/
19、2022207/28/202220节点编辑编辑条件编辑条件:1、具有节点的对象,如点(point),线(line),折线(polyline),区域(region)。节点可选择的对象有点,线,折线,区域。节点可增加的对象有点,线,面。不具有节点的对象有弧段(Arc),圆域(ellipse/circle),矩形(rectangle),圆角矩形(round rect),文本(text)2、对象处于被选中且可编辑状态。3、Map控件处于获得焦点状态。7/28/2022217/28/202221选择节点选择节点:选择工具(选择工具(miSelectTool)1.Click鼠标,选择一个 2.Ctrl+C
20、lick:在选择与不选择间切换;选择多个;或选择范围的首点 3.Shift+Click:选择范围的尾点,离首点距离最短 4.Shift+Ctrl+click:选择范围的尾点,离首点距离最长7/28/2022227/28/202222编辑模式:由编辑模式:由Map1.FeatureEditMode来设置来设置图元编辑模式-拖动四个句柄,改变图元的形状:Map1.FeatureEditMode=miEditModeFeature,默认值节点编辑模式:Map1.FeatureEditMode=miEditModeNode 移动或删除重叠的节点模式:Map1.FeatureEditMode=miEdi
21、tModeNode|miMoveDuplicateNodes|miDeleteDuplicateNodes 增加节点模式:Map1.FeatureEditMode=miEditModeNode|miEditModeAddNode7/28/2022237/28/202223FeatureEditMode的常量设置的常量设置miEditModeFeature=0 x1 miEditModeNode=0 x2 miMoveDuplicateNodes=0 x4 miDeleteDuplicateNodes=0 x8 miEditModeAddNode=0 x407/28/2022247/28/202
22、224 增加节点增加节点 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=miEditModeNode Or miEditModeAddNode End Sub7/28/2022257/28/202225移动或删除移动或删除单个图元上的
23、节点,而与之邻接的图元上的节点并不移动或删除。Formmain.Map1.FeatureEditMode=miEditModeNode Formmain.Map1.SetFocus 获取焦点7/28/2022267/28/202226移动移动相邻图元重叠重叠(重合)的节点节点 Formmain.Map1.FeatureEditMode=miEditModeNode or miMoveDuplicateNodes Formmain.Map1.SetFocus 获取焦点7/28/2022277/28/202227删除相邻图元重叠(重合)的节点删除相邻图元重叠(重合)的节点 Formmain.Map
24、1.FeatureEditMode=miEditModeFeature or miDeleteDuplicateNodes Formmain.Map1.SetFocus 获取焦点7/28/2022287/28/202228新加函数新加函数用于创建专题图,标注,用于创建专题图,标注,SQL的表达式的表达式 Buffer DeformatNumber$Format$FormatDate$FormatNumber$StringCompare StringCompareIntl StringToDate ObjectType7/28/2022297/28/202229以buffer为例 region
25、object=Buffer(inputobject,resolution,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
26、.Layers.Item(USA).Search _ (buffer(obj,4,10,mi)contains entire varFirstState,vars)MsgBox ftrs.CountEnd Sub7/28/2022307/28/202230其他其他支持支持DAO 3.67/28/2022317/28/202231连接连接Oracle8.1.6VB6.0使用使用LayerInfo对象加入对象加入oracle8i数据数据。Dim lInfo As Object Set lInfo=CreateObject(mapx.layerinfo.4)lInfo.Type=4 Dim Conn
27、ectStr As String ConnectStr=SRVR=+Combo1+;UID=+txtUserName.Text+;PWD=+txtPassword.Text7/28/2022327/28/202232lInfo.AddParameter connectstring,ConnectStr lInfo.AddParameter name,TempConnect lInfo.AddParameter toolkit,ORAINETlInfo.AddParameter query,select OBJECT from states where 1=0 lInfo.AddParamete
28、r cache,OFF lInfo.AddParameter mbrsearch,ON g_map.Layers.Add lInfo Set lInfo=Nothing连接连接Oracle8.1.67/28/2022337/28/202233 CMapXLayers layers=m_ctrlMapX.GetLayers();CMapXLayers layers=m_ctrlMapX.GetLayers();CMapXLayerInfo layerInfo;CMapXLayerInfo layerInfo;layerInfo.CreateDispatch(MapX.LayerInfo.4);l
29、ayerInfo.CreateDispatch(MapX.LayerInfo.4);layerInfo.SetType(4);layerInfo.SetType(4);if(dlg.DoModal()=IDOK)if(dlg.DoModal()=IDOK)CString ConnectStr=CString ConnectStr=SRVR=;UID=dzn;PWD=dzn;SRVR=;UID=dzn;PWD=dzn;连接连接Oracle8.1.6VC6.07/28/2022347/28/202234 layerInfo.AddParameter(connectstring,COleVarian
30、t(ConnectlayerInfo.AddParameter(connectstring,COleVariant(ConnectStr);Str);layerInfo.AddParameter(name,COleVariant(USA);layerInfo.AddParameter(name,COleVariant(USA);layerInfo.AddParameter(toolkit,COleVariant(ORAINET);layerInfo.AddParameter(toolkit,COleVariant(ORAINET);layerInfo.AddParameter(query,CO
31、leVariant(Select layerInfo.AddParameter(query,COleVariant(Select*from from China);China);layerInfo.AddParameter(cache,COleVariant(ON);layerInfo.AddParameter(cache,COleVariant(ON);layerInfo.AddParameter(mbrsearch,COleVariant(OFF);layerInfo.AddParameter(mbrsearch,COleVariant(OFF);layers.RemoveAll();la
32、yers.RemoveAll();layers.Add(layerInfo);layers.Add(layerInfo);连接连接Oracle8.1.6VC6.07/28/2022357/28/202235缓冲区Cache ON-下载数据放在内存和磁盘(*.map,*.id),这将有助于提高选择速度、刷新速度,平移,放大的操作的速度。缺点下载速度较OFF慢。平移若超出缓冲区所存的数据范围,将从数据库中读取数据,这将影响缩小及平移的速度。OFF 下载速度快,选择速度慢、平移和缩小、放大慢MBR SearchON-在从数据库载入数据时要占用一定的时间。下载下载Oracle8iOracle8i的各参
33、数含义的各参数含义7/28/2022367/28/202236PII 333 64M 数据表为数据表为31002条记录情况下:条记录情况下:cashe MBRsearch Time off off 0:0:56 on on 0:3:56 on off 0:2:12 off on 0:1:20不同参数设置时下载时间对比7/28/2022377/28/202237增加图元增加图元-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,rvs7/28/2022387/28/202238谢谢!7/28/2022397/28/202239演讲完毕,谢谢观看!