AE开发实例代码总结_ae实训报告总结
1、AE开发技术文档 一、数据加载问题 1、加载个人数据库 个人数据库是保存在Access中的数据库。加载方式有两种:通过名字和通过属性加载(也许不只是这两种,AE中实现同一功能可以有多种方式) A、通过设置属性加载个人数据库 首先通过IPropertySet接口 定义要连接数据库的一些相关属性,在个人数据库中为数据库的路径,例如:
IPropertySet Propset= new PropertySetClass(); Propset.SetProperty(“DATABASE”,@”D:\test\Ao\data\sh\Mapdata.mdb”); 当定义完属性并设置属性后就可以进行打开数据库的操作了,在ArcEngine开发中存在IWorkspaceFactory 、IFeatureWorkspace 、IFeatureClass 、IFeatureLayer等几个常用的用于打开和操作数据空间地物的接口。IWorkspaceFactory 是一个用于创建和打开工作空间的接口,它是一个抽象的接口,我们在具体应用时要用对应的工作空间实例化它,如下: IWorkspaceFactory Fact = new AccessWorkspaceFactoryClass (); 如果我们打开的是SDE 数据库就要用 SdeWorkspaceFactoryClass 实例化Fact。当我们完成了工作空间的实例化后就可以根据上边设置的属性打开对应的Access 数据库了。打开方式如下:
IFeatureWorkspace Workspace = Fact.Open( Propset,0) as IFeatureWorkspace; 打开Access 工作空间后接下来的事情是做什么了,很简单,找到对应的地物类,赋给相应的层,通过MapControl 控件添加对应的层,然后刷新地图。以下为添加某一层的代码:
IFeatureClass Fcls = Workspace.OpenFeatureClass(“District“);//找到对应的地物类 IFeatureLayer Fly = new FeatureLayerClass();//建立新图层 Fly.FeatureClass = Fcls; //将地物赋给相应的层 MapCtr.Map.AddLayer (Fly);//添加层 MapCtr.ActiveView.Refresh();//刷新地图 其中District 为地物类的名字,MapCtr 为AE中MapControl 的对象。上边的通过属性设置加载数据空间的方式还可以用于SDE 数据库,在SDE 数据库加载时会介绍。
以下为通过设置属性加载Access 数据库的完整C#代码:
public void AddAccessDBByPro() { IPropertySet Propset = new PropertySetClass(); Propset.SetProperty(“DATABASE“,@“D:\test\Ao\data\sh\MapData.mdb“ ); IWorkspaceFactory Fact = new AccessWorkspaceFactoryClass (); IFeatureWorkspace Workspace = Fact.Open(Propset,0) as IFeatureWorkspace; IFeatureClass Fcls = Workspace.OpenFeatureClass (“District“); IFeatureLayer Fly = new FeatureLayerClass(); Fly.FeatureClass = Fcls; MapCtr.Map.AddLayer(Fly); MapCtr.ActiveView.Refresh(); } B、通过数据库名字加载个人数据库 public void AddAccessDBByName() { IworkspaceName pWorkspaceName = new WorkspaceNameClass();
pWorkspaceName.WorkspaceFactoryProgID= “esriDataSourcesGDB.AccessWorkspaceFactory”; pWorkspaceName.PathName =@“D:\test\Ao\data\sh\MapData.mdb”; IName n=pWorkspaceName as IName;
IFeatureWorkspace Workspace= n.Open() as IFeatureWorkspace; IFeatureClass Fcls = Workspace.OpenFeatureClass (“District“); IFeatureLayer Fly = new FeatureLayerClass(); Fly.FeatureClass = Fcls; MapCtr.Map.AddLayer(Fly); MapCtr.ActiveView.Refresh(); } 首先创建一个个人数据库工作空间名,再指定工作空间名的ProgID,以确定打开的是什么类型的工作空间,例如在打开Access个人数据库时,使用下面代码; IworkspaceName pWorkspaceName = new WorkspaceNameClass();
pWorkspaceName.WorkspaceFactoryProgID= “esriDataSourcesGDB.AccessWorkspaceFactory”; pWorkspaceName.PathName =@“D:\test\Ao\data\sh\MapData.mdb”; 属性WorkspaceFactoryProgID可以确保工作空间是AccessWorkspaceFactory,即个人数据库,同时要指定打开数据库路径。为了打开数据库,打开工作空间必须使用IName接口(思考有没有其他办法),,所以接着定义IName、对象,并把工作空间名转换成IName类型,并赋值给IName对象,然后通过IName对象的open方法打开相应的工作空间,代码如下:
IName n=pWorkspaceName as IName;
IFeatureWorkspace Workspace= n.Open() as IFeatureWorkspace; 2、AE开发编辑功能 数据编辑问题 1. 需要了解的概念 长事务 短事务 编辑空间 抽象类,类,和组件对象类 2、最基本的添加点线面功能 添加点(方法有多种,基本思路一样,只是少量的接口有变化) 通过FeatureClass的CreatFeature函数来添加地物。
public void AddPointByStore() { //得到要添加地物的图层 IFeatureLayer l=MapCtr.Map.get_Layer(0) as IFeatureLayer; //定义一个地物类,把要编辑的图层转化为定义的地物类 IFeatureClass fc= l.FeatureClass; //先定义一个编辑的工作空间,然后把它转化为数据集,最后转化为编辑工作空间, IWorkspaceEdit w=(fc as IDataset).Workspace as IWorkspaceEdit; IFeature f; IPoint p; //开始事务操作 w.StartEditing(false); //////???????????????????????? //开始编辑 w.StartEditOperation(); for(int i=0;i<100;i++) { //创建一个地物 f=fc.CreateFeature(); p=new PointClass(); //设置点的坐标 p.PutCoord(i,i);
//确定图形类型 f.Shape=p; //保存地物 f.Store() } //结束编辑 w.StopEditOperation(); //结束事务操作 w.StopEditing(true); } 二、添加线 方法跟添加点一样,不同的只是地物类型不一样而已, AE中各类库的介绍 1、 问题一:什么是UI组件? 2、 类库介绍 空间拓扑运算 1、高级几何对象:点(point)、多点(multipoint)、线(polyline)、面(polygon)、multipatch等。(multipatch:多片,三维地形图中的地图符号包括点状符号、线状符号、面状符号、体状符号以及多片(MultiPatch)符号等) 2、拓扑:空间拓扑描述的事自然界地理对象的空间位置关系,即相邻、重合、连通等。是在同一个要素集下的要素类之间的关系的集合,所以要参与一个拓扑的所有要素类,必须在同一个要素集内(也就是具有同一个空间参考),这样进行的拓扑检查才是精确的。
3、一个要素集可以有多个拓扑,但每个要素类最多只能参与一个拓扑,一个拓扑中可以定义多个规则,是地理对象空间属性的一部分,在目前ESRI提供的数据存储方式中,Coverage和GeoDatabase能够建立拓扑,而Shape格式的数据不能建立拓扑。
4、 esriTRTAny———— 任何拓扑规则,查询拓扑的时候用(ESRI提供的拓扑关系) 5、AE中提供了ITopologicalOperator接口用于拓扑运算,ITopologicalOperator接口用来通过对已存在的几何对象做空间拓扑运算,以产生新的集合对象。ITopologicalOperator接口在GIS开发中的使用非常广泛,通常GIS系统中的缓冲区分析、裁剪几何图形、几何图形差分操作、几何图形合并操作等都需要此接口。
Boundary 方法用于几何图形对象的边界。Polygon的几何对象的Boundary是组成它的Polyline几何对象,Polyline几何对象的Boundary是组成它的顶点Point几何对象,而Point的几何对象的Boundary是空对象。
Buffer 用于集合对象缓冲区分析拓扑操作,该方法用于给一个高级几何对象产生一个缓冲区,无论是Polygon、Polyline、还是Point,他们的缓冲区都是具有面积的几何对象。
Clip 用于对几何对象进行裁剪空间拓扑操作。Clip方法可用一个Envelope对象对一个几何对象进行裁剪,结果是几何对象被Envelope对象所包围的部分。
ConstructUion用于将多个枚举对象与单个几何对象合并为单个几何对象。
ConvexHull 用于构建几何对象的凸多边形。ConvexHull方法用于产生一个几何图形的最小的边框凸多边形(没有凹面包含几何图形的最小多边形) Cut 用于切割几何对象,不支持GeometryBags几何对象,它可以指定一条切割曲线和一个几何图形,经过切割运算后把几何图形分为左右两部分,左右两部分是相对曲线的方向而言的。点与多点不可被分割。Polyline和Polygon只有与切割曲线相交时才能执行Cut方法。
Difference 用于从一个几何图形中减去其与另一个图形相交的部分,产生两个几何对象的差集。
Intersection方法用于两个同纬度几何对象的交集部分。
Simplify用于使几何对象拓扑一致。
SymmetricDifference对称差分可将两个几何图形的并集部分减去两个几何图形交集的部分。
开发实例 一、 鹰眼功能的实现:
分析:鹰眼图的操作主要由以下几个动作,当在一个控件中移动一幅图的时候另一控件中的图也发生变化,当在主控件中重新加载一幅图的时候,另外一个控件的图也发生相应的变化,同时我们在鸟瞰的控件中加入一红色边框,注意这个其实是一个面,只是填充的颜色是透明的而已。通过分析我们知道,我们要添加两个MapControl控件,名字分别是axMapControl1和axMapControl2,其中axMapControl1为主图,而axMapControl2为鸟瞰图。
方法:步骤一:对于名称为axMapControl1的MapControl控件,只需要在axMapControl1的OnExtentUpdated和OnMapReplaced中分别添加以下代码:
private void axMapControl1_OnExtentUpdated(object sender, IMapControlEvents2_OnExtentUpdatedEvent e) { // 得到新范围 IEnvelope pEnvelope = (IEnvelope)e.newEnvelope; IGraphicsContainer pGraphicsContainer = axMapControl2.Map as IGraphicsContainer; IActiveView pActiveView = pGraphicsContainer as IActiveView; //在绘制前,清除axMapControl2中的任何图形元素 pGraphicsContainer.DeleteAllElements(); IRectangleElement pRectangleEle = new RectangleElementClass(); IElement pElement = pRectangleEle as IElement; pElement.Geometry = pEnvelope; //设置鹰眼图中的红线框 IRgbColor pColor = new RgbColorClass(); pColor.Red = 255; pColor.Green = 0; pColor.Blue = 0; pColor.Transparency = 255; //产生一个线符号对象 ILineSymbol pOutline = new SimpleLineSymbolClass(); pOutline.Width = 3; 的属性 IFillSymbol pFillSymbol = new SimpleFillSymbolClass(); pFillSymbol.Color = pColor; pFillSymbol.Outline = pOutline; IFillShapeElement pFillShapeEle = pElement as IFillShapeElement; pFillShapeEle.Symbol = pFillSymbol; pGraphicsContainer.AddElement((IElement)pFillShapeEle, 0); pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null); } private void axMapControl1_OnMapReplaced(object sender, IMapControlEvents2_OnMapReplacedEvent e) { if (axMapControl1.LayerCount > 0) { axMapControl2.Map = new MapClass(); for (int i = 0; i <= axMapControl1.Map.LayerCount - 1; i++) { axMapControl2.AddLayer(axMapControl1.get_Layer(i)); } axMapControl2.Extent = axMapControl1.Extent; axMapControl2.Refresh(); } } 步骤二:对于名称为axMapControl2的MapControl控件,只需要在axMapControl2的OnMouseMove和OnMouseDown中分别添加以下代码:
private void axMapControl2_OnMouseMove(object sender, IMapControlEvents2_OnMouseMoveEvent e) { if (e.button == 1) { IPoint pPoint = new PointClass(); pPoint.PutCoords(e.mapX, e.mapY); axMapControl1.CenterAt(pPoint); axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); } } private void axMapControl2_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e) { if (axMapControl2.Map.LayerCount > 0) { if (e.button == 1) { IPoint pPoint = new PointClass(); pPoint.PutCoords(e.mapX, e.mapY); axMapControl1.CenterAt(pPoint); axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); } else if (e.button == 2) { IEnvelope pEnv = axMapControl2.TrackRectangle(); axMapControl1.Extent = pEnv; axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); } } } 二、 显示属性表的信息 我们知道ArcMap中的Table of Contents有很多功能,如下图:
而ArcGIS Engine提供的TOCControl控件几乎没有提供,那么这些都是需要自己开发的,在这里我做一个显示属性表的功能。
分析:要显示某一个图层的属性表,首先要将这个图层选中,然后在另外一个Form中将选中的这个图层的属性信息进行显示。
方法:添加一个上下文菜单,添加一个新的Form窗体,在这个新的窗体上添加GridView控件,并在TOCControl控件的OnMouseDown事件下添加如下代码(pGlobalFeatureLayer是我定义的一个全局变量):
private void axTOCControl1_OnMouseDown(object sender, ESRI.ArcGIS.Controls.ITOCControlEvents_OnMouseDownEvent e) { if (axMapControl1.LayerCount > 0) { esriTOCControlItem pItem = new esriTOCControlItem(); pGlobalFeatureLayer = new FeatureLayerClass(); IBasicMap pBasicMap = new MapClass(); object pOther = new object(); object pIndex = new object(); axTOCControl1.HitTest(e.x, e.y, ref pItem, ref pBasicMap, ref pGlobalFeatureLayer, ref pOther, ref pIndex); } if (e.button == 2) { context.Show(axTOCControl1, e.x, e.y); } } 在上下文菜单的打开属性表的Click事件中添加如下代码:
private void 打开属性表ToolStripMenuItem_Click(object sender, EventArgs e) { FormTable Ft = new FormTable(pGlobalFeatureLayer as IFeatureLayer); Ft.Show(); } 在新的窗体中添加一个将属性表显示到GridView控件中的函数,如下:
public void Itable2Dtable() { IFields pFields; pFields = pFeatureLayer.FeatureClass.Fields; dtGridView.ColumnCount = pFields.FieldCount; for (int i = 0; i < pFields.FieldCount;i++ ) { string fldName = pFields.get_Field(i).Name; dtGridView.Columns[i].Name = fldName; dtGridView.Columns[i].ValueType = System.Type.GetType(ParseFieldType(pFields.get_Field(i).Type)); } IFeatureCursor pFeatureCursor; pFeatureCursor = pFeatureLayer.FeatureClass.Search(null, false); IFeature pFeature; pFeature = pFeatureCursor.NextFeature(); while (pFeature != null) { string[] fldValue = new string[pFields.FieldCount]; for (int i = 0; i < pFields.FieldCount; i++) { string fldName; fldName = pFields.get_Field(i).Name; if (fldName==pFeatureLayer .FeatureClass .ShapeFieldName) { fldValue[i] = Convert.ToString(pFeature.Shape.GeometryType); } else fldValue[i] = Convert.ToString(pFeature.get_Value(i)); } dtGridView.Rows.Add(fldValue); pFeature = pFeatureCursor.NextFeature(); } } 数据库知识:
DB2、Informix、PostgreSQL 数据库打开方式以及方法:
1、 打开个人数据库:
public IWorkspace GetMDBWorkspace(String _pGDBName) { IWorkspaceFactory pWsFac = new AccessWorkspaceFactoryClass(); IWorkspace pWs = pWsFac.OpenFromFile(_pGDBName,0); return pWs; } 2、 打开文件数据库:
public IWorkspace GetFGDBWorkspace(String _pGDBName) { IWorkspaceFactory pWsFac = new FileGDBWorkspaceFactoryClass(); IWorkspace pWs = pWsFac.OpenFromFile(_pGDBName, 0); return pWs; } 3、 打开SDE数据库:
打开SDE数据库我们使用的是Open方法,要用这个方法,我们就要对IPropertySet对象设置,要打开SDE数据库,我们要获取SDE数据库的服务器地址,数据库实例,数据库,用户,密码等参数。而IPropertySet就好比一个Key-Value的对象,用来帮组我们设置这些,然后传到Open方法中。
public IWorkspace GetSDEWorkspace(String _pServerIP, String _pInstance, String _pUser, String _pPassword, String _pDatabase, String _pVersion) { ESRI.ArcGIS.esriSystem.IPropertySet pPropertySet = new ESRI.ArcGIS.esriSystem.PropertySetClass(); pPropertySet.SetProperty(“SERVER“, _pServerIP); pPropertySet.SetProperty(“INSTANCE“, _pInstance); pPropertySet.SetProperty(“DATABASE“, _pDatabase); pPropertySet.SetProperty(“USER“, _pUser); pPropertySet.SetProperty(“PASSWORD“, _pPassword); pPropertySet.SetProperty(“VERSION“, _pVersion); ESRI.ArcGIS.Geodatabase.IWorkspaceFactory2 workspaceFactory; workspaceFactory = (ESRI.ArcGIS.Geodatabase.IWorkspaceFactory2)new ESRI.ArcGIS.DataSourcesGDB.SdeWorkspaceFactoryClass(); return workspaceFactory.Open(pPropertySet, 0); } 注意,打开SDE数据库需要用到ArcGIS Engine运行时的企业级许可。(即此时的License需要特别设置——ArcEngine的Lisence应使用企业数据库类型,在From1_Load事件中初始化lisence,不能使用lisence控件设置,否则提示没有许可lisence。) 具体的解决代码如下:
private void From1_Load(object sender,EventArg e) { IAoInitialize pao=new AoInitializeClass(); pao.Initialize(esriLisenceProductCode.esriLisenceProductCodeEngineGeoDB); } 4.4.2 获取数据库中的要素类 在ArcGIS Engine中,要得到某一个类,首要要获取工作空间,然后进入工作空间再得到相应的东西,也就是以下两个步骤:
l 获取工作空间;
l 获取相应的要素类。
我们定义一个函数用来获取个人数据库的路径 public string WsPath() { string WsFileName=““; OpenFileDialog OpenFile = new OpenFileDialog(); OpenFile.Filter = “个人数据库(MDB)|*.mdb“; DialogResult DialogR = OpenFile.ShowDialog(); if (DialogR == DialogResult.Cancel) { } else { WsFileName = OpenFile.FileName; } return WsFileName; } 要获取要素类,首先获取工作空间,然后对工作空间中的要素类进行遍历,代码如下:
private void button2_Click(object sender, EventArgs e) { string WsName = WsPath(); if (WsName != ““) { IWorkspaceFactory pWsFt = new AccessWorkspaceFactoryClass(); IWorkspace pWs = pWsFt.OpenFromFile(WsName, 0); IEnumDataset pEDataset =pWs.get_Datasets(esriDatasetType.esriDTAny); IDataset pDataset = pEDataset.Next(); while (pDataset != null) { if (pDataset.Type ==esriDatasetType.esriDTFeatureClass) { FeatureClassBox.Items.Add(pDataset.Name); } //如果是数据集 else if (pDataset.Type == esriDatasetType.esriDTFeatureDataset) { IEnumDataset pESubDataset = pDataset.Subsets; IDataset pSubDataset = pESubDataset.Next(); while (pSubDataset != null) { FeatureClassBox.Items.Add(pSubDataset.Name);// ----这是从哪里来的???------------ pSubDataset = pESubDataset.Next(); } } pDataset = pEDataset.Next(); } } FeatureClassBox.Text = FeatureClassBox.Items[0].ToString(); } 判断要素是否被编辑:
ArcGIS Engine 提供了一个IDatasetEdit的接口用来判断我们的数据是否处于编辑状态,该接口只有一个方法,如下:
示例代码如下:
public bool ISEdit (IFeatureClass pFeatureClass) { IDatasetEdit pDataEdit = pFeatureClass as IDatasetEdit; return pDataEdit.IsBeingEdited(); } 如何删除要素类:
IFeatureWorkspace这个接口主要是用于管理基于矢量数据的,如表,要素类,要素数据集等。
要想删除一个要素类,那么必须先得到这个。,如要打开一个名称为PointTest的要素类,只需要在OpenFeatureClass中传入这个要素类的名称,代码如下:
IWorkspaceFactory pWsFt = new AccessWorkspaceFactoryClass(); IWorkspace pWs = pWsFt.OpenFromFile(WsName, 0); IFeatureWorkspace pFWs = pWs as IFeatureWorkspace; IFeatureClass pFClass = pFWs.OpenFeatureClass(“PointTest“); 如果是在ArcMap中,我们会切换到Catalog中然后进入相应的数据库,然后删除相应的要素类,这种操作会让我们想到FeatureClas这个对象会提供删除的方法,其实不然,这个删除的方法是定义在Dataset这个对象中。
private void button1_Click(object sender, EventArgs e) { string WsName = WsPath(); if( WsName !=““) { IWorkspaceFactory pWsFt = new AccessWorkspaceFactoryClass(); IWorkspace pWs = pWsFt.OpenFromFile(WsName, 0); IFeatureWorkspace pFWs = pWs as IFeatureWorkspace; IFeatureClass pFClass = pFWs.OpenFeatureClass(“PointTest“); IDataset pDatset = pFClass as IDataset; pDatset.Delete(); } } 删除前:
删除后:
创建要素类 创建要素类用到了IFeatureWorkspace.CreateFeatureClass方法。
所需接口:IField,IFieldEdit,IFields,IFieldsEdit,IGeometryDef,IGeometryDefEdit接口 (注意 在NET中,会遇到以“_2”结尾的属性,这些属性是可写的。) //定义一个几何字段,类型为点类型 ISpatialReference pSpatialReference = axMapControl1.ActiveView.FocusMap.SpatialReference; IGeometryDefEdit pGeoDef = new GeometryDefClass(); IGeometryDefEdit pGeoDefEdit = pGeoDef as IGeometryDefEdit; pGeoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint; pGeoDefEdit.SpatialReference_2 = pSpatialReference; //定义一个字段集合对象 IFields pFields = new FieldsClass(); IFieldsEdit pFieldsEdit = (IFieldsEdit)pFields; //定义单个的字段 IField pField = new FieldClass(); IFieldEdit pFieldEdit = (IFieldEdit)pField; pFieldEdit.Name_2 = “SHAPE“; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry; pFieldsEdit.AddField(pField); pFieldEdit.GeometryDef_2 = pGeoDef; //定义单个的字段,并添加到字段集合中 pField = new FieldClass(); pFieldEdit = (IFieldEdit)pField; pFieldEdit.Name_2 = “STCD“; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString; pFieldsEdit.AddField(pField); //定义单个的字段,并添加到字段集合中 pField = new FieldClass(); pFieldEdit = (IFieldEdit)pField; pFieldEdit.Name_2 = “SLM10“; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString; pFieldsEdit.AddField(pField); //定义单个的字段,并添加到字段集合中 pField = new FieldClass(); pFieldEdit = (IFieldEdit)pField; pFieldEdit.Name_2 = “SLM20“; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString; pFieldsEdit.AddField(pField); //定义单个的字段,并添加到字段集合中 pField = new FieldClass(); pFieldEdit = (IFieldEdit)pField; pFieldEdit.Name_2 = “SLM40“; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString; pFieldsEdit.AddField(pField); IWorkspaceFactory pFtWsFct = new AccessWorkspaceFactory(); IFeatureWorkspace pWs = pFtWsFct.OpenFromFile(@“E:\arcgis\Engine\s.mdb“, 0) as IFeatureWorkspace; IFeatureClass pFtClass = pWs.CreateFeatureClass(“Test“, pFields, null, null, esriFeatureType.esriFTSimple, “SHAPE“, null)——————//////????????????? 如何改变字段的别名? public void ChangeFieldAliasName(ITable pTable, string pOriFieldName, string pDesFieldName) { IClassSchemaEdit pClassSchemaEdit = (IClassSchemaEdit)pTable; //给对象加上锁 ISchemaLock pSchemaLock = (ISchemaLock)pTable; pSchemaLock.ChangeSchemaLock(esriSchemaLock.esriExclusiveSchemaLock); if (pTable.FindField(pOriFieldName) != -1) { pClassSchemaEdit.AlterFieldAliasName(pOriFieldName, pDesFieldName); pSchemaLock.ChangeSchemaLock(esriSchemaLock.esriSharedSchemaLock); 使用IFeatureSelection接口高亮显示 在介绍IMap接口那一节,我们用IMap的IMap.SelectFeature方法实现了对查询的要素高亮显示,现在我们用IFeatureSelection接口实现查询高亮显示 IMap pMap = axMapControl1.Map; IFeatureLayer pFeaturelayer = GetLayer(pMap, “Roads“) as IFeatureLayer; IFeatureSelection pFeatureSelection = pFeaturelayer as IFeatureSelection; IQueryFilter pQuery = new QueryFilterClass(); pQuery.WhereClause = “TYPE=“ +“'paved'“; pFeatureSelection.SelectFeatures(pQuery,esriSelectionResultEnum.esriSelectionResultNew,false); axMapControl1.ActiveView.Refresh(); 其中GetLayer函数是我们写的一个根据图层的名称获取图层的方法,代码如下 private ILayer GetLayer(IMap pMap, string LayerName) { IEnumLayer pEnunLayer; pEnunLayer = pMap.get_Layers(null, false); pEnunLayer.Reset(); ILayer pRetureLayer; pRetureLayer = pEnunLayer.Next(); while (pRetureLayer != null) { if (pRetureLayer.Name == LayerName) { break; } pRetureLayer = pEnunLayer.Next(); } return pRetureLayer; } 提问:以下三种方式的区别在哪里? axMapControl1.Refresh(esriViewDrawPhase.esriViewGeoSelection, null, null); axMapControl1.ActiveView.Refresh(); axMapControl1.Refresh(); 创建符合要求的表:
public ITable CreateTable(string _TablePath, string _TableName) { IWorkspaceFactory pWks = new ShapefileWorkspaceFactoryClass(); IFeatureWorkspace pFwk = pWks.OpenFromFile(_TablePath, 0) as IFeatureWorkspace; //用于记录面中的ID; IField pFieldID = new FieldClass(); IFieldEdit pFieldIID = pFieldID as IFieldEdit; pFieldIID.Type_2 = esriFieldType.esriFieldTypeInteger; pFieldIID.Name_2 = “面ID“; //用于记录个数的; IField pFieldCount = new FieldClass(); IFieldEdit pFieldICount = pFieldCount as IFieldEdit; pFieldICount.Type_2 = esriFieldType.esriFieldTypeInteger; pFieldICount.Name_2 = “个数“; //用于添加表中的必要字段 ESRI.ArcGIS.Geodatabase.IObjectClassDescription objectClassDescription = new ESRI.ArcGIS.Geodatabase.ObjectClassDescriptionClass(); IFields pTableFields = objectClassDescription.RequiredFields; IFieldsEdit pTableFieldsEdit = pTableFields as IFieldsEdit; pTableFieldsEdit.AddField(pFieldID); pTableFieldsEdit.AddField(pFieldCount); ITable pTable = pFwk.CreateTable(_TableName, pTableFields, null, null, ““); return pTable; } 统计需要的数据:
/// <summary> /// 第一个参数为面数据,第二个参数为点数据,第三个为输出的表 /// </summary> /// <param name=“_pPolygonFClass“></param> /// <param name=“_pPointFClass“></param> /// <param name=“_pTable“></param> public void StatisticPointCount(IFeatureClass _pPolygonFClass, IFeatureClass _pPointFClass, ITable _pTable) { IFeatureCursor pPolyCursor = _pPolygonFClass.Search(null, false); IFeature pPolyFeature = pPolyCursor.NextFeature(); while (pPolyFeature != null) { IGeometry pPolGeo = pPolyFeature.Shape; int Count = 0; ISpatialFilter spatialFilter = new SpatialFilterClass(); spatialFilter.Geometry = pPolGeo; spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelContains; IFeatureCursor pPointCur = _pPointFClass.Search(spatialFilter, false); if (pPointCur != null) { IFeature pPointFeature = pPointCur.NextFeature(); while (pPointFeature != null) { pPointFeature= pPointCur.NextFeature(); Count++; } } if (Count != 0) { IRow pRow = _pTable.CreateRow(); pRow.set_Value(1, pPolyFeature.get_Value(0)); pRow.set_Value(2, Count); pRow.Store(); } pPolyFeature = pPolyCursor.NextFeature(); } } 效果如下:
上面这个例子只是用了空间过滤,没有用到属性过滤,我们将上面的代码稍微改动下,加上一句代码即可, 结果对照:
使用查询图层快速浏览: 我们可以按照以下步骤来执行一个QueryLayer。
1) 获取SqlWorkspaceFactory 2) 获取SqlWorkspace 3) 构造查询语句 4) 执行查询 5) 获取结果 public IFeatureLayer OracleQueryLayer() { // 创建SqlWorkspaceFactory的对象 Type pFactoryType =Type.GetTypeFromProgID(“esriDataSourcesGDB.SqlWorkspaceFactory“); IWorkspaceFactory pWorkspaceFactory = (IWorkspaceFactory)Activator.CreateInstance(pFactoryType); // 构造连接数据库的参数 IPropertySet pConnectionProps = new PropertySetClass(); pConnectionProps.SetProperty(“dbclient“, “Oracle11g“); pConnectionProps.SetProperty(“serverinstance“, “esri“); pConnectionProps.SetProperty(“authentication_mode“, “DBMS“); pConnectionProps.SetProperty(“user“, “scott“); pConnectionProps.SetProperty(“password“, “arcgis“); // 打开工作空间 IWorkspace workspace = pWorkspaceFactory.Open(pConnectionProps, 0); ISqlWorkspace pSQLWorkspace = workspace as ISqlWorkspace; //获取数据库中的所有表的名称 IStringArray pStringArray= pSQLWorkspace.GetTables(); for (int i = 0; i < pStringArray.Count; i++) { MessageBox.Show(pStringArray.get_Element(i)); } // 构造过滤条件 SELECT * FROM PointQueryLayer IQueryDescription queryDescription = pSQLWorkspace.GetQueryDescription(“SELECT * FROM PointQueryLayer“); ITable pTable = pSQLWorkspace.OpenQueryClass(“QueryLayerTest“, queryDescription); IFeatureLayer pFeatureLayer = new FeatureLayerClass(); pFeatureLayer.FeatureClass = pTable as IFeatureClass; return pFeatureLayer; } 点几何对象:
Point是一个0维的几何图形,具有X,Y坐标值,以及一些可选的属性:如高程值(Z值),度量值(M值) M这个属性在线性参考和动态分段中经常用到和ID号,点对象用于描述精确定位的对象。同时,点对象还可以有Z和M两个可选属性,。以下代码演示如何创建一个Point对象: /// <summary> /// 获取点 /// </summary> /// <param name=“x“></param> /// <param name=“y“></param> /// <returns></returns> private IPoint ConstructPoint(double x, double y) { IPoint pPoint = new PointClass(); pPoint.PutCoords(x, y); return pPoint; } MultiPoint对象是一系列无序的点的群集,这些点具有相同的属性信息。例如可以用一个点集来表示整个城市天然气调压站。如下图所示:一个Multipoint对象由8个Point对象组成。
以下代码片段演示如何构建Multipoint对象: private object pMissing = Type.Missing; public IGeometry GetMultipointGeometry() { const double MultipointPointCount = 25; IPointCollection pPointCollection = new MultipointClass(); for (int i = 0; i < MultipointPointCount; i++) { pPointCollection.AddPoint(GetPoint(), ref pMissing, ref pMissing); } return pPointCollection as IGeometry; } private IPoint GetPoint() { const double Min = -10; const double Max = 10; Random pRandom = new Random(); double x = Min + (Max - Min) * pRandom.NextDouble(); double y = Min + (Max - Min) * pRandom.NextDouble(); return ConstructPoint(x, y); } Segment对象 Segment对象是一个有起点和终点的“线“,也就是说Segement只有两个点,至于两点之间的线是直的,还是曲的,需要其余的参数定义。所以Segment是由起点,终点和参数三个方面决定的。Segment有4个子类,它的4个子类(直线,圆弧,椭圆弧,贝赛尔曲线)。
ISegment有两个很有用的方法如下图:
这两个方法用于将该Segment进行分割成小的Segement Path几何对象 Path是连续的Segment的集合,除了路径的第一个Segment和最后一个Segment外其余的Segment的起始点都是前一个Segment的终止点,即Path对象的中的Segment不能出现分离,Path可以是任意数的Segment子类的组合。
该Path对象有很多我们经常用到的方法,如平滑曲线,对曲线抽稀等操作 Ring几何对象 Ring是一个封闭的Path即起始和终止点有相同的坐标值,它有内部和外部属性。
Polyline几何对象 Polyline对象是由一个或多个相连或者不相连的path对象的有序集合,通常用来代表线状地物如道路,河流,管线等等.该对象在ArcGIS Engine中的模型图如下:
这并不意味着用户必须按照这种层次去构造polyline,实际上Point集合直接构成Polyline,组成Polyline的这些路径既可以是连续的,也可以是不连续的。
Polyline是有序path组成的集合,可以拥有M、Z和ID属性值,Polyline对象的IPointCollection接口包含了所有的节点信息,IGeometryCollection接口可以获取polyline的paths,ISegmentCollection接口可以获取 polyline的segments。
一个Polyline对象必须满足以下准则:
1.组成Polyline对象的所有Path对象必须是有效的。
2.组成Polyline对象的所有Path对象不能重合,相交或自相交。
3.组成Polyline对象的多个Path对象可以连接与某一点,也可以分离。
4.Path对象的长度不能为0. IPolyline是Polyline类的主要接口,IPolyline的Reshape方法可以使用一个Path对象为一个Polyline对象整形,IPolyline的SimplifyNetwork方法用于简化网络。
Polyline对象可以使用IGeometryCollection接口添加Path对象的方法来创建,使用该接口需注意以下情况:
1.每一个Path对象必须是有效的,或使用IPath::Simplify方法后有效。
2.由于Polyline是Path对象的有序集合,所以添加Path对象时必须注意顺序和方向。
3.为了保证Polyline是有效的,可以创建完Polyline对象后使用ITopologicalOperator接口的Simplify方法。
下面代码片段演示了一个Polyline的构成:
private object pMissing = Type.Missing; public IGeometry GetPolylineGeometry() { const double PathCount = 3; const double PathVertexCount = 3; IGeometryCollection pGeometryCollection = new PolylineClass(); for (int i = 0; i < PathCount; i++) { IPointCollection pPointCollection = new PathClass(); for (int j = 0; j < PathVertexCount; j++) { pPointCollection.AddPoint(GetPoint(), ref pMissing, ref pMissing); } pGeometryCollection.AddGeometry(pPointCollection as IGeometry, ref pMissing, ref pMissing); } return pGeometryCollection as IGeometry; } private IPoint GetPoint() { const double Min = -10; const double Max = 10; Random random = new Random(); double x = Min + (Max - Min) * random.NextDouble(); double y = Min + (Max - Min) * random.NextDouble(); return ConstructPoint(x, y); } Segment,Path,Ring和Polyline的区别 在这四者当中Segment是最小的单位具体的构成路线可以分为两个条:
Segment-Path-Ring(封闭的Path) Segment-Path-Polyline 我们可以这样说Segment是Path,只不过是这个Path由一个Segment组成,Ring也是一种Path,只不过是一个起点和终点重合的Path,至于Polyline那就很明显了,他们的区别可以从下图看出:
Polygon对象 Polylgon对象是由一个或多个Ring对象的有序集合,它可以是由单个Ring 对象构成,也可以使用多个Ring组成。Polygon通常用来代表有面积的多边形矢量对象,如行政区,建筑物等。Polygon的组成结构可以看下图:
从这个图上可以看出 Polygon是由Rings构成,而Ring又是又Segment构成,但是这并不意味着用户必须按照这种层次去构造Polygon,实际上用Point的集合可以构成Polygon. /// <summary> /// 通过点构造面 /// </summary> /// <param name=“pPointCollection“></param> /// <returns></returns> public IPolygon CreatePolygonByPoints(IPointCollection pPointCollection) { IGeometryBridge2 pGeometryBridge2 = new GeometryEnvironmentClass(); IPointCollection4 pPolygon = new PolygonClass(); WKSPoint[] pWKSPoint = new WKSPoint[pPointCollection.PointCount]; for (int i = 0; i < pPointCollection.PointCount; i++) { pWKSPoint[i].X = pPointCollection.get_Point(i).X; pWKSPoint[i].Y = pPointCollection.get_Point(i).Y; } pGeometryBridge2.SetWKSPoints(pPolygon, ref pWKSPoint); IPolygon pPoly= pPolygon as IPolygon; pPoly.close(); return pPoly; } 组成Polygon的是Ring,其中Ring可以分为Outer Ring(外环)和Inner Ring(内环)之分。外环和内环都是有方向的,它们的区别是外环的方向是顺时针的,内环的方向是逆时针。
Polygon对象实现了一个接口IArea,而该接口用来对Poylgon的中心,重心,以及面积进行访问,下面片段用来获取Polygoe的面积:
IArea pArea = pPolygon as IArea; Double S= pArea. Area IGeometryCollection接口 通过IGeometryCollection创建一个Polygon对象的代码片段如下:
private IPolygon ConstructorPolygon(List<IRing> pRingList) { try { IGeometryCollection pGCollection = new PolygonClass(); object o = Type.Missing; for (int i = 0; i < pRingList.Count; i++) { //通过IGeometryCollection接口的AddGeometry方法向Polygon对象中添加Ring子对象 pGCollection.AddGeometry(pRingList[i], ref o, ref o); } //QI至ITopologicalOperator ITopologicalOperator pTopological = pGCollection as ITopologicalOperator; //执行Simplify操作 pTopological.Simplify(); IPolygon pPolygon = pGCollection as IPolygon; //返回Polygon对象 return pPolygon; } catch (Exception Err) { return null; } } private IPolygon MergePolygons(IPolygon firstPolygon, IPolygon SecondPolygon) { try { //创建一个Polygon对象 IGeometryCollection pGCollection1 = new PolygonClass(); IGeometryCollection pGCollection2 = firstPolygon as IGeometryCollection; IGeometryCollection pGCollection3 = SecondPolygon as IGeometryCollection; //添加firstPolygon pGCollection1.AddGeometryCollection(pGCollection2); //添加SecondPolygon pGCollection1.AddGeometryCollection(pGCollection3); //QI至ITopologicalOperator ITopologicalOperator pTopological = pGCollection1 as ITopologicalOperator; //执行Simplify操作 pTopological.Simplify(); IPolygon pPolygon = pGCollection1 as IPolygon; //返回Polygon对象 return pPolygon; } catch (Exception Err) { return null; } } 唯一值渲染代码:
public UniqueValueRender(AxMapControl pMapcontrol, IFeatureLayer pFtLayer,int pCount, string pFieldName) { IGeoFeatureLayer pGeoFeaturelayer = pFtLayer as IGeoFeatureLayer; IUniqueValueRenderer pUnique = new UniqueValueRendererClass(); pUnique.FieldCount = 1; pUnique.set_Field(0, pFieldName); ISimpleFillSymbol pSimFill = new SimpleFillSymbolClass(); //给颜色 IFeatureCursor pFtCursor = pFtLayer.FeatureClass.Search(null, false); IFeature pFt = pFtCursor.NextFeature(); IFillSymbol pFillSymbol1; ////添加第一个符号 //pFillSymbol1 = new SimpleFillSymbolClass(); //pFillSymbol1.Color = GetRGBColor(103, 252, 179) as IColor; ////添加第二个符号 //IFillSymbol pFillSymbol2 = new SimpleFillSymbolClass(); //pFillSymbol2.Color = GetRGBColor(125, 155, 251) as IColor; //创建并设置随机色谱从上面的的图可以看出我们要给每一个值定义一种颜色,我们可以创建色谱,但是色谱的这些参数 IRandomColorRamp pColorRamp = new RandomColorRampClass(); pColorRamp.StartHue = 0; pColorRamp.MinValue = 20; pColorRamp.MinSaturation = 15; pColorRamp.EndHue = 360; pColorRamp.MaxValue = 100; pColorRamp.MaxSaturation = 30; pColorRamp.Size = pCount ; //pColorRamp.Size = pUniqueValueRenderer.ValueCount; bool ok = true; pColorRamp.CreateRamp(out ok); IEnumColors pEnumRamp = pColorRamp.Colors; //IColor pColor = pEnumRamp.Next(); int pIndex =pFt.Fields.FindField(pFieldName); //因为我只有24条记录,所以改变这些,这些都不会超过255或者为负数.求余 int i = 0; while (pFt != null) { IColor pColor = pEnumRamp.Next(); if(pColor ==null) { pEnumRamp.Reset(); pColor = pEnumRamp.Next(); } //以下注释代码为自定义的两种颜色 ,如果不使用随机的颜色,可以采用这样的 //if (i % 2 == 0) //{ // pUnique.AddValue(Convert.ToString(pFt.get_Value(pIndex)), pFieldName, pFillSymbol1 as ISymbol); //} //else //{ // pUnique.AddValue(Convert.ToString(pFt.get_Value(pIndex)), pFieldName, pFillSymbol2 as ISymbol); //} //i++; pFillSymbol1 = new SimpleFillSymbolClass(); pFillSymbol1.Color = pColor; pUnique.AddValue(Convert.ToString(pFt.get_Value(pIndex)), pFieldName, pFillSymbol1 as ISymbol); pFt = pFtCursor.NextFeature(); // pColor = pEnumRamp.Next(); } pGeoFeaturelayer.Renderer = pUnique as IFeatureRenderer; pMapcontrol.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); } private IRgbColor GetRGBColor(int R, int G, int B)//子类赋给父类 { IRgbColor pRGB; pRGB = new RgbColorClass(); pRGB.Red = R; pRGB.Green = G; pRGB.Green = B; return pRGB; } } 第二部分 AO GIS应用开发 1、 ArcView、AecEdit和ArcInfo并不是一个软件的名称,它是桌面版GIS的一种版本代码,这三种版本的软件系统都是由ArcMap、ArcCatalog、ArcScene等单个软件组成的,但是他们包含的GIS功能不一样。其中ArcInfo功能最强。
2、 GIS服务器可以通过网络发布地理信息,它包括ArcGIS Server、ArcIMS和ArcSDE三种软件。ArcGIS Server,通常用于建构企业级别的互联网GIS应用 ;
ArcIMS则是一个可定制扩展的,能够在网络上发布地理信息的网络地图发布系统;
ArcSDE是一个空间数据引擎,他可以用于管理关系数据库,以实现地理数据的海量存储等高级特性。
相关热词搜索:实例 代码 开发 AE开发实例代码总结 ae实训报告总结 ae实验报告总结
- 范文大全
- 说说大全
- 学习资料
- 语录
- 生肖
- 解梦
- 十二星座
-
主题党日活动交流发言8篇
主题党日活动交流发言8篇主题党日活动交流发言篇13月13日,东城区党史学习教育动员大会召开。市委
【活动总结】 日期:2022-12-23
-
2022年4月主题党日活动记录范文15篇
2022年4月主题党日活动记录范文15篇2022年4月主题党日活动记录范文篇1一个崇尚阅读的民族,必然精神饱满、意气风发、活力四射。习近平总书记强调:“学习
【活动总结】 日期:2022-08-01
-
家乡赋|最美的家乡赋
家乡赋 孙传志 今安康市,白河双丰镇,吾之家乡也。三环沃土,山水环抱。其北依山,山系五岭,山
【调研报告】 日期:2020-04-01
-
少先队的光荣历史故事 队前教育-光辉历程
2017-2018学年队前教育1光辉历程一、劳动童子团1924——1927二、三十年代年的中国是一个
【法律文书】 日期:2020-06-23
-
党支部1-12月全年主题党日活动计划表
2022年党支部主题党日活动计划表序号活动时间活动方式活动内容12022年1月专题学习研讨集中观看2022年新年贺词,积极开展学习研讨交流。组织生活会组织党员认真对照党章...
【活动总结】 日期:2022-10-14
-
【人教版1-6年级数学上册知识点精编】1-6年级数学人教版教材
人教版二年级数学上册知识点汇总第一单元长度单位一、米和厘米1、测量物体的长度时,要用统一的标准去测量
【调研报告】 日期:2020-11-08
-
2022年2月份主题党日活动记录5篇
2022年2月份主题党日活动记录5篇2022年2月份主题党日活动记录篇1尊敬的党组织:在今年的开学初,本人积极参加教研室组织的教研活动,在学校教研员的指
【活动总结】 日期:2022-08-12
-
医院最佳主题党日活动11篇
医院最佳主题党日活动11篇医院最佳主题党日活动篇1 医院最佳主题党日活动篇2为隆重纪念中国共产党成立100周年,进一步巩固党的群众路线教育实践活动成果,切实
【活动总结】 日期:2022-10-29
-
2023年平安校园建设方案13篇
平安校园建设方案“平安校园”创建工作,我们幼儿园全体教职员工一直把它当作头等大事来抓。领导高度重视,以“平安校园”创建活动为抓手,建立和规范校园安全工作机制
【规章制度】 日期:2023-11-02
-
主题党日活动记录202210篇
主题党日活动记录202210篇主题党日活动记录2022篇12021年是中国共产党成立100周年,为广泛开展爱国主义宣传教育,铭记党的历史,讴歌党的光辉历程,
【活动总结】 日期:2022-08-02
-
正式的晚宴邀请函 公司晚宴邀请函
尊敬的先生 女士: 我公司谨定于xxxx年xx月xx日xx:xx在xxxx店隆重举行xx市xx届xxxx晚宴(宴会地址:xx区xx路xxxx) 敬请届时光临!xxxxxx集团股份有限公司xxxx有限公司敬邀xxxx年xx月xx日
【简历资料】 日期:2019-08-03
-
一年级新学期目标简短_一年级学生新学期打算
新学期到了,我是一年级下册的小学生了。 上课的时候,我要认真学习,不做小动作,认真听讲。我要认真学习,天天向上,努力学习,耳朵要听老师讲课,眼睛要瞪得大大的看老...
【简历资料】 日期:2019-10-26
-
《国行公祭,为佑世界和平》课文原文阅读_国行公祭为佑世界和平每段段意
国行公祭,为佑世界和平钟声“国行公祭,法立典章。铸兹宝鼎,祀我国殇。”侵华日军南京大屠杀遇难同胞纪念
【简历资料】 日期:2020-11-28
-
[信访复查复核制度作用探讨]信访复查复核有用吗
作为我国特有的一项制度,信访制度的出现并长期存在不是偶然的,虽然一些法学专家认为信访制度具有“人治”
【职场指南】 日期:2020-02-16
-
[党员干部2019年主题教育个人问题检视清单及整改措施2篇] 党员干部
2019年主题教育问题检视清单及整改措施根据主题教育领导小组办公室《关于认真做好主题教育检视问题整改
【求职简历】 日期:2019-11-08
-
网络维护工作内容_(精华)国家开放大学电大专科《网络系统管理与维护》形考任务1答案
国家开放大学电大专科《网络系统管理与维护》形考任务1答案形考任务1理解上网行为管理软件的功能【实训目
【职场指南】 日期:2020-07-17
-
红旗颂朗诵稿原文【《红旗颂》朗诵词】
《红旗颂》朗诵词 女:晴空万里,红旗飘扬, 六十载风云,我们昂首阔步。 男:六十个春秋,
【职场指南】 日期:2020-02-16
-
党委会与局长办公会的区别_局长办公会制度
为进一步加强xxx局工作的规范化、制度化建设,提高行政效能,规范议事程序,特制定本制度。一、会议形式1、局长办公会议由局长、副局长参加。由局长召集和主持。根据工作需要...
【求职简历】 日期:2019-07-30
-
《铁拳砸碎“黑警伞”》警示教育片观后感
影片深刻剖析了广西北海市公安局海西派出所原所长张枭杰蜕变堕落的轨迹。观看警示教育片后,做为一名党员教
【简历资料】 日期:2020-08-17
-
如何凝心聚力谋发展【坚定信心谋发展凝心聚力促跨越】
当前,清河正处于在苏北实现赶超跨越基础上全面腾飞的战略机遇期,处于在全市率先实现全面小康基础上率先实
【简历资料】 日期:2020-03-17
-
基于定性比较分析法的城乡收入差距多重并发因果分析
孙新卿孙晓曦摘要:本文以我国31个省市为研究对象,以城乡收入差距为研究问题,通过对以往代表性研究观点
【其他范文】 日期:2023-01-01
-
[二年级上册数学试题-第四单元表内乘法(一)测试卷-人教版]
二年级上册数学试题-第四单元表内乘法(一)测试卷-人教版(含答案)一 选择题(共5题,共10分)1
【汇报体会】 日期:2021-04-26
-
在全县2022年意识形态工作会上的讲话
下面是小编为大家整理的在全县2021年意识形态工作会上的讲话
【其他范文】 日期:2022-08-20
-
总工会副主席在学院教职工暨工会会员代表大会会议上致辞(范文推荐)
各位代表、同志们:在全省上下锚定“两个确保”、实施“十大战略”,以优异成绩喜迎党的二十大之际,**学院第四届教职工代表大会第二次会议暨第四届工会会员代表大会第二次会...
【其他范文】 日期:2024-02-03
-
让“康乃馨”开遍云岭大地
■文/向云明鲁玉娇新春伊始,万物复苏。云南省人社系统组建的“社保服务先锋队”肩负着推动云南社保工作提
【其他范文】 日期:2023-02-19
-
2023年度幼儿园教师先进个人事迹材料范本(范文推荐)
她是xx幼儿园那么多教师团队中的一员,就像是草丛中那么一小株无名的小草。可是这株小草也为幼儿园的发展增添了一抹绿色。她在xx幼儿园奉献了了x年的青春,这x年对于她来说都...
【其他范文】 日期:2023-09-30
-
中国式现代化自主知识体系:创新视域与理论阐释
任平中国式现代化新道路、中国式现代化道路、中国式现代化是习近平总书记在庆祝中国共产党成立100周年大
【其他范文】 日期:2023-03-25
-
2022年党史学习组织生活材料【精选推荐】
当前位置:>>>2021-10-04党史是中国共产党自诞生以来领导中国人民为实现中华民族伟大复兴而进行的探索史、奋斗史、创业史,是全体中国人民智慧的结晶。以下是好范文网分享的党...
【其他范文】 日期:2022-11-06
-
创优质护理服务工作总结 护理工作总结
导读:后勤工作总结范文,创优质护理服务工作总结怎么写,格式要求,写法技巧,科教范文网展示的这篇文章是很好的参考:优质护理服务在我院已试行近一年,各院级领导也颇为重...
【礼仪】 日期:2019-11-01
-
2020,年度班子民主生活会点评讲话
2020年度民主生活会点评讲话今天我主要讲两层意思。一是谈感受,二是谈希望。先说对区政协领导班子民主
【节日庆典】 日期:2021-01-13
-
理论中心组学习总体国家安全观发言材料9篇
理论中心组学习总体国家安全观发言材料9篇理论中心组学习总体国家安全观发言材料篇1(八)深入学习贯彻中央以及省的重要会议和文件精神深入学习贯彻年度内中央以
【发言稿】 日期:2022-08-04
-
军转座谈会交流发言4篇
军转座谈会交流发言4篇军转座谈会交流发言篇1大家好,我叫贺丽,2015届选调生,来自康定市委组织部,现在省委编办跟班学习。今天,非常荣幸向大家汇报我的学习收
【发言稿】 日期:2022-10-27
-
12岁生日小寿星发言4篇
12岁生日小寿星发言4篇12岁生日小寿星发言篇1各位来宾、各位朋友:大家好!今天,我们欢聚在这里,共同庆祝**十二周岁生日。首先,我代表**的父母以
【发言稿】 日期:2022-07-31
-
党内警告处分表态发言14篇
党内警告处分表态发言14篇党内警告处分表态发言篇1尊敬的各位领导、同事们:大家上午好!刚才会上宣布了党委关于我任职的决定,我首先衷心感谢党委的信任和
【发言稿】 日期:2022-09-13
-
党内警告处分党员讨论发言3篇
党内警告处分党员讨论发言3篇党内警告处分党员讨论发言篇1大家好!作为新时期的一名大学生,认真学习、深刻领会、全面贯彻省党代会精神,是当前和今后一个时期重
【发言稿】 日期:2022-08-07
-
【企业疫情风险控制方案】 2020企业复工疫情方案
企业疫情风险控制方案2020新冠病毒肺炎疫情防控工作总结汇报3篇 关于新型冠状病毒感染的肺炎疫
【演讲稿】 日期:2020-02-27
-
廉政大会总结发言稿7篇
廉政大会总结发言稿7篇廉政大会总结发言稿篇1各位领导,同志们:根据会议安排,我就党风廉政建设工作做表态发言,不妥之处,请批评指正。一、提高认识,切实
【发言稿】 日期:2022-10-30
-
被约谈的表态发言8篇
被约谈的表态发言8篇被约谈的表态发言篇1各位领导、各位党员大家好:这天我能站在鲜红的党旗下,
【发言稿】 日期:2022-12-24
-
破冰提能大讨论个人发言4篇
破冰提能大讨论个人发言4篇破冰提能大讨论个人发言篇1党史学习教育开展以来,我坚持读原著、学原文、悟原理。今天,根据会议安排,现在我就“学史明理”主题谈几点个
【发言稿】 日期:2022-10-09
-
巡察整改专题民主生活会总结发言8篇
巡察整改专题民主生活会总结发言8篇巡察整改专题民主生活会总结发言篇1按照区委统一部署和纪监委、巡察办关于召开党史学习教育专题组织生活会的工作安排,近期我紧贴
【发言稿】 日期:2022-10-12
-
2023年中国行政区划调整方案(设想优秀3篇
中国行政区划调整方案(设想优秀民政部第二次行政区划研讨会会议内容一、缩省的意义与原则1.意义1)利于减少中间层次中国行政区划层级之多为世界之最,既使管理成本
【周公解梦】 日期:2024-02-20
-
学习周永开先进事迹心得体会3篇
学习周永开先进事迹心得体会【一】通过学习周永开老先生先进事迹后,结合自己工作思考,感慨万千。同样作为
【格言】 日期:2021-04-10
-
2023年和儿媳妇在一起幸福的句子3篇
和儿媳妇在一起幸福的句子1、假如人生不曾相遇,我还是那个我,偶尔做做梦,然后,开始日复一日的奔波,淹没在这喧嚣的城市里。我不会了解,这个世界还有这样的一个你
【格言】 日期:2023-11-10
-
最满意的三项工作200字【最新党办公务员副主任提拔考察个人三年思想工作总结报告】
党办公务员个人三年工作总结近三年来,本人在组织、领导的关心指导和同事们的团结协作下,尽快完成主角的转
【格言】 日期:2021-02-26
-
XX老干局推进党建与业务深度融合发展工作情况调研报告:党建调研报告
XX老干局推进党建与业务深度融合 发展工作情况的调研报告 党建工作与业务工作融合发展始终是一个充满生
【成语大全】 日期:2020-08-28
-
中国共产党第三代中央领导集体的卓越贡献
中国共产党第三代中央领导集体的卓越贡献 --------------继往开来铸就辉煌 【摘要】改
【成语大全】 日期:2020-03-20
-
信息技术2.0能力点 [全国中小学教师信息技术应用能力提升工程试题题库及参考答案「精编」]
全国中小学教师信息技术应用能力提升工程试题题库及答案(复习资料)一、判断题题库(A为正确,B为错误)
【格言】 日期:2020-11-17
-
党建工作运行机制内容有哪些_构建基层党建工作运行机制探讨
党的基层组织是党在社会基层组织中的战斗堡垒,是党的全部工作和战斗力的基础。加强和改进县级以下各类党的
【经典阅读】 日期:2020-01-22
-
电大现代教育原理_最新国家开放大学电大《现代教育原理》形考任务2试题及答案
最新国家开放大学电大《现代教育原理》形考任务2试题及答案形考任务二一、多项选择题(共17道试题,共3
【成语大全】 日期:2020-07-20
-
集合推理_七,推理与集合
七推理与集合1 期中考试数学成绩出来了,三个好朋友分别考了88分,92分,95分。他们分别考了多少分
【名人名言】 日期:2020-12-18
-
关于三农工作重要论述心得体会3篇
关于三农工作重要论述心得体会3篇关于三农工作重要论述心得体会篇1习近平总书记指出:“建设现代化国家离不开农业农村现代化,要继续巩固脱贫攻坚成果,扎实推进乡村
【学习心得体会】 日期:2022-10-29
-
【福生庄隧道坍塌处理方案】 福生庄隧道在哪里
(呼和浩特铁路局大包电气化改造工程指挥部,内蒙古呼和浩特010050)摘要:文章介绍了福生庄隧道
【学习心得体会】 日期:2020-03-05
-
五个一百工程阅读心得体会13篇
五个一百工程阅读心得体会13篇五个一百工程阅读心得体会篇1凡益之道,与时偕行。在全国网络安全和信
【学习心得体会】 日期:2022-12-07
-
城管系统警示教育心得体会9篇
城管系统警示教育心得体会9篇城管系统警示教育心得体会篇1各党支部要召开多种形式的庆七一座谈会,组织广大党员进行座谈,回顾党的光辉历程,畅谈党的丰功伟绩,
【学习心得体会】 日期:2022-10-09
-
发展对象培训主要内容10篇
发展对象培训主要内容10篇发展对象培训主要内容篇1怀着无比激动的心情,我有幸参加了__新区区委党校20__年第四期(区级机关)党员发展对象培训班。这次的学习
【培训心得体会】 日期:2022-09-24
-
扶眉战役纪念馆心得体会11篇
扶眉战役纪念馆心得体会11篇扶眉战役纪念馆心得体会篇1有那么一段历史,低诉着血和泪的故事,慢慢地,随岁月老去;有那么一群人,放弃了闲逸的人生,辗转奔波中
【学习心得体会】 日期:2022-08-03
-
2022年全国检察长会议心得7篇
2022年全国检察长会议心得7篇2022年全国检察长会议心得篇1眼睛是心灵上的窗户,我们通过眼睛才能看到世间万物,才能看到眼前这美好的一切。拥有一双明亮的眼
【学习心得体会】 日期:2022-10-31
-
凝聚三种力量发展全过程人民民主心得体会12篇
凝聚三种力量发展全过程人民民主心得体会12篇凝聚三种力量发展全过程人民民主心得体会篇1新民主主义革命是指在帝国主义和无产阶级革命时代,殖民地半殖民地国家中的
【学习心得体会】 日期:2022-08-31
-
全面从严治党的心得体会800字7篇
全面从严治党的心得体会800字7篇全面从严治党的心得体会800字篇1中国特色社会主义是我们党领导
【学习心得体会】 日期:2022-12-14
-
教师全国两会精神学习专题研讨交流材料6篇
教师全国两会精神学习专题研讨交流材料6篇教师全国两会精神学习专题研讨交流材料篇1通过对两会精神深入系统的学习,作为新一代的青年人,更应该严格要求自己,贯彻落
【教师心得体会】 日期:2022-08-11
-
2024年主题教育民主生活会批评与自我批评意见(38条)(范文推荐)
2023年主题教育民主生活会六个方面个人检视、相互批评意见:1 理论学习系统性不强。学习习近平新时代中国特色社会主义思想不深不透,泛泛而学的时候多,深学细照的时候少,特...
【邓小平理论】 日期:2024-03-19
-
2024年交流发言:强化思想理论武装,增强奋进力量(完整)
习近平总书记指出:“一个民族要走在时代前列,就一刻不能没有理论思维,一刻不能没有思想指引。”党的十八大以来,伴随着新时代中国特色社会主义思想在实践中形成发展的历程...
【三个代表】 日期:2024-03-19
-
2024年度镇年度县乡人大代表述职评议活动总结
xx镇20xx年县乡人大代表述职评议活动总结为响应县级人大常委会关于开展县乡两级人大代表述职评议活动,进一步激发代表履职活力,加强代表与人民群众的联系,提高依法履职水平...
【马克思主义】 日期:2024-03-19
-
“千万工程”经验学习体会(研讨材料)
“千万工程”是总书记在浙江工作时亲自谋划、亲自部署、亲自推动的一项重大决策,也是习近平新时代中国特色社会主义思想在之江大地的生动实践。20年来,“千万工程”先后经历...
【三个代表】 日期:2024-03-19
-
2024年在市政协机关工作总结会议上讲话
同志们:刚才,XX同志对市政协机关20XX年工作进行了很好的总结,很精炼,很到位,可以感受到去年机关工作确实可圈可点。XX同志宣读了表彰决定,机关优秀人员代表、先进集体代...
【邓小平理论】 日期:2024-03-18
-
在全区防汛防涝动员暨河长制工作推进会上讲话提纲【完整版】
区长,各位领导,同志们:汛期已经来临,我区城区防涝工作面临强大考验,形势不容乐观。年初,区城区防涝排渍指挥部已经召开专题调度会,修订完善应急预案,建立网格化管理机...
【马克思主义】 日期:2024-03-18
-
2024年镇作风整治工作实施方案(完整文档)
XX镇作风整治工作实施方案为深入贯彻落实党的二十大精神及省市区委深化作风建设的最新要求,突出重点推进干部效能提升,坚持不懈推动作风整治工作纵深发展,根据《关于印发《2...
【毛泽东思想】 日期:2024-03-18
-
2024市优化法治化营商环境规范涉企行政执法实施方案【优秀范文】
xx市优化法治化营商环境规范涉企行政执法实施方案为持续优化法治化营商环境,激发市场主体活力和社会创造力,规范行政执法行为,创新行政执法方式,提升行政执法质效,着力解...
【毛泽东思想】 日期:2024-03-18
-
2024年度关于开展新一轮思想状况摸底排查工作通知(完整)
关于开展新一轮思想状况摸底排查工作的通知为深入贯彻落实关于各地开展干部职工思想状况大摸底大排查情况上的批示要求和改革教育第二次调度会议精神,有针对性做好队伍教育管...
【三个代表】 日期:2024-03-18
-
2024年公路养护中心主任典型事迹材料(完整文档)
“中心的工作就是心中的事业”——公路养护中心主任典型事迹材料**,男,1976年6月出生,1993年参加工作,2000年4月调入**区交通运输局工作,大学本科学历,中共党员,现任**...
【马克思主义】 日期:2024-03-17