mapx4.5 新功能培训教程
Post on 30-Jan-2016
198 Views
Preview:
DESCRIPTION
TRANSCRIPT
1 1
MapX4.5 新功能培训教程
2 2
创建新表
数据类型 字符串 miTypeString = 0 数字 miTypeNumeric = 1日期 miTypeDate = 2整型 miTypeInt = 3短整型 miTypeSmallInt = 4浮点型 miTypeFloat = 5逻辑类型 miTypeLogical = 6
3 3
增加字段的方法 Fields.Add method - 增加字段 Fields.AddDateField method - 增加日期类型字段 Fields.AddFloatField method - 增加浮点类型的字段 Fields.AddIntegerField method - 增加浮点类型的字段 Fields.AddLogicalField method - 增加整数类型的字段 Fields.AddNumericField method - 增加数字类型的字段 Fields.AddSmallIntField method - 增加短整数类型的字段 Fields.AddStringField method - 增加字符类型的字段
删除字段 Fields.Remove method - 删除一个字段 Fields.RemoveAll method - 删除所有字段
4 4
创建新表 - LayerInfo 对象 LayerInfo.type 常数 miLayerInfoTypeTemp = 6 - 临时表 miLayerInfoTypeNewTable = 7 - 磁盘表
5 5
创建新表 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 ; Features collection ; Specifies the rows to fill the table with ; Default: none 。TableStorageType:No ; String ; Default: Native,Valid options: Native( 临时 tab 表) , MemTable (存在于内存)。
6 6
miLayerInfoTypeNewTab
FileSpec : Yes ; String ; Name of .tab file for new table. Name: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 7
• 示例 For i = 1 To Grid1.Rows - 1 If InStr(StrType, " 字符型 ") > 0 Then
• flds.AddStringField StrName, NumWidth
• ElseIf InStr(StrType, " 整型 ") Then
• flds.AddIntegerField StrName
• ElseIf InStr(StrType, " 短整型 ") Then
• flds.AddSmallIntField StrName
• ElseIf InStr(StrType, " 浮点型 ") Then
• flds.AddFloatField StrName
• ElseIf InStr(StrType, " 十进制型 ") Then
• flds.AddNumericField StrName, NumWidth, NumDec
• ElseIf InStr(StrType, " 日期型 ") Then
• flds.AddDateField StrName
• ElseIf InStr(StrType, " 逻辑型 ") Then
• flds.AddLogicalField StrName
• End If
• Next i
8 8
• If Check2.Value = 1 Then‘ 创建新表• LayerInfo.Type = 7 'miLayerInfoTypeNewTab
• LayerInfo.AddParameter "filespec", filespec
• ElseIf Check2.Value = 0 Then’ 创建临时表• LayerInfo.Type = 6 'miLayerInfoTypeTemp
• '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 If
9 9
支持日期类型
MapX4.5 支持 Date 类型的字段,还有 Numeric 和 String 类型的字段 . 也就是说,若从外部数据源引入数据到数据集时,日期类型的字段将作为日期类型被引入,而不是以字符串类型引入,或者不引入。日期的格式由控制面板上区域设置中的日期来定义。
10 10
• Dim DateFld As Date• ‘ 定义数据源 • OdbcQueryInfo.ConnectString = "odbc;"
• OdbcQueryInfo.DataSource = “gcgl” ‘oracle 数据库• OdbcQueryInfo.SqlQuery = "select * from team"
• ‘ 定义绑定层 • bindlayer.layername = "Team"
• bindlayer.LayerType = miBindLayerTypeXY
• bindlayer.RefColumn1 = "lng" ' 坐标字段 - 经度• bindlayer.RefColumn2 = “lat” ‘ 坐标字段 - 纬度• ‘ 绑定• Set ds = Formmain.Map1.Datasets.add(miDataSetODBC, OdbcQuer
yInfo, "team", "Team", , bindlayer)
• DateFld = ds.Value(1, ds.Fields.Count)’ 读出第一行日期值• MsgBox DateFld
11 11
紧缩
在 Mapx4.0 下作紧缩时,只能事先创建一个带结构的空表。然后将记录加入到空表中。在 Mapx4.5 下可以使用 LayerInfo 的创建带结构的临时表和新表的功能来完成紧缩的功能。
12 12
• Set lyr = Formmain.Map1.Layers(ToolBars.combo1.Text)
• Set ds = Formmain.Map1.Datasets.add(6, lyr)
• ' 获取被紧缩表的路径及表名• filespec = Formmain.Map1.Layers.Item(ToolBars.combo
1.Text).filespec
• layername = lyr.Name ' 将表临时存放于内存
•
紧缩
13 13
•LayerInfo.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 LayerInfo = Nothing
紧缩
14 14
• ' 从地图窗口删除原表• 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
紧缩
15 15
• ‘ 创建新表• 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
•
紧缩
16 16
•从地图窗口删除临时表• Formmain.Map1.Datasets.Remove (ds.Name)
• Formmain.Map1.Layers.Remove (lyr.Name)
• Formmain.Map1.Refresh
• ' 注意:• Set ds = Nothing
• Set lyr = Nothing
• Set LayerInfo = Nothing
紧缩
17 17
SQL 查询
Layer.search 方法,使用 Where 子句,查询定位所需数据。 Variable 对象和 Variables 集合 : MapX4.5 在表达式中支
持变量替换 . 通过 Variable 对象和 Variables 集合,一个表达式中将包含对任意变量的引用,如字符串类型, feature 对象类型的数据。 Layer.search 将之作为一个可选参数。
18 18
地理运算符的使用
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 object2 : object1 与 object2 相交• object1 PARTIALY_WITHIN object2 : object1 与 object2 相交 .
• object1 WITHIN object2 : object1 的中心点在 object2 中 .
19 19
• Dim f As MapXLib.Feature
• Dim v As New MapXLib.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("us cities").Search("obj within var1 and year(dvar) = 2000 and state <> svar ", v)
• ‘ 高亮显示• Map1.Layers.Item("us cities").Selection.Replace ftrs
20 20
节点编辑编辑条件: 1 、
具有节点的对象,如点 (point) ,线 (line) ,折线(polyline) ,区域 (region) 。节点可选择的对象有点,线,折线,区域。节点可增加的对象有点,线,面。不具有节点的对象有弧段 (Arc) ,圆域(ellipse/circle) ,矩形 (rectangle) ,圆角矩形 (round rect) ,文本 (text) 2 、对象处于被选中且可编辑状态。 3 、 Map 控件处于获得焦点状态。
21 21
选择节点: 选择工具( miSelectTool ) 1. Click 鼠标,选择一个 2. Ctrl+Click: 在选择与不选择间切换;选择多个;或选择范围的首点 3. Shift+Click: 选择范围的尾点,离首点距离最短 4. Shift+Ctrl+click: 选择范围的尾点,离首点距离最长
22 22
编辑模式:由 Map1.FeatureEditMode 来设置图元编辑模式 - 拖动四个句柄,改变图元的形状: Map1.FeatureEditMode = miEditModeFeature ,默认值节点编辑模式: Map1.FeatureEditMode = miEditModeNode 移动或删除重叠的节点模式: Map1.FeatureEditMode = miEditModeNode | miMoveDuplicateNodes | miDeleteDuplicateNodes 增加节点模式: Map1.FeatureEditMode = miEditModeNode | miEditModeAddNode
23 23
FeatureEditMode 的常量设置 miEditModeFeature = 0x1 miEditModeNode = 0x2 miMoveDuplicateNodes = 0x4 miDeleteDuplicateNodes = 0x8 miEditModeAddNode = 0x40
24 24
增加节点 Private Sub Command1_Click()
Map1.Layers.Add "c:\program files\mapinfo\mapx 4.0\maps\usa.tab"
Map1.Layers.Item(1).Editable =True
Map1.Layers.Item(1).ShowNodes = True
Map1.CurrentTool = miSelectTool
Map1.FeatureEditMode = miEditModeNode Or miEditModeAddNode
End Sub
25 25
移动或删除单个图元上的节点,而与之邻接的图元上的节点并不移动或删除。
Formmain.Map1.FeatureEditMode = miEditModeNode
Formmain.Map1.SetFocus ' 获取焦点
26 26
移动相邻图元重叠(重合)的节点
Formmain.Map1.FeatureEditMode = miEditModeNode or miMoveDuplicateNodes
Formmain.Map1.SetFocus ' 获取焦点
27 27
删除相邻图元重叠(重合)的节点
Formmain.Map1.FeatureEditMode = miEditModeFeature or miDeleteDuplicateNodes
Formmain.Map1.SetFocus ' 获取焦点
28 28
新加函数 用于创建专题图,标注, SQL 的表达式· Buffer
· DeformatNumber$
· Format$
· FormatDate$
· FormatNumber$
· StringCompare
· StringCompareIntl
· StringToDate
· ObjectType
29 29
以 buffer 为例 [region 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.Layers.Item("USA").Search _
• ("buffer(obj, 4, 10, ""mi"") contains entire varFirstState", vars)
• MsgBox ftrs.Count
• End Sub
30 30
其他
支持 DAO 3.6
31 31
连接 Oracle8.1.6—VB6.0
使用 LayerInfo 对象加入 oracle8i 数据。 Dim lInfo As Object
• Set lInfo = CreateObject("mapx.layerinfo.4")
• lInfo.Type = 4 Dim ConnectStr As String
• ConnectStr = "SRVR=" + Combo1 + ";UID=" + txtUserName.Text + ";PWD=" + txtPassword.Text
32 32
•lInfo.AddParameter "connectstring", ConnectStr
• lInfo.AddParameter "name", "TempConnect"
• lInfo.AddParameter "toolkit", "ORAINET"
•lInfo.AddParameter "query", "select OBJECT from states where 1=0"
• lInfo.AddParameter "cache", "OFF"
• lInfo.AddParameter "mbrsearch", "ON"
• g_map.Layers.Add lInfo
• Set lInfo = Nothing
连接 Oracle8.1.6
33 33
CMapXLayers layers = m_ctrlMapX.GetLayers(); CMapXLayerInfo layerInfo; layerInfo.CreateDispatch( "MapX.LayerInfo.4"); layerInfo.SetType(4); if(dlg.DoModal()==IDOK) { CString ConnectStr = "SRVR=map.mapinfo.com.cn;UI
D=dzn;PWD=dzn";
连接 Oracle8.1.6——VC6.0
34 34
layerInfo.AddParameter("connectstring",COleVariant(ConnectStr)); layerInfo.AddParameter("name",COleVariant("USA"); layerInfo.AddParameter("toolkit",COleVariant("ORAINET")); layerInfo.AddParameter("query",COleVariant("Select * from China")); layerInfo.AddParameter("cache",COleVariant("ON"); layerInfo.AddParameter("mbrsearch",COleVariant("OFF"); layers.RemoveAll(); layers.Add(layerInfo);
连接 Oracle8.1.6——VC6.0
35 35
缓冲区 Cache ON - 下载数据放在内存和磁盘( *.map,*.id) ,这将有助于提高
选择速度、刷新速度,平移,放大的操作的速度。缺点下载速度较 OFF 慢。平移若超出缓冲区所存的数据范围,将从数据库中读取数据,这将影响缩小及平移的速度。
OFF – 下载速度快,选择速度慢、平移和缩小、放大慢
MBR SearchON - 在从数据库载入数据时要占用一定的时间。
下载 Oracle8i 的各参数含义
36 36
PII 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
不同参数设置时下载时间对比
37 37
增加图元 -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
38 38
谢谢!
top related