在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开发教程——图层标注的更多相关文章

  1. 《ArcGIS Engine+C#实例开发教程》第七讲 图层符号选择器的实现2

    原文:<ArcGIS Engine+C#实例开发教程>第七讲 图层符号选择器的实现2 摘要:在第七讲 图层符号选择器的实现的第一阶段中,我们完成了符号选择器窗体的创建与调用.在第二阶段中, ...

  2. 《ArcGIS Engine+C#实例开发教程》第八讲 属性数据表的查询显示

    原文:<ArcGIS Engine+C#实例开发教程>第八讲 属性数据表的查询显示 第一讲 桌面GIS应用程序框架的建立 第二讲 菜单的添加及其实现 第三讲 MapControl与Page ...

  3. arcgis engine 开发教程系列

    版权声明:        <ArcGIS Engine+C#实例开发教程>为3SDN(http://www.3sdn.net)原创教程,版权所有.禁止商业用途转载(如需请联系作者),非商业 ...

  4. ArcGIS Runtime for Android开发教程V2.0(4)基础篇---MapView

    原文地址: ArcGIS Runtime for Android开发教程V2.0(4)基础篇---MapView - ArcGIS_Mobile的专栏 - 博客频道 - CSDN.NET http:/ ...

  5. ArcGIS Runtime for Android开发教程V2.0(3)基础篇---Hello World Map

    原文地址: ArcGIS Runtime for Android开发教程V2.0(3)基础篇---Hello World Map - ArcGIS_Mobile的专栏 - 博客频道 - CSDN.NE ...

  6. 《ArcGIS Engine+C#实例开发教程》第六讲 右键菜单添加与实现

    原文:<ArcGIS Engine+C#实例开发教程>第六讲 右键菜单添加与实现 摘要:在这一讲中,大家将实现TOCControl控件和主地图控件的右键菜单.在AE开发中,右键菜单有两种实 ...

  7. 《ArcGIS Engine+C#实例开发教程》第四讲 状态栏信息的添加与实现

    原文:<ArcGIS Engine+C#实例开发教程>第四讲 状态栏信息的添加与实现 摘要:在上一讲中,我们完成了 MapControl 和PageLayoutControl两种视图的同步 ...

  8. 《ArcGIS Engine+C#实例开发教程》第五讲 鹰眼的实现

    原文:<ArcGIS Engine+C#实例开发教程>第五讲 鹰眼的实现 摘要:所谓的鹰眼,就是一个缩略地图,上面有一个矩形框,矩形框区域就是当前显示的地图区域,拖动矩形框可以改变当前地图 ...

  9. 《ArcGIS Engine+C#实例开发教程》第三讲 MapControl与PageLayoutControl同步

    原文:<ArcGIS Engine+C#实例开发教程>第三讲 MapControl与PageLayoutControl同步 摘要:在ArcMap中,能够很方面地进行MapView和Layo ...

随机推荐

  1. 关于 warning CS0659:“***”重写Object.Equals(object o)但不重写Object.GetHashCode()

    对象相等性和同一性 System.Object 类型提供了以下方法, namespace System { // // 摘要: // 支持 .NET Framework 类层次结构中的所有类,并为派生 ...

  2. 使用ssh client与bash scripts轻松管理多台主机

    当我们需要控制一个局域网中的很多台服务器时,一个简单的全局操作可能会被放大地异常繁琐,这时我们就会需要新的工具来快速完成这种工作. 我们将使用ssh客户端提供的一些工具来快速完成这一开发工作,我们的开 ...

  3. 无法访问win8默认共享(如C$)解决办法

    可以使用此过程允许作为本地 Administrators 组的成员并使用密码身份验证登录的用户在会话过程中使用其管理权限.启动注册表编辑器.单击“开始”,在“开始搜索”框中键入 regedit,然后按 ...

  4. Zabbix Agent 自动、主动注册

    简述: 今天来研究一下 Zabbix 的主动注册功能. 当你有十台机器需要监控时,你手动去添加是没有问题的.但是当你有五十台.上百台或更多服务器要监控时,你会怎么做 ? Active Agent Au ...

  5. overflow与underflow

    是新近的firefox浏览器中支持overflow, underflow这两个事件,当某一元素的大小超出父元素的显示范围就会触发overflow事件,如果从超出显示再变回不超出的状态则触发underf ...

  6. php-yii-form标签

    yii 标签用法(模板) (2013-08-14 17:28:19) 转载▼ 标签: it 分类: yii yii模板中的label标签 <?php echo $form->labelEx ...

  7. 批量判断网页是否NOT found

    import java.net.HttpURLConnection;import java.net.URL; public class NetValible{ static String[] url ...

  8. Python shutil 模块学习笔记

    学于https://automatetheboringstuff.com shutil 名字来源于 shell utilities,有学习或了解过Linux的人应该都对 shell 不陌生,可以借此来 ...

  9. 我的MBTI性格测试

    写在前面: 很多人争论MBTI靠谱不靠谱.一个人的性格肯定不能只用这么几个维度就能描述的,一个人的性格也肯定不是通过这么几个问题就能测出来的,一个人的性格也肯定不是一成不变的,所以MBTI的准确度肯定 ...

  10. Python_11-正则表达式

    目录: 1.1      引言 1.2      python 正则式概述及常用字符 1.2.1       元字符 1.2.2       用 "" 开始的特殊字符所表示的预定义 ...