📄 mapx中文培训教材 在线看 ← mapinfo ← 地理信息系统论坛社区.htm
字号:
对象,然后修改该 Graphic 对象。<BR>第十一节
栅格图像<BR>栅格图像是计算机化的图片类型,由多行点(像素)构成。栅格图像有时被称为位图。航空照片和卫星图像是 GIS
中的栅格数据的常见类型。<BR>将栅格图像作为地图图层显示 <BR>使用 MapX 可以将栅格图像(位图)作为所创建地图的背景显示。但是栅格图像必需首先成为
MapInfo 表的一部分。然后可以在图像的上方覆盖另外的数据,如街道地图和客户位置。
<BR><BR>尽管栅格图像可以成为地图图片,但图像不能有附加数据。图像只能作为背景或衬垫来观看。
<BR>如何显示栅格图像<BR>每幅栅格图像都必须有相应的‘TAB’文件来存储图像的地理坐标。TAB 文件通过使用 MapInfo Professional
来创建并‘注册’相应的图像。<BR>说明:将栅格图像作为地图图层显示时,MapX
会自动设置所有的矢量地图图层的旋转和投影,以便使它们与栅格图像的旋转和投影相配。<BR>第十二节 动态图层<BR>Animation
图层在地图图元需要经常更新(例如在实时应用时)时很有用。例如,可以开发一套舰队管理应用程序,将每一艘舰船用一个点对象来代表。 可以通过使用
GPS(全球卫星定位)技术获取舰船的当前位置,然后更新点对象以显示舰船在地图上的更新位置。在这类应用程序中,如果被更新的对象存储在动态图层而不是常规图层,那么在地图对象经常改变的地方,地图可以更快地重新绘制。<BR>最初,AnimationLayer
设置为 null。可以向 Layer 对象分派属性以使图层成为动态图层(它可以是常规图层或是用户绘制图层)。当图层被分派了 AnimationLayer
属性,它就会绘制在所有图层的上方,包括 Annotations 图层和选择结果。该图层仍然在 Layers
集合中的同样位置。浮动对象如图标符号仍然显示在动态图层的顶端,尽管它们因为被省略了而不必每次重新绘制。如果普通的图层被用作动态图层,其选择结果和标注会依然有效。<BR>示例<BR>Set
Map.Layers.AnimationLayer = Layers(3)<BR>for each lyr in Map.Layers<BR>if
Map.Layers.AnimationLayer = lyr then<BR>... <BR>end
if<BR>next<BR>要关闭动态图层,给它赋予空值:<BR>Set Map.Layers.AnimationLayer =
nothing<BR>这样使该图层变回普通图层,且其在图层列表中的位置不变。<BR>第十三 绘制图层<BR>Layers 集合的 AddUserDraw
Layer 方法使开发人员在地图上绘制图层。当需要绘制图层时,它与激活的 DrawUserLayer 事件结合在一起使用。该方法返回新创建的 Layer
对象。用户可以绘制任意数量的图层。<BR>如何工作<BR>首先,添加用户绘制图层到图层集合:<BR>Dim lyr as Layer<BR>Set lyr =
Map1.Layers.AddUserDrawLayer("My Layer", 1)<BR>然后,设置 DrawUser Layer
事件中的代码以绘制图层。当应用程序使用 Layers 集合的 AddUserDrawLayer 方法创建了 UserDraw
图层,在窗口需要更新时,应用程序就会激活该事件。<BR>下面是完整的示例。<BR>' API DEFS should be declared in a
separate module<BR>Declare Function MoveToEx Lib "gdi32" Alias "MoveToEx" (ByVal
hdc As Long, ByVal x As Long, ByVal y As Long, lpPoint As POINTAPI) As
Long<BR>Declare Function LineTo Lib "gdi32" Alias "LineTo" (ByVal hdc As Long,
ByVal x As Long, ByVal y As Long) As Long<BR>Declare Function SetMapMode Lib
"gdi32" Alias "SetMapMode" (ByVal hdc As Long, ByVal nMapMode As Long) As
Long<BR>Type POINTAPI<BR>x As Long<BR>y As Long<BR>End Type<BR>Public Const
MM_TWIPS = 6<BR><BR>' this sets the UserDraw Layer to “My Layer”<BR>Dim lyr as
Layer<BR>Set lyr = Map1.Layers.AddUserDrawLayer("My Layer", 1)<BR><BR>' this
example draws a line between the corners of Wyoming<BR>Private Sub
Map1_DrawUserLayer(ByVal Layer As Object, ByVal hDC As stdole.OLE_HANDLE, ByVal
hAttributeDC As stdole.OLE_HANDLE, ByVal RectFull As Object, ByVal RectInvalid
As Object)<BR>Dim pt As POINTAPI<BR>SetMapMode hDC, MM_TWIPS<BR>dim PX as
single<BR>dim PY as single<BR>Dim X1 As Double, Y1 As Double, X2 As Double, Y2
As Double<BR><BR>X1 = -111.0542<BR>Y1 = 45.0009<BR>X2 = -104.0528<BR>Y2 =
41.0018<BR><BR>if map1.ClipLine(X1,Y1,X2,Y2) then<BR>mp1.ConvertCoord X, PY,
X1,Y1, miMapToScreen<BR>MoveToEx hDC, PX, -PY, pt ' win api
call<BR>map1.ConvertCoord PX, PY, X2,Y2, miMapToScreen<BR>LineTo hDC, PX, -PY '
win api call<BR>end if<BR><BR>End Sub <BR><BR><BR><BR>
<DIV style="CLEAR: both"></DIV></DIV>
<DIV class=postname>
<DIV class=pf>6楼 </DIV><B>tracking</B> 发表于:2004-11-22 9:59:00</DIV>
<DIV class=postbody>第四章 Features 和 Selections<BR>概述<BR>Selections 和 Features
对象的方法使您得以“标记”或选择符合特定条件的图元。地图上表示纽约市的点就是一个 Feature 对象的示例。假设您需要查找所有在 Sheep’s Head
Bay, Brooklyn 周围 5
英里内的潜在客户。一旦创建此数据集合,就可以通过收集的数据来完成一组操作,如打印数据、取平均值、计算有多少符合条件的数据、并将它们保存到文件中,或者执行其它任务。在本章中将详细介绍图元和选择。<BR>第一节
基本概念<BR>什么是地图图元?<BR>地图图元是地图上的地理对象,例如点、线或区域。例如,在美国地图中区域表示州、线表示公路、点表示城市。在 MapX
中,地图图元表示为 Feature 对象。<BR>什么是 Features 集合?<BR>在 MapX
中,组成地图的不同图层中的每个图层通常具有相同类型的图元。例如,“US States”图层使用区域图元表示每个州,“US
Highways”图层使用线图元表示主要的美国公路,“US Capitols”图层使用点图元表示每个州的首府城市。在 MapX
中,地图图层中的所有图元及其所有子集表示为 Features 集合。许多 Layer 对象方法都返回图层的 Features
集合。<BR>一般说来在地图上不突出显示 Features 集合中的图元。要想突出显示,那么使用 Selection 集合。<BR>什么是 Selection
集合?<BR>和 Features 集合类似,Selection 集合也是 Feature 对象的集合。但是,Selection 集合表示当前已选中的
Feature 对象。每个图层对象都有自己的 Selection 集合(Layer.Selection)。根据那些已选中的图元,MapX 自动高亮显示在
Selection 集合中的所有图元。<BR>第二节 使用 Features 集合<BR>Features 集合类似于 Selection
集合,因为两个集合都是 Feature 对象的集合。但是,Features 集合与 Selection
集合各有一组不同的方法和属性集,而且两个集合类型的行为也不同。在 Selections 集合中自动高亮显示选中的图元,而在 Features
集合中不会突出显示图元。<BR>取得图层中的图元<BR>在使用 Features 集合前必须先创建集合。可以用 Layer 对象方法创建 Feature
对象的集合。<BR>以下 Layers 集合的方法提供了多种途径来取得 Features 集合。<BR><BR><BR><BR><BR>方法 描述
代码示例(Dim fs as Features创建 Features 集合)<BR>AllFeatures 返回图层中包括所有图元的 Features 集合。
Set fs = Map1.Layers(2).AllFeatures<BR>NoFeatures 返回图层的空 Features 集合。 Set fs =
Map1.Layers(9).NoFeatures<BR>SearchWithinDistance 返回在指定点对象周围的某个范围内图元的 Features
集合。 Set fs = Map1.Layers(3). SearchWithinDistance (objPoint, _36.5, miUnitMile,
miSearchTypeCentroidWithin) <BR>SearchWithinFeature 返回由另一指定区域图元中图元组成的图元对象。 Set
fs = Map1.Layers(3). SearchWithinFeature _(ftr, miUnitMile,
miSearchTypeCentroidWithin)<BR>SearchWithinRectangle 返回在指定矩形边界中的图元集合。 Set fs =
Map1.Layers(3). SearchWithinRectangle(miRect, _miUnitMile,
miSearchTypePartiallyWithin)<BR>SearchAtPoint 返回由指定点处图元组成的图元集合。 Set fs =
Map1.Layers(3) .SearchAtPoint(objPoint)<BR>搜索类型常数<BR>MiSearchTypeCentroidWithin
如果图元的中心位于区域中,则在搜索中包含该常数。<BR>MiSearchTypeEntirelyWithin
如果区域包含此图元,则在搜索中包含该常数。<BR>MiSearchTypePartiallyWithin
如果图元的任意部分位于区域中,则在搜索中包含该常数。<BR><BR>以下代码是工具使用的事件,它为用户单击点处的图元创建集合。<BR>Private Sub
Map1_ToolUsed(ByVal ToolNum As Integer, ByVal X1 As Double, ByVal Y1 As Double,
ByVal X2 As Double, ByVal Y2 As Double, ByVal Distance As Double, ByVal Shift As
Boolean, ByVal Ctrl As Boolean, EnableDefault As Boolean)<BR><BR>Dim ftr As
Feature 'creates a Feature object<BR>Dim fs As Features 'creates a collection of
features<BR>Dim pt As New Point 'creates a new point<BR><BR>'the new point
created has coordinate values set when the user clicks on a feature<BR>pt.Set
X1, Y1<BR>'If the tool used is the custom info tool then create a collection of
features from the States ‘layer and print the State Name feature into a message
box.<BR>If ToolNum = InfoTool Then<BR>'create the collecton of features at the
point the user clicked<BR>Set fs =
Map1.Layers("USA").SearchAtPoint(pt)<BR>'print the State Name feature into a
message box.<BR>For Each ftr In fs<BR>MsgBox ftr.Name<BR>Next<BR>End If <BR>操纵
Features 集合<BR>以下方法使您得以通过在集合中添加、删除、复制图元对象来操作 Features 集合:<BR><BR>方法 描述<BR>Add 将
Feature 对象或整个 Features 集合添加到集合。<BR>Clone 将集合复制为另一个 Features 集合对象。<BR>Common
将此集合与另一个 Features 集合相结合,这样该集合将仅包含二者中均包含的图元(INTERSECT 集合操作)。<BR>Remove 从该集合的
Features 集合中删除 Feature 对象或所有图元(SUBTRACT 集合操作)。<BR>Replace 将集合内容替换为 Feature 对象或
Selection 集合对象的所有图元。<BR><BR>Feature 对象<BR>Features 集合由 Feature 对象集合组成。Feature
对象对应于地图上的图元,例如符号、线或区域。<BR>Feature
对象方法使您可以创建和操作独立图元对象。在创建独立图元对象后,必须将该图元对象附加到地图上后才能引用对象的所有方法和属性。把图元附加到地图时地图的坐标系与图元相关联。<BR>以下
Visual Basic 示例显示如何创建独立的 Text 图元,然后修改其标题。<BR>Dim f As New Feature<BR>Dim fNew As
Feature<BR>' Add a new text object to layer 1<BR>f.Attach Map1<BR>f.Type =
miFeatureTypeText<BR>f.Point.Set Map1.CenterX, Map1.CenterY<BR>f.Caption = "This
is a text object"<BR>Set fNew = Map1.Layers(1).AddFeature(f)<BR>' Change the
text caption <BR>fNew.Caption = "Changed
Text"<BR>fNew.Update<BR>图元对象属性<BR><BR>以下属性定义图元对象:<BR><BR>属性 描述 代码示例 <BR>CenterX
包含图元在 X 轴方向的中心。 Print ftr.CenterX<BR>CenterY 包含图元在 Y 轴方向的中心。 MsgBox
ftr.CenterY<BR>FeatureID 包含图元 ID。图层中的每个图元在每个图层中包含唯一 ID。为整数值。 IVar =
ftr.FeatureID<BR>Length 包含图元长度( 限于线形图元)。 Print ftr.Length<BR>Perimeter
长度指图元的周长(限于区域图元)。 Print ftr.Perimeter <BR>Name 包含图元名称。 MsgBox ftr.name<BR>Type
包含图元(点、线等)类型。 ftr.Type = miFeatureTypeSymbol <BR>第三节 使用Selection 集合<BR><BR>MapX
的一个基本功能是在地图上选择图元,这样您就可以在图元上执行其它任务。用户可以单击地图选择一个或多个图元(点、区域等)。MapX
高亮显示所有选中的图元。<BR>要检查所选图元列表,请使用 Selection 集合,它是 Feature 对象的集合。Selection
集合还提供了不同方法(例如
SelectByRadius)使您得以完成不同类型的选择,例如,选择以某城市为圆心的一定半径范围内的所有图元。所选图元将在地图上高亮显示出来。每个图层都有所选图元对象的集合(Layer.Selection)。<BR>Selection
集合具有在集合中添加和删除图元的方法。同时,如果已经具有 Selection 或 Features
集合,那么可以追加、删除、复制或查找两个集合的交集。<BR>下表列出了一些 Selection
集合方法。有关完整清单,请参阅《MapX参考指南》或联机帮助:<BR><BR>方法 描述 代码示例<BR>ClearSelection
取消选择该图层中的所有图元。使用Layers.ClearSelection 从所有图层中清除选择。 Map1.Layers(“SalesReps1997”).
Selection.ClearSelection<BR>Clone 将集合复制为另一个 Selection 集合对象。
Map1.Layers(2).Selection.Clone ftrs<BR>Common 结合该集合与另一个 Selection
对象,使该集合仅包含二者都有的图元(INTERSECT 集合图元)。 Map1.Layers(2).Selection.Comm on
Map1.Layers(4).Selection<BR>Remove 从该集合的 Selection 对象中删除 Feature
对象或所有图元(SUBTRACT 集合操作)。 Map1.Layers(2).Selection.Remove fs<BR>Replace 将集合内容替换为某个
Feature 对象或某个 Selection 集合对象中的所有图元。 Map1.Layers(“Boston”).Selection.Replace
lyr.AllFeatures <BR>SelectAll 选择图层中的所有图元。 Map1.Layers(“Cargo”).Selection
.SelectAll<BR>SelectByPoint 选择图层中指定点处的图元。 Map1.Layers(5).Selection.Select
ByPoint 75.14, 42.9, miSelectionAppend <BR>SelectByRadius 从图层中选择某点周围指定半径内的图元。
Map1.Layers(4). Selec
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -