ArcGIS中应用Expressions标注(Label)之一—上下标、分数等特殊形式

来源:互联网 发布:javascript 跳出循环 编辑:程序博客网 时间:2024/05/21 09:42

分数形式标注要素:
    首先将分母和分子的内容分别放在两个字段中,然后在标注的时候,标注内容选择用表达式标注,在表达式的输入框中输入

"<UND>" & [分子的字段] & "</UND>" & vbNewLine & [分母的字段]

"<UND>" & [分子的字段] & "</UND>" & vbNewLine & [分母的字段],即可实现分数形式的标注。

上下角标形式标注要素:
    将标注的主体内容、上角标内容和下角标内容分别用三个字段保存。假设这三个字段分别是:text、super_text和sub_text。步骤如下:

1.在被标注的图层的属性里,点击“experssion(表达式)”。

2.在弹出的“表达式”窗口中书写表达式如下

[text] & "<sup>" & [super_text] & "</sup>" & "<sub>" & [sub_text] & "</sub>"
[text] & "<sup>" & [super_text] & "</sup>" & "<sub>" & [sub_text] & "</sub>"

其中:
"<sup>" & [super_text] & "</sup>"表示将super_text字段里的内容作为上角标
"<sub>" & [sub_text] & "</sub>"表示将sub_text字段里的内容作为下角标

用不同颜色标注多字段

"<CLR red='255' green='0' blue='0'>" & [字段]  & "</CLR>"&"<CLR red='0' green='0' blue='255'>" & [字段]  & "</CLR>"

用不同颜色标注多字段

"<CLR red='255' green='0' blue='0'>" & [字段]  & "</CLR>"&"<CLR red='0' green='0' blue='255'>" & [字段]  & "</CLR>"

 

"<CLR red='255' green='0' blue='0'>" & [name]  & "</CLR>"&"<CLR red='0' green='0' blue='255'>" & [color]  & "</CLR>"

Destop中标注多个字段
以前用ArcGIS Label一般也就在图层的Properties里面定义一下Label字体大小和粗细。这两天遇到一个问题,需要在Label中显示多个字段的内容,比如BlockName和CompanyName。其实这个本来不是很难的问题,因为Label中支持VBScript,使用[BlockName] & VbNewLine & [CompanyName]。就可以实现标注中第一行显示BlockName,第二行显示CompanyName.
现在问题出来了,出图时候希望突出BlockName效果,希望加粗显示,而CompanyName使用一般字体。考虑了很长时间终于从ArcGIS帮助中找到了相关的内容,原来Label的VBScript里面支持类似于Html的VBScript标签,比如加粗就是用<BOL>,上面问题就可以使用下面语句解决:

"<BOL>" & [BlockName] & "</BOL>" & VbNewLine & [CompanyName]
"<BOL>" & [BlockName] & "</BOL>" & VbNewLine & [CompanyName]
除了加粗,ArcGIS中还支持下面的文本格式标签:
Font:
"<FNT name='Arial' size='18'>" & [LABELFIELD] & "</FNT>"
Color:
"<CLR red='255' green='255' blue='255'>" & [LABELFIELD] & "</CLR>"
"<CLR cyan='100' magenta ='100' yellow='100' black='100'>" & [LABELFIELD] & "</CLR>"
Bold:
"<BOL>" & [LABELFIELD] & "</BOL>"
Italic:
"<ITA>" & [LABELFIELD] & "</ITA>"
Underline:

"<UND>" & [LABELFIELD] & "</UND>"
All caps:
"<ACP>" & [LABELFIELD] & "</ACP>"
Small caps:
"<SCP>" & [LABELFIELD] & "</SCP>"
Superscript
"<SUP>" & [LABELFIELD] & "</SUP>"
Subscript:
"<SUB>" & [LABELFIELD] & "</SUB>"
Character spacing (%):
"<CHR spacing='25'>" & [LABELFIELD] & "</CHR>"
Word spacing (%):
"<WRD spacing='150'>" & [LABELFIELD] & "</WRD>"
Leading (pts):
"<LIN leading='12'>" & [LABELFIELD] & "</LIN>"

需要注意的是,使用这些标签后,生成的Label语句在Verify按钮中是不生效的,只对最终的显示结果生效。
其实问题还没有最终解决,使用VbNewLine生成的显示结果,上下两行缺省时居中对齐,现在希望它们左对齐显示,还没找到办法。还有一个问题,就是ArcGIS中对点的Label可以选择Label的位置,而对面没有,缺省是放置在中间,现在希望放置在左上角,还没有找到该怎么办。

分数标注

Function FindLabel ( [ZJNR] )
Dim   mystr,   xx   
          mystr=[ZJNR]
          xx=Split(mystr,"/")   

if UBound(xx)>0 then
        FindLabel = "<UND>"&xx(1)&"</UND>"&vbNewLine&xx(2)
else
   FindLabel = mystr
end if
End Function

 

left ( [BGCODE] ,6 ) & vbNewLine & right( [BGCODE] ,8 )

 同一属性字段值分层显示

 

[NAME]  &vbnewline&"<BOL>"&"<CLR red='0' green='0' blue='0'>" & [DPA_DESPRO]   & "</CLR>"&"</BOL>"

字母颜色更换及加粗显示

 

图片

Function FindLabel ( [STREETNAME]  , [STREETCODE]  , [SHAPE_Area]  )

s1=String( int ( (len ( [STREETNAME]  ) + 20 -len ( [SHAPE_Area] ) * 0.5 ) *0.5 ) , " ")

s2=String( int ( (len ( [STREETNAME]  ) + 20 -len ( [STREETCODE]  ) * 0.5 ) *0.5 ) , " ")

FindLabel = [STREETNAME]  & s1& vbnewline & "————" & [SHAPE_Area]  & vbnewline & [STREETCODE] & s2

End Function

 

 

高级标注用函数进行实现,顾必须以Function开头;VBScript语言以End Function结尾,Jscript语言无要求(按照脚本语言规范来)。
4、链接符:VBScript用‘&’进行连接

Jscript
用‘+’进行连接
5、编写脚本完成后,可以通过点击Verify测试下是否有语言错误。

代码示例

1、利用VBS将所有标注前都加上“一品阳光”


  1. Function  FindLabel ( [Name] )
  2.           FindLabel ="一品阳光"& [Name]
  3. End Function
复制代码



说明:FindLabel为默认的函数名,自己也可以改为其他,[Name]为字段名。
2、将面积进行四舍五入


  1. Function FindLabel ( [area] )
  2. dim q
  3. q=cdbl( [area] )
  4. FindLabel = round(q,1)
  5. End Function
复制代码

注意:必须将面积进行文本转数值,否则无法通过编辑。若数值为3.213,得到的结果为3.2

分数标注


a、一般方法,没有考虑标注长度,可以添加下划线与换行进行解决


 

  1. Function Findlabel([DLDM],[TBBH])


  2. Findlabel= "<UND>"&[DLDM] &"</UND>"&vbnewline&[TBBH]
  3. End Function

复制代码


 

b、复杂一些,考虑长度


 


  1. Function FindLabel ( [OBJECTID], [SHAPE_Area] )
  2.   Dim nFMLength
  3.   Dim nFZLength
  4.   nFMLength = Len([SHAPE_Area])
  5.   nFZLength = Len([OBJECTID])
  6.   Dim strLeftSpace
  7.   Dim strRightSpace
  8.    strLeftSpace  = ""
  9.     strRightSpace= ""      
  10.    If nFMLength > nFZLength Then
  11.     For i=0 To  (nFMLength-nFZLength)/2
  12.       strLeftSpace =strLeftSpace +chr(32)
  13.      strRightSpace =strRightSpace + chr(32)

15.     Next

16.  End If

17.FindLabel = "<UND>"  &strLeftSpace & [OBJECTID]&strRightSpace& "</UND>"&chr(13)&chr(10)&  [SHAPE_Area]

18.End Function

复制代码

原创粉丝点击