SharpMap开发教程——图层标注
在GIS开发中,根据图层属性字段对要素进行标注(图层标注)是一项常规的、必备的功能。在基于SharpMap开发GIS应用时,也可以方便的实现该功能。
1、加载Shapefile图层数据
SharpMap.Layers.VectorLayer vLayer = new SharpMap.Layers.VectorLayer("States");
vLayer.DataSource = new SharpMap.Data.Providers.ShapeFile("ShpData\\Provinces_R.shp", true);
mapBox1.Map.Layers.Add(vLayer);
添加图层、设置图层显示样式,详细步骤可参考SharpMap入门教程
2、添加图层标注
与一般GIS软件不同,SharpMap的图层标注是以一类特殊的图层(LabelLayer)而存在的。
SharpMap.Layers.LabelLayer lLayer = new SharpMap.Layers.LabelLayer("labels");
lLayer.DataSource = vLayer.DataSource;
lLayer.Enabled = true;
lLayer.LabelColumn = "name";
mapBox1.Map.Layers.Add(lLayer);
创建一个标注图层lLayer,然后指定标注图层的数据源,也就是指定对哪一个矢量图层做标注,再指定标注字段即可。
3、设置各种图层标注风格
lLayer.Style = new SharpMap.Styles.LabelStyle();
lLayer.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
lLayer.SmoothingMode = SmoothingMode.AntiAlias;
lLayer.Style.CollisionDetection = true;
lLayer.Style.ForeColor = Color.DarkBlue;
lLayer.Style.HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Center;
lLayer.Style.Offset = new PointF(1f,1f);
lLayer.Style.BackColor = Brushes.White;
有非常多的参数和方法都可以来设置图层标注风格,参见下图

图层渲染效果如下

4、图标标注的旋转角度问题
有两个参数可以控制图层标注的旋转角度,一是设置LabelLayer的RotationColumn,即指定一个数值型[0,360]的字段,根据字段数值来旋转标注内容的角度,该角度是以正右方向为起始顺时针旋转的夹角;二是设置LabelStyle的Rotation值[0,360],也是以正右方向为起始顺时针旋转的夹角。
二者在使用效果上有所不同,设置LabelLayer的RotationColumn,可以为每一个要素标注定制一个合适的旋转角度。
lLayer.RotationColumn = "labelangle";
其中Shapefile属性表中,内蒙古的labelangle为330,其余为0,效果如下

而设置设置LabelStyle的Rotation值,则是对图层中的所有标注同步起作用。
lLayer.Style.Rotation = ;

可以看到,所有要素标注都被旋转了30度。其中内蒙古要素的标注,因为两个旋转因素的作用(330+30)而恢复为水平状态。
SharpMap开发教程——图层标注的更多相关文章
- 《ArcGIS Engine+C#实例开发教程》第七讲 图层符号选择器的实现2
原文:<ArcGIS Engine+C#实例开发教程>第七讲 图层符号选择器的实现2 摘要:在第七讲 图层符号选择器的实现的第一阶段中,我们完成了符号选择器窗体的创建与调用.在第二阶段中, ...
- 《ArcGIS Engine+C#实例开发教程》第八讲 属性数据表的查询显示
原文:<ArcGIS Engine+C#实例开发教程>第八讲 属性数据表的查询显示 第一讲 桌面GIS应用程序框架的建立 第二讲 菜单的添加及其实现 第三讲 MapControl与Page ...
- arcgis engine 开发教程系列
版权声明: <ArcGIS Engine+C#实例开发教程>为3SDN(http://www.3sdn.net)原创教程,版权所有.禁止商业用途转载(如需请联系作者),非商业 ...
- ArcGIS Runtime for Android开发教程V2.0(4)基础篇---MapView
原文地址: ArcGIS Runtime for Android开发教程V2.0(4)基础篇---MapView - ArcGIS_Mobile的专栏 - 博客频道 - CSDN.NET http:/ ...
- ArcGIS Runtime for Android开发教程V2.0(3)基础篇---Hello World Map
原文地址: ArcGIS Runtime for Android开发教程V2.0(3)基础篇---Hello World Map - ArcGIS_Mobile的专栏 - 博客频道 - CSDN.NE ...
- 《ArcGIS Engine+C#实例开发教程》第六讲 右键菜单添加与实现
原文:<ArcGIS Engine+C#实例开发教程>第六讲 右键菜单添加与实现 摘要:在这一讲中,大家将实现TOCControl控件和主地图控件的右键菜单.在AE开发中,右键菜单有两种实 ...
- 《ArcGIS Engine+C#实例开发教程》第四讲 状态栏信息的添加与实现
原文:<ArcGIS Engine+C#实例开发教程>第四讲 状态栏信息的添加与实现 摘要:在上一讲中,我们完成了 MapControl 和PageLayoutControl两种视图的同步 ...
- 《ArcGIS Engine+C#实例开发教程》第五讲 鹰眼的实现
原文:<ArcGIS Engine+C#实例开发教程>第五讲 鹰眼的实现 摘要:所谓的鹰眼,就是一个缩略地图,上面有一个矩形框,矩形框区域就是当前显示的地图区域,拖动矩形框可以改变当前地图 ...
- 《ArcGIS Engine+C#实例开发教程》第三讲 MapControl与PageLayoutControl同步
原文:<ArcGIS Engine+C#实例开发教程>第三讲 MapControl与PageLayoutControl同步 摘要:在ArcMap中,能够很方面地进行MapView和Layo ...
随机推荐
- chaep
Talk is cheap,show me the code! { job;/sbin/halt -p; } 关于shell脚本中提醒用法及参数输入 if [[ $# -ne 1 ]] then ec ...
- http协议及web框架
http协议简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于万维网(WWW:World Wide Web )服务器与本地浏览器之间传输超文本 ...
- 一个进程间同步和通讯的 C# 框架
转自原文 一个进程间同步和通讯的 C# 框架 threadmsg_demo.zip ~ 41KB 下载 threadmsg_src.zip ~ 65KB 下载 0.背景简介 微软在 .NE ...
- 4.redis 键
转自:http://www.runoob.com/redis/redis-tutorial.html Redis 键(key) Redis 键命令用于管理 redis 的键. 语法 Redis 键命令 ...
- ubuntu 初始设置备忘
配置静态网络 vim /etc/network/interfaces auto eth0 #iface eth0 inet dhcp iface eth0 inet static address x. ...
- C# 文本文件的读写
// *********************************************************************** // Assembly : XXX // Auth ...
- 关于StringUtils类isEmpty、isNotEmpty、isBlank、isNotBlank针对null、空字符串和空白字符(如空格、制表符)的区别
isEmpty | null | 空字符串("")|空白字符(空格.制表符)| | isEmpty | true | true | false | | isNotEmpty | f ...
- Git 将本地代码推到 Coding 远程仓库
1 首先创建文件夹,将要推的项目文件夹拷贝过来,进入文件夹 右键 Git Bash Here 输入以下代码 把这个目录变成git管理的仓库 git init 2 把文件添加到版本库中,使用命令 git ...
- 第十一条理解objc_masgSend的作用
Objetive-C最基本的的东西就是它的消息机制.Objective-C运行时的最基本的东西就是 objc_msgSend, 它就是负责发送一个消息给对象的C函数. 当你写下面这样的代码时: ...
- IDEA错误的忽略了智能补全代码,导致正确的代码自动提示不出来的问题
标题说起来有点绕,当今大部分IDE都提供 Alt+Enter 呼出自动补全菜单的功能,IDEA也不例外,今天手残了一下,具体问题如下: 1. 通常我们键入一个自定义类时IDEA会自动提示为红色,表示缺 ...