.ArcGIS中标注之一上下标、分数等特殊形式标注
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ArcGIS中标注之一上下标、分数等特殊形式标注
分数形式标注要素:首先将分母和分子的内容分别放在两个字段中,然后在标注的时候,标注内容选择用表达式标注,在表达式的输入框中输入"" & [分子的字段] & "" & vbNewLine & [分母的字段],即可实现分数形式的标注。
上下角标形式标注要素:将标注的主体内容、上角标内容和下角标内容分别用三个字段保存。
假设这三个字段分别是:text、super_text 和sub_text。
步骤如下:1.在被标注的图层的属性里,点击“experssion(表达式)”。
2.在弹出的“表达式”窗口中书写表达式如下[text] & "" & [super_text] & "" & "" & [sub_text] & "" 其中:"" & [super_text] & ""表示将super_text字段里的内容作为上角标"" & [sub_text] & ""表示将sub_text字段里的内容作为下角标补充: 比如在:对BlockName和Company进行标注时候,使用下面语句实现BlockName红色显示,而Company黑色显示"" & [BlockName] & "" & VbNewLine & [Company] 今天发现了一个小问题,如果BlockName或者Company中有特殊字符如&或者>等,会出现将这些特殊字符作为Script语句一部分处理情况,导致无法正常显示标注内容(无法解析VBScript语法). 这个和网页编程时候非常类似,于是参考网页编程方法对代码做了一下修改,用"&"替代"&" Function FindLabel ( [BlockName], [Company] ) strBlockName = Replace([BlockName],"&","&") strCompany= Replace([Company],"&","&") FindLabel = "" & strBlockName & "" & VbNewLine & strCompany End Function 补充2: 以前用ArcGIS Label一般也就在图层的Properties里面定义一下Label字体大小和粗细。
这两天遇到一个问题,需要在Label中显示多个字段的内容,比如BlockName和CompanyName。
其实这个本来不是很难的问题,因为Label中支持VBScript,使用[BlockName] & VbNewLine & [CompanyName]。
就可以实现标注中第一行显示BlockName,第二行显示CompanyName. 现在问题出来了,出图时候希望突出BlockName效果,希望加粗显示,而CompanyName 使用一般字体。
考虑了很长时间终于从ArcGIS帮助中找到了相关的内容,原来Label的VBScript里面支持类似于Html的VBScript标签,比如加粗就是用,上面问题就可以使用下面语句解决: "" & [BlockName] & "" & VbNewLine & [CompanyName] 除了加粗,ArcGIS中还支持下面的文本格式标签: Font: "" & [LABELFIELD] & "" Color: "" & [LABELFIELD] & "" "" & [LABELFIELD] & "" Bold: "" & [LABELFIELD] & "" Italic: "" & [LABELFIELD] & "" Underline: "" & [LABELFIELD] & "" All caps: "" & [LABELFIELD] & "" Small caps: "" & [LABELFIELD] & "" Superscript "" & [LABELFIELD] & "" Subscript: "" & [LABELFIELD] & "" Character spacing (%): "" & [LABELFIELD] & "" Word spacing (%): "" & [LABELFIELD] & "" Leading (pts): "" & [LABELFIELD] & "</LIN 需要注意的是,使用这些标签后,生成的Label语句在Verify按钮中是不生效的,只对最终的显示结果生效
ArcGIS中应用Expressions标注(Label)之二—使用外部数据库中数据标注要素标注的具体步骤:
1. 打开ArcMap,添加需要标注的图层。
2. 点击该图层属性(layer properties)对话框中的标注(label)标签,点击Expression按钮。
3. 在Label Expression对话框中,选中Advanced复选框,在Expression框里即可见FindLabel()函数的桩代码。
4. 将光标移至FindLabel后面的括号里,在Label Fields中双击需要使用的字段的字段名。
5. 在Expression表达式里书写VBScript代码(如下)。
6. 通过给函数名赋值返回字符串(例如:FindLabel = aString)。
7.最后点击Verify按钮,验证代码是否正确,如果代码无误,ArcMap将显示标注的样例。
该方法的优点就是迅速,只需几秒钟就可以标注上百个多边形(尽管标注的速度与PC机性能及网络速度有关)。
该方法的缺点是它要创建、打开再关闭数据库连接,并且为地图上的每一个可见要素做查询。
需要做很多要素的标注时,这样的动作会使处理速度减慢,增加网络流量。
解决此问题的一个方法就是设置可见比例尺(Scale Range)。
在LayerProperties对话框的Label标签里,点击Scale Range按钮,定义标注的可见比例尺范围。
VBScript代码如下:
Function FindLabel ( [OBJECTID] )
Dim strPrclQry, strInfostrPrclQry = "SELECT OWNER_NAME FROM aTABLE WHERE OB JECTID = ' " & [OBJECTID] & " ' "Dim ADOConnset ADOConn = createobject("ADODB. Connection")Dim rsPrcl
set rsPrcl = createObject("ADODB.Recordset")
ADOConn.Open "PROVIDER=MSDAORA;Data Source=aDatabaseService;
User ID=aUserName;Password=aPassword"
ADOConn.CursorLocation = 3
rsPrcl.Open strPrclQry, ADOConn, 3, 1, 1
'如果没有找到记录,则返回空字符串
'如果找到多于一条的记录,则通过"<<More>>"来暗示含有多条业主信息
'可以做循环,直到标注出所有的业主信息
Select Case rsPrcl.RecordCount
Case -1, 0
strInfo = ""
Case 1
'只读取第一条记录
strInfo = trim(rsPrcl.Fields("OWNER_NAME").Value & " ") '在空值的情况下将出错
Case Else
strInfo = rsPrcl.Fields("OWNER_NAME").Value & "<< More >>"
End Select
'关闭连接
rsPrcl.Close
ADOConn.Close
Set rsPrcl = Nothing
Set ADOConn = Nothing
'返回字符串用于标注
FindLabel = strInfo
End Function
注意:在VBScript中,创建任何对象都要使用CreateObject()函数,并且要含有正确库名和对象名(例如:ADODB.Connection)。
只要创建了Connection和RecordSet 对象,就可以使用正确的连接字符串打开数据库连接,通过一个正确的SQL语句打开RecordSet,使用带有字段名的RecordSet对象的V alue属性获取数据。
当获取数据之后,必须确保RecordSet和Connection对象关闭并且置空。
ArcGIS中应用Expressions标注(Label)之一—上下标、分数等特殊形式标注
分数形式标注要素:
首先将分母和分子的内容分别放在两个字段中,然后在标注的时候,标注内容选择用表达式标注,在表达式的输入框中输入"<UND>" & [分子的字段] & "</UND>" & vbNewLine & [分母的字段],即可实现分数形式的标注。
上下角标形式标注要素:
将标注的主体内容、上角标内容和下角标内容分别用三个字段保存。
假设这三个字段分别是:text、s uper_text和sub_text。
步骤如下:
1.在被标注的图层的属性里,点击“experssion(表达式)”。
2.在弹出的“表达式”窗口中书写表达式如下
[text] & "<sup>" & [super_text] & "</sup>" & "<sub>" & [sub_text] & "</sub>"
其中:
"<sup>" & [super_text] & "</sup>"表示将super_text字段里的内容作为上角标
"<sub>" & [sub_text] & "</sub>"表示将sub_text字段里的内容作为下角标。