cool小飞侠
路人甲
路人甲
  • 注册日期2004-08-02
  • 发帖数122
  • QQ
  • 铜币4枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1377回复:5

[求助]关于symbol问题

楼主#
更多 发布于:2005-01-25 14:14
    我想要把一个点层上的所有的对象,都根据他们的不同类别来用不同的符号表示,但是custom只能有一种定义的symbol。我该如何做呢??

    我看到以前的一个帖子了,关于mosymbol的,可是我看不懂。下来的东西也不知道怎么用??求助!!!!

<img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em02.gif" /><img src="images/post/smile/dvbbs/em02.gif" /><img src="images/post/smile/dvbbs/em02.gif" /><img src="images/post/smile/dvbbs/em03.gif" /><img src="images/post/smile/dvbbs/em05.gif" /><img src="images/post/smile/dvbbs/em05.gif" /><img src="images/post/smile/dvbbs/em05.gif" />
喜欢0 评分0
cool小飞侠
路人甲
路人甲
  • 注册日期2004-08-02
  • 发帖数122
  • QQ
  • 铜币4枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2005-01-25 14:20
而且我想要用的符号都是不规则的图,所以用图片代替也可以。但是也是只能代替一种符号。怎么办呢???<img src="images/post/smile/dvbbs/em07.gif" /><img src="images/post/smile/dvbbs/em07.gif" /><img src="images/post/smile/dvbbs/em07.gif" />
举报 回复(0) 喜欢(0)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15951
  • QQ
  • 铜币25345枚
  • 威望15368点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
2楼#
发布于:2005-01-25 14:54
线还是点?
GIS麦田守望者,期待与您交流。
举报 回复(0) 喜欢(0)     评分
袁绍伦
路人甲
路人甲
  • 注册日期2003-08-08
  • 发帖数654
  • QQ164646905
  • 铜币1336枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2005-01-25 18:04
<TABLE fixed; WORD-BREAK: break-all" width="90%" border=0><TR><TD 9pt; LINE-HEIGHT: 12pt" width="100%"><img src="http://www.gisempire.com/bbs/Skins/Default/topicface/face715.gif"> <B></B>
<P align=center center? TEXT-ALIGN: 0pt; 0cm><B normal?>我想,下面的文档应该对你有帮助,虽然一些上下文你可能不了解,但是部分内容应该很好理解的。祝好运,有问题联系!</B></P><P align=center center? TEXT-ALIGN: 0pt; 0cm><B normal?>点图层处理文档</B><B normal?>
</B><p><P 0pt; 0cm 18pt? TEXT-INDENT:>按照下面标准来处理点图层,可以细化点图层中每一个点的显示方式,如:符号、颜色、大小、角度、与其他点比较而言是否按比例放大缩小。同时既然能对每一个点进行处理,那么将点分类就可以制作专题图。为了说明举例如下(例子只是说明应用,请举一反三,在处理很多实例时采取本方法会更快捷、高效):</P><P 0pt; 0cm 18pt? TEXT-INDENT:>中国所有城市,我们把他们分为<FONT face="Times New Roman">4</FONT>类:首都、省会、重要城市、其他城市。有若干处理方法,以往的方法可以将<FONT face="Times New Roman">4</FONT>类城市分别放到<FONT face="Times New Roman">4</FONT>个图层。现在我们可以把他们都放到一个图层,只要设置他们的属性信息,就可以达到和放到<FONT face="Times New Roman">4</FONT>个图层显示时同样的显示效果,这样在有的情况下,处理会方便的多。</P><P 0pt; 0cm 18pt? TEXT-INDENT:><P><FONT face="Times New Roman"></FONT></P><p><P 0cm TEXT-INDENT: 18.0pt? list tab-stops: lfo1; level1 l0 mso-list: -18pt; 18pt; 0pt><FONT face="Times New Roman">1、  </FONT>首先要确保图层属性表中有如下三个字段:</P><P 0pt; 0cm 18pt? TEXT-INDENT:><FONT face="Times New Roman">Renderer</FONT>(<FONT face="Times New Roman">Text</FONT>):格式要严格如下所示!该字段分三列,第一列为<FONT face="Times New Roman">TrueType</FONT>字体<FONT face="Times New Roman">SarstFont</FONT>(<FONT face="Times New Roman">TrueType</FONT>字体,名称可变,需要在操作系统下注册字体)中点图元显示图形对应的字模索引;第二列为点图元显示的颜色对应的<FONT face="Times New Roman">Long</FONT>型大小;第三列为点图元的大小,中间用逗号格开,同时注意逗号要在英文输入法下输入。例如:<FONT face="Times New Roman">13,255,18 </FONT>该字符含义为:显示点图元形状为<FONT face="Times New Roman">SarstFont</FONT>字体中索引为<FONT face="Times New Roman"> 13 </FONT>的字模;颜色为红色;大小为<FONT face="Times New Roman"> 18</FONT>。</P><P 0pt; 0cm 18pt? TEXT-INDENT:><FONT face="Times New Roman">Rotation</FONT>(<FONT face="Times New Roman">short</FONT>):用来标识显示的点图元的旋转角度,若不需要旋转需赋<FONT face="Times New Roman">0</FONT>,若要旋转<FONT face="Times New Roman">45</FONT>度那么赋值<FONT face="Times New Roman">45</FONT>即可,以此类推。旋转方向是顺时针。</P><P 0pt; 0cm 18pt? TEXT-INDENT:><FONT face="Times New Roman">Scale</FONT>(<FONT face="Times New Roman">short</FONT>):用来标识显示的点图元的相对大小比例,值为<FONT face="Times New Roman">1</FONT>时表示原始大小,若为<FONT face="Times New Roman">2</FONT>则表示<FONT face="Times New Roman">2</FONT>倍大小(相对于原始大小而言),以此类推。</P><P 0cm 0pt?><P><FONT face="Times New Roman"></FONT></P><p><P 0cm TEXT-INDENT: 18.0pt? list tab-stops: lfo1; level1 l0 mso-list: -18pt; 18pt; 0pt><FONT face="Times New Roman">2、  </FONT>显示时,在适当的初始化处调用函数:<FONT face="Times New Roman">void RenderPointsLayer</FONT>(<FONT face="Times New Roman">int LayerIndex</FONT>)</P><P 0cm TEXT-INDENT: 18.0pt? list tab-stops: lfo1; level1 l0 mso-list: -18pt; 18pt; 0pt><FONT face="Times New Roman">3、  </FONT>应用实例:</P><P 0cm 18pt? 0pt><FONT face="Times New Roman">//</FONT>前提是确认知道将要渲染的图层为点图层,并且其属性表中严格遵守上面标准。</P><P 0cm 18pt? 0pt><FONT face="Times New Roman">int i = //</FONT>要渲染的点图层在索引<FONT face="Times New Roman">//</FONT></P><P 0cm 18pt? 0pt><FONT face="Times New Roman">RenderPointsLayer(i);</FONT></P><P 0cm TEXT-INDENT: 18.0pt? list tab-stops: lfo1; level1 l0 mso-list: -18pt; 18pt; 0pt><FONT face="Times New Roman">4、  void RenderPointsLayer</FONT>(<FONT face="Times New Roman">int LayerIndex</FONT>)的函数实现:</P><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>void CMOExersiceView::RenderPointsLayer(int LayerIndex) <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>{ <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>     CMoLayers layers = m_map.GetLayers(); <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>     CMoMapLayer PointsLayer(layers.Item(CComVariant(LayerIndex))); <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>     ///////////////////////////////////////////////////////////////////////////// <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>     //首先从视觉上将图层上原有点除去!下面代码目的是从视觉上隐去图层原有的点地物标志!原因是采用GroupRenderer和LabelPlacer并不像直接采用ValueMapRenderer那样直接显示经过渲染的标志。它们的处理只是将渲染图层以背景的方式再添了一个图层。 <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>     CMoSymbol sym; <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>     if(!sym.CreateDispatch(TEXT("MapObjects2.Symbol"))) <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>         return; <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>     sym = PointsLayer.GetSymbol(); <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>     sym.SetSize(0); <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>     //隐去图层原有点地物标志结束     <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>     ///////////////////////////////////////////////////////////////////////////// <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:><p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>     CMoLabelPlacer LabelPlacer; <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>     if (!LabelPlacer.CreateDispatch(TEXT("MapObjects2.LabelPlacer"))) <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>         return; <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>     CMoGroupRenderer GroupRenderer; <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>     if (!GroupRenderer.CreateDispatch(TEXT("MapObjects2.GroupRenderer"))) <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>         return; <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>     CMoValueMapRenderer vmRender; <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>     if (!vmRender.CreateDispatch(TEXT("MapObjects2.ValueMapRenderer"))) <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>         return; <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>     CMoRecordset recs=PointsLayer.GetRecords(); <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>     if(recs.GetEof()) <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>         return; <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:><p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>     CMoFields Fields=recs.GetFields();   <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>     CMoStrings strings; <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>     VERIFY(strings.CreateDispatch(TEXT("MapObjects2.Strings"))); <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>     while (!recs.GetEof()) <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>     { <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>         CMoField PointVMR(Fields.Item(CComVariant("Renderer"))); <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>         strings.Add(PointVMR.GetValueAsString()); <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>         recs.MoveNext(); <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>     } <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:><p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>     vmRender.SetField(TEXT("Renderer"));////ValueMapRenderer的主要字段 <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>     vmRender.SetRotationField("Rotation");//用来标识旋转角度 <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>    vmRender.SetScalingField("Scale");//用来标识点显示的放缩比 <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>    vmRender.SetSymbolType(0);//表示是点图层的渲染 <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>    vmRender.SetValueCount(strings.GetCount());//表示渲染的Symbol个数 <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:><p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>     for (short i = 0; i < strings.GetCount(); i++) <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>     { <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>         CString TempStr(strings.Item(CComVariant(i))); <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>         int j = TempStr.Find(','); <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>         CString Character(TempStr.Left(j)); <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>         TempStr = TempStr.Right(TempStr.GetLength() - j - 1); <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>         j = TempStr.Find(','); <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>         CString Color(TempStr.Left(j)); <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>         TempStr = TempStr.Right(TempStr.GetLength() - j - 1); <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>         int CharacterIndex = atoi(Character);//解析后字体对应的索引 <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>         int ColorIndex = atoi(Color);//解析后颜色对应的索引 <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>         int SizeIndex = atoi(TempStr);//解析后大小对应的索引 <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>         <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>         vmRender.SetValue(i,strings.Item(CComVariant(i)));//给索引为i的Symbol赋值 <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>         vmRender.GetSymbol(i).SetColor(ColorIndex);//设置颜色 <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>         vmRender.GetSymbol(i).SetSize(SizeIndex);//设置大小 <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>         vmRender.GetSymbol(i).SetStyle(4);//表示采用TrueType字体中图元显示标志 <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>         COleFont font = vmRender.GetSymbol(i).GetFont();//取出引用字体并设置具体字体 <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>         font.SetName("SarstFont"); <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>         vmRender.GetSymbol(i).SetCharacterIndex(CharacterIndex);//设置字体字模的索引 <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>     } <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:><p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>     GroupRenderer.Add(vmRender); <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>     LabelPlacer.SetBackgroundRenderer(GroupRenderer); <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>     PointsLayer.SetRenderer(LabelPlacer); <p><p><P align=left TEXT-ALIGN: 0pt; 0cm none? mso-layout-grid-align: left; 12pt; LINE-HEIGHT:>}</P></TD></TR></TABLE>
愿意和大家交朋友! QQ:47559983 MSN:shaolun_yuan@hotmail.com eMail:shaolun-yuan@163.com
举报 回复(0) 喜欢(0)     评分
tomas.tang
路人甲
路人甲
  • 注册日期2004-05-11
  • 发帖数113
  • QQ
  • 铜币491枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2005-01-26 02:52
<img src="http://www.gisempire.com/bbs/Skins/Default/emot/em01.gif"><img src="http://www.gisempire.com/bbs/Skins/Default/emot/em02.gif"><img src="http://www.gisempire.com/bbs/Skins/Default/emot/em03.gif">
举报 回复(0) 喜欢(0)     评分
cool小飞侠
路人甲
路人甲
  • 注册日期2004-08-02
  • 发帖数122
  • QQ
  • 铜币4枚
  • 威望0点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2005-01-26 08:56
是点图层。谢谢各位!!<img src="images/post/smile/dvbbs/em02.gif" /><img src="images/post/smile/dvbbs/em02.gif" /><img src="images/post/smile/dvbbs/em02.gif" />
举报 回复(0) 喜欢(0)     评分
游客

返回顶部