您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > 第3章图层的基本功能开发
9第3章图层的基本功能开发3.1用程序加裁图层文件加载的图层如果基本固定,一般放在Form_Load过程中。也可以动态加载或卸载图层,这时要在其它过程或函数中进行。3.1.1在同一个文件夹下加载如果你的程序和GIS图层文件(dbf、shp、shx等)在一个文件夹,图层为Mexico文件夹下的States和Rivers,加载程序如下:(工程Chapter302一Form01)OptionExplicitPrivateSubForm_Load()DimdcAsNewDataConnectionDimlayerAsMapLayerdc.Database=App.Path‘设当前文件夹为图层文件夹;IfNotdc.ConnectThenMsgBox在指定的文件夹下没找到图层数据文件!EndEndIfSetlayer=NewMapLayerSetlayer.GeoDataset=dc.FindGeoDataset(States)Map1.Layers.AddlayerSetlayer=NewMapLayerSetlayer.GeoDataset=dc.FindGeoDataset(Rivers)Map1.Layers.AddlayerMap1.RefreshEndSub加载图层后,要用Map1.Refresh进行刷新后一样显示。3.1.2在不同文件夹中加载由于在实际的应用程序中,图层文件和程序文件都很多,为了方便管理,一般程序文件和图层文件不放在一个文件夹,推荐采用一个文件夹(如DATA)单独存放图层文件,而把各个程序文件和它并列放置。例如应用程序文件夹路径为“D:\MO”,程序在“D:\MO\VB1”文件夹下,图层文件放在“D:\MO\Mexico”文件夹下,这时要用+”\..\”返回上级文件夹;(工程Chapter301一Form02)OptionExplicitPrivateSubForm_Load()DimdcAsNewDataConnectionDimlayerAsMapLayer10dc.Database=App.Path+\..\+MexicoIfNotdc.ConnectThenMsgBox在指定的文件夹下没找到图层数据文件!EndEndIfSetlayer=NewMapLayerSetlayer.GeoDataset=dc.FindGeoDataset(States)Map1.Layers.AddlayerSetlayer=NewMapLayerSetlayer.GeoDataset=dc.FindGeoDataset(Rivers)Map1.Layers.AddlayerMap1.RefreshEndSub如果你的图层文件夹要向上返回2级,可以用以下2级返回语句:dc.Database=App.Path+\..\..\+Mexico3.1.3图层的卸载和移动用语句:Map1.Layers.RemorveO可以把第O层卸载。注意:卸载了一个图层后,其它图层的序号就发生了变化。用语句:Map1.Layers.Clear可以一次卸载所有的图层。可以用MoveTo方法来把图层从位置l移动到位置2,如原来图层cities在第2层,用以下语句可以把它移动到第0层:Map1.Layers.MoveTo2,03.1.4图层的选择和隐藏用图层的索引号:Setlayer=Map1.Layers(0)或图层名称:Setlayer=Map1.Layers(“States”)来选择当前图层。用语句:layer.Visible=False来隐藏当前的图层。另外,还可以通过设置Mapl.Visible来隐藏或显示整个Map控件。以下是一个完整的例子。其在Form上放置一个Map控件和6个Command控件,程序为如下。(工程Chapter301一Form02)OptionExplicitDimdcAsNewDataConnectionDimlayerAsMapLayerPrivateSubCommand1_Click()‘图层加载11LayerSetMap1.RefreshEndSubPrivateSubCommand2_Click()‘图层卸载Map1.Layers.Clear'清除Map1的所有图层。EndSubPrivateSubCommand3_Click()‘图层0不可见OnErrorGoToerr1'如果Map1已经被清除,不进行操作。Setlayer=Map1.Layers(0)layer.Visible=FalseMap1.RefreshExitSuberr1:MsgBox没有图层!EndSubPrivateSubCommand4_Click()‘图层0可见OnErrorGoToerr1'如果Map1已经被清除,不进行操作。Setlayer=Map1.Layers(0)layer.Visible=TrueMap1.RefreshExitSuberr1:MsgBox没有图层!EndSubPrivateSubCommand5_Click()‘隐藏地图Map1.Visible=FalseEndSubPrivateSubCommand6_Click()‘显示地图Map1.Visible=TrueEndSubPrivateSubLayerSet()'图层设置模块Setlayer=NewMapLayerSetlayer.GeoDataset=dc.FindGeoDataset(States)Map1.Layers.AddlayerSetlayer=NewMapLayerSetlayer.GeoDataset=dc.FindGeoDataset(Rivers)Map1.Layers.AddlayerEndSub12PrivateSubForm_Load()dc.Database=App.PathIfNotdc.ConnectThenMsgBox在指定的文件夹下没找到图层数据文件!EndEndIfLayerSetMap1.RefreshEndSub程序界面如图3.1所示。图3.1图层隐藏示例3.2图层基本属性设置面状图层基本属性包括图层颜色、区域界线宽度、区域界线样式、区域界线颜色等,线状图层的属性包括线宽度、线样式、线颜色等,点状图层属性包括点大小、点样式、点颜色等,另外,还有属性的标注等。3.2.1设置图层颜色调试前面的程序时,你会发现图层的颜色是随机出现的。设置Symbol对象的color属性,可以很容易地设置固定的图层颜色。P16(工程Chapter302-Form02)Setlayer=NewMapLayer13Setlayer.GeoDataset=dc.FindGeoDataset(Rivers)layer.Symbol.Color=moRed‘设本图层(河流)为红色Map1.Layers.Addlayer其中moRed是MO的内设常数MO中常用的颜色有moBlack、moRed、moGreen、moBlue、moMagenta、moCyan、moWhite、moLingtGray、moDarkGray、moGray、moPlaneYellow、moLigntYellow、moYellow、moLimeGreen、moTeal、moDarkGreen、moMaroon、moPurple、moOrange、moKhaki、moOlive、moBrown、moNavy等23个常数也可以使用VB的颜色设置和RGB颜色设置,具体方法见附录C。3.2.2设置区域界线当图层为面状图层时,用layer.Symbol.Size可以设置区域界线的宽度,layer.Symbol.Size=1是较细的线型,layer.Symbol.Size=2是较粗的线型。还可以用layer.Symbol.Color设置区域界线的颜色,用layer.Symbol.Style设置线的样式,具体填充方式,具体方法参见附录D。3.2.3设置线属性当图层为线状图层时,用layer.Symbol.Size可以设置线的宽度,layer.Symbol.Size=1是较细的线型,layer.Symbol.Size=2是较粗的线型。还可以用layer.Symbol.Color设置线的颜色,用layer.Symbol.Style设置线的样式,具体方法参见附录D。3.2.4设置点属性当图层为点状图层时,用layer.Symbol.Size可以设置点的大小,一般用3~6,3是较小的点,6是较大的点。还可以用layer.Symbol.Color设置点的颜色,用layer.Symbol.Style设置点的样式,具体方法参见附录D。3.2.5属性设置的综合示例下面例子为加载墨西哥地图的州(States)、河流(Rivers)和城市(Cities)3种不同的图层,再用不同的颜色和样式来设置。(工程Chapter302一Form03)OptionExplicitPrivateSubForm_Load()DimdcAsNewDataConnectionDimlayerAsMapLayerdc.Database=App.Path+\..\+MexicoIfNotdc.ConnectThenMsgBox在指定的文件夹下没找到图层数据文件!EndEndIfSetlayer=NewMapLayerSetlayer.GeoDataset=dc.FindGeoDataset(States)14layer.Symbol.Color=moOrangelayer.Symbol.Size=1layer.Symbol.Style=2'对角线填充layer.Symbol.OutlineColor=moBrownMap1.Layers.AddlayerSetlayer=NewMapLayerSetlayer.GeoDataset=dc.FindGeoDataset(Rivers)layer.Symbol.Color=moDarkGreenlayer.Symbol.Size=2layer.Symbol.Style=1'虚线Map1.Layers.AddlayerSetlayer=NewMapLayerSetlayer.GeoDataset=dc.FindGeoDataset(Cities)layer.Symbol.Color=moRedlayer.Symbol.Size=5layer.Symbol.Style=2'三角形符号Map1.Layers.AddlayerMap1.RefreshEndSub其运行界面如图3.2所示。图3.2图层设置结果153.3图层标注利用MO的标注对象LabelRenderer,可以自动添加图层上对象的标注。3.3.1属性标注属性标注方法为:SetLayer.Renderer=NewLabelRenderer‘设置标注对象Layer.Renderer.Field=”Name”‘指定要显示的字段Layer.Renderer.AllowDuplicates=True‘允许标注重复其中”Name”是保存标注名称的字段。标注语句要在图层添加语句:Map1.Layers.Addlayer的前面。3.3.2设置图上字体以上的标注是按缺省方式来设置的字体,还可以利用标注对象的Symbol数组,来自己动手设置更合适的字体。(工程Chapter302一Form04)Setlayer.Renderer=NewLabelRendererlayer.Renderer.Field=NAME'指定要显示的字段layer.Renderer.Symbol(0).Font.Name=幼圆layer.Renderer.Symbol(0).Font.Bold=False'缺省为Truelayer.Renderer.Symbol(0).Color=moBlacklayer.Renderer.Symbol(0).Font.Size=8layer.Renderer.AllowDuplicates=True以上设置的字体是固定大小,
本文标题:第3章图层的基本功能开发
链接地址:https://www.777doc.com/doc-2193203 .html