mapx4.5 新功能培训教程

38
MapX4.5 新新新新新新新

Upload: bill

Post on 30-Jan-2016

198 views

Category:

Documents


1 download

DESCRIPTION

MapX4.5 新功能培训教程. 创建新表. 数据类型 字符串 miTypeString = 0 数字 miTypeNumeric = 1 日期 miTypeDate = 2 整型 miTypeInt = 3 短整型 miTypeSmallInt = 4 浮点型 miTypeFloat = 5 逻辑类型 miTypeLogical = 6. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: MapX4.5 新功能培训教程

1 1

MapX4.5 新功能培训教程

Page 2: MapX4.5 新功能培训教程

2 2

创建新表

数据类型 字符串 miTypeString = 0 数字 miTypeNumeric = 1日期 miTypeDate = 2整型 miTypeInt = 3短整型 miTypeSmallInt = 4浮点型 miTypeFloat = 5逻辑类型 miTypeLogical = 6

Page 3: MapX4.5 新功能培训教程

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 - 删除所有字段

Page 4: MapX4.5 新功能培训教程

4 4

创建新表 - LayerInfo 对象 LayerInfo.type 常数 miLayerInfoTypeTemp = 6 - 临时表 miLayerInfoTypeNewTable = 7 - 磁盘表

Page 5: MapX4.5 新功能培训教程

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 (存在于内存)。

Page 6: MapX4.5 新功能培训教程

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 .

Page 7: MapX4.5 新功能培训教程

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

Page 8: MapX4.5 新功能培训教程

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

Page 9: MapX4.5 新功能培训教程

9 9

支持日期类型

MapX4.5 支持 Date 类型的字段,还有 Numeric 和 String 类型的字段 . 也就是说,若从外部数据源引入数据到数据集时,日期类型的字段将作为日期类型被引入,而不是以字符串类型引入,或者不引入。日期的格式由控制面板上区域设置中的日期来定义。

Page 10: MapX4.5 新功能培训教程

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

Page 11: MapX4.5 新功能培训教程

11 11

紧缩

在 Mapx4.0 下作紧缩时,只能事先创建一个带结构的空表。然后将记录加入到空表中。在 Mapx4.5 下可以使用 LayerInfo 的创建带结构的临时表和新表的功能来完成紧缩的功能。

Page 12: MapX4.5 新功能培训教程

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 ' 将表临时存放于内存

紧缩

Page 13: MapX4.5 新功能培训教程

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

紧缩

Page 14: MapX4.5 新功能培训教程

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

紧缩

Page 15: MapX4.5 新功能培训教程

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

紧缩

Page 16: MapX4.5 新功能培训教程

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

紧缩

Page 17: MapX4.5 新功能培训教程

17 17

SQL 查询

Layer.search 方法,使用 Where 子句,查询定位所需数据。 Variable 对象和 Variables 集合 : MapX4.5 在表达式中支

持变量替换 . 通过 Variable 对象和 Variables 集合,一个表达式中将包含对任意变量的引用,如字符串类型, feature 对象类型的数据。 Layer.search 将之作为一个可选参数。

Page 18: MapX4.5 新功能培训教程

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 中 .

Page 19: MapX4.5 新功能培训教程

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

Page 20: MapX4.5 新功能培训教程

20 20

节点编辑编辑条件: 1 、

具有节点的对象,如点 (point) ,线 (line) ,折线(polyline) ,区域 (region) 。节点可选择的对象有点,线,折线,区域。节点可增加的对象有点,线,面。不具有节点的对象有弧段 (Arc) ,圆域(ellipse/circle) ,矩形 (rectangle) ,圆角矩形 (round rect) ,文本 (text) 2 、对象处于被选中且可编辑状态。 3 、 Map 控件处于获得焦点状态。

Page 21: MapX4.5 新功能培训教程

21 21

选择节点: 选择工具( miSelectTool ) 1. Click 鼠标,选择一个 2. Ctrl+Click: 在选择与不选择间切换;选择多个;或选择范围的首点 3. Shift+Click: 选择范围的尾点,离首点距离最短 4. Shift+Ctrl+click: 选择范围的尾点,离首点距离最长

Page 22: MapX4.5 新功能培训教程

22 22

编辑模式:由 Map1.FeatureEditMode 来设置图元编辑模式 - 拖动四个句柄,改变图元的形状: Map1.FeatureEditMode = miEditModeFeature ,默认值节点编辑模式: Map1.FeatureEditMode = miEditModeNode 移动或删除重叠的节点模式: Map1.FeatureEditMode = miEditModeNode | miMoveDuplicateNodes | miDeleteDuplicateNodes 增加节点模式: Map1.FeatureEditMode = miEditModeNode | miEditModeAddNode

Page 23: MapX4.5 新功能培训教程

23 23

FeatureEditMode 的常量设置 miEditModeFeature = 0x1 miEditModeNode = 0x2 miMoveDuplicateNodes = 0x4 miDeleteDuplicateNodes = 0x8 miEditModeAddNode = 0x40

Page 24: MapX4.5 新功能培训教程

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

Page 25: MapX4.5 新功能培训教程

25 25

移动或删除单个图元上的节点,而与之邻接的图元上的节点并不移动或删除。

Formmain.Map1.FeatureEditMode = miEditModeNode

Formmain.Map1.SetFocus ' 获取焦点

Page 26: MapX4.5 新功能培训教程

26 26

移动相邻图元重叠(重合)的节点

Formmain.Map1.FeatureEditMode = miEditModeNode or miMoveDuplicateNodes

Formmain.Map1.SetFocus ' 获取焦点

Page 27: MapX4.5 新功能培训教程

27 27

删除相邻图元重叠(重合)的节点

Formmain.Map1.FeatureEditMode = miEditModeFeature or miDeleteDuplicateNodes

Formmain.Map1.SetFocus ' 获取焦点

Page 28: MapX4.5 新功能培训教程

28 28

新加函数 用于创建专题图,标注, SQL 的表达式· Buffer

· DeformatNumber$

· Format$

· FormatDate$

· FormatNumber$

· StringCompare

· StringCompareIntl

· StringToDate

· ObjectType

Page 29: MapX4.5 新功能培训教程

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

Page 30: MapX4.5 新功能培训教程

30 30

其他

支持 DAO 3.6

Page 31: MapX4.5 新功能培训教程

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

Page 32: MapX4.5 新功能培训教程

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

Page 33: MapX4.5 新功能培训教程

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

Page 34: MapX4.5 新功能培训教程

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

Page 35: MapX4.5 新功能培训教程

35 35

缓冲区 Cache ON - 下载数据放在内存和磁盘( *.map,*.id) ,这将有助于提高

选择速度、刷新速度,平移,放大的操作的速度。缺点下载速度较 OFF 慢。平移若超出缓冲区所存的数据范围,将从数据库中读取数据,这将影响缩小及平移的速度。

OFF – 下载速度快,选择速度慢、平移和缩小、放大慢

MBR SearchON - 在从数据库载入数据时要占用一定的时间。

下载 Oracle8i 的各参数含义

Page 36: MapX4.5 新功能培训教程

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

不同参数设置时下载时间对比

Page 37: MapX4.5 新功能培训教程

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

Page 38: MapX4.5 新功能培训教程

38 38

谢谢!