gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15951
  • QQ
  • 铜币25345枚
  • 威望15368点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
阅读:1373回复:2

在MO中如何保存一个工程空间

楼主#
更多 发布于:2004-05-19 01:50
<TABLE height=1 cellSpacing=0 cellPadding=0 width=600 border=0>

<TR>
<TD vAlign=center width=600 height=20>
<P  align=center><B><FONT size=3><FONT>在</FONT>MO<FONT>中如何保存一个工程空间</FONT></FONT></B></P></TD></TR>
<TR>
<TD  width=9 height=1></TD>
<TD  width=1 bgColor=#a2bed9 height=1> </TD>
<TD  width=26 height=1></TD>
<TD vAlign=top width=600 height=1><B></B><FONT face=Arial size=3></FONT>
<P  align=center>
<P  align=center><FONT size=2><I></I></FONT></P><FONT face=Arial size=3> </P></FONT>
<P  align=justify><FONT face=宋体 size=2>摘要:本文简单介绍了在项目中如何对用户的一些个性化设置进行保存以及加载,使用户对工作空间进行随意定制和恢复。</FONT></P>
<P  align=justify><FONT size=2><FONT face=宋体>关键词:</FONT>MO<FONT face=宋体>;个性化设置;工作空间</FONT></FONT></P><B>
<P  align=justify><FONT face=宋体 size=2>一、保存工作空间的必要性</FONT></P></B>
<P  align=justify><FONT size=2><FONT face=宋体>在</FONT>GIS<FONT face=宋体>项目中,地理图一般来说都包括地理背景图和专业图层,相比较而言地理背景图占有的数据库空间和网络流量都比专业图要多的多。但是这里的地理背景图是一个大而全的数据仓库、是所有用户数据的并集,可能任何一个用户都不会用到全部图层而只是其中一部分。那么在项目中就应该能够满足这么一些需求:根据用户不同的要求对图层进行定制,有的用户只是对自己管辖的范围感兴趣而不是所有的区域;有的用户只对其中某个图层感兴趣;有的用户想把该图层的颜色变成黑色,而另外一些用户可能想把该图层的颜色变为红色</FONT>…..<FONT face=宋体>这样就要求用户每次加载只是其默认的固定区域。这样做的好处就是:可以使用户迅速而方便的定位到自己关心的区域,方便的定制系统界面;减少网络压力、提高系统运行速度、减轻服务器的压力。</FONT></FONT></P>
<P  align=justify><FONT size=2><FONT face=宋体>针对上面的需求笔者提出了一个</FONT>MaoObjects<FONT face=宋体>的概念:每次当用户退出程序的时候提示用户是否保存工作空间,如果保存就把现有设置进行保存,其中的设置包括:加载不同的图层加载图层的不同范围制定图层的背景色图层的绝对路径图层的填充色或者线条颜色各个图层符号的大小等等,实现的功能与</FONT>ArcGIS<FONT face=宋体>中的</FONT>.mxd<FONT face=宋体>基本类似,下次加载工程空间时可以复现上次退出程序时的状态。</FONT></FONT></P>
<P  align=center><IMG src="http://www.esrichina-bj.cn/library/chinanews/image/cn15-mo.gif" border=0></P>
<P  align=left><B><FONT face=宋体 size=2>二、保存工作空间方法</FONT></P></B>
<P  align=justify><FONT size=2><FONT face=宋体>建立一个</FONT>.zyc<FONT face=宋体>的文本文件,在该文件中存放一些关于工程文件的字段,就如同</FONT>.ini<FONT face=宋体>文件一样,每当进行工程空间的保存时就将工程信息写入这个文本文件,以备使用,这个文件的主要格式如下所示:</FONT></FONT></P>
<BLOCKQUOTE>
<P ><FONT size=2>[START LAYERS]</FONT></P>
<P ><FONT size=2>[START MAPLAYER 2]</FONT></P>
<P ><FONT size=2>FILE D:\Map\saveproject street<FONT face=宋体>(这里确定待加载图层的路径)</FONT></FONT></P>
<P ><FONT size=2>SYMBOLTYPE 2<FONT face=宋体>(该选项缺点是多边形、线状还是点状地物)</FONT></FONT></P>
<P ><FONT size=2>STYLE 0<FONT face=宋体>(线形)</FONT></FONT></P>
<P ><FONT size=2>COLOR 12632256<FONT face=宋体>(图形颜色)</FONT></FONT></P>
<P ><FONT size=2>OUTLINECOLOR 0</FONT></P>
<P ><FONT size=2>SIZE 1<FONT face=宋体>(大小)</FONT></FONT></P>
<P ><FONT size=2>[END MAPLAYER 2]</FONT></P>
<P ><FONT size=2>[START MAPLAYER 1]</FONT></P>
<P ><FONT size=2>FILE D:\Map\saveproject river</FONT></P>
<P ><FONT size=2>SYMBOLTYPE 2</FONT></P>
<P ><FONT size=2>STYLE 1</FONT></P>
<P ><FONT size=2>COLOR 48966825</FONT></P>
<P ><FONT size=2>OUTLINECOLOR 255</FONT></P>
<P ><FONT size=2>SIZE 1</FONT></P>
<P ><FONT size=2>[END MAPLAYER 1]</FONT></P>
<P ><FONT size=2>[START MAPLAYER 0]</FONT></P>
<P ><FONT size=2>FILE D:\Map\saveproject city</FONT></P>
<P ><FONT size=2>SYMBOLTYPE 1</FONT></P>
<P ><FONT size=2>STYLE 0</FONT></P>
<P ><FONT size=2>COLOR 16711680</FONT></P>
<P ><FONT size=2>SIZE 1</FONT></P>
<P ><FONT size=2>[END MAPLAYER 0]</FONT></P>
<P ><FONT size=2>[END LAYERS]</FONT></P>
<P ><FONT size=2>[START MAPEXTENT]</FONT></P>
<P ><FONT size=2>-74.4602941830473</FONT></P>
<P ><FONT size=2>-73.851610228764</FONT></P>
<P ><FONT size=2>40.0239838439149</FONT></P>
<P ><FONT size=2>40.4799665971236</FONT></P>
<P  align=justify><FONT size=2>[END MAPEXTENT]</FONT></P></BLOCKQUOTE>
<P  align=justify><FONT size=2><FONT face=宋体>上面的</FONT>.zyc<FONT face=宋体>文件包括两大部分,其中一部分是与图层显示有关的,另一部分是与图层范围有关的。在第一部分中,根据</FONT>FILE<FONT face=宋体>选项对图层数据进行加载,根据</FONT>SYMBOLTYPE<FONT face=宋体>确定是多边形还是线状还是点状,</FONT>STYLE<FONT face=宋体>为显示样式,</FONT>COLOR<FONT face=宋体>为符号颜色,</FONT>SIZE<FONT face=宋体>为符号大小。第二部分则是地图加载时需要加载的左上角和右下角的</FONT>x<FONT face=宋体>,</FONT>y<FONT face=宋体>坐标。</FONT></FONT></P><B>
<P  align=justify><FONT face=宋体 size=2>三、加载图层方法</FONT></P></B>
<P  align=justify><FONT size=2><FONT face=宋体>每当需要加载这个工程文件时程序就首先从</FONT>.zyc<FONT face=宋体>文件中读取有关信息,然后根据这些信息进行图层的加载和渲染。</FONT></FONT></P>
<BLOCKQUOTE>
<P  align=justify><FONT size=2>Do Until stro.Contains("[END LAYERS]")</FONT></P>
<P  align=justify><FONT size=2>Set mlyr = New MapObjects2.MapLayer</FONT></P>
<P  align=justify><FONT size=2>stro.Text = lf.ReadElt</FONT></P>
<P  align=justify><FONT size=2>Do Until stro.Contains("[END MAPLAYER")</FONT></P>
<P  align=justify><FONT size=2>key = stro.Extract(0)</FONT></P>
<P  align=justify><FONT size=2>value = stro.Extract(1)</FONT></P>
<P  align=justify><FONT size=2>Select Case key</FONT></P>
<P  align=justify><FONT size=2>Case "FILE"</FONT></P>
<P  align=justify><FONT size=2>dc.Disconnect</FONT></P>
<P  align=justify><FONT size=2>dc.Database = value</FONT></P>
<P  align=justify><FONT size=2>Set mlyr.GeoDataset = dc.FindGeoDataset(stro.Extract(2))</FONT></P>
<P  align=justify><FONT size=2>Case "SYMBOLTYPE"</FONT></P>
<P  align=justify><FONT size=2>mlyr.Symbol.SymbolType = value</FONT></P>
<P  align=justify><FONT size=2>Case "STYLE"</FONT></P>
<P  align=justify><FONT size=2>mlyr.Symbol.Style = value</FONT></P>
<P  align=justify><FONT size=2>Case "COLOR"</FONT></P>
<P  align=justify><FONT size=2>mlyr.Symbol.Color = value</FONT></P>
<P  align=justify><FONT size=2>Case "OUTLINECOLOR"</FONT></P>
<P  align=justify><FONT size=2>mlyr.Symbol.OutlineColor = value</FONT></P>
<P  align=justify><FONT size=2>Case "SIZE"</FONT></P>
<P  align=justify><FONT size=2>mlyr.Symbol.Size = value</FONT></P>
<P  align=justify><FONT size=2>End Select</FONT></P>
<P  align=justify><FONT size=2>stro.Text = lf.ReadElt</FONT></P>
<P  align=justify><FONT size=2>Loop</FONT></P>
<P  align=justify><FONT size=2>Map1.Layers.Add mlyr</FONT></P>
<P  align=justify><FONT size=2>stro.Text = lf.ReadElt</FONT></P>
<P  align=justify><FONT size=2>Loop</FONT></P>
<P  align=justify><FONT size=2>stro.Text = lf.ReadElt</FONT></P>
<P  align=justify><FONT size=2>rect.Left = lf.ReadElt</FONT></P>
<P  align=justify><FONT size=2>rect.Right = lf.ReadElt</FONT></P>
<P  align=justify><FONT size=2>rect.Bottom = lf.ReadElt</FONT></P>
<P  align=justify><FONT size=2>rect.Top = lf.ReadElt</FONT></P>
<P  align=justify><FONT size=2>Set Map1.Extent = rect</FONT></P></BLOCKQUOTE><B>
<P  align=justify><FONT face=宋体 size=2>四、方法的优缺点</FONT><FONT face=Arial size=3></P></FONT></B>
<P  align=justify><FONT face=宋体 size=2>优点:上述方法比较简单,利于编程实现,只要按顺序对图层进行加载,然后根据在文件中读取的数据项进行渲染即可,另外,由于需要的额外计算开销小,所以速度较快。</FONT></P>
<P  align=justify><FONT face=宋体 size=2>缺点:不能实现一些比较复杂的渲染,如:根据线路名称对线路进行渲染等。这些还是要在编程过程中做一些工作,或者在该文件中加入其他选项。</FONT></P>
<P  align=justify><FONT size=2><FONT face=宋体>对上面的文件再进行细化,可以更加详细的对系统进行控制,在</FONT>GIS<FONT face=宋体>开发中可以很好的利用,当然也可以把这个文件的有关记录放到数据库中进行控制。</FONT></FONT></P></TD></TR></TABLE>
喜欢0 评分0
GIS麦田守望者,期待与您交流。
aying
路人甲
路人甲
  • 注册日期2003-10-05
  • 发帖数60
  • QQ
  • 铜币275枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2004-06-01 10:18
我也学习一下
举报 回复(0) 喜欢(0)     评分
ryx32
路人甲
路人甲
  • 注册日期2003-08-05
  • 发帖数457
  • QQ
  • 铜币4046枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2004-07-09 12:52
<P>如果工作空间中的某个文件不存在怎办</P>
举报 回复(0) 喜欢(0)     评分
游客

返回顶部