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
复制代码
首先将分母和分子的内容分别放在两个字段中,然后在标注的时候,标注内容选择用表达式标注,在表达式的输入框中输入
"<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
复制代码
相关文章推荐
- ArcGIS中应用Expressions标注(Label)之一—上下标、分数等特殊形式标注
- ArcGIS中标注之一上下标、分数等特殊形式标注(转)
- ArcGIS中应用Expressions标注(Label)之二—使用外部数据库中数据标注要素
- 分数形式标注要素
- ArcGIS标注技巧(上标、下标等)
- ArcGIS中标注(label)的使用技巧
- ArcGIS中的标注与注记(Label与Annotation)关系与区别讲解:
- ArcGIS中的标注“分数样式”实现
- 点九是andriod平台的应用软件开发里的一种特殊的图片形式,文件扩展名为:.9.png
- ARCGIS中label(标注)和Annotation(注记
- ArcGIS Engine Maplex Label(标注)使用一例
- ArcGIS中的标注与注记(Label与Annotation)关系与区别讲解
- ArcGIS.Server.9.2.DotNet实现动态设置Label标注功能
- ArcGIS图例标注上标和下标
- ArcGIS中标注(label)的使用技巧
- ArcGIS.Server.9.2.DotNet实现动态设置Label标注功能
- ArcGIS.Server.9.2.DotNet实现动态设置Label标注功能
- (转)DIV CSS布局教程:应用ul、li实现表格形式
- 论坛源码推荐(4月23日):支付形式的iOS实用库 能够调整歌曲播放速度的应用 快速的集成和开发框架
- 块和内嵌总结,以及各个标签的应用。其中的ul ol dl特殊定义为auto,使得里面的内容展开