第五讲 MO图形的绘制_第1页
第五讲 MO图形的绘制_第2页
第五讲 MO图形的绘制_第3页
第五讲 MO图形的绘制_第4页
第五讲 MO图形的绘制_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第五讲第五讲 MOMO 图形的绘制图形的绘制 MO 虽然不是绘图软件 但经常要用到在地图上画点标明位置 画矩形或多边形标明地图 查询范围等操作 因此也需要用到一些基本的绘图功能 MO 的绘图就是在 MAP 上产生图形对象的过程 图形对象主要有 Point 点 Points 点集 Line 线 Rectangle 矩形 Polygon 多边形 Ellipse 椭圆 绘图时 先要创建一个绘图对象 给他赋值 位置和尺寸 再在 Symbol 对象中定义显 示方式 最后用 Drawshape 方法在地图上显示这个图形 定义 Symbol 对象 不仅可以设置线型 填充方式 尺寸 颜色和字体等 还可以画出多 种预定义的符号 Drawshape 方法绘图外 还可以用 AddEvent 方法在动态图层上画动态图形对 象 GeoEvent 另外还可以用 DrawText 方法在地图上写字 一 一 DrawShapeDrawShape 绘图方法绘图方法 1 1 DrawShapeDrawShape 定义定义 DrawShape 方法的语法为 object DrawShape shape symbol 其中 object 为绘图目的对象 一般为 Map 对象 shape 为绘图内容 是图形对象 Point Points Line Rectangle Polygon or Ellipse 或记录集 Recordset 对象 symbol 是一个 Symbol 对象 说明绘图方式 注意 调用 DrawShape 必须在 LAYER 或 TrackingLayer 的 drawing 事件中 即 AfterTrackingLayerDraw BeforeLayerDraw BeforeTrackingLayerDraw AfterLayerDraw 事 件过程中才有效 如果指定一个 Recordset 作为 DrawShape 的参数 该数据集必须是从 GeoDataset 获取 而不是从一个 Table 对象获取 同时 MO 从 shape 字段的第一个特征值开始 到最后一个结束 然后又指向第一个记录 2 2 画点 画点 1 预定义画点 可以用 Point 对象画一个点 也可以用 Points 对象画多个点 示例 Dim sym As New MapObjects2 Symbol Dim p As Point Dim pts As Points Private Sub Map1 AfterTrackingLayerDraw ByVal hDC As stdole OLE HANDLE Set pts New Points Set p Map1 ToMapPoint 1000 1000 pts Add p 是 Points 对象中的一个函数 功能是增加一个 Point 成员到 Points 对象内 Set p Map1 ToMapPoint 3000 2000 pts Add p sym Color moRed sym SymbolType moPointSymbol sym Size 3 Map1 DrawShape pts sym End Sub 2 利用鼠标点击画点 通过鼠标点击屏幕获取点的坐标 进行画点操作 示例 Dim sym As New MapObjects2 Symbol Dim p As Point Dim pts As New Points Private Sub Map1 AfterTrackingLayerDraw ByVal hDC As stdole OLE HANDLE If Not pts Is Nothing Then sym Color moRed sym SymbolType moPointSymbol sym Size 3 Map1 DrawShape pts sym Map1 DrawShape pts sym End If End Sub Private Sub Map1 MouseDown Button As Integer Shift As Integer X As Single Y As Single Set p Map1 ToMapPoint X Y pts Add p Map1 TrackingLayer Refresh True TrackingLayer 对象是 MAP 控件中的一个图层 它描述位置可以动态改变的地理目标 Refresh 是 TrackingLayer 对象的成员函数 强制刷新 TrackingLayer 对象 End Sub 3 画线 MO 中画线的基本原理是先设置两个点 将他们添加到一个 Points 对象中 再将 Points 对 象放到一个 Line 对象中 使用 DrawShape 方法就可以画出一条线段来 如果在 Points 对象中 有 N 个点 则可以产生一条 N 1 段的折线 1 预定义点画线 示例 Dim g line As MapObjects2 Line Dim pts As Points Dim p As Point Dim sym As Symbol Private Sub Command1 Click Set g line New MapObjects2 Line Set pts New Points Set p Map1 ToMapPoint 1000 1000 pts Add p Set p Map1 ToMapPoint 2000 3000 pts Add p g line Parts Add pts Parts 是 Line 对象的一个属性 此属性指向一个 Parts 集合对象 通过 Parts 属性可以检索组成线的片断 Parts 而 Parts 的每一个成员是一个点集 Points Set pts g line Parts 0 Map1 Refresh End Sub Private Sub Map1 AfterTrackingLayerDraw ByVal hDC As stdole OLE HANDLE If Not g line Is Nothing Then Dim sym As New Symbol If pts Count 1 Then Count 属性表示当前 Points 对象内成员的数目 这是一个只读 值 sym Color moRed sym SymbolType moLineSymbol sym Size 5 Map1 DrawShape g line sym End If End If End Sub 2 鼠标点击获取点并画线 示例 Dim g line As MapObjects2 Line Dim pts As Points Dim p As Point Dim sym As Symbol Private Sub Command1 Click 设置清空按钮 Set g line Nothing Set pts Nothing Map1 Refresh End Sub Private Sub Map1 AfterTrackingLayerDraw ByVal hDC As stdole OLE HANDLE Dim sym As New Symbol If Not g line Is Nothing Then sym Color moBlack Map1 DrawShape pts sym If pts Count 1 Then sym Color moRed sym SymbolType moLineSymbol sym Size 5 Map1 DrawShape g line sym End If End If End Sub Private Sub Map1 MouseDown Button As Integer Shift As Integer X As Single Y As Single If Button 1 Then If g line Is Nothing Then Set g line New MapObjects2 Line End If If pts Is Nothing Then Set pts New Points End If Set p Map1 ToMapPoint X Y pts Add p If pts Count 1 Then g line Parts Add pts Set pts g line Parts 0 End If Map1 TrackingLayer Refresh True Else MsgBox right End If End Sub 4 画矩形和椭圆 1 预定义画矩形 画矩形是先定义一个矩形对象 给它的 top left bottom right 属性赋值 再使用 DrawShape 方法就可以画出一个矩形来 定义矩形范围时 可以先确定一个 中心点 再确定一个半径 或 X 方向半径和 Y 方向半径 得到 top left bottom right 的 值 示例 Option Explicit Dim rect As MapObjects2 Rectangle Private Sub Command1 Click Dim dist As Double Dim pt As New Point Set rect New MapObjects2 Rectangle dist 0 2 Set pt Map1 ToMapPoint 2500 1500 这里可以动态设置中心点的位置 rect Right pt X dist rect Left pt X dist rect Top pt Y dist rect Bottom pt Y dist Map1 Refresh End Sub Private Sub Map1 AfterTrackingLayerDraw ByVal hDC As stdole OLE HANDLE If Not rect Is Nothing Then Dim sym As New Symbol sym SymbolType moFillSymbol sym Style moDiagonalCrossFill sym Color moBlue Map1 DrawShape rect sym End If End Sub 2 定义一个矩形框对象后 进行画矩形 示例 Option Explicit Dim rect As MapObjects2 Rectangle Private Sub Map1 AfterTrackingLayerDraw ByVal hDC As stdole OLE HANDLE Dim sym As New MapObjects2 Symbol If Not rect Is Nothing Then sym SymbolType moFillSymbol sym Style moDiagonalCrossFill sym Color moBlue Map1 DrawShape rect sym End If End Sub Private Sub Map1 MouseDown Button As Integer Shift As Integer X As Single Y As Single Set rect Map1 TrackRectangle Map1 TrackingLayer Refresh True End Sub 用同样的方法可以画出椭圆来 5 用 Track 方法画图形 在 MO 中还可以用一类方法在地图上半自动画图 如 TrackCircle 方法 点击产生圆心 拖动产生半径 放手成圆形 TrackRectangle 方法 点击产生一个角 拖动放大 放手形成矩 形 TrackPolygon 方法 点击画几条直线 双击形成多边形图形 这一类方法都是以 Track 开 头 所以称为 Track 画图方法 这和 TrackingLayer 动态图层 毫无关系 示例 Option Explicit Dim eli As MapObjects2 Ellipse Dim recs As MapObjects2 Rectangle Dim ply As MapObjects2 Polygon Private Sub Map1 AfterTrackingLayerDraw ByVal hDC As stdole OLE HANDLE Dim sym As New MapObjects2 Symbol sym SymbolType moFillSymbol sym Style moDiagonalCrossFill If Not recs Is Nothing Then sym Color moBlue Map1 DrawShape recs sym End If If Not eli Is Nothing Then sym Color moRed Map1 DrawShape eli sym End If If Not ply Is Nothing Then sym Color moGreen Map1 DrawShape ply sym End If End Sub Private Sub Map1 MouseDown Button As Integer Shift As Integer X As Single Y As Single If Option1 Then Set recs Map1 TrackRectangle ElseIf Option2 Then Set eli Map1 TrackCircle Else Set ply Map1 TrackPolygon End If Map1 TrackingLayer Refresh True End Sub 二 写文字 MO 一般采用 DrawText 方法在地图上写文字 也可以用画点时的 motruetypemarker 方式 在地图上写各种地图上常用的符号 1 DrawText 方法 用 DrawText 方法可以在地图上写文字 语法结构为 object DrawText text shape symbol 其中 object 对象 text 字符串 shape 参照图形 可以是点 点集 线和矩形 symbol 为一个 Textsymbol 显示对象 如果参照图形为点 则文字中心在点上 如果为点集 则中心在点集的范围中心上 为直线 中心在线段的中心上 方向同线段的方向 为折线 则 文字的中心和方向按照点集的样条插值计算 如果为矩形 则文字国矩形中心的水平线排列 1 在点击出写文字 示例 Option Explicit Dim p As MapObjects2 Point Dim tSym As New TextSymbol Private Sub Map1 AfterTrackingLayerDraw ByVal hDC As stdole OLE HANDLE If Not p Is Nothing Then Dim sym As New Symbol tSym Color moRed Map1 DrawText Text1 Text p tSym End If End Sub Private Sub Map1 MouseDown Button As Integer Shift As Integer x As Single y As Single Set p Map1 ToMapPoint x y Map1 TrackingLayer Refresh True End Sub 2 在线段上添加文字 示例 Option Explicit Dim g line As MapObjects2 Line Dim pts As MapObjects2 Points Private Sub Map1 AfterTrackingLayerDraw ByVal hDC As stdole OLE HANDLE make sure there s a line If Not g line Is Nothing Then make sure there s at least two points in the line If pts Count 1 Then Dim tSym As New TextSymbol use the font of the textbox control Set tSym Font Text1 Font Dim sym As New Symbol sym Color moRed Map1 DrawShape g line sym Map1 DrawText Text1 Text g line tSym End If End If End Sub Private Sub Map1 MouseDown Button As Integer Shift As Integer x As Single y As Single If Button 1 Then create the line if it does not exist If g line Is Nothing Then Set g line New MapObjects2 Line End If If pts Is Nothing Then Set pts New MapObjects2 Points End If create a point and add it to the line Dim p As Point Set p Map1 ToMapPoint x y pts Add p If pts Count 1 Then g line Parts Add pts Set pts g line Parts 0 End If refresh the trackingLayer Map1 TrackingLayer Refresh True Else Dim r As MapObjects2 Rectangle Set r Map1 TrackRectangle If Not r Is Nothing Then Map1 Extent r End If End Sub 三 Symbol Symbol 是控制地图上的特征或图形的显示方式的对象或属性 图上的特征都是通过设置图 层的 Symbol 属性来实现的 如 layer Symbol Color moRed 如果没有设置图层的 Symbol 属性 MO 就会使用缺省的线型 填充方式 尺寸 字体和随机的颜色 在设置图形的显示方式时 要定义一个 Symbol 对象 Dim sym As New Symbol 再设置 SymbolType 属性 这说明显示对象是点 线还是面 使用的常量如下 Constant Value Description moPointSymbol0symbol for a Point or Points object moLineSymbol 1symbol for a Line object moFillSymbol 2symbols for a Polygon Rectangle or Ellipse object 例如 sym SymbolType moFillSymbol 然后就可以设置 Symbol 的 style 属性 对于点来设置点的形状和预定义的符号 对于线 对象来设置线型 对于面对象来设置填充方式 最后来设置 size color font 等 使用预定义符号 使用预定义符号 在画点时 设置 Symbol 的 style 属性为 moTrueTypeMarker方式 可以在地图上写各种 地图上常用的符号 先设置 sym Style moTrueTypeMarker 然后再设置 sym CharacterIndex 35 CharacterIndex 的序号是从 33 开始的 下面就是一个使用预定义 字符的例子 Option Explicit Dim Pt 400 As MapObjects2 Point Dim Pt1 400 As MapObjects2 Point Dim Sym 400 As New MapObjects2 Symbol Dim tSym As New MapObjects2 TextSymbol Private Sub Form Load Dim i As Integer Dim Swidth As Integer Dim Sheight As Integer Swidth Screen Width Sheight Screen Height Swidth 800 15 Sheight 600 15 Me Height Sheight 100 Me Width Swidth 300 Map1 Height Me Height 200 Map1 Width Me Width 200 Map1 Top 100 Map1 Left 100 For i 0 To 399 With Sym i Style moTrueTypeMarker SymbolType moPointSymbol Font ESRI Transportation Municipal Size 20 Style moTrueTypeMarker Color moBlack End With Next i tSym Color moBlack tSym Font Size 10 End Sub Private Sub Map1 AfterTrackingLayerDraw ByVal hDC As stdole OLE HANDLE Dim i As Integer For i 0 To 399 If Not Pt i Is Nothing Then Map1 DrawShape Pt i Sym i Map1 DrawText 33 i Pt1 i tSym End If Next i End Sub Private Sub Map1 Click Dim i As Integer j As Integer k As Integer Const Mx0 400 Const My0 300 Const Mxc 520 Const Myc 800 k 0 j 0 For i 0 To 199 For i 200 To 399 Set Pt i Map1 ToMapPoint j Mxc Mx0 My0 k Myc Set Pt1 i Map1 ToMapPoint j Mxc Mx0 My0 400 k Myc Sym i CharacterIndex 33 i j j 1 If j 20 Then j 0 k k 1 End If Next i Map1 TrackingLayer Refresh True End Sub 画出交通和市政的预定义符号 符号代码如下 画出交通和市政的预定义符号 符号代码如下 Option Explicit Dim Pt 400 As MapObjects2 Point Dim Pt1 400 As MapObjects2 Point Dim Sym 400 As New MapObjects2 Symbol Dim tSym As New MapObjects2 TextSymbol Private Sub Form Load D

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论