您的位置:首页 > 其它

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

2012-11-08 00:33 423 查看
分数形式标注要素:

首先将分母和分子的内容分别放在两个字段中,然后在标注的时候,标注内容选择用表达式标注,在表达式的输入框中输入
"<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将所有标注前都加上“一品阳光”

Function FindLabel ( [Name] )

FindLabel ="一品阳光"& [Name]

End Function

复制代码

说明:FindLabel为默认的函数名,自己也可以改为其他,[Name]为字段名。

2、将面积进行四舍五入

Function FindLabel ( [area] )

dim q

q=cdbl( [area] )

FindLabel = round(q,1)

End Function

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

分数标注

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

Function Findlabel([DLDM],[TBBH])

Findlabel= "<UND>"&[DLDM] &"</UND>"&vbnewline&[TBBH]

End Function

复制代码

b、复杂一些,考虑长度

Function FindLabel ( [OBJECTID], [SHAPE_Area] )

Dim nFMLength

Dim nFZLength

nFMLength = Len([SHAPE_Area])

nFZLength = Len([OBJECTID])

Dim strLeftSpace

Dim strRightSpace

strLeftSpace = ""

strRightSpace= ""

If nFMLength > nFZLength Then

For i=0 To (nFMLength-nFZLength)/2

strLeftSpace =strLeftSpace +chr(32)

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

复制代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: