您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 第五讲MO图形的绘制
第五讲MO图形的绘制MO虽然不是绘图软件,但经常要用到在地图上画点标明位置,画矩形或多边形标明地图查询范围等操作,因此也需要用到一些基本的绘图功能。MO的绘图就是在MAP上产生图形对象的过程,图形对象主要有:Point(点),Points(点集)、Line(线)、Rectangle(矩形)、Polygon(多边形)、Ellipse(椭圆)。绘图时,先要创建一个绘图对象,给他赋值(位置和尺寸),再在Symbol对象中定义显示方式,最后用Drawshape方法在地图上显示这个图形。定义Symbol对象,不仅可以设置线型、填充方式、尺寸、颜色和字体等,还可以画出多种预定义的符号。Drawshape方法绘图外,还可以用AddEvent方法在动态图层上画动态图形对象(GeoEvent)。另外还可以用DrawText方法在地图上写字。一、DrawShape绘图方法1、DrawShape定义DrawShape方法的语法为:object.DrawShapeshape,symbol其中,object:为绘图目的对象,一般为Map对象;shape:为绘图内容,是图形对象(Point,Points,Line,Rectangle,PolygonorEllipse)或记录集(Recordset)对象;symbol:是一个Symbol对象,说明绘图方式。注意:调用DrawShape必须在LAYER或TrackingLayer的drawing事件中,即AfterTrackingLayerDraw,BeforeLayerDraw,BeforeTrackingLayerDraw,AfterLayerDraw事件过程中才有效。如果指定一个Recordset作为DrawShape的参数,该数据集必须是从GeoDataset获取,而不是从一个Table对象获取,同时MO从shape字段的第一个特征值开始,到最后一个结束,然后又指向第一个记录。2、画点(1)预定义画点:可以用Point对象画一个点,也可以用Points对象画多个点。示例:DimsymAsNewMapObjects2.SymbolDimpAsPointDimptsAsPointsPrivateSubMap1_AfterTrackingLayerDraw(ByValhDCAsstdole.OLE_HANDLE)Setpts=NewPointsSetp=Map1.ToMapPoint(1000,1000)pts.Addp'是Points对象中的一个函数,功能是增加一个Point成员到Points对象内。Setp=Map1.ToMapPoint(3000,2000)pts.Addpsym.Color=moRedsym.SymbolType=moPointSymbolsym.Size=3Map1.DrawShapepts,symEndSub(2)利用鼠标点击画点:通过鼠标点击屏幕获取点的坐标,进行画点操作。示例:DimsymAsNewMapObjects2.SymbolDimpAsPointDimptsAsNewPointsPrivateSubMap1_AfterTrackingLayerDraw(ByValhDCAsstdole.OLE_HANDLE)IfNotptsIsNothingThensym.Color=moRedsym.SymbolType=moPointSymbolsym.Size=3Map1.DrawShapepts,symMap1.DrawShapepts,symEndIfEndSubPrivateSubMap1_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)Setp=Map1.ToMapPoint(X,Y)pts.AddpMap1.TrackingLayer.RefreshTrue’TrackingLayer对象是MAP控件中的一个图层,它描述位置可以动态改变的地理目标,Refresh是TrackingLayer对象的成员函数,强制刷新TrackingLayer对象。EndSub3、画线MO中画线的基本原理是先设置两个点,将他们添加到一个Points对象中,再将Points对象放到一个Line对象中,使用DrawShape方法就可以画出一条线段来。如果在Points对象中有N个点,则可以产生一条N-1段的折线。(1)预定义点画线,示例:Dimg_lineAsMapObjects2.LineDimptsAsPointsDimpAsPointDimsymAsSymbolPrivateSubCommand1_Click()Setg_line=NewMapObjects2.LineSetpts=NewPointsSetp=Map1.ToMapPoint(1000,1000)pts.AddpSetp=Map1.ToMapPoint(2000,3000)pts.Addpg_line.Parts.Addpts'Parts是Line对象的一个属性,此属性指向一个Parts集合对象,通过Parts属性可以检索组成线的片断(Parts),而Parts的每一个成员是一个点集(Points)。Setpts=g_line.Parts(0)Map1.RefreshEndSubPrivateSubMap1_AfterTrackingLayerDraw(ByValhDCAsstdole.OLE_HANDLE)IfNotg_lineIsNothingThenDimsymAsNewSymbolIfpts.Count1Then’Count属性表示当前Points对象内成员的数目,这是一个只读值。sym.Color=moRedsym.SymbolType=moLineSymbolsym.Size=5Map1.DrawShapeg_line,symEndIfEndIfEndSub(2)鼠标点击获取点并画线,示例:Dimg_lineAsMapObjects2.LineDimptsAsPointsDimpAsPointDimsymAsSymbolPrivateSubCommand1_Click()’设置清空按钮Setg_line=NothingSetpts=NothingMap1.RefreshEndSubPrivateSubMap1_AfterTrackingLayerDraw(ByValhDCAsstdole.OLE_HANDLE)DimsymAsNewSymbolIfNotg_lineIsNothingThensym.Color=moBlackMap1.DrawShapepts,symIfpts.Count1Thensym.Color=moRedsym.SymbolType=moLineSymbolsym.Size=5Map1.DrawShapeg_line,symEndIfEndIfEndSubPrivateSubMap1_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)IfButton=1ThenIfg_lineIsNothingThenSetg_line=NewMapObjects2.LineEndIfIfptsIsNothingThenSetpts=NewPointsEndIfSetp=Map1.ToMapPoint(X,Y)pts.AddpIfpts.Count=1Theng_line.Parts.AddptsSetpts=g_line.Parts(0)EndIfMap1.TrackingLayer.RefreshTrueElseMsgBoxrightEndIfEndSub4、画矩形和椭圆(1)预定义画矩形:画矩形是先定义一个矩形对象,给它的top、left、bottom、right属性赋值,再使用DrawShape方法就可以画出一个矩形来。定义矩形范围时,可以先确定一个中心点,再确定一个半径(或X方向半径和Y方向半径),得到top、left、bottom、right的值。示例:OptionExplicitDimrectAsMapObjects2.RectanglePrivateSubCommand1_Click()DimdistAsDoubleDimptAsNewPointSetrect=NewMapObjects2.Rectangledist=0.2Setpt=Map1.ToMapPoint(2500,1500)’这里可以动态设置中心点的位置rect.Right=pt.X+distrect.Left=pt.X-distrect.Top=pt.Y+distrect.Bottom=pt.Y-distMap1.RefreshEndSubPrivateSubMap1_AfterTrackingLayerDraw(ByValhDCAsstdole.OLE_HANDLE)IfNotrectIsNothingThenDimsymAsNewSymbolsym.SymbolType=moFillSymbolsym.Style=moDiagonalCrossFillsym.Color=moBlueMap1.DrawShaperect,symEndIfEndSub(2)定义一个矩形框对象后,进行画矩形。示例:OptionExplicitDimrectAsMapObjects2.RectanglePrivateSubMap1_AfterTrackingLayerDraw(ByValhDCAsstdole.OLE_HANDLE)DimsymAsNewMapObjects2.SymbolIfNotrectIsNothingThensym.SymbolType=moFillSymbolsym.Style=moDiagonalCrossFillsym.Color=moBlueMap1.DrawShaperect,symEndIfEndSubPrivateSubMap1_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)Setrect=Map1.TrackRectangleMap1.TrackingLayer.RefreshTrueEndSub用同样的方法可以画出椭圆来。5、用Track方法画图形在MO中还可以用一类方法在地图上半自动画图,如:TrackCircle方法,点击产生圆心,拖动产生半径,放手成圆形;TrackRectangle方法,点击产生一个角,拖动放大,放手形成矩形;TrackPolygon方法,点击画几条直线,双击形成多边形图形。这一类方法都是以Track开头,所以称为Track画图方法,这和TrackingLayer(动态图层)毫无关系。示例:OptionExplicitDimeliAsMapObjects2.EllipseDimrecsAsMapObjects2.RectangleDimplyAsMapObjects2.PolygonPrivateSubMap1_AfterTrackingLayerDraw(ByValhDCAsstdole.OLE_HANDLE)DimsymAsNewMapObjects2.Symbolsym.SymbolType=moFillSymbolsym.Style=moDiagonalCrossFillIfNotrecsIsNothingThensym.Color=moBlueMap1.DrawShaperecs,symEndIfIfNoteliIsNothingThensym.Color=moRedMap1.DrawShapeeli,symEndIfIfNotplyIsNothingThensym.Color=moGreenMap1.DrawShapeply,symEndIfEndSubPrivateSubMap1_MouseDown(ButtonAsInte
本文标题:第五讲MO图形的绘制
链接地址:https://www.777doc.com/doc-2190164 .html