第七讲 图层标注

上传人:夏** 文档编号:507805004 上传时间:2023-03-20 格式:DOC 页数:11 大小:75KB
返回 下载 相关 举报
第七讲 图层标注_第1页
第1页 / 共11页
第七讲 图层标注_第2页
第2页 / 共11页
第七讲 图层标注_第3页
第3页 / 共11页
第七讲 图层标注_第4页
第4页 / 共11页
第七讲 图层标注_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《第七讲 图层标注》由会员分享,可在线阅读,更多相关《第七讲 图层标注(11页珍藏版)》请在金锄头文库上搜索。

1、第7章 MO的图层渲染图层的渲染是通过设置图层对象的Renderer属性,来对MapLayer图层采用不同的渲染方法。Renderer属性设置的语法为:Object.Renderer=renderer其中:Object:一般为图层对象,表达为Layer,Map1.Layers.Item(0)或Map1.Layers(0);Renderer:表示渲染方式的对象表达式,可以是ClassBreaksRenderer、DotDensityRenderer、LabelRenderer或ValueMapRenderer等。7.1 标注渲染(LabelRenderer)标注渲染是通过对象LabelRende

2、rer来实现的。 LabelRenderer对象可以在图层上显示表示图形图元的属性文字。这些属性文字是从属性数据库(对于shape格式是dbf文件)的指定字段中读取的。 用Field属性来指定来源字段,用symbol(TextSymbol格式)属性来设置显示方式,用SymbolCount说明采用的Symbol数量。 在缺省方式下,LabelRenderer在一个图层内的每个图元的中心标注文字。可以通过以下的设置改变标注位置和方式。 如果SymbolCount1,就可以使用SymbolField属性了。使用SymbolField属性可以使一个图层上的图元有不同的渲染方式。 还可以用DrawBac

3、kGround属性控制图元的重绘功能,用AllowDuplicates属性控制是否允许重复标注,用SplinedText属性控制是否沿着图元方向标注,用Plip属性控制在沿着图元方向标注是否需要翻转。 除了使用Field属性决定标注来源字段外,LabelRenderer还提供了几种设置方式来源字段的属性,如用HeightField指定标注的高度的来源,用RotationField属性指定标注时旋转的角度的来源,用XoffsetField和YoffsetField属性设置标注时偏移数值的来源,还可以用FittedField属性决定一条直线来确定标注位置。最后,还可以设置LevelField属性值

4、,利用MaxLevel和MinLevel属性,可以控制哪个比例尺的图元可以被标注。定义标注渲染的设置语句为:Set layer.Renderer=new LabelRenderer 设置标注渲染方式;Layer.Renderer.Field=”Name” 指定要显示的字段;Layer.Renderer.Symbol(0).Color=moBlack 设置Symbol;Layer.Renderer.Symbol(0).Font.Size=107.12 标注偏移有时会遇到地图上的标注位置重复,可以使用XoffsetField和YoffsetField属性设置标注的偏移,以避免文字相互覆盖。Xoff

5、setField定义为:Object.XOffsetField=value其中:Object:图层对象;Value:字符串,指定存放X方向的偏移值的字段,在属性数据库中。YoffsetField的定义类似。定义的方法为:Dim oRenderer as new MapObjects2.LabelRendererMap1.Layers(0).Renderer=oRendereroRenderer.XoffsetField=”CITIES_” 如果要在一个图层中使用标注偏移,可以在属性数据库中增加2个数值型字段,分别命名为Xoffset和Yoffset,用于存放偏移数值。下例对于墨西哥地图的”CI

6、TIES_”字段使用了XoffsetField。在Form上添加一个Map1、Command1和Command2,运行时单击Command2,就可以在图层上看见标注偏移的效果,单击Command1还原。Dim dbl As BooleanPrivate Sub command1_click()dbl = FalseMap1.Layers.ClearDrawLayerEnd SubPrivate Sub command2_click()dbl = TrueMap1.Layers.ClearDrawLayerEnd SubPrivate Sub DrawLayer()Dim dc As New D

7、ataConnectionDim layer As MapLayerDim Trender As New mapobjects2.LabelPlacerdc.Database = App.Path + . + MexicoIf Not dc.Connect Then MsgBox 指定的文件夹下没找到图层数据文件! EndEnd IfSet layer = New MapLayerSet layer.GeoDataset = dc.FindGeoDataset(states)layer.Symbol.Color = moOrangelayer.Symbol.Size = 1layer.Symb

8、ol.Style = 2layer.Symbol.OutlineColor = moBrownMap1.Layers.Add layerSet layer = New MapLayerSet layer.GeoDataset = dc.FindGeoDataset(cities)layer.Symbol.Color = moRedlayer.Symbol.Size = 3layer.Symbol.Style = 0Set layer.Renderer = New LabelRendererWith layer.Renderer If dbl Then .XOffsetField = Citie

9、s_ End If .Field = Name .Symbol(0).Color = moBlack .Symbol(0).Font.Size = 8End WithMap1.Layers.Add layerMap1.RefreshEnd Sub由于cities.dbf的数据库是MO提供的,其中没有Xoffset和Yoffset字段用于存放标注偏移量,因此这个例子运行时,只是胡乱偏移,并不美观。实际应用中要仔细设置。下图是笔者做的一个北京市的水质管理系统的GIS图,其中的水质测站利用Xoffset和Yoffset字段,设置了合理的标注偏移。7.1.3 使用SymbolField进行多样化渲染使

10、用SymbolField属性,可以使一个图层上的图元有不同的标注渲染方式。除了用Field属性来指定标注来源字段外,还要用SymbolField属性指定一个序号字段。该字段的可能取值个数决定了需要的Symbol种类。定义一个SymbolCount,对图层设置和SymbolCount数目相同的Symbol(i)。运行时每个图元从SymbolField所指定的字段中取得一个序号i值,绘制则用Symbol(i)显示渲染。7.1.4 分级标注可以通过Field属性得到标注字段,LevelField属性得到分级数值字段,利用设置MaxLevel和MinLevel属性,控制哪些图元可以被标注。Privat

11、e Sub command1_click()Dim orenderer As New MapObjects2.LabelRendererMap1.Layers(CITIES).Renderer = orendererWith orenderer .Field = NAME .LevelField = CITIES .MinLevel = 0 .MaxLevel = 13End WithMap1.RefreshEnd Sub7.2 按值渲染(ValueMapRenderer)7.2.1 ValueMapRenderer定义用ValueMapRenderer对象可以按照数值给图层的图元上色。数值用

12、Value属性指定的字段从属性数据库中得来,显示方式用一组Symbol来定义。另外,还可以定义一个DefaultSymbol,用以显示没有匹配的图元。ValueMapRenderer不仅支持数值字段,也支持字符字段,它可以容纳32767个值。但ValueMapRenderer不支持Boolean或Date字段。使用时,要先定义一个ValueMapRenderer对象,如:Dim oRenderer as new MapObjects2.ValueMapRenderer再得到指定字段所有不重复数值的数组(如strs),然后设置oRenderer.Field和oRenderer.ValueCoun

13、t,再用下面的语句为ValueMapRenderer对象填充值:For i=0 to oRenderer.ValueCount-1 oRenderer.Value(i)=strs(i)next i最后:Set map1.Layers(0).Renderer=oRendererMap1.Refresh7.2.2基本示例Dim moRecset As MapObjects2.RecordsetDim oRenderer As New MapObjects2.ValueMapRendererPrivate Sub Command1_Click() Dim strs As New MapObjects

14、2.Strings Dim sFldname As String Dim oSym As New MapObjects2.Symbol Dim i As Integer 初始化 Set moRecset = Map1.Layers(0).Records sFldname = area Do While Not moRecset.EOF strs.Add moRecset(sFldname).ValueAsString moRecset.MoveNext Loop 设置渲染参数 Set Map1.Layers(0).Renderer = oRenderer oRenderer.Field = sFldname oRenderer.ValueCount = strs.Count 设置缺省值 oRenderer.UseDefault = True Set oSym = oRenderer.DefaultSymbol oSym.Color = moPaleYellow 开始渲染 For i = 0 To oRenderer.ValueCount - 1 oRenderer.Value(i) = strs(i) Next i Map1.Refresh 消除对象,为下次点击准备 Set oRenderer = Nothing Set strs = Nothi

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 建筑资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号