基于ArcGIS的散列式注记在地形图中的研究与实现论文_陈炎辉

广东省地图院 510075

摘要:本文讨论了散列式地图注记实现技术,并以基本比例尺地形图上的道路、水系注记为例,研究了基于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

标签:;  ;  ;  ;  ;  ;  ;  ;  

基于ArcGIS的散列式注记在地形图中的研究与实现论文_陈炎辉
下载Doc文档

猜你喜欢