ArcEngine创建注记类及生成注记要素
在宗地出图的时候遇到此功能要求,看代码
※创建注记类
public void createBlackAnno(IMap pMap)
{
//创建mdb数据库文件
IWorkspaceFactory pWorkspaceFactory = new AccessWorkspaceFactoryClass();
IWorkspaceName pWorkspaceName = pWorkspaceFactory.Create("c:/Users/Administrator/Desktop/testfolder/","NewGDB.mdb",null,0);
IName pName = pWorkspaceName as IName;
IWorkspace pWorkspace = pName.Open() as IWorkspace;
//创建数据集
IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace;
ISpatialReferenceFactory pSpatialReferenceF = new SpatialReferenceEnvironmentClass();
ISpatialReference pSpatialReference = pSpatialReferenceF.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_Beijing1954);
pFeatureWorkspace.CreateFeatureDataset("abc",pSpatialReference);
//创建注记要素类
IFeatureDataset pFeatureDataset = pFeatureWorkspace.OpenFeatureDataset("abc");
IFeatureWorkspaceAnno pWorkspaceAnno = pFeatureDataset.Workspace as IFeatureWorkspaceAnno;
/*------------------------------------------------*/
string Name = "AnnoFeatureClass";
IObjectClassDescription pObjectClassDes = new AnnotationFeatureClassDescriptionClass();
IFeatureClassDescription pFCDescription = pObjectClassDes as IFeatureClassDescription;
IFields pFields = pObjectClassDes.RequiredFields; IAnnotateLayerProperties pALProperties = new LabelEngineLayerPropertiesClass();
pALProperties.FeatureLinked = false;
pALProperties.AddUnplacedToGraphicsContainer = false;
pALProperties.CreateUnplacedElements = true;
pALProperties.DisplayAnnotation = true;
pALProperties.UseOutput = true;
ILabelEngineLayerProperties pLayerEngineLayerProps = pALProperties as ILabelEngineLayerProperties;
IAnnotateLayerProperties pAlp = pLayerEngineLayerProps as IAnnotateLayerProperties;
pAlp.Class = "Annotation Class 1";
IAnnotateLayerPropertiesCollection pAnnoPropscollection = new AnnotateLayerPropertiesCollection();
pAnnoPropscollection.Add(pAlp); IGraphicsLayerScale pGraphicsLayerScale = new GraphicsLayerScaleClass();
pGraphicsLayerScale.Units = esriUnits.esriMeters;
pGraphicsLayerScale.ReferenceScale = 2000; /****************/
IFormattedTextSymbol myTextSymbol = new TextSymbolClass();
//peizhi 类里边是三个基础函数分辨是IRgbColor IFontDisp ITextSymbol 对应的,方法基础,此处无代码
Anno.peizhi pAnno = new Anno.peizhi();
IFontDisp pFont = pAnno.getFont("宋体", 12, false);
IColor pColor = pAnno.getColor(34,56,78); myTextSymbol.Color = pColor;
myTextSymbol.Font = pFont;
myTextSymbol.Angle = 0;
myTextSymbol.RightToLeft = false;
myTextSymbol.VerticalAlignment = esriTextVerticalAlignment.esriTVABaseline;
myTextSymbol.HorizontalAlignment = esriTextHorizontalAlignment.esriTHAFull;
myTextSymbol.CharacterSpacing = 200;
myTextSymbol.Case = esriTextCase.esriTCNormal; ISymbolCollection pSymbolCollection = new SymbolCollectionClass();
pSymbolCollection.set_Symbol(0, myTextSymbol as ISymbol); IFeatureClass pAnnoFeatureClass = pWorkspaceAnno.CreateAnnotationClass(
Name,
pFields,
pObjectClassDes.InstanceCLSID,
pObjectClassDes.ClassExtensionCLSID,
pFCDescription.ShapeFieldName,
"",
pFeatureDataset,
null,
pAnnoPropscollection,
pGraphicsLayerScale,
pSymbolCollection,
true);
}
※生成注记要素
public void createAnnoFeature()
{
//pPoint 用于确定生成注记的位置
IPoint pPoint = new PointClass()
{
X = -10,
Y = -6
};
peizhi p = new peizhi();//同上 ITextElement pTextElement = new TextElementClass()
{
Symbol = p.getTextSymbol(p.getColor(0, 255, 0), p.getFont("宋体", 12, true), 12),
ScaleText = true,
Text = "testet"
};
IElement pElement = pTextElement as IElement;
pElement.Geometry = pPoint;
//以下两行只是为了将生成的注记添加到调试界面,数据量大的时候可以删除,以加快速度
IGraphicsContainer pGContainer = axMapControl1.Map as IGraphicsContainer;
pGContainer.AddElement(pElement, 0);
//将要素转为注记
(axMapControl1.Map as IActiveView).PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, axMapControl1.Extent);
IFeatureClass pFeatureClass = (this.axMapControl1.Map.get_Layer(0) as IFeatureLayer).FeatureClass;
IDataset pDataset = pFeatureClass as IDataset;
ITransactions pTransaction = pDataset.Workspace as ITransactions;
pTransaction.StartTransaction();
IFDOGraphicsLayerFactory pFDOGLFactory = new FDOGraphicsLayerFactoryClass();
ILayer tempLayer = pFDOGLFactory.OpenGraphicsLayer(pDataset.Workspace as IFeatureWorkspace,pFeatureClass.FeatureDataset,pDataset.Name);
IFDOGraphicsLayer pFDOGLayer = tempLayer as IFDOGraphicsLayer;
IElementCollection pElementColl = new ElementCollectionClass();
pFDOGLayer.BeginAddElements();
pElementColl.Add(pElement, 0);
pFDOGLayer.DoAddElements(pElementColl, 0);
pFDOGLayer.EndAddElements();
pElementColl.Clear();
pTransaction.CommitTransaction();
}
※ps: 在生成注记的时候,考虑到注记类以及注记要素本身就属于要素类要素,于是采用平常生成点线面要素的方法生成注记要素,使用CreateFeatureBuffer方法,由于Override字段不可赋值,与手动插入的注记要素仅有此字段不同,结果要素可以添加进注记的要素类中,但是不能显示,用IDentity工具 也可以查看,确实有值,纠结好长时间,采用这个,有这方面的大哥希望一起讨论一下。
QQ:1154048399
ArcEngine创建注记类及生成注记要素的更多相关文章
- 2.创建NHibernateHelper帮助类,生成sessionFactory
接上一篇文章 使用FluentNHibemate 操作数据库,添加映射到数据库 http://www.cnblogs.com/fzxiaoyi/p/8443586.html 在Model文件下再创建个 ...
- 通过元类创建一个Python类
通过元类创建一个Python类 最开始学pytohn的时候我们这样定义类 class ClassName: pass 当熟悉了元类的概念之后我们还可以这样创建 ClassName = type(&qu ...
- php面向对象的基础:创建OOP的类和字段
类的创建 class Computer{ //类的字段(成员) //类的方法 } 对象的声明 $computer = new Computer(); new标识符是为了在内存中创建一个对象(实例),而 ...
- 下面的程序段创建了BufferedReader类的对象in,以便读取本机c盘my文件夹下的文件1.txt。File构造函数中正确的路径和文件名的表示是( )。
下面的程序段创建了BufferedReader类的对象in,以便读取本机c盘my文件夹下的文件1.txt.File构造函数中正确的路径和文件名的表示是( ). ./表示当前项目的路径../表示当 ...
- multiprocessing创建自定义进程类
1.继承Process2.编写自己的__init__,同时加载父类init方法3.重写run方法,可以通过生成的对象调用start自动运行 from multiprocessing import Pr ...
- eclipse类自动生成注释
1.创建新类时自动生成注释 window->preference->java->code styple->code template 当你选择到这部的时候就会看 ...
- Mybatis源码解析(三) —— Mapper代理类的生成
Mybatis源码解析(三) -- Mapper代理类的生成 在本系列第一篇文章已经讲述过在Mybatis-Spring项目中,是通过 MapperFactoryBean 的 getObject( ...
- java 编程基础:注解(Annotation Processing Tool)注解处理器 利用注解解读类属性生成XML文件
APT的介绍: APT(Annotation Processing Tool)是一种注解处理工具,它对源代码文件进行检测,并找出源文件所包含的注解信息,然后针对注解信息进行额外的处理. 使用APT工具 ...
- C#创建和初始化类
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace C_编辑 ...
- JAVA类的创建: 创建JAVA的类 ,JAVA的字段,JAVA类的方法
1. 创建Java的类 如果说Java的一切都是对象,那么类型就是决定了某一类对象的外观与行为.可是类型的关键字不是type,而是class,创建一个新的类型要用下面的代码: 1 2 3 class ...
随机推荐
- python pip 换源
title: pip 换源 author: 杨晓东 permalink: pip-换源 date: 2021-10-02 11:27:04 categories: - 投篮 tags: - demo ...
- CF1793E Velepin and Marketing
个人思路: 从小到大排序,因为一定先满足小的,再满足大的. 分组时,我们发现,同一组内的数在排序后的序列内连续,这样更优.因为(不会证). 我们预处理出对于每个出书数量的答案,查询时直接输出即可.我们 ...
- 2019-2020-1 20199318《Linux内核原理与分析》第九周作业
第8章 进程的切换和系统的一般执行过程 一.学习总结 Linux系统的一般执行过程: 最一般的情况:正在运行的用户态进程X切换到运行用户态进程Y的过程. (1)正在运行的用户态进程X; (2)发生中断 ...
- 敌兵布阵 HDU - 1166 - 单点修改,区间查询:树状数组/线段树
C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于 ...
- C++实现线性表-顺序表的合并操作代码
#include<iostream>#include<cstdlib>//C++动态分配存储空间using namespace std;#define OK 1#define ...
- 解决PageHelper分页不正常,pages始终等于1,total 始终等于pageSize的问题
问题 pages始终等于1,total 始终等于pageSize 原因 原因是我在查询到list数据之后,对list做了操作,导致分页不正常 // 这是service层的类 public PageIn ...
- Elasticsearch Windows版安装配置
Elasticsearch简介 Elasticsearch是一个开源的搜索文献的引擎,大概含义就是你通过Rest请求告诉它关键字,他给你返回对应的内容,就这么简单. Elasticsearch封装了L ...
- UE4.27 新版本像素流送插件配置
UE4.27 像素流送新版插件部署命令 以下内容参考自UE5官方文档:https://docs.unrealengine.com/5.0/en-US/unreal-engine-pixel-strea ...
- 《CSOL大灾变》Mobile开发进度记录——武器购买界面设计
又到了休息日,有点时间继续这个移植游戏的开发.这次主要是关于武器系统模块的开发记录,关于CS以及CSOL的武器系统,它的购买菜单页面虽然谈不上复杂,但是也包含很多GUI元素,下面是CSOL其中的一个武 ...
- ios怎么在自己公司网站扫描下载安装IPA安装包
企业证书(或者99的证书,但是有100个设备限制)打包的IPA安装包,怎么发布给用户安装使用呢? 试了直接给用户.ipa包的链接,手机不能像安卓手机那样安装,平时我们测试放在蒲公英的包蒲公英应该是有做 ...