在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. Django学习---自定义分页

    自定义分页 简单例子: urls.py: from django.contrib import admin from django.urls import path from django.conf. ...

  2. 根据不同分辨率载入相应CSS样式表

    index.html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http:// ...

  3. Putty连接虚拟机Centos出现:Network error:Connection refused的解决方法

    转自:http://www.bcoder.cn/17251.html 我和很多人一样都是linux菜鸟,但是呢又对此很是感兴趣,不折腾就是不爽: 我下载了centos 6.4安装好在VMware 虚拟 ...

  4. ZooKeeper 学习笔记(一)

    第一章 ZooKeeper的基本概念 一.介绍 在过去,每个应用一般都是在单个机子(单处理器)上运行,现在这一状况已经发生了巨大的变化.在大数据和云计算的世界里,应用程序已经被分成多个独立的模块在不同 ...

  5. redis 开发与运维 学习心得1

    主要是命令相关 第一章 初识Redis 1.redis是基于键值对的NoSQL. 2.redis的值可以是 string, hash, list, set, zset, bitmaps, hyperl ...

  6. MYSQL 创建常见问题

    1.创建函数时,报错: 出错信息:ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL D ...

  7. 257. Binary Tree Paths返回所有深度优先的遍历

    [抄题]: Given a binary tree, return all root-to-leaf paths. For example, given the following binary tr ...

  8. 虚拟机上linux与windows之间复制粘贴

    参考:https://blog.csdn.net/qq_34501940/article/details/51222119

  9. nhibernate GetType

    本原理 /* This code assumes an IEntity interface that identifies your persistent types. */ /// <summ ...

  10. ubuntu下学习linux

    ---恢复内容开始--- 查看当前正在运行的进程(ps命令, grep 搜索命令) ps -ef # -e 显示所有进程,环境变量 -f 全格式 也可以用: ps -e -f # 显示所有关于java ...