ArcGIS Engine图层标注

arcgis engine开发中图层标注设置 做了一个图层标注显示并非图层要素对应字段值,而作一个翻译,网上也未找到比较详细的说明,因此费了较长时间,这里作一个记录; 下面对整个设置过程作一个详细的标注:  IFeatureLayer feaLy = curLayer as IFeatureLayer;//把需要标注的图层转化为featurelayer             IGeoFeatureLayer geoFeaL 阅读详情

按指定一个或多个字段,指定分隔符进行标注,可设置字体、字号、颜色、是否加粗、是否斜体等。

代码如下:

/// <summary>
/// 要素图层标注
/// </summary>
public class FeatureLayerAnnotationHelper
{
	/// <summary>
	/// 要素图层设置标注
	/// </summary>
	/// <param name="pFeaturelayer">要素图层</param>
	/// <param name="nColorR">标注颜色R分量</param>
	/// <param name="nColorG">标注颜色G分量</param>
	/// <param name="ColorB">标注颜色B分量</param>
	/// <param name="lstLableField">标注字段(可为多个)</param>
	/// <param name="sSeparator">标注字段分隔符</param>
	/// <param name="sFontName">字体名称</param>
	/// <param name="nSize">字号</param>
	/// <param name="bBold">是否加粗</param>
	/// <param name="bItalic">是否斜体</param>
	/// <param name="dMinScale">最小显示比例(分母)</param>
	/// <param name="dMaxScale">最大显示比例(分母)</param>
	public static void SetLabel(IFeatureLayer pFeaturelayer, int nColorR, int nColorG, int ColorB, List<string> lstLableField,
		string sSeparator = " ", string sFontName = "宋体", int nSize = 8, bool bBold = false, bool bItalic = false, double dMinScale = 10000, double dMaxScale = -1)
	{
		SetLabel(pFeaturelayer, new RgbColorClass() { Red = nColorG, Green = nColorG, Blue = ColorB }, lstLableField, sSeparator, sFontName, nSize, bBold, bItalic, dMinScale, dMaxScale);
	}

	/// <summary>
	/// 要素图层设置标注
	/// </summary>
	/// <param name="pFeaturelayer">要素图层</param>
	/// <param name="pRGB">标注颜色</param>
	/// <param name="lstLableField">标注字段(可为多个)</param>
	/// <param name="sSeparator">标注字段分隔符</param>
	/// <param name="sFontName">字体名称</param>
	/// <param name="nSize">字号</param>
	/// <param name="bBold">是否加粗</param>
	/// <param name="bItalic">是否斜体</param>
	/// <param name="dMinScale">最小显示比例(分母)</param>
	/// <param name="dMaxScale">最大显示比例(分母)</param>
	public static void SetLabel(IFeatureLayer pFeaturelayer, IRgbColor pRGB, List<string> lstLableField,
		string sSeparator = " ", string sFontName = "宋体", int nSize = 8, bool bBold = false, bool bItalic = false,
		double dMinScale = 10000, double dMaxScale = -1)
	{
		if (null == pFeaturelayer)
		{
			LogServices.WriteDebugLog("FeatureLayer is NULL when SetLabel");
			return;
		}
		var pGeoFeaturelayer = pFeaturelayer as IGeoFeatureLayer;
		IAnnotateLayerPropertiesCollection pAnnoLayerPropsCollection = pGeoFeaturelayer.AnnotationProperties;
		pAnnoLayerPropsCollection.Clear();

		stdole.IFontDisp pFontDisp = null;
		try
		{
			var dotNetFont = new System.Drawing.Font(sFontName, nSize);
			pFontDisp = ESRI.ArcGIS.ADF.COMSupport.OLE.GetIFontDispFromFont(dotNetFont) as stdole.IFontDisp;
		}
		catch
		{
			pFontDisp.Name = "宋体";
		}
		pFontDisp.Size = nSize;
		pFontDisp.Bold = bBold;
		pFontDisp.Italic = bItalic;

		if (pRGB == null)
		{
			pRGB = new RgbColorClass { Red = 0, Green = 0, Blue = 0 };
		}
		var pTextSymbol = new TextSymbolClass { Font = pFontDisp, Size = (int)pFontDisp.Size, Color = pRGB };

		IBasicOverposterLayerProperties4 pBasicOverposterlayerProps4 = new BasicOverposterLayerPropertiesClass();
		switch (pFeaturelayer.FeatureClass.ShapeType)
		{
			case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon:
				pBasicOverposterlayerProps4.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolygon;
				break;
			case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline:
				pBasicOverposterlayerProps4.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolyline;
				break;
			case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint:
				pBasicOverposterlayerProps4.FeatureType = esriBasicOverposterFeatureType.esriOverposterPoint;
				break;
		}
		pBasicOverposterlayerProps4.PointPlacementMethod = esriOverposterPointPlacementMethod.esriRotationField;
		//pBasicOverposterlayerProps4.RotationField = angleField;

		ILabelEngineLayerProperties pLabelEnginelayerProps = new LabelEngineLayerPropertiesClass
		{
			ExpressionParser = new AnnotationJScriptEngineClass(), //使用JScript引擎
			Expression = UnionLabelField(lstLableField, sSeparator), // [BSM] +  " | "  +  [XZQDM] +  " | "  +  [XZQMC]
			Symbol = pTextSymbol,
			BasicOverposterLayerProperties = pBasicOverposterlayerProps4 as IBasicOverposterLayerProperties,
			AnnotationMinimumScale = (dMinScale > 0) ? dMinScale : -1,
			AnnotationMaximumScale = (dMaxScale > 0 && dMinScale > dMaxScale) ? dMaxScale : -1
		};
		pAnnoLayerPropsCollection.Add((IAnnotateLayerProperties)pLabelEnginelayerProps);
		pGeoFeaturelayer.DisplayAnnotation = true;
	}

	/// <summary>
	/// 将多个标注字段转为表达式
	/// </summary>
	/// <param name="lstLableField">标注字段</param>
	/// <param name="sSeparator">分隔符</param>
	/// <returns>表达式</returns>
	private static string UnionLabelField(List<string> lstLableField, string sSeparator = " ")
	{
		if (null == lstLableField || 0 >= lstLableField.Count)
			return "";
		for (int i = lstLableField.Count - 1; i >= 0; i--)
		{
			if (string.IsNullOrWhiteSpace(lstLableField[i].Trim()))
			{
				lstLableField.RemoveAt(i);
				continue;
			}
			lstLableField[i] = "[" + lstLableField[i] + "]";
		}
		var sSep = $" + \"{sSeparator}\" + ";
		return string.Join(sSep, lstLableField);
	}
}

 

C#+ AE实现地图注记功能 基于Arcgis Engine的二次开发,需要地图注记功能。简单讲注记是以文字的形式将要素图层的属性标注出来。 首先,窗体设计如下: 其次,实现的主要代码如下: public partial class FormMapAnnotation : Form { AxMapControl MapControl; string pLayerN... 阅读详情

相关推荐

【实用小技巧】ArcGIS属性表之对字段高亮标注及如何更改已有字段名称

咱们今天给大家分享的两个小技巧是对矢量图层属性表中的重要字段进行高亮标注及在不删除已有字段的情况下对其进行名称更改。

tianchounh的博客 3177

矢量图层标注

public void Annotation(IGeoFeatureLayer pGeoFeatLyr, IMap pMap, string annoField) { IAnnotateMap pAnnoMap; pAnnoMap = new MaplexAnnotateMapClass(); pMap.Ann

jiushidt的专栏 1036

arcgis arcpy shp文件批量导出为lyr文件,并引用符号系统进行填色,设置为显示标注

def shp2lyr(shp_path, lyr_path): """ :param shp_path: 需要转化的shp文件保存路径,将转换该路径下的所有的shp文件 :param lyr_path: 输出文件保存位置 :return: """ try: # 设置工作空间 arcpy.env.workspace ...

天道酬勤、业道酬信! 5854

ArcGIS Engine实现简单的图层标注

基于C++进行图层标注时,我们只需设置文字样式(字体、字号、颜色、是否加粗、是否斜体、是否下划线、是否删除线)、要标注的字段、是否显示标注即可。设置文字样式的代码如下:ITextSymbolPtr Common::GetTextSymbol(double dSize, int nR, int nG, int nB, const CString sFont = _T("宋体"), BOOL bBol...

a_dev的专栏 1588

C#与ArcGIS Engine构建公路信息查询系统教程

在构建公路信息查询系统的过程中,功能需求是确定系统发展方向和实现方式的关键。系统主要功能需求应包括:信息查询:用户可以根据路段名称、编号、里程、地理位置等多种方式查询公路信息。信息展示:查询结果应以图表或地图的形式展示给用户,提供直观的信息解读。数据分析:系统应支持对历史交通数据进行分析,以预测交通流量趋势、规划道路维护等。用户交互:提供友好的用户界面,实现快速查询、结果筛选和交互式地图操作。

weixin_35750953的博客 830

GIS ArcEngine字段标注显示代码 & 可以同时显示多个标注

ArcEngine 中一般只能显示一个字段的标注 这段代码提供了三种方法可以用不同方法显示哦~ enjoy!

ArcEngine添加注记

这里写自定义目录标题ArcEngine添加注记使用TextElment绘制标注功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导...

baidu_24466055的博客 1361

Arcgis engine 生成地图标注

如同ArcMap中的Lable功能。通过选定字段名可在地图中动态地显示标注。

ARCGIS ENGINE开发时如何改变标注字段

在ArcGIS Engine开发应用程序做标注时,用某一个字段来标注是非常常见的功能,下面的代码说明的是如何来动态的改变标注的字段。 过程描述 '假设pFLayer是一个有效的FeatureLayer对象,下面这两句代码是用默认的字段来标注。 pFLayer.DisplayField = "FID" pFLayer.DisplayAnnotation = True ...

系统运维 417

ArcGIS_Engine+C_实例开发教程+添加标注

《ArcGIS Engine+C#实例开发教程》,面向 ArcGIS Engine(以下简称AE)开发初学者,本教程将帮助您进一步理解AE的体系结构与开发方法,掌握基本的GIS桌面应用程序的开发。

Fortran环境配置:VS2022+Intel oneAPI安装全流程指南

Fortran环境配置:VS2022+Intel oneAPI安装全流程指南

shuyisuisuinian的博客 2万+

ArcEngine图层标注

1、前言 在ArcEngine中,图层标注用的还是很多的,下面就来介绍一下ArcEngine中的标注功能。首先准备一份面要素文件,其属性表如下图所示: 2、图层标注 2.1、基本标注 基本标注可以利用ITextSymbol接口实现,代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Li

HerryDong的博客 2315

从零到一:Admin.NET中Swagger与Knife4jUI的深度集成实践

本文详细介绍了在Admin.NET框架中深度集成Swagger与Knife4jUI的实践方法,从基础配置到高级定制,包括认证配置、安全增强、界面主题定制等。通过Furion框架简化配置,开发者可以快速构建专业且友好的API文档界面,提升团队协作效率。

defi6farmer的博客 406

ArcEngine 图层标注 (根据字段、角度)

今天做了一个用AE来控制图层是否显示标注,以及已哪一个字段作为标注的字段,以哪一个字段作为标注的角度,现将代码写下来,以备以后差用。 public void EnableFeatureLayerLabel(IFeatureLayer pFeaturelayer, string sLableField, IRgbColor pRGB, int size, string an

蝉音荷律 9269

STM32测测速---编码电机读取速度的计算

速度计算:轮胎每转一圈的脉冲数取决于编码器的分辨率,可由下面公式进行计算:PPR是电机的线数最后可以计算轮胎每转一圈的脉冲数为:轮胎每转一圈的脉冲数 = 9.6 × 11 × 4 = 422.4最后的速度公式简化为:速度 = (0.01 秒内产生的脉冲数 ∗ 0.055 ∗ π )/(0.01 ∗422.4​。

weixin_69414084的博客 3811

嵌入式工程师必看:BLDC电机驱动电路设计全流程(附MOS管选型指南)

本文为嵌入式工程师提供了BLDC电机驱动电路设计的全流程实战指南。文章深入解析了三相全桥逆变电路的核心原理,并重点阐述了功率MOSFET的选型关键参数,如Vds、Rds(on)和Qg。同时,详细介绍了栅极驱动设计、PCB布局布线要点及调试安全步骤,旨在帮助开发者构建稳定高效的BLDC驱动系统。

weixin_29194817的博客 587

ArcEngine 分类标注

arcgis中可以在同一个图层中定义不同的标注方式。 在ArcgisEngine中实现起来如下(以按OID为条件区分为例): /// /// 标注特定图层 /// /// 要标注的图层 /// 要标注的地图控件 public void PUB_ShowTargetFeature(ILayer IN_L

默而识之者 2385

避开这些坑!QMT多因子策略实盘中的5个常见错误及解决方案

本文深入剖析了在QMT平台上实施多因子策略时常见的5个错误,包括因子过拟合、数据延迟处理不当、因子失效、交易成本低估和风险控制缺失,并提供了实用的解决方案。通过优化因子筛选、数据对齐和动态管理,帮助量化交易者提升策略稳健性和实盘表现。

k5l6m的博客 238

地图标注

地图标注:是表示制图对象的名称或数量及质量特征的文字和数字等文字语言。来说明制图对象的名称、种类、性质、和数量等具体特征。   ArcEngine中注记分为两种:标注(Label)、注记(Annotation)。Annotation以更复杂的方法和属性对要素图层进行标注,这个过程可以是自动的,不需用户干预,而且注记内容可以保存到地图数据库中。   AnnotationLayerProperti...

weixin_34221112的博客 146

【自动驾驶控制算法】 第一讲 绪论

声明【自动驾驶控制算法】系列是博主对所分享教学内容的学习笔记,并且该系列每篇博客都会将博主听课后总结的纸质版笔记附于文末,供大家参考。是一位研究汽车领域,无人驾驶方向及其相关方向的大佬,也算是博主在无人驾驶方向的启蒙老师。所以研究相关领域的朋友推荐去听一听他的视频讲解。...

iamtbon_1的博客 1795

达梦数据库导入报错:[警告]服务器与文件内数据的 CASE_SENSITIVE 参数不匹配,成功终止导入, 但出现警告dimp V8,本地编码:PG_GBK, 导入文件编码:PG_UTF8

达梦数据库管理系统的最新版本是8.0版本,简称DM8。DM8采用全新的体系架构,在保证大型通用的基础上,针对可靠性、高性能、海量数据处理和安全性做了大量的研发和改进工作,极大提升了达梦数据库产品的性能、可靠性、可扩展性,能同时兼顾OLTP和OLAP请求,从根本上提升了DM8产品的品质。达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统,简称DM。[警告]服务器与文件内数据的 CASE_SENSITIVE 参数不匹配,成功终止导入, 但出现警告。4.无视警告,输入y,回车。

十三月的博客 1万+

ArcGIS Engine生成等值线(C#)

转自https://www.cnblogs.com/qiernonstop/p/3962221.html 本文介绍c#写的利用ArcGIS Engine生成等值线的方法。 c#写的根据雨量站的降雨量值内插出降雨量等值线的功能。做几点说明: 根据离散点生成等值线: (1)判断等值线shapefile图层临时存放路径是否存在,如果不存在则创建,如果存在并不为空则删除重建; (2)加【降雨量】字段并赋值,生成等值线后删除所加字段; (3)根据所选的字段利用IDW内插生成raster,再设定间距生成contour

sysun的专栏 766

VS Code下载安装与使用教程

VSCode下载安装与使用教程

weixin_46713695的博客 4万+
上一篇: ArcGIS Engine图层简单符号化
下一篇: C/S架构系统的自动更新功能设计与实现(一)
acngiser
博客等级 码龄15年 118粉丝 214原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值