Mapx常见问题

VisualC++中创建MapX控件        首先选择File菜单中的New命令,弹出New对话框。选择MFCAppWizard(exe),并在ProjectName中输入MapxSample作为工程名称。然后单击OK按钮,进入应用程序向导的第一步。通过应用程序向导创建一多文档(或单文档)界面应用程序。    在创建MapX控件之前,必须将MapX.h和MapX.cpp文件加入到工程中。从Project菜单中选择Add To P 阅读详情

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

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


二、创建地图对象


发表时间: 2002-07-30 14:20


必要:创建地图对象,必须使用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.**
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.**

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

三、查询


发表时间: 2002-07-30 14:21


1、 属性查找。Find、Search方法:注意的是Find方法只支持TAB表文件,不支持空间数据表。
Find :与FoxPro中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.**
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.**
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
注意:点查找时,一般情况下结果集在一个以上的图层都存在。所以取值时应分别提取

² 园查找:在临时图层上画一个不保存的圆,然后查找被这个圆所包含的所有图层的图元对象。
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

四、对象编辑


发表时间: 2002-07-30 14:21


(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.** ‘保存修改到硬盘

(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.**
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.**
Lyr.Editable=False
MainMap.AutoRedraw=True

五、输出


发表时间: 2002-07-30 14:22


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.**
Mainmap.AutoRedraw=True
Lyr_1.Editabled=False

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 ‘将选中部分以不同于其他未选中地图部分形式输出

六、专题图



发表时间: 2002-07-30 14:22


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下紧缩表


发表时间: 2002-07-30 14:23


在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.**

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.**
Next

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

八、如何和大型数据库关联


发表时间: 2002-07-30 14:24


系统是混合结构:对地图的访问使用的是文件访问方式,对属性数据的访问使用的是大型数据库形式使用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+“%’)”

九、空间数据库


发表时间: 2002-07-30 14:24


² 空间数据库中的索引技术用的是R_Tree技术,而不是原来一般意义上的B_Tree索引技术。
² 空间数据在Spatial中以地理属性信息形式存放。
² 在Oracle的版本中有如下需要注意事项:
a) Oracle 8.1.5这个版本中,首次引入Spatial组件。使用上非常不好:图形的样式非常单一,且为黑白的而非彩色,上载地图数据时,数据丢失非常严重。存取数据时非常慢。在Spatial中自动创建prinx字段作为地图索引主关键字段
b) Oracle 8.1.6版本:图形为彩色的,增加了样式的支持,但不支持同一图层下的多样式(主要指点对象)。创建地图数据时,地图的坐标常发生偏移。属性数据更新 时,需要两次刷新才能完整提交;地图数据数据提交时,其坐标发生偏移:向原点偏移,需要认为地单独将其移动到其初始创建位置。存取速度上还是比较慢,离实 用尚有一定距离。在Spatial中自动创建mi_prinx字段作为地图索引主关键字段
² Oracle 8.1.7版本:支持多样式,数据上载丢失非常小(只有文本对象存在丢失的记录)。在地图数据存取不是很大的时候,速度上可以被用户接受。
² 如何将MapInfo 的TAB表内容上传到Oracle 中?
a) 免费工具:easyloader6.7(Oracle 8.1.7),下载地址:http://www.mapinfo.com.cn
b) 如何上载?注意:上载之前对Tab表进行紧缩。
c) 在程序中如何使用空间数据库中的地图数据?
d) 添加地图时,必须指定字段mi_prinx的明确值,且该值不能为表中已存在的值。写入地图数据时,应将其全部NOT NULL 字段值赋给,否则保存失败。
e) 示例:Tab表+空间数据表 的数据分布形式。

十、GIS应用的分发


发表时间: 2002-07-30 14:25


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)数据一致维护:遵循图元优先的原则。图形对象必须首先存在,其他相关信息在此基础上建立。注意:
² 修改时应先修改地图对象,后提交属性信息
² 删除时应先删除其他信息,最后删除图形信息
(4)造价 这里主要指平台费用。A、现有数据格式,B、功能要求:空间分析是否复杂、地图图层是否分散、系统中地图输出的质量要求、系统中统计分析复杂程度是否较繁琐、直接的平台使用用户数(并发数)。

Qt-MapX 在Qt下调用Mapx的程序终于成功了! 如昨天所用,调用Qt的dumpcpp,查看Mapx50.dll的uuid, 通过dumpcpp {uuid},生成头文件和源代码,引用在Qt的项目中: m_mapx = new Map("uQnZi2sFw22L0-MRa8pYX-5E3P9053-0N4M1443-5C835230-09029-33844-52489",this); / 阅读详情

相关推荐

mapx5.0打包安装心得

       本人最近开发一套GIS系统,可谓费尽周折,想写点感想,博主的视频可谓给我了很大的帮助,但也帮我走了不少弯路,在此想谈谈mapx5.0的打包问题。       我的系统使用的是delphi+mapx5.26+ado,另外还使用了什么比较流行的fastreport3.0的报表设计器,由于第一次用delphi做系统,也是第一次使用mapx5。所以呢感触颇多,希望更多的软件同行少走弯路,快速

xphbox_xph的专栏 3981

[转载]Mapx常见问题

1、 TAB的数据分为两种数据:地图数据(Layers)、属性数据(Datasets)。关系:不可分割的一个数据集的两部分. 2、 数据加载:GST文件由GeosetManager40.exe程序生成。在程序使用gsT文件:Map1.Geoset=Filepath+FileName 3、 问题:GST文件加载后,只是默认将地图数据加载,属性数据另外需要使用单独的命令进行加载,否则对属性数据...

weixin_33860147的博客 369

GIS开发方式的选择:MapX核心技术剖析

通过学习MapX的核心技术并应用实际项目中,开发人员能够更好地理解和掌握GIS开发,并实现高效、可靠的地理信息系统。MapX是一种基于.NET平台的GIS开发框架,提供了丰富的功能和工具,用于构建各种地理信息应用程序。MapX支持多种地图和数据格式,并提供了强大的地图渲染和空间分析功能。除了上面示例中的基本操作外,MapX还提供了许多其他功能,例如图层管理、空间查询、地图符号化、地图编辑等。通过深入研究MapX的文档和示例,开发人员可以充分利用这些功能,构建出功能强大的GIS应用程序。方法来运行应用程序。

MXMIMM的博客 418

MapX工具概述

MapX工具概述 内置工具 使用MapX,你能够轻松地把普通的工具栏按钮应用到你的应用中。MapX 为多个常用地图化工具提供了内置支持,其中包括: 用户更改地图的比例和/或位置的导航工具(放大、缩小、漫游、居中)。Ÿ 用户单击地图图元来进行标注的标注工具。Ÿ 给予用户不同的方式来选择地图图元的选择工具集合。Ÿ 对象创建工具,可创建地图图元。 选择工具为修改键(SHIFT 键

shiwaxinbin的专栏 2244

深入学习MapX核心技术及应用

本文还有配套的精品资源,点击获取 简介:MapX是一个由Borland公司开发的地图控件,它为Windows应用程序提供了集成地图显示和GIS功能。本学习资料详细解读了MapX的核心技术特点,包括地图显示、地理坐标转换、数据集成、对象模型、事件处理、服务接口、地图服务、地图分析、打印和导出以及自定义样式和符号库。这些内容有助于GIS程序员深入理解和掌握MapX,以开发出具有...

weixin_32099703的博客 1521

mapx5.0-32-64

1、将mapx文件夹拷到C盘(直接考到C盘,不要放在任何其他文件夹里) 2、打开cmd或者powershell(按win键+R调出运行,输入cmd,然后按回车键) 3、win10用户直接将“破解文档”里面的文本全选,复制到cmd或者powershell(一条一条复制也可以);win7/8如果不可以复制,自己手动一条一条输入,输完每一条敲回车键。【如果提示Regsvr32为找不到的命令,请将C:\Windows\System32设置为环境变量,(百度上有教程)】 4、在“GeosetManager50.exe - 快捷方式”上单击右键,选择属性,在兼容模式里勾选以兼容性运行这个程序(xindowsXP Server Pack3),勾选以管理员身份运行。确定后将其复制或者剪切到桌面,双击打开看看是否已经可以使用。 tip:默认的地图在C:\MapX\Maps文件夹里。

mapinfo二次开发之:MapX和MapXtreme区别

MapX和MapXtreme区别2:MapX需将控件装入开发环境。MapX软件开发主要针对单机软件开发,web网页版需要注册activex控件,比较麻烦。MapX和MapXtreme区别1:MapXtreme是 MapX的升级版。MapX发展到MapX5.0后不再升级,由MapXtreme代替。mapx软件和mapxtreme软件共同点:都是MapInfo公司的程序开发软件。mapxtrem软件开发的网页版,客户可以直接浏览,不需要再安装任何插件。

zhang13772562635的专栏 1261

拆开一个烧坏的IGBT模块,手把手教你识别过压、过流、过温的“案发现场”

本文详细解析了IGBT模块失效分析的实战技巧,通过观察铝层熔化纹路、焊锡溢出形态等物理痕迹,手把手教你识别过压、过流、过温的典型失效模式。文章提供了从基础工具包到现场快速诊断的完整流程,帮助工程师精准定位IGBT模块失效的根本原因。

weixin_30655569的博客 427

vb + Mapx常见问题解答

 开发环境:VB + MapX代码:1.如何实现测距 a.//创建测距工具      global const calculatedistance=1      Private Sub Form_Load()        map1.CreateCustomTool(calcilatedistance,miToolTypepoly ,microsscursor)      End

NetNing 3700

RapidScada在windows下的安装(详细)

1.下载地址:RapidScada官网 2.版本说明 有Linux版本和Windows版本,看自己的需求下载,推荐下载最新稳定版本。 3.系统要求 4.安装前的准备(windows10) 首先打开Windows功能: 先关闭 Microsoft .NET Framework3.5的 Windows Communication Foundation 子组件。如下图: Microsoft .NET Framework配置按下图勾选: iis安装的功能: 5.安装 解压..

m0_51275803的博客 4264

Mapx.nvim 项目常见问题解决方案

Mapx.nvim 项目常见问题解决方案 项目基础介绍 Mapx.nvim 是一个为 Neovim 开发的 Lua 插件,旨在提供一种更便捷的方式来创建和管理键位映射(key mappings)和命令。该项目的主要编程语言是 Lua,适用于希望在 Neovim 中更高效地配置键位映射和命令的开发者。 新手使用注意事项及解决方案 1. 安装和配置问题 问题描述: 新手在安装 Mapx.nvim 时,...

gitblog_00386的博客 951

Aloudata Agent :基于 NoETL 明细语义层的分析决策智能体

这是包括我们在内的一些厂商探索的一个新方向,这种方式先由大模型将自然语言转化为对指标语义层的查询请求(MQL,Metrics Query Language),再由指标平台将指标和维度的查询与计算逻辑转化为准确的 SQL 查询语句。用户查询经大模型语义解析后,将其转换为指标、维度及筛选条件的组合表达,并生成面向指标平台的 MQL,Aloudata CAN 指标平台的语义引擎将 MQL 转换为准确和可执行的查询 SQL,语义引擎内置函数体系与 SQL 解析器,确保语义转换的 100% 准确性。

Aloudata的博客 1664

MapX精华文章资料荟萃

1.MapX中文培训教材http://www.mygis.com.cn/articles/04-631-631.htm 2.MapX5的中文开发指南http://www.mygis.com.cn/articles/04-623-623.htm 3.MapX应用中文讲义http://www.mygis.com.cn/articles/04-498-498.htm 4.MapX中添加自制符号的方...

awdrhwadr的专栏 315

PID调参避坑指南:为什么你的电机总是震荡?从比例带积分到微分实战解析

本文针对电机控制中常见的震荡问题,提供了一份PID调参实战指南。文章深入解析了比例(P)、积分(I)、微分(D)三个参数对系统稳定性的影响,揭示了比例增益过大是导致震荡的关键原因之一,并给出了从纯比例调试到引入积分、微分的系统化调参流程与避坑要点,帮助工程师快速实现电机平稳、精准的控制。

weixin_28223453的博客 460

ASIC--DFT可测性设计工程师

DFT是什么? DFT是design for test(可测性设计)的缩写,就是在芯片设计过程中,加入可测性逻辑。有的公司把该职位归到前端设计,有的归到中端实现。 DFT职位大多分布于规模较大的数字IC设计公司里,因为大公司对芯片品质要求高,而且规模越大,芯片越贵,DFT就越复杂越重要。DFT主要是通过在芯片中加入可测性逻辑,等芯片制造出来,在ATE(AutomaticTestEquipmen...

TroubleMaker 2万+

VC下MapX开发环境建立

    有很多的朋友在VC下使用MapX的时候,总是感觉不是很顺手,其中一个很明显的问题就是老是出现COleVariant或Variant类型的数据,对于习惯了使用VC下形如CString等类型变量的朋友来说COleVariant或Variant类型给VC下使用MapX造成了很多不便;也造成了开发和调试效率很低,在数据类型上打转转。    我这篇文章不是要告诉大家如果进行数据类型的转换,也不是

FIND ME 7306

基于Simulink的自适应反步法(Adaptive Backstepping)控制​

本文针对非线性系统控制中未知参数和强非线性耦合的挑战,提出基于Simulink的自适应反步法解决方案。通过融合参数在线估计与反步递归设计,该方法显著提升了永磁同步电机(PMSM)速度控制的鲁棒性,使跟踪误差从20%降至3%,参数估计收敛时间小于0.5秒。文章详细阐述了从算法推导到Simulink实现的完整流程,包括系统架构设计、核心算法推导(以PMSM为例)、模块化建模方法、参数优化策略以及工程部署建议。提供的自适应控制器MATLAB代码和关键参数表可直接应用于实际工程,为电机驱动、机械臂等非线性系统控制提

xiaoheshang_123的博客 102

MAPX在C++BUILDER中等研究问题

1)添加Text Feature的问题,如果存在中文字符,那么在显示时后面的四个字符,但里面存的值是对的。在VB中的乱码。  但是如何以Variant传字符串参数, Variant("hello"), 传不进参数;如果用Variant(WideString(“hello“))传, 用Variant.bstrVal可以取到正确的传入值。 2)动态创建图元时,如果用CMapXFeaturDisp.B

delez的专栏 1312

Hadoop在大数据领域的电商数据分析案例

随着电商行业的迅猛发展,每天都会产生海量的数据,如用户浏览记录、购买行为、商品信息等。如何从这些数据中提取有价值的信息,为电商企业的决策提供支持,成为了电商企业面临的重要问题。Hadoop作为一个开源的分布式计算平台,具有高可靠性、高扩展性和高效性等特点,能够很好地处理大数据。本文的目的就是通过实际案例,详细介绍Hadoop在电商数据分析中的应用,范围涵盖了从数据采集、存储到分析的整个流程。本文首先介绍背景信息,让读者了解Hadoop在电商数据分析中的重要性和应用场景。

Java大师兄的博客 1179

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

MapWindow简单入门

1.前言前一段公司出于成本和效率的原因,要求在我们的产品中用开源的GIS组件来代替以前使用的MapX,经过一段时间的查找,我发现了MapWinGIS这个东西基本可以满足我们的要求。经过几天的摸索,我写了这篇文章,希望能对其他使用MapWinGIS的人有所帮助。我平常接触GIS很少,也最多就是在开发系统中偶尔用到MapX,很多基本概念也不了解,所以可能有很多错误的地方,忘见谅。2.MapWi...

weixin_30954607的博客 348

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Mapx 错误集合(转载)

Mapx 错误集合(转载) 2011年10月04日   This is a table of the MapX errors encountered when writing MapX applications. For information on handling errors in Visual Basic, Delphi, and Powerbuilder, see the re...

oji445gj 1096

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

优快云 PB社区中部分FAQ链接地址收集

1、如何在PB中设置NotifyIconData 这个结构以实现在系统栏图标上显示冒泡式提示 http://community.youkuaiyun.com/Expert/FAQ/FAQ_Index.asp?id=207025 2、如何获取图片文件原始大小(BMP、JPG、GIF) http://community.youkuaiyun.com/Expert/topic/3602/3602171.xml?temp=....

xiaoer 149

C#进行MapX二次开发之MapX基础知识

C#进行MapX二次开发之MapX基础知识 MapX的主要技术特点 (1)、 以表(Table)的形式组织信息 每一个表都是一组MapInfo文件,这些文件组成了地图文件和数据库文件。为使用MapInfo,就需要有组成表的用户数据和地图文件。这些文件可以来自MapInfo或者由用户创建。用户要想在MapInfo中工作,就必须打开一个或多个表。 MapInfo通过表的形式将数据与地图

Gdou_YUN的博客 2737

基于.NET平台的MapX开发

MapX是MapInfo公司向用户提供的具有强大地图分析功能的ActiveX组件。尽管MapX组件开发技术已趋于成熟,但在.NET平台上进行MapX开发还是一个新课题。本文以VB.NET为例,就在.NET平台上开发MapX进行初步的探讨。   1. MapX与.NET平台结合的意义   Visual Basic .NET(简称VB.NET)是Microsoft公司向用户提供的具有强大

mustbelove的专栏 4742
上一篇: unicode,ascii是一種字符集,而uft是一種編碼方式
下一篇: 说说Asp.net 身份验证、授权
magicdreaming
博客等级 码龄19年 15粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值