操作计算

原贴地址:http://hi.baidu.com/story\_of\_water/blog/item/e47e90b66556eafc30add19f.html

一、加载地图数据  

1、
TAB的数额分为二种多少:地图数据(Layers)、属性数据(Datasets)。关系:不可分割的一个数据集的两部分.
2、
数据加载:GST文件由GeosetManager40.exe程序生成。在先后选用gsT文件:Map1.Geoset=Filepath+FileName
3、
问题:GST文件加载后,只是默许将地图数据加载,属性数据别的索要利用单独的通令举办加载,否则对属性数据的操作全体野鸡。加载:Map1.Datasets.ADD
属性数据集名称
4、 另一种加载格局:使用LayerInfo
对象,那种措施下加载地图数据源的地图集和属性集均可直接运用。示例:
dim LayerInfo as MapXLib.LayerInfo
dim Lyr as Mpxlib.layer

LayerInfo.Type = miLayerInfoTypeTab ‘加载表的系列
LayerInfo.AddParameter “FileSpec”, FilePath + LayerName + “.TAB”
‘加载表的全套径名
LayerInfo.AddParameter “NAME”, LayerName ‘地图集的别名
LayerInfo.AddParameter “AutoCreateDataset”, 1 ‘是或不是加载属性数据集
LayerInfo.AddParameter “datasetname”, LayerName ‘属性数据集别名

MainMap.Layers.Add LayerInfo ‘加载到指定的MapX对象中,立时可一贯接纳

5、 第两种加载数据格局:GST文件+ LayerInfo形式。示例:
选拔三个MapX对象:MainMap、TempMap
TempMap.Geoset=GST文件
MainMap.geoset=””
TempMap.Refresh

For I=1 to TempMap.Layers.Count
FileName=TempMap.Layers.Item(I).Filespec
‘直接引用LayerInfo格局加载地图数据到MainMap
Next

二、创立地图对象

必备:创立地图对象,必须运用FeatureFactory对象
1、 创造一个点目的
点目的有一个坐标点(X,Y),点目的变量是Point类型,点目的的样式(Style)是标志样式。
Dim Pnt AS MapXLib.Point
Dim FeaFac AS MapXLib.FeatureFactory
Dim Lyr AS MapXLib.Layer
Dim Ftr AS MapXLib.Feature
Dim NewStyle AS MapXLib.Style

‘绑定
SET Lyr=MainMap.Layers.Item(LayerName)
SET FeaFac=mainmap.featurefactory
‘设置点对象样式
With NewStyle
.SymbolType = miSymbolTypeBitmap
.SymbolBitmapSize = 24
.SymbolBitmapTransparent = False
.SymbolBitmapName = “YIEL2-32.BMP”
End With
Mainmap.AutoRedraw=False ‘禁止自动刷新
Lyr.Editable=True ‘置当前图层为可写状态
‘创制点对象
pnt.set X1,Y1
‘添加进当前图层
Set Ftr=FeaFac. CreateSymbol (Pnt,Newstyle) ‘创立符号
‘Set Ftr=FeaFac. CreateSymbol (Pnt,MainMap.DefaultStyle)
‘添加
Lyr.AddFeature Ftr
Lyr.Refresh
Mainmap.AutoRedraw=True
Lyr.Editable=False
‘释放
SET Pnt = Nothing
SET FeaFac = Nothing
SET Lyr = Nothing
SET Ftr = Nothing
‘以上代码放在MapX的ToolUsed事件下

独自修改某个图元的体裁:SET Ftr.Style=NewStyle,再用Update 即可
2、 创设一个线矩形
Dim Pnts AS MapXLib.Points

With NewStyle
.LineColor=Rgb(0, 0,255)
End With
‘第四个点
Pnt.Set X1,Y1
Pnts.add Pnt
‘第四个点
Pnt.Set X2,Y1
Pnts.add Pnt
‘第多个点
Pnt.Set X2,Y2
Pnts.add Pnt
‘首个点
Pnt.Set X1,Y2
Pnts.add Pnt
‘第七个点
Pnt.Set X1,Y1
Pnts.add Pnt

‘创设线矩形
SET Ftr=FeaFac.CreateLine(Pnts,NewStyle)
Lyr.AddFeature Ftr
Lyr.Refresh

3、 上边创制对象中留存的题目:并未对其数据数据开展赋值
创设对象的还要创制其数额集合
Dim Pnt AS MapXLib.Point
Dim FeaFac AS MapXLib.FeatureFactory
Dim Lyr AS MapXLib.Layer
Dim Ftr AS MapXLib.Feature
Dim NewStyle AS MapXLib.Style
Dim ds AS MapXLib.Dataset
Dim Flds AS MapXLib.Fields

‘绑定
SET Lyr=MainMap.Layers.Item(LayerName)
SET ds=Lyr.Datasets.Item(1)
Set Flds=ds.Fields
SET FeaFac=mainmap.featurefactory
‘设置点对象样式
With NewStyle
.SymbolType = miSymbolTypeBitmap
.SymbolBitmapSize = 24
.SymbolBitmapTransparent = False
.SymbolBitmapName = “YIEL2-32.BMP”
End With
Mainmap.AutoRedraw=False ‘禁止自动刷新
Lyr.Editable=True ‘置当前图层为可写状态
‘创制点对象
pnt.set X1,Y1
‘创立图形
Set Ftr=FeaFac. CreateSymbol (Pnt,Newstyle) ‘成立符号
‘Set Ftr=FeaFac. CreateSymbol (Pnt,MainMap.DefaultStyle)
‘设置属性
For I=1 to Flds.Count
Lyr.KeyFields=Flds.Item(i).Name
Ftr.Keyvalue=valueStr(I) ‘那里并从未对字段类型举行判断
Next
‘其它一种方法:使用Rowvalues和Rowvalue对象
‘添加
Lyr.AddFeature Ftr
Lyr.Refresh
Mainmap.AutoRedraw=True
Lyr.Editable=False
‘释放
SET Pnt = Nothing
SET FeaFac = Nothing
SET Lyr = Nothing
SET Ftr = Nothing

SET ds = Nothing
SET Flds = Nothing
4、 创建表
(1) 临时表:
A、用MainMap.Layers.CreateLayer方法成立临时表。但这几个临时表唯有一个字段:GeoName(
Char 24)。程序运行进程中该表存放地点为系统临时文件夹下
B、使用LayerInfo对象成立临时表,可以指定字段。示例:

Dim Lyr As MapXLib.Layer
Dim LayerInfo As New MapXLib.LayerInfo
Dim Flds As New MapXLib.Fields

‘字段定义
Flds.AddStringField “ID”, 12
Flds.AddStringField “Name”, 50
Flds.AddNumericField “Deptch”, 12, 2
Flds.AddIntegerField “Length”


LayerInfo.Type = miLayerInfoTypeTemp
LayerInfo.AddParameter “FileSpec”, FileName
LayerInfo.AddParameter “NAME”, LayerName
LayerInfo.AddParameter “Fields”, Flds

Set Lyr = MainMap.Layers.Add(LayerInfo, 1)

Set Lyr = Nothing
Set LayerInfo = Nothing

(2) 创造永久表
Dim Lyr As MapXLib.Layer
Dim LayerInfo As New MapXLib.LayerInfo
Dim Flds As New MapXLib.Fields

Flds.AddStringField “ID”, 12
Flds.AddStringField “Name”, 50
Flds.AddNumericField “Deptch”, 12, 2
Flds.AddIntegerField “Length”


LayerInfo.Type = miLayerInfoTypeNewTable
LayerInfo.AddParameter “FileSpec”, FilePath + “” + FileName
LayerInfo.AddParameter “NAME”, LayerName
LayerInfo.AddParameter “Fields”, Flds

Set Lyr = MainMap.Layers.Add(LayerInfo, 1)

Set Lyr = Nothing
Set LayerInfo = Nothing

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 :与福克斯(Fox)Pro中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、 空间查找
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
瞩目:点查找时,一般处境下结果集在一个上述的图层都设有。所以取值时应各自领取

2
园查找:在暂时图层上画一个不保留的圆,然后搜索被那么些圆所包括的享有图层的图元对象。
Dim Pnt AS MapXlib.Point
Dim TempCir AS MapXlib.Feature
Dim FeaFac AS MapXLIB.featurefactory

Pnt.Set X,Y
Set tempcir=FeaFac.CreateCircularRegion(miCircleTypeMap ,Pnt,1,
MainMap.MapUnit,,)

‘miSearchTypeCentroidWithin :中央点包括
‘miSearchTypePartiallyWithin :部分含有
‘miSearchTypeEntirelyWithin :全部暗含

Set Ftrs=Lyr.SearchWithinFeature (TempCir,
miSearchTypePartiallyWithin)

For I=1 to Ftrs.Count
‘执行语句
Next

SET Pnt =Nothing
set TempCir =Nothing
set FeaFac =Nothing

3、 相交
判定八个图元是还是不是有交点以及交点坐标音讯。
(1)判断是或不是相交
IF Lyr.IntersectionTest( ftr1, ftr2, miIntersectFeature ) THEN
‘交点
END IF

(2)获取相交点坐标音信
‘交点
Dim Ftr AS MapXlib.Feature

SET Ftr=MainMap.FeatureFactory. IntersectFeatures(Ftr1,Ftr2)
‘交点坐标音讯
For J=1 to Ftr.parts.item(1).count
X1= Ftr.parts.item(1).Item(J).X
Y1= Ftr.parts.item(1).Item(J).Y
Next

4、 测距
行使Map对象的Distance方法。怎么着测量任意多边形的周长?
使用累加的主意,还要选用图元节点集合。
Distancevalue=0
‘首个点
Pnt.Set Ftr.Parts.Item(1).Item(1).X, Ftr.Parts.Item(1).Item(1).Y
For j=2 TO Ftr.Parts.Item(1).Count
‘累加
X1= Ftr.Parts.Item(1).Item(j-1).X
Y1= Ftr.Parts.Item(1).Item(j-1).Y
X2= Ftr.Parts.Item(1).Item(j).X
Y2= Ftr.Parts.Item(1).Item(j).Y
Distancevalue = Distancevalue +MainMap.Distance(X1, Y1, X2, Y2)
Next
‘多边形周长
Msgbox Distancevalue+” ”+MainMap.MapUnit

四、对象编排

(1)、对性能的编纂
重中之重运用菲尔德(Field)s对象。示例:
Dim Flds AS MapXlIB.Fields

‘修改当前图层的每一个字段
For J=1 to Flds.Count
Lyr.Key菲尔德= Flds.Item(j).Name ‘使如今图层指向J字段
‘更新当前图元的J字段值
Ftr.Keyvalue=NewvalueStr(J)
Ftr.Update True ‘并未写入硬盘
Next
Lyr.Refresh ‘保存修改到硬盘

(2)、移动地图
第一创立一个平移工具句柄
MainMap.CreateCustomTool MoveFeature, miToolTypeLine, miPanCursor
在Map对象的ToolUsed事件的ToolNum参数为眼前所激活的工具
捕捉MoveFeature工具句柄
‘传过来的参数:X1,Y1,X2,Y2
Select case ToolNum
……..
Case MoveFeature
Dim Lyr AS MapXlib.Layer
Dim Ftr AS MapXlib.Feature
Dim Ftrs AS MapXlib.Features

Dim Xe,Ye AS Double ‘坐标偏移量

Xe=X2-X1
Ye=Y2-Y1

Set Lyr=Mainmap.Layers.Item(LayerName)
Set Ftrs=Lyr.Selection.Clone ‘将眼前图层中选定的会聚复制到Ftrs变量中
MainMap.AutoRedraw=False
Lyr.Editable=True
For J=1 to Ftrs.Count
Set Ftr=Ftrs.Item(J)
Ftr.Offset Xe,Ye
Ftr.Update True
Next
Lyr.Refresh
Lyr.Editable=False
MainMap.AutoRedraw=True

SET lyr=Nothing
SET Ftr=Nothing
End Select
(3)、样式更新
Dim NewStyle AS MapXLib.Style

‘初步赋值
Set Lyr=MainMap.Layers.Item(LayerName)
Set Ftrs=Lyr.AllFeatures
Set NewStyle=Ftrs.Item(1).Style
‘设置样式
With NewStyle
.SymbolType = miSymbolTypeBitmap
.SymbolBitmapSize = 24
.SymbolBitmapTransparent = False
.SymbolBitmapName = “YIEL2-32.BMP”
End With
‘更新
MainMap.AutoRedraw=False
Lyr.Editable=True
SET Ftr.Style=NewStyle
Ftr.Update True
Lyr.Refresh
Lyr.Editable=False
MainMap.AutoRedraw=True

五、输出

1、属性的出口 输出到EXCEL表:
For I=1 to Flds.Count
Lyr.KeyFields=Flds.Item(i).Name
Excel(1,I).Cell=Ftr.Keyvalue
Next
2、复制、粘贴
Global CopyFtrs AS MapXlib.Features

Set lyr=mainmap.Layers.item(LayerName)
Set Ftrs=Lyr.Selection.Clone ‘复制选中集合
‘复制
For I=1 to Ftrs.Count
CopyFtrs.add Ftrs.Item(I)
Next

‘粘贴(图形)
Set lyr_1=mainmap.Layers.item(LayerName_1)
Mainmap.AutoRedraw=False
Lyr_1.Editabled=True
For J=1 to CopyFtrs.Count
Lyr_1.AddFeature CopyFtrs.Item(J)
Next
Lyr_1.Refresh
Mainmap.AutoRedraw=True
Lyr_1.Editabled=False

88bifa必发娱乐,3、地图的打印
Dim iScaleMode As Integer

iScaleMode = MainMap.Container.ScaleMode
MainMap.Container.ScaleMode = 6

On Error GoTo PrinterError

Printer.Print ” “
Printer.CurrentX = 0
Printer.CurrentY = 0
MainMap.PrintMap Printer.hDC, 0, 0, MainMap.Width * 100, MainMap.Height
* 100
Printer.NewPage
Printer.EndDoc
MainMap.Container.ScaleMode = iScaleMode
Exit Sub

PrinterError:
If Err.Number = 482 Then
On Error Resume Next
CommonDialog1.Flags = &H40
CommonDialog1.ShowPrinter
Else
MsgBox ” 打印机存在错误,请改进后重试。错误号:” + (Str(Err.Number)), ,
“败北”
End If

4、另存为图片文件
MainMap.ExportMap(App.Path+”Images”, miFormatJPEG) ‘输出当前地图窗口
参数设置:MainMap.ExportSelection=True
‘将当选部分以差别于其余未入选地图局地款式出口

六、专题图

6种专题图:除独立值专题图绑定的字段类型可以是字符的以外,都不能不是数字类型。与任何数据源绑定时,使用ODBC
调用ThemeDlg对话框可以让用户自己定义专题图。示例:
For Each ftr In lyr.Selection

′ The children of the layer are the individual

′ features

Set ftrNode = QueryTree.Nodes.Add(lyrNode, tvwChild,lyr.Name _

& ftr.Name & Str$(ftr.FeatureID), ftr.Name)

For Each fld In ds.Fields

′ Each feature has data attached to it; add

′ this data as a child of the feature

lyr.KeyField = fld.Name

QueryTree.Nodes.Add ftrNode, tvwChild, , lyr.KeyField _

& “: ” & ftr.Keyvalue

Next

Next

七、在MapX下紧缩表

在Professional里面,紧缩表用 Pack Table
语句落成。而在MapX中则须求运用临时图层,并用复制技术来达成。示例:
‘紧缩当前Map对象中的所有图层
Dim LayerInfo As New MapXLib.LayerInfo
Dim Lyr As MapXLib.Layer
Dim LyrTemp As MapXLib.Layer
Dim Flds As MapXLib.Fields
Dim Ds As MapXLib.Dataset

Dim I As Integer
Dim LayerName, FilePath As String

On Error Resume Next

For I = MainMap.Layers.Count To 1 Step -1
′复制源表数据到临时表
Set Lyr = MainMap.Layers.Item(I)
Set Ds = Lyr.Datasets.Item(1)
Set Flds = Ds.Fields

LayerName = Lyr.Name

LayerInfo.Type = miLayerInfoTypeTemp
LayerInfo.AddParameter “FileSpec”, LayerName
LayerInfo.AddParameter “NAME”, LayerName
LayerInfo.AddParameter “Features”, Lyr.AllFeatures‘复制所有有效图元
LayerInfo.AddParameter “菲尔德(Field)s”, Flds ’复制字段列表

LayerInfo.AddParameter “AutoCreateDataset”, 1
LayerInfo.AddParameter “datasetname”, LayerName
Set LyrTemp = MapTemp.Layers.Add(LayerInfo, 1) ‘复制到此外Map对象

′删除源表
Set Lyr = Nothing
FilePath = MainMap.Layers.Item(I).Filespec
LayerName = Mid(FilePath, InStr(1, FilePath, “Maps” + 6, Len(FilePath) –
InStr(1, FilePath, “Maps”)
FilePath = Mid(FilePath, 1, InStr(1, FilePath, “Maps” + 5)
LayerName = Mid(LayerName, 1, Len(LayerName) – 4)

MainMap.Layers.Remove (I)
MainMap.Refresh

Kill FilePath + LayerName + “.TAB”

′复制临时表数据到源表
Set LyrTemp = MapTemp.Layers.Item(LayerName)

LayerInfo.Type = miLayerInfoTypeNewTable
LayerInfo.AddParameter “FileSpec”, FilePath + LayerName + “.TAB”
LayerInfo.AddParameter “NAME”, LayerName
LayerInfo.AddParameter “Features”, LyrTemp.AllFeatures
LayerInfo.AddParameter “Fields”, Flds

LayerInfo.AddParameter “AutoCreateDataset”, 1
LayerInfo.AddParameter “datasetname”, LayerName
Set Lyr = MainMap.Layers.Add(LayerInfo, 1)

′删除临时表
MapTemp.Layers.Remove (MapTemp.Layers.Count)
MapTemp.Refresh
Next

Set Lyr = Nothing
Set Ds = Nothing
Set Flds = Nothing
Set LayerInfo = Nothing

八、怎么样和大型数据库关联

系统是混合结构:对地图的走访使用的是文件访问格局,对属性数据的访问使用的是巨型数据库形式利用ID关联:在TAB表和数据库中有ID字段,多少个字段作为唯一值关联字段。(一对一的关系)。示例:

Lyr.KeyField=”ID”
Set Ftr=Ftrs.Item(J)

‘SQL语句查找对应的习性音信
SampleAdo.RecordSource =”Select a.id as id,b.name as name from Table1 a,
Table2 b WHERE (a.id=b.id) AND ( a.id LIKE ‘%“ +Ftr.Keyvalue+“%’)”

九、空间数据库

2
空间数据库中的索引技术用的是R_Tree技术,而不是原本一般意义上的B_Tree索引技术。
2 空间数据在Spatial中以地理特性音讯格局存放。
2 在Oracle的版本中有如下需求注意事项:
a) Oracle
8.1.5以此本子中,首次引入Spatial组件。使用上足够糟糕:图形的体裁分外纯净,且为黑白的而非彩色,上载地图数据时,数据丢失格外沉痛。存取数据时极度慢。在Spatial中机动创造prinx字段作为地图索引主关键字段
b) Oracle
8.1.6版本:图形为花团锦簇的,伸张了体制的帮忙,但不扶助同一图层下的多样式(主要引导对象)。创制地图数据时,地图的坐标常暴发偏移。属性数据更新
时,需求四回刷新才能完好提交;地图数据数据交到时,其坐标发生偏移:向原点偏移,需求认为地独自将其移动到其开首创制地点。存取速度上照旧相比慢,离实
用尚有一定距离。在Spatial中活动创立mi_prinx字段作为地图索引主关键字段
2 Oracle
8.1.7版本:扶助多样式,数据上载丢失万分小(唯有文本对象存在丢失的记录)。在地图数据存取不是很大的时候,速度上得以被用户接受。
2 怎样将MapInfo 的TAB表内容上传到Oracle 中?
a) 免费工具:easyloader6.7(Oracle
8.1.7),下载地址88bifa必发娱乐 1http://www.mapinfo.com.cn
/;
b) 怎么样上载?注意:上载以前对Tab表举办减弱。
c) 在程序中怎样利用空间数据库中的地图数据?
d)
添加地形图时,必须指定字段mi_prinx的强烈值,且该值不可能为表中已存在的值。写入地图数据时,应将其全部NOT
NULL 字段值赋给,否则保存战败。
e) 示例:Tab表+空间数据表 的数据分布方式。

十、GIS应用的分发

1、
制作你协调的系统的安装盘:可执行文件、须求系统文件、运行库文件、其余数据文件。
2、 单独的MapX安装盘:MapInfo MapX
Runtime安装程序,实际上是MapX控件安装程序(存在于MapX sdk包)
3、
注册:安装到位之后,运行GeosetManager40.exe程序获取硬件ID号,然后通过EMAIL的形式将该ID号发送到MapX产品供应商申请
正式的许可文件(mapx40.lic)。获得后覆盖原mapx40.lic文件即可。注意:硬盘格式化后该ID号失效。

十一、构造一个GIS应用系统

须求:鹰眼效率、拓扑关系、不一样图形分歧颜色显示、数据绑定、系统特性。

布局解析:做按照TAB文件的GIS系统
1、 鹰眼作用
(1) 建立八个Form对象,将多少个Map对象分别位居那八个窗口对象中。
(2) 一个小窗口作为鹰眼窗口,大
窗口作为主地图窗口。鹰眼窗口中的Map对象的视野应很大,而主地图窗口的视野依据须求设置。
(3)
五个窗口中加载不一致的GST文件。须要的是主地图窗口的突显范围应为鹰眼窗口中某个矩形所包涵的地形图对象范围。
(4) A、在鹰眼窗口中画一个矩形(Rect为矩形对象),B、主地图窗口进行 Set
MainMap.Bounds = Rect
(5) 须求注意的是:鹰眼窗口与主地图窗口两者间的坐标投影系统应完全一致。

2、 拓扑关系
实质上就是图元与图元的长空关系。说历史:原来建立拓扑关系接纳的是性质关联。
点查询、圆查询、矩形查询、多边形查询等这个是属于简单空间关系的对照。而对拓扑关系的查询多数境况下行使Parts对象来解决。
Ftr1与另一个Ftr2的空间关系:先找到Ftr1的其止节点,然后以那么些节点为主导画一个非凡小的圆,在这一个圆范围内的某部设备可认为与该Ftr1相连。
判断某个图元在指定图层上的交接对象集合:
Set Ftrs=Lyr.SearchWithinFeature (SearchFtr,
miSearchTypePartiallyWithin)

3、 分裂图形差别颜色突显
(1)更新样式
再组成临时图层就足以很好解决(使用图层刷新)。而且刷新时不会滋生上上下下Map对象的刷新(屏幕抖动)
(2)专题图 存在创新属性值后不可以实时刷新专题图的问题。
4、 数据绑定
对未绑定的性能集合使用 MainMap.Datasets.ADD
地图集合和属性集合为一个多少集合的不可分割的多个部分
5、 系统性能
进程是还是不是为用户所收受、系统是不是平安(界面要求)、修改数据数据的时候是不是留存数量一致性维护问题、造价是还是不是合理。
(1)速度:使用数据分布可以较好地解决:地图数据:地形图数据以文件方式存放,业务地图数据存放在半空数据库中;属性数据:全部存放在巨型数据库中。

(2)系统是或不是稳定(界面需要):A、字段全体用英文,B、地图拓扑关系在进入系统之前进行必要的证实,C、文件地图数据中字段数减少到微小,可使
访问属性频率大大收缩,可使得保险其他用户访问时不会大方冒出访问拒绝的现象;D、数据交由时尽可能接纳事务机制:
事务开始:
Lyr.BeginAccess,事务甘休:Lyr.EndAccess;E、数据修改提交时尽可能选择批量交到。至于界面必要,应重视满意从地图对象获
取相关的渴求。
(3)数据一致维护:遵从图元优先的标准。图形对象必须首先存在,其余相关信息在此基础上建立。注意:
2 修改时应先修改地图对象,后提交属性音信
2 删除时应先删除其他新闻,最终删除图形音讯
(4)造价
这里关键指平台花费。A、现有数据格式,B、功效需要:空间分析是或不是复杂、地图图层是还是不是分散、系统中地图输出的身分需要、系统中计算分析复杂程度是或不是较麻烦、直接的平台利用用户数(并发数)。

 

相关文章