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 ...
随机推荐
- 获取内存及cpu信息
<dependency> <groupId>com.github.oshi</groupId> <artifactId>oshi-core</ar ...
- Python中用requests处理cookies的3种方法
在接口测试中,大多数项目的接口是需要登录后进行操作的,经常用到requests库进行模拟登录及登录后的操作,下面是我不断踩坑后总结出来的关于登录凭证cookies的3种操作方法. 一. 用 reque ...
- mysql实训
MYSQL You have an error in your SQL syntax; check the manual that corresponds to your MySQL server v ...
- 有符号数 无符号数 原码 补码 反码 java用补码表示
计算机数字的储存分为:1.无符号数,2.有符号数 无符号数:只能表示正数.每一位数都代表2的幂次方.只有地址用无符号数,无符号数不进行算术操作,之进行指针的加减.地址并不会造成错误的结果,而是产生一个 ...
- window批处理一键打开多个exe
使用批处理的start命令,格式为start /d "绝对路径" 目标exe名,记得路径和exe名间有个空格 @echo off start /d "E:\demo\&q ...
- 【IDEA】测试类(test)的模板及定义
人和动物的区别是:能制造和使用工具.因为,工具大大便利了我们的生活. 我们在使用Idea开发java项目的过程中,有些代码是固定的,我们能不能只写几个字,就代表一连串的代码.例如,这里,我们只是输入了 ...
- 源码安装pg9.6
源码安装pg9.6 添加用户 useradd pg96 下载源码包 wget https://ftp.postgresql.org/pub/source/v9.6.24/postgresql-9.6. ...
- ThreadPoolTaskExecutor线程池创建
package com.xx.xx.config; import java.util.concurrent.ThreadPoolExecutor; import org.slf4j.Logger; i ...
- 利用matlab求解函数微分
利用matlab解决求解函数微分 matlab,微分 1. 问题提出 最近在复习高等数学,感觉可以结合 去理解他. 遇到了一个题目: 2. 具体代码 %{ 解决函数微分问题 %} clc; clear ...
- Samsung Wlan AP 默认口令
网络资产搜索: FoFa 进入页面 输入该产品账户密码 在github上面寻找 End!!!