葡萄娱乐场操作计算,多个mapx技巧汇总

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

引用地址:http://blog.csdn.net/chenshizero/archive/2008/11/18/3331287.aspx

① 、加载地图数据  

一 、在mapx中找寻对象的点子
三种办法:
1.使用Find对象的Search方法。
在mapx3.5中只可以作到完全协作查找,在MapX4.0中SearchEx方法则可以找到多少个万分的笔录,其结果由FindResult.Matches得到。详细请参见

壹 、TAB的数据分为两种多少:地图数据(Layers)、属性数据(Datasets)。关系:不可分割的3个数据集的两部分.
贰 、数据加载:GST文件由GeosetManager40.exe程序生成。在程序行使gsT文件:Map1.Geoset=Filepath+FileName
叁 、难点:GST文件加载后,只是默许将地图数据加载,属性数据其它索要接纳单独的指令进行加载,不然对属性数据的操作全体野鸡。加载:Map1.Datasets.ADD
属性数据集名称
④ 、 另一种加载格局:使用LayerInfo
对象,这种方法下加载地图数据源的地图集和性质集均可直接运用。示例:
dim LayerInfo as MapXLib.LayerInfo
dim Lyr as Mpxlib.layer

关于Find.SearchEx 方法的文书档案以及示例。
2. 行使Layer 对象的OBJECT.Search
(strWhere)方法。其参数为SQL查询的WHERE子句。例如:
Set ftrs = lyr.Search(“Character_Name = “”北京市”””) ;
Set ftrs = lyrUSA.Search(“TOTPOP > 1000000”)
注意:
1。字符串外加多少个双引号。
2。首先将图层插足数据集Datasets 才能动用查询。
模糊查询最利于的主意是应用第二种办法例如
Set ftrs = lyr.Search(“Character_Name like “”%市”””) ;

LayerInfo.Type = miLayerInfoTypeTab ‘加载表的品类
LayerInfo.AddParameter “FileSpec”, FilePath + LayerName + “.TAB”
‘加载表的凡事径名
LayerInfo.AddParameter “NAME”, LayerName ‘地图集的别称
LayerInfo.AddParameter “AutoCreateDataset”, 1 ‘是或不是加载属性数据集
LayerInfo.AddParameter “datasetname”, LayerName ‘属性数据集小名

贰 、在mapx中如何紧缩表
在Mapx4.51下能够采纳LayerInfo
的开创带结构的最近表和新表的效应来形成紧缩:
Set lyr = Formmain.Map1.Layers(ToolBars.combo1.Text)
Set ds = Formmain.Map1.Datasets.add(6, lyr)
‘获取被紧缩表的不二法门及表名
filespec = Formmain.Map1.Layers.Item(ToolBars.combo1.Text).filespec
layername = lyr.Name ‘将表权且存放于内部存款和储蓄器
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
‘从地图窗口删除原表
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

MainMap.Layers.Add LayerInfo ‘加载到内定的MapX对象中,立刻可一向采取

③ 、在mapx中如何行使自定义栅格符号
采取自定义符号首先需求设定style.SymbolType
为miSymbolTypeBitmap,然后钦定SymbolBitmapName 为栅格图像名即可。
下边包车型大巴代码演示了什么在delphi中使用自定义的栅格符号
第1调用自定义务工作具画点
procedure TForm1.new1Click(Sender: TObject);
begin
map1.ControlInterface.CurrentTool :=111;
end;
在tooluses事件中如下:
procedure TForm1.Map1ToolUsed(Sender: TObject; ToolNum: Smallint; X1,
Y1,
X2, Y2, Distance: Double; Shift, Ctrl: WordBool;
var EnableDefault: WordBool);
var
ssymbol :cmapxstyle;
p: CMapXPoint;
f: cmapxfeature;
begin
ssymbol:=costyle.create;
ssymbol.SymbolType :=1;
ssymbol.SymbolBitmapSize:=25;
{请留意将test.bmp文件考到mapx
“共有文件路径”+“”CUSTSYMB”路径下,例如C:”Program Files”Common
Files”MapInfo Shared”MapX

五 、 第二种加载数据形式:GST文件+ LayerInfo方式。示例:
动用七个MapX对象:MainMap、TempMap
TempMap.Geoset=GST文件
MainMap.geoset=””
TempMap.Refresh

Common 是 MapX 共有文件的缺省设置路径}
ssymbol.SymbolBitmapName:=’test.BMP’;
p := CoPoint.Create;
f :=cofeature.Create ;
p.Set_(x1,y1);
if toolnum=111 then begin
f:=map1.ControlInterface.FeatureFactory.CreateSymbol(p,ssymbol);
map1.ControlInterface.Layers.Item(1).AddFeature(f,EmptyParam);
end;

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

④ 、在mapx中什么行使自定义鼠标
在mapx4.0,及以上版本中允许用户自定义鼠标。程序如下:
Map1.MousePointer = miCustomCursor
Map1.MouseIcon = “c:”windows”cursors”globe.ani”
mapx 中还对鼠标滚动轮提供补助,属性如下
Map.MouseWheelSupport=miMousewheelNoAutoScroll

二 、成立地图对象

五 、mapx 打字与印刷地图时的参数怎么着设置
在mapx 的 printmap方法:PrintMap (hDC x, y, w,
h)之中,w,h,x,y的单位为himetric,1
himetric=0.01分米。所以,打字与印刷地图时供给将w

必备:创立地图对象,必须选择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

,h 乘100换算为分米。
在vb 中例子:
Private Sub Command4_Click()
On Error GoTo ErrorHandler ` Set up error handler.
‘ coords must be in himetric
‘ print same size as on screen, in upper left of page
ScaleMode = 6 `set mode to mm
‘ there is no Printer.StartDoc method, it seems it is done
‘ implicitly when you use one of the printer.print methods
‘ so we need to print something before we print our map
‘ to start the page
Printer.CurrentX = 0
Printer.CurrentY = 0
Printer.Print ” “
Map1.PrintMap Printer.hDC, 0, 0, Map1.Width * 100, _
Map1.Height * 100
Printer.NewPage ` Send new page.
Printer.EndDoc ` Printing is finished.
Exit Sub
在vc中例子
// Map.PaperUnit Property
// Map.PrintMap Method
void CSampleProjectView::OnPrintMap(CDC* pDC,CPrintInfo* pInfo) {
try {
// get paper width in mm and convert to HIMETRIC (100th of a mm)
m_Map.SetPaperUnit(miUnitMillimeter);
double pw = m_Map.GetMapPaperWidth() * 100;
double ph = m_Map.GetMapPaperHeight()* 100;
m_Map.PrintMap((long)pDC->m_hDC,
pInfo->m_rectDraw.left,pInfo->m_rectDraw.
top,(long)pw,(long)ph);
} catch (COleDispatchException *e) {
e->ReportError();
e->Delete();
} catch (COleException *e) {
e->ReportError();
e->Delete();
}
}

‘绑定
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.艾德itable=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事件下

6、mapx中创建测距工具示例
先是创造测距工具
global const calculatedistance=1
Private Sub Form_Load()
map1.CreateCustomTool(calcilatedistance,miToolTypepoly ,microsscursor)
End Sub
Private Sub Distances_Click()
map1.currenttool=calculatetool
End Sub
下一场在mapx的PolyToolUsed事件中, 用Distance( x1,y1,x2,y2
)总结距离,由气象条中或label显示。
Private Sub Map1_PolyToolUsed(ByVal ToolNum As Integer, ByVal Flags As
Long, ByVal points As Object, ByVal bShift As Boolean,

独立修改有个别图元的体制:SET Ftr.Style=NewStyle,再用Update 即可
二 、 创立二个线矩形
Dim Pnts AS MapXLib.Points

ByVal bCtrl As Boolean, EnableDefault As Boolean)

With NewStyle
.LineColor=Rgb(0, 0,255)
End With
‘第1个点
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

Dim DisSum As Double
Dim Dis As Double
Dim n As Integer
Dim pts As New MapXLib.points
Dim x1 As Double, y1 As Double, x2 As Double, y2 As Double

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

Set pts = points

叁 、 下边成立对象中存在的标题:并未对其数额数据开展赋值
创造对象的还要创设其数额集合
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

DisSum = 0
MDIForm1.StatusBar1.Panels.Item(3).Text= Format(Str(DisSum),
“#,##0.000000”)
Select Case Flags
Case miPolyToolBegin
Case miPolyToolInProgress
If ToolNum = CalculateDistance Then
For i = 1 To pts.Count – 1
x1 = pts.Item(i).X
y1 = pts.Item(i).Y
x2 = pts.Item(i + 1).X
y3 = pts.Item(i + 1).Y
Dis = Map1.Distance(x1, y1, x2, y2)
DisSum = DisSum + Dis
MDIForm1.StatusBar1.Panels.Item(3).Text = Format(Str(DisSum),
“#,##0.000000”)
Next i
End If
Case miPolyToolEnd
End Select

‘绑定
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.艾德itable=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

7、在mapx中什么落到实处自动滚屏
mapx 帮助 MouseMove 事件,能够在此事件中实现全自动滚屏,示例如下:
Private Sub Map1_MouseMove(Button As Integer, Shift As Integer, X As
Single, Y As Single)
If map_move = True Then
If X > Map1.MapScreenWidth – 10 Then
Map1.CenterX = Map1.CenterX + 0.05
Map1.Refresh
Else
If X < 10 Then
Map1.CenterX = Map1.CenterX – 0.05
Map1.Refresh
Else
If Y > Map1.MapScreenHeight – 10 Then
Map1.CenterY = Map1.CenterY – 0.05
Map1.Refresh
Else
If Y < 10 Then
Map1.CenterY = Map1.CenterY + 0.05
Map1.Refresh
End If
End If
End If
End If
End If
End Sub

SET ds = Nothing
SET Flds = Nothing
4、 创建表
(1) 临时表:
A、用MainMap.Layers.CreateLayer方法成立临时表。但以此方今表唯有三个字段:GeoName(
Char 24)。程序运营进度中该表存放地点为系统目前文件夹下
B、使用LayerInfo对象成立如今表,能够钦赐字段。示例:

⑧ 、在mapx中什么贯彻图元的拖拽
以下方法达成将当选图元移到点击处。
Private Sub Map1_MouseDown(Button As Integer, Shift As Integer, X As
Single, Y As Single)
Dim ftr As Feature
Dim lyr As Layer
Dim MapX As Double
Dim MapY As Double
‘convert where the mouse is clicked to the map’s current coordinate
system
Map1.ConvertCoord X, Y, MapX, MapY, miScreenToMap
‘iterate through each selected feature in each layer
For Each lyr In Map1.Layers
For Each ftr In lyr.Selection

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

‘change the offset of the feature
ftr.Offset MapX – ftr.CenterX, MapY – ftr.CenterY
‘update the feature to make the change permanent
ftr.Update
Next
Next
End SUb

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

本文来源CSDN博客,转发请标明出处:http://blog.csdn.net/chenshizero/archive/2008/11/18/3331287.aspx


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

⑤ 、 创造工具句柄
系统已经定义务工作具句柄都以平头(包含16进制)常数存在,句柄号大于1000和小于1第22中学坚都为系统利用。
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 :与FoxPro中Locate定位命令想接近。
Search:扶助SQL语句。写法:仅指SQL语句的WHERE
部分,且From语句中只可以有3个表——仅对单表进行操作: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 点查找: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
‘第2个点
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)、对质量的编排
第②利用Fields对象。示例:
Dim Flds AS MapXlIB.Fields

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

(2)、移动地图
第③创造1个活动工具句柄
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

五、输出

壹 、属性的出口 输出到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

三 、地图的打字与印刷
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
Msg博克斯 ” 打字与印刷机存在不当,请改良后重试。错误号:” + (Str(Err.Number)), ,
“战败”
End If

④ 、另存为图片文件
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

7、在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 “Fields”, 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
空间数据库中的索引技术用的是库罗德_Tree技术,而不是原来一般意义上的B_Tree索引技术。
2 空间数据在Spatial中以地理个性音信格局存放。
2 在Oracle的本子中有如下须求注意事项:
a) Oracle
8.1.5这一个版本中,第三遍引入Spatial组件。使用上13分不佳:图形的体裁卓殊单纯,且为黑白的而非彩色,上载地图数据时,数据丢失相当沉痛。存取数据时万分慢。在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),下载地址葡萄娱乐场 1http://www.mapinfo.com.cn
/;
b) 如何上载?注意:上载在此以前对Tab表举办减弱。
c) 在程序中哪些选择空间数据库中的地图数据?
d)
添加地图时,必须内定字段mi_prinx的明朗值,且该值不可能为表中已存在的值。写入地图数据时,应将其任何NOT
NULL 字段值赋给,否则保存失败。
e) 示例:Tab表+空间数据表 的数据分布情势。

十 、GIS应用的分发

1、制作你本人的类别的安装盘:可执行文件、必要系统文件、运营库文件、其余数据文件。
② 、 单独的MapX安装盘:MapInfo MapX
Runtime安装程序,实际上是MapX控件安装程序(存在于MapX sdk包)
三 、注册:安装到位之后,运营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) 供给专注的是:鹰眼窗口与主地图窗口两者间的坐标投影系统应完全一致。

二 、 拓扑关系
实则正是图元与图元的空间关系。说历史:原来建立拓扑关系选取的是性质关联。
点查询、圆查询、矩形查询、多边形查询等这么些是属于简单空间关系的对待。而对拓扑关系的询问多数动静下使用Parts对象来消除。
Ftr1与另3个Ftr2的长空关系:先找到Ftr1的其止节点,然后以这些节点为骨干画贰个格外小的圆,在这么些圆范围内的有个别设备可认为与该Ftr1相连。
认清有些图元在内定图层上的交接对象集合:
Set Ftrs=Lyr.SearchWithinFeature (SearchFtr,
miSearchTypePartiallyWithin)

叁 、 不一致图形分裂颜色显示
(1)更新样式
再结合权且图层就足以很好消除(使用图层刷新)。而且刷新时不会引起整个Map对象的基础代谢(荧屏抖动)
(2)专题图 存在创新属性值后不可能实时刷新专题图的标题。
肆 、 数据绑定
对未绑定的属性集合使用 MainMap.Datasets.ADD
地图集合和品质集合为多个数码集合的不可分割的五个部分
五 、 系统质量
进程是否为用户所承受、系统是还是不是平安(界面供给)、修改数据数据的时候是或不是留存数量一致性维护难点、造价是还是不是创立。
(1)速度:使用数据分布能够较好地消除:地图数据:地形图数据以文件格局存放,业务地图数据存放在空间数据库中;属性数据:全部存放在大型数据库中。

(2)系统是还是不是平安(界面必要):A、字段全部用英文,B、地图拓扑关系在进入系统在此以前举行需求的验证,C、文件地图数据中字段数收缩到微小,可使
访问属性频率大大收缩,可使得保险其余用户访问时不会大方出现访问拒绝的光景;D、数据提交时尽大概使用事务机制:
事务起先:
Lyr.BeginAccess,事务结束:Lyr.EndAccess;E、数据修改提交时尽量选取批量付给。至于界面要求,应器重满足从地图对象获
取相关的供给。
(3)数据一致维护:服从图元优先的口径。图形对象必须首先存在,其余连锁音讯在此基础上成立。注意:
2 修改时应先修改地图对象,后提交属性新闻
2 删除时应先删除别的音信,最终删除图形新闻
(4)造价
那里根本指平台成本。A、现有数量格式,B、效能供给:空间分析是或不是复杂、地图图层是不是分散、系统中地图输出的身分供给、系统中执会调查计算局计分析复杂程度是不是较麻烦、直接的阳台利用用户数(并发数)。