摘要:本文讨论了散列式地图注记实现技术,并以基本比例尺地形图上的道路、水系注记为例,研究了基于ArcGIS Add-in开发技术实现自定义散列式注记的方法,有效提高了注记编辑效率。
关键词:ArcGIS;散列式注记;地形图
引言
在绘制国家基本比例尺地形图过程中,需要对大量的地名注记进行处理。特别是小比例尺地形图,地名的注记量很大,例如一幅1:25000的地形图,点状地名的注记就可以达到3000~4000多个[ ]。另外,根据《国家基本比例尺地图图式》要求,水系、交通线状要素注记一般按照自然形状排列[ ]。实际制图中,在线状要素较长,或者要避让其他要素而又要求整体美观大方的条件下,整列式注记不能满足复杂图面的标注要求。为此,本文研究了基于ArcGIS Add-in开发技术,实现自定义散列式注记的方法,以提供注记编辑效率。
1 ArcGIS Add-in开发技术
ArcGIS for Desktop add-in加载项模型提供了基础框架,用户可创建自定义集合对象,并打包成单个压缩文件。用户之间可轻松共享Add-in加载项,不需要安装程序和注册COM组件,只需将其复制到一个常见文件目录即可完成加载,并通过删除文件完成卸载,也可通过网络向其他机构或用户共享。
Add-in加载项使用.Net, Java或Python以及可扩展标记语言(XML)编写。XML使用自定义描述,而.NET,Java或Python类提供自定义行为。为了简化开发环境部署,ArcObjects软件开发工具包(SDK)提供了加载项向导,该向导集成了开发环境(如Eclipse,Microsoft Visual Studio和Visual Studio的Express Edition免费版本)。
值得注意的是,Add-in加载项并不是对ArcGIS的全部扩展功能都支持,例如,加载项无法自定义渲染器,工作空间或要素。如果要用到以上这些功能,则需要考虑使用传统的COM组件。另外,由于Add-in加载项不涉及注册步骤,因此不能包含外部的依赖项,如其他函数库,程序集和服务等对象。
2 地图注记配置
2.1 注记基本特征
地图上的注记可分为名称注记、说明注记和数字注记三种[ ]。注记的基本特征包括了字体、字列、字位等[ ]。
字向指的是注记字头所朝的方向,大部分注记都是字头朝北,只有部分注记(如公路注记)是随被注记符号的方向而变化的,字头朝外。
字列指的是同一注记的排列方式,依照被注记地物的形状与分布情况,分为水平、垂直、雁行和屈曲四种字列。其中,水平字列的注记中心连线平行于南北图廓线,由左到右排列;垂直字列的注记中心连线垂直于南北图廓线,由上到下排列;雁行字列的注记中心连线于南北图廓线斜交,交角小于45°时,由左到右排列,大于45°时,从上到下排列,常用于山脉、山岭注记;屈曲字列的注记中心连线呈曲线,沿地物的形状排列,多用于河流山脉和道路等。
字位指的是相对于被注地物所放的位置。注记与被注地物符号之间距离以不小于0.2mm又不大于1个字宽为适宜。
2.2 注记配置
对于注记的配置规则,点状地物如居民地、控制点等,多用于水平字列,直立字向;线状地物如道路、河流等,多用雁行字列,当需与现状地物符号平行时要避免倒置字向;面状地物如湖海、山脉、政区等,多用雁行字列,直立字向。
3 自定义散列式注记
基于ArcGIS Add-in的散列式地图注记编辑插件采用c#语言开发,实现了散列式注记的字向及字隔的控制。
注记要素编辑的相关主要接口有:
1) IAnnotationFeature:通过该接口可以获取注记要素的注记元素以及关联要素。
2) IMultiPartTextElement:通过该接口可以实现注记文本的组合或分拆
3) IAnnotationClassExtension2:通过该接口可以当前注记要素的注记内容及显示样式。
图1 转换为散列式注记图
图2 控制注记字向使其字头朝北图
关键代码如下:
Public void ToMultiPart(IFeatureClass featureClass, IFeature pFeature, string annoFieldName,double characterSpacing)
{
int id = pFeature.Fields.FindField(annoFieldName);//获取注记文本所在字段
int idCharacterSpacing = pFeature.Fields.FindField("CharacterSpacing");//获取注记文本字符间隔
......
pFeature.set_Value(id, val);//添加空格作为分隔符
pFeature.set_Value(idCharacterSpacing, characterSpacing);//设置字符间隔
pFeature.Store();//必须保存
......
IAnnotationFeature pAnnoFeature = pFeature as IAnnotationFeature;
IMultiPartTextElement pMultiPartTextElement = pAnnoFeature.Annotation as IMultiPartTextElement;
IAnnotationClassExtension2 pAnnotationClassExtension2 = featureClass.Extension as IAnnotationClassExtension2;
IDisplay pDisplay = pAnnotationClassExtension2.get_Display(pAnnoFeature.Annotation);
pMultiPartTextElement.SynchronizeParts(pDisplay);//同步文本显示样式
pMultiPartTextElement.ConvertToMultiPart(pDisplay);//分拆注记
......
}
public void FaceToNorth(IFeatureClass featureClass, IFeature feature)
{
IAnnotationFeature pAnnoFeature = feature as IAnnotationFeature;
IMultiPartTextElement pMultiPartTextElement = pAnnoFeature.Annotation as IMultiPartTextElement;
......
for (int i = 0; i < count; i++)
{
IElement element = pMultiPartTextElement.QueryPart(i);
ITextElement textElement = element as ITextElement;
ITextSymbol textSymbol = textElement.Symbol;
textSymbol.Angle = 0.0;//注记角度为0.
textElement.Symbol = textSymbol;
element = textElement as IElement;
array.Add(textElement);
}
for (int i = 0; i < count; i++)
{
pMultiPartTextElement.DeletePart(pMultiPartTextElement.PartCount - 1);//移除旧注记
}
for (int i = 0; i < count; i++)
{
ITextElement textElement = array[i];
pMultiPartTextElement.InsertPart(i, textElement.Text, (textElement as IElement).Geometry);//插入新注记
}
......
}
4 结语
本文所给出的散列式地图注记编辑插件,能够批量处理散列式注记,并实现字向、字隔的控制,有效提高注记编辑效率。由于开发过程中尚未顾及其他注记模式,目前插件在开启注记随沿模式下,不能同时保持注记方向的控制;下一步的工作应考虑注记多种模式的配置问题,并提供更多的处理方案,如道路要素自动分段注记等。
参考文献
[1] 樊红.地图注记自动配置的研究[M].北京:测绘出版社,2004
[2] 中华人民共和国国家质量监督检验检疫总局,中国国家标准化管理委员会.GB/T 20257.2/2006国家基本比例尺地形图图式[S].北京:测绘出版社,2006
[3] 邬伦等.地理信息系统原理、方法和应用[M].北京:科学出版社,2004
[4] 李世林,宋英华.大比例尺地形图绘制[M].北京:测绘出版社,1987
论文作者:陈炎辉
论文发表刊物:《基层建设》2018年第26期
论文发表时间:2018/10/1
标签:注记论文; 地物论文; 比例尺论文; 地形图论文; 自定义论文; 要素论文; 雁行论文; 《基层建设》2018年第26期论文;