ArcGIS Engine地图查询精品文档21页Word格式文档下载.docx

上传人:b****7 文档编号:21724199 上传时间:2023-01-31 格式:DOCX 页数:14 大小:30.89KB
下载 相关 举报
ArcGIS Engine地图查询精品文档21页Word格式文档下载.docx_第1页
第1页 / 共14页
ArcGIS Engine地图查询精品文档21页Word格式文档下载.docx_第2页
第2页 / 共14页
ArcGIS Engine地图查询精品文档21页Word格式文档下载.docx_第3页
第3页 / 共14页
ArcGIS Engine地图查询精品文档21页Word格式文档下载.docx_第4页
第4页 / 共14页
ArcGIS Engine地图查询精品文档21页Word格式文档下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

ArcGIS Engine地图查询精品文档21页Word格式文档下载.docx

《ArcGIS Engine地图查询精品文档21页Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《ArcGIS Engine地图查询精品文档21页Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。

ArcGIS Engine地图查询精品文档21页Word格式文档下载.docx

当我发现有的幼儿不专心听别人发言时,就随时表扬那些静听的幼儿,或是让他重复别人说过的内容,抓住教育时机,要求他们专心听,用心记。

平时我还通过各种趣味活动,培养幼儿边听边记,边听边想,边听边说的能力,如听词对词,听词句说意思,听句子辩正误,听故事讲述故事,听谜语猜谜底,听智力故事,动脑筋,出主意,听儿歌上句,接儿歌下句等,这样幼儿学得生动活泼,轻松愉快,既训练了听的能力,强化了记忆,又发展了思维,为说打下了基础。

5.1目标

1.熟悉Cursor,FeatureCursor对象,使用IFeatureCursor接口

2.熟悉QueryFilter,SpatialFilter对象使用IQueryFilter,ISpatialFilter接口

3.熟悉要素选择集SelectionSet对象,会使用IFeatureSelection,ISelectionSet接口

4.开发一个属性查询小功能Demo,获取符号查询条件的Feature,并IFeatureLayerDefinition接口创建一个新的要素图层加载到Mapcontrol上

5.开发一个空间多边形查询功能的小Demo,学会创建内存半透明图层用于显示选择范围

5.2准备工作

1.IDE:

VisualStudio2019/2019

2.ArcGISEngineDeveloperkit9.3

3.准备一份用于查询的的矢量数据(文章内有说明)

5.3Cursor对象

Cursor(游标)本质上是一个指向数据的指针,本身并不包含数据内容,它是连接到Row对象或要素对象的桥梁。

 

 

游标有三种类型,即查询游标、插入游标和更新游标。

每一种游标都是通过与之相适应的方法来获得的,如Search、Insert和Update方法。

更新和插入游标都需要使用一个过滤器(Filter)对象,因为它们首先必须获得需要进行操作的要素。

Cursor对象支持的接口是ICursor,它定义了操作一个Row集合或一个Row对象的属性和方法,下面是获得插入型、更新型和查询型游标的方法:

pCursor=IFeatureClass.Insert()

使用IFeatureClass的Insert方法返回一个插入型游标,它通常用于往表中插入一条记录。

pCursor=IFeatureClass.Update()

使用IFeatureClass的Update方法会返回一个更新型游标,它用于更新或者删除一条记录。

pCursor=IFeatureClass.Search()

使用IFeatureClass的Sarch方法对表进行查询后,可以得到一个查询型Cursor对象,它指向一个或多个Row对象。

以我们这章的内容主要使用查询游标。

FeatureCursor是Cursor的一个子类,指向一个或多个要素,它实现了IFeatureCursor接口,ArcGISEngine开发所对矢量图层实现查询功能都是实行IFeatureCursor。

5.4QueryFilter对象与SpatialFilter对象 

在关系型数据库中,查询条件是通过SQL语句的Where子语句来完成的。

在ArcGISEngine中不能直接使用SQL语句,但ArcGISEngine提供了QueryFilter和SpatialFilter两个过滤器对象来配合完成查询条件的设置,从而查询到想要的数据。

QueryFilter过滤器主要用于对属性数据查询条件的设置,它主要实现IQueryFilter接口从而实现属性查询功能。

CODE:

IQueryFilterpQueryFilter=newQueryFilterClass();

//设置过滤器对象的属性

pQueryFilter.WhereClause="

人口>

10000000"

;

SpatialFilter过滤器主要用于空间范围查询条件的设置,它主要实现ISpatialFilter(继承IQueryFilter接口)接口从而实现空间查询功能。

ISpatialFilterpSpatialFilter=newSpatialFilterClass();

//设置空间过滤器的范围(多边形)

pSpatialFilter.Geometry=pGeometry;

//设置空间过滤器空间关系类型

pSpatialFilter.SpatialRel=esriSpatialRelEnum.esriSpatialRelContains;

空间过滤器空间关系类型主要有以下几种类型如表一所示:

表1

空间过滤器空间关系类型

描述(A是待查询图形,B是过滤条件图形)

esriSpatialRelUndefined

未定义

esriSpatialRelIntersects

A与B图形相交

esriSpatialRelEnvelopeIntersects

A的Envelope和B的Envelope相交

esriSpatialRelIndexIntersects

A与B索引相交

esriSpatialRelTouches

A与B边界相接

esriSpatialRelOverlaps

A与B相叠加

esriSpatialRelCrosses

A与B相交(两条线相交于一点,一条线和一个面相交)

esriSpatialRelWithin

A在B内

esriSpatialRelContains

A包含B

esriSpatialRelRelation

A与B空间关联

5.5SelectionSet要素选择集对象

熟悉ArcGISDesktop使用的开发者一定会知道当在ArcMap中显示查询结果的时,所有的符号查询调教的要素都以蓝色高亮的形式显示在地图控件上,蓝色高亮显示表示高亮选中,这些高亮显示选中的要素对应一个要素选择集对象中。

通过IFeatureSelection的SelectionSet属性可以获取选择集,FeatureLayer对象实现了IFeatureSelection接口。

实现代码如下:

IFeatureLayerpFeatureLayer=this.axMapControl1.get_Layer(0)asIFeatureLayer;

//QI至IFeatureSelection

IFeatureSelectionpFeatureSelection=pFeatureLayerasIFeatureSelection;

//创建过滤器

IQueryFilterpQueryFilter=newQueryFilterClass();

//设置过滤器对象的查询条件

pQueryFilter.WhereClause="

//选择要素

pFeatureSelection.SelectFeatures(pQueryFilter,esriSelectionResultEnum.esriSelectionResultNew,false);

//获取选择集对象

ISelectionSetpSelectinSet=pFeatureSelection.SelectionSet;

//设置选择集的符号

pFeatureSelection.SelectionSymbol=pSymbol;

5.6属性查询实例

5.6.1程序实现目标:

查询人口大于5000000的城市,并把查询结果创建为一个新的图层,如图1-3所示:

代码片段如下:

privatevoidbutton1_Click(objectsender,EventArgse)

{

  

IFeatureLayerpFeatureLayer=this.axMapControl1.get_Layer(0)asIFeatureLayer;

//QI到FeatureSelection

IFeatureSelectionpFeatureSelection=pFeatureLayerasIFeatureSelection;

//创建过滤器

5000000"

//根据查询条件选择要素

pFeatureSelection.SelectFeatures(pQueryFilter,esriSelectionResultEnum.esriSelectionResultNew,false);

//QI到ISelectionSet

ISelectionSetpSelectionSet=pFeatureSelection.SelectionSet;

if(pSelectionSet.Count>

0)

IFeatureLayerDefinitionpFDefinition=pFeatureLayerasIFeatureLayerDefinition;

//创建新图层

IFeatureLayerpNewFeatureLayer=pFDefinition.CreateSelectionLayer("

newlayerName"

true,null,null);

pNewFeatureLayer.Name="

查询结果城市"

axMapControl1.AddLayer(pNewFeatureLayerasILayer);

}

5.7空间查询实例

5.7.1目标

实现多边形查询功能

5.7.2功能开发

引用的命名空间:

[code]

usingSystem;

usingSystem.Drawing;

usingSystem.Collections;

usingSystemponentModel;

usingSystem.Windows.Forms;

usingSystem.Data;

usingSystem.IO;

usingSystem.Runtime.InteropServices;

usingSystem.Collections.Generic;

usingESRI.ArcGIS.esriSystem;

usingESRI.ArcGIS.Carto;

usingESRI.ArcGIS.Controls;

usingESRI.ArcGIS.ADF;

usingESRI.ArcGIS.SystemUI;

usingESRI.ArcGIS.Display;

usingESRI.ArcGIS.Geodatabase;

usingESRI.ArcGIS.Geometry;

usingESRI.ArcGIS.DataSourcesGDB;

///<

summary>

///

在程序运行时的内存中创建矢量要素层,并加到地图控件最顶端

/summary>

///

<

paramname="

pMapCtrl"

>

地图控件<

/param>

returns>

IFeatureLayer新加的要素层<

/returns>

private 

IFeatureLayerAddFeatureLayerByMemoryWS(AxMapControlpMapCtrl,ISpatialReferencepSReference)

try

if(pMapCtrl==null)returnnull;

#region

创建新的内存工作空间

IWorkspaceFactorypWSF=newInMemoryWorkspaceFactoryClass();

IWorkspaceNamepWSName=pWSF.Create("

"

"

Temp"

null,0);

INamepName=(IName)pWSName;

IWorkspacepMemoryWS=(IWorkspace)pName.Open();

#endregion

IFieldField=newFieldClass();

IFieldsFields=newFieldsClass();

IFieldsEditFieldsEdit=null;

IFieldEditFieldEdit=null;

IFeatureClassFeatureClass=null;

IFeatureLayerFeatureLayer=null;

FieldsEdit=oFieldsasIFieldsEdit;

oFieldEdit=oFieldasIFieldEdit;

oFieldEdit.Name_2="

OBJECTID"

oFieldEdit.Type_2=esriFieldType.esriFieldTypeOID;

oFieldEdit.IsNullable_2=false;

oFieldEdit.Required_2=false;

oFieldsEdit.AddField(oField);

oField=newFieldClass();

IGeometryDefpGeoDef=newGeometryDefClass();

IGeometryDefEditpGeoDefEdit=(IGeometryDefEdit)pGeoDef;

pGeoDefEdit.AvgNumPoints_2=5;

pGeoDefEdit.GeometryType_2=esriGeometryType.esriGeometryPolygon;

pGeoDefEdit.GridCount_2=1;

pGeoDefEdit.HasM_2=false;

pGeoDefEdit.HasZ_2=false;

pGeoDefEdit.SpatialReference_2=pSReference;

SHAPE"

oFieldEdit.Type_2=esriFieldType.esriFieldTypeGeometry;

oFieldEdit.GeometryDef_2=pGeoDef;

oFieldEdit.IsNullable_2=true;

oFieldEdit.Required_2=true;

Code"

oFieldEdit.Type_2=esriFieldType.esriFieldTypeSmallInteger;

//创建要素类

oFeatureClass=(pMemoryWSasIFeatureWorkspace).CreateFeatureClass("

oFields,null,null,esriFeatureType.esriFTSimple,"

);

oFeatureLayer=newFeatureLayerClass();

oFeatureLayer.Name="

TransTemp"

oFeatureLayer.FeatureClass=oFeatureClass;

//创建唯一值符号化对象

IUniqueValueRendererpURender=newUniqueValueRendererClass();

pURender.FieldCount=1;

pURender.set_Field(0,"

pURender.UseDefaultSymbol=false;

ISimpleFillSymbolpFillSym=newSimpleFillSymbolClass();

pFillSym.Style.=esriSimpleFillStyle.esriSFSSolid;

//半透明颜色

IRgbColorpColor=newRgbColorClass();

pColor.Red=255;

pColor.Green=255;

pFillSym.Color=pColor;

pURender.AddValue("

1"

pFillSymasISymbol);

pFillSym=newSimpleFillSymbolClass();

//唯一值符号化内存图层

(oFeatureLayerasIGeoFeatureLayer).Renderer=pURenderasIFeatureRenderer;

ILayerEffectspLyrEffect=oFeatureLayerasILayerEffects;

//透明度

pLyrEffect.Transparency=80;

catch(ExceptionErr)

MessageBox.Show(Err.Message);

finally

try{

ystem.Runtime.InteropServices.Marshal.ReleaseComObject(oField);

System.Runtime.InteropServices.Marshal.ReleaseComObject(oFields);

System.Runtime.InteropServices.Marshal.ReleaseComObject(oFieldsEdit);

System.Runtime.InteropServices.Marshal.ReleaseComObject(oFieldEdit);

System.Runtime.InteropServices.Marshal.ReleaseComObject(pName);

System.Runtime.InteropServices.Marshal.ReleaseComObject(pWSF);

System.Runtime.InteropServices.Marshal.ReleaseComObject(pWSName);

System.Runtime.InteropServices.Marshal.ReleaseComObject(pMemoryWS);

System.Runtime.InteropServices.Marshal.ReleaseComObject(oFeatureClass);

catch

GC.Collect();

returnoFeatureLayer;

catch(ExceptionErr)

MessageBox.Show(Err.Message,"

提示"

MessageBoxButtons.OK,MessageBoxIconrmation);

returnnull;

///<

在地图控件上添加透明临时图元///<

pGeo"

Envelope或Polygon几何实体<

bAutoClear"

是否清除原有内容<

public 

voidAddTransTempEle(AxMapControlpMapCtrl,IGeometrypG

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 公务员考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1