ArcgisEngine开发总结集锦文档格式.docx

上传人:b****2 文档编号:4184833 上传时间:2023-05-02 格式:DOCX 页数:132 大小:110.16KB
下载 相关 举报
ArcgisEngine开发总结集锦文档格式.docx_第1页
第1页 / 共132页
ArcgisEngine开发总结集锦文档格式.docx_第2页
第2页 / 共132页
ArcgisEngine开发总结集锦文档格式.docx_第3页
第3页 / 共132页
ArcgisEngine开发总结集锦文档格式.docx_第4页
第4页 / 共132页
ArcgisEngine开发总结集锦文档格式.docx_第5页
第5页 / 共132页
ArcgisEngine开发总结集锦文档格式.docx_第6页
第6页 / 共132页
ArcgisEngine开发总结集锦文档格式.docx_第7页
第7页 / 共132页
ArcgisEngine开发总结集锦文档格式.docx_第8页
第8页 / 共132页
ArcgisEngine开发总结集锦文档格式.docx_第9页
第9页 / 共132页
ArcgisEngine开发总结集锦文档格式.docx_第10页
第10页 / 共132页
ArcgisEngine开发总结集锦文档格式.docx_第11页
第11页 / 共132页
ArcgisEngine开发总结集锦文档格式.docx_第12页
第12页 / 共132页
ArcgisEngine开发总结集锦文档格式.docx_第13页
第13页 / 共132页
ArcgisEngine开发总结集锦文档格式.docx_第14页
第14页 / 共132页
ArcgisEngine开发总结集锦文档格式.docx_第15页
第15页 / 共132页
ArcgisEngine开发总结集锦文档格式.docx_第16页
第16页 / 共132页
ArcgisEngine开发总结集锦文档格式.docx_第17页
第17页 / 共132页
ArcgisEngine开发总结集锦文档格式.docx_第18页
第18页 / 共132页
ArcgisEngine开发总结集锦文档格式.docx_第19页
第19页 / 共132页
ArcgisEngine开发总结集锦文档格式.docx_第20页
第20页 / 共132页
亲,该文档总共132页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

ArcgisEngine开发总结集锦文档格式.docx

《ArcgisEngine开发总结集锦文档格式.docx》由会员分享,可在线阅读,更多相关《ArcgisEngine开发总结集锦文档格式.docx(132页珍藏版)》请在冰点文库上搜索。

ArcgisEngine开发总结集锦文档格式.docx

26.基于AO/AE获取要素信息87

27.ArcEngine中拓扑的使用--90

28.ArcEngine渲染的使用93

29.利用ArcEngin进行空间分析的简单应用--100

30.IfeatureSelection:

SelectFeatures方法介绍105

31.常用数据入sde库的代码107

32.ArcEngine开发感想112

33.Geometry对象浅析114

34.AE开发中的一些基本方法

(1)数据连接125

2.用ArcEngine的工具条添加图层要素

发现AE比起其它的组件GIS来要好用的多

但也有一些bt的地方

比如说AE没有提供图层编辑的工具条

但最近因为程序里要添加图元

必须得开发图层编辑的功能

于是去找了找资料

发现自带的帮助里有一个MapEditing的示例

但是从AO的示例改造而来

需要从按钮写起

想想如果这样搞的话

倒不如直接用AO算了

一直想省点事

在AE自带的工具条上做点文章

其实AE中也有一组相似的编辑按钮,是用于编辑Graphics的

自然就有了一个想法:

能不能先生成一个Graphic,然后将其加载进来

代码分享

privatevoidForm1_Load(objectsender,System.EventArgse)

{

 

//清空图层

this.axMapControl1.Map.ClearLayers();

//加载服务器SDE地图信息

ESRI.ArcGIS.esriSystem.IpropertySetProset=newESRI.ArcGIS.esriSystem.PropertySetClass();

//属性集

ESRI.ArcGIS.Geodatabase.IWorkspaceFactoryFact;

//工作空间仓库

ESRI.ArcGIS.Geodatabase.IWorkspaceWorkspace;

//工作空间

Proset.SetProperty("

Server"

"

服务器名"

);

//服务器名

Instance"

端口"

//实例化端口

user"

用户名"

//SDE用户名

password"

密码"

//密码

version"

sde.DEFAULT"

//连接版本

Fact=newESRI.ArcGIS.DataSourcesGDB.SdeWorkspaceFactoryClass();

//实例化为SDE工作空间仓库

Workspace=Fact.Open(Proset,Int32.Parse(this.Handle.ToString()));

//填入属性集

ESRI.ArcGIS.Geodatabase.IFeatureWorkspaceFeatureWorkspace;

FeatureWorkspace=WorkspaceasESRI.ArcGIS.Geodatabase.IFeatureWorkspace;

//传递给Feature工作空间

ESRI.ArcGIS.Geodatabase.IFeatureClassFeatureClass;

FeatureClass=FeatureWorkspace.OpenFeatureClass("

SDE.BBBB"

//填充所需Feature集合

ESRI.ArcGIS.Carto.FeatureLayerFLayer=newESRI.ArcGIS.Carto.FeatureLayerClass();

FLayer.FeatureClass=FeatureClass;

//将Feature加载到图层

axMapControl1.Map.AddLayer(FLayer);

//加载图层

axMapControl1.Update();

//更新空白区域

axMapControl1.Refresh();

//刷新地图视窗

}

privatevoidForm1_Closed(objectsender,System.EventArgse)

ESRI.ArcGIS.esriSystem.IAoInitializeaoi=newESRI.ArcGIS.esriSystem.AoInitializeClass();

aoi.Shutdown();

privatevoidbutton1_Click(objectsender,System.EventArgse)

IGraphicsContainerSelectGraphicsContainerSelect=(IGraphicsContainerSelect)axMapControl1.Map;

if(GraphicsContainerSelect.ElementSelectionCount==0)//判断是否选中图斑

{

MessageBox.Show("

请选中欲导入图斑!

"

return;

}

IWorkspaceEditWorkspaceEdit;

IFeatureLayerFeatureLayer;

IFeatureClassFeatureClass;

IFeatureFeature;

IDatasetDataset;

FeatureLayer=(IFeatureLayer)this.axMapControl1.get_Layer(0);

//选中导入图层

FeatureClass=FeatureLayer.FeatureClass;

//该图层的feature集

Dataset=(IDataset)FeatureClass;

//该图层的数据集

WorkspaceEdit=(IWorkspaceEdit)Dataset.Workspace;

//关联到编辑空间

WorkspaceEdit.StartEditing(true);

//使之可编辑

WorkspaceEdit.StartEditOperation();

//开始编辑

Feature=FeatureClass.CreateFeature();

//创建空feature

Feature.Shape=GraphicsContainerSelect.SelectedElement(0).Geometry;

//仅导入最新选中图斑,即多选时只有一个可以导入

Feature.Store();

WorkspaceEdit.StopEditOperation();

WorkspaceEdit.StopEditing(true);

//结束编辑并保存

IGraphicsContainerGraphicsContainer=(IGraphicsContainer)GraphicsContainerSelect;

GraphicsContainer.DeleteAllElements();

//删除graphic图层

axMapControl1.ActiveView.Refresh();

//刷新当前视图

ok"

3.ArcEngine中对Feature的编辑

对Feature的编辑分为以下几个部分

1.新建

2.修改

3.删除

涉及到的接口有以下几个

IWorkspaceEdit

IFeatureClass

IFeatureCursor

IFeature

其中IWorkspaceEdit用于启动编辑开始编辑操作结束编辑操作结束编辑

IFeatureClass是数据的所在地

IFeatureCursor是一个游标提供访问数据的接口和修改数据的接口

IFeature是对象的代表我们要编辑的目标

编辑的过程如下:

1.添加一个Feature

//假设space是一个IWorkspaceEdit

//参数表示是否需要使用Undo/Redo功能,该功能的粒度是EditOperator.

spaceEdit.StartEditing(false);

spaceEdit.StartEditOperator();

//添加一个Feature

IFeaturenewFea=feaClass.createFeature();

//为Feature添加属性设置图形

newFea.Store();

//保存属性和图形

spaceEdit.StopEditOperator();

//结束编辑操作

//结束编辑过程

//参数表示是否保存编辑

spaceEdit.StopEditing(true);

2.添加多个Feature

添加多个Feature也可以向上面一样使用多次就可以了

当时也可以使用IFeatureCursor来添加数据

3.修改Feature

添加Feature中的修改属性和图形部分就是

每次修改后一定要调用Store方法这样变化才可以保存下来

4.删除

IFeature有一个方法Delete可以用于删除当时经过测试发现对Shapefile

会抛出异常来。

IFeatureCuror有一个DeleteFeature方法可以用来删除当前的Feature,经测试

对所有的数据源类型都可以使用。

注意事项

1.不能设置Feature的OID

2.不能设置Feature的Area

3.不能设置Feature的Lenght

4.不能设置Feature的Shape字段,需要调用单独的方法来给Feature关联几何图形。

4.Feature的概念

Feature是二次开发中最常用的对象,feature是featureclass中一个记录,从object中派生出来的,因此也具有属性和方法,object又是从row中派生的,所以featureclass其实一张表,featured就是表中的一条记录,feature可以保存空间数据对象,要素中的几何型体对象定义了要素的类型,它可以保存的几何型体对象有点、点集、多边形、多义线。

这些都是些简单的要素对象,在有些情况下要素还可以参与拓扑、网络运算。

Feature相关接口

Feature有派生出很多类,如:

networkfeature、rastercatalogfeature、coverageannotationfeature、annotationfeature、dimensionfeature。

feature的主要接口是Ifeature,其中的Extent用来返回要素对象的包络线,显示要素的空间范围;

Featuretype返回要素的类型;

Shape返回要素的几何型体对象;

ShapeCopy得到几何型体对象的一个拷贝。

IfeatureBuffer中的Shape得到缓冲要素的几何型体对象

IfeatureEdit中MoveSet、RotateSet、DeleteSet分别是移动、旋转、删除一个或者是多个要素组成的要素集上。

Split主要是用来分割几何型体的,通过点分割线,通过多义线分割多边形,分割后旧的被删除,新的要素自动产生。

因为每个要素都有对应的属性,要素改变了,其对应的属性也相应的要改变。

Splitattributes就是用来分割要素属性字段中的值。

该方法可以在Split方法执行后自动执行。

IfeatureDraw中的InvalidArea属性得到一个绘画的区域。

Draw在显示设备上绘制要素

IfeatureChanges中OriginalShape得到要素的最初几何类型,ShapeChanged指示要素的几何类型是否改变。

IfeatureSimplify中SimplifyGeometry按照该元素的拓扑规则进行拓扑一致

(转载)

分类:

WebGIS网络地理信息系统研究

现在好多人在使用ArcObject的时候都可能需要作经纬度和平面坐标的相互转换。

由于经纬度是球面坐标,平面坐标是X-Y的笛卡尔坐标系统,所以这是一个看起来比较难的问题。

 

好多人一上来就搬出地图学、地图投影学或者测绘学中的投影公式(如高斯投影或墨卡托投影),又是基准坐标又是角度的搞的人头都大了。

实际上要想实现这个功能非常easy。

ARCEngine中的IPoint就可以进行投影和反投影运算了。

投影过程(C#):

/// 

flatref投影的坐标系统,这里的54013是世界投影 

,世界投影所有经纬度都可以转换为平面坐标,但是由于投影面积大失真也会比较大(相当于把整个地球劈成一片片的,然后拉伸最后贴到平面上,失真当然大了)。

当然也可以选择精度更高的平面如:

esriSRProjCS_Beijing1954GK_23N 

对应数值21483 

仅仅把北京附近的地球平面拉伸铺在平面上,由于投影面积变小,所以投影经度提高。

但是由于面积变小,所以有些经度纬度不能转换,比如所美国的精度纬度用北京投影就投不了。

flatref=pfactory.CreateProjectedCoordinateSystem(54013);

//没什么说的,标准大地经纬度,可以将X-Y逆投影为经度和纬度

earthref=pfactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_NAD1983);

///将经纬度点转换为平面坐标。

privateIPointGetProject(doublex,doubley)

IPointpt=newPointClass();

pt.PutCoords(x,y);

IGeometrygeo=(IGeometry)pt;

geo.SpatialReference=earthref;

geo.Project(flatref);

returnpt;

///将平面坐标转换为经纬度。

privateIPointGetGeo(doublex,doubley)

geo.SpatialReference=flatref;

geo.Project(earthref);

doublexx=pt.X;

}实际上IPoint的投影和任何地图都没什么大关系,完全可以不用地图,直接调用IPoint进行投影的转换

6.ArcEngine中使用上下左右键移动地图功能的实现

//闪烁目标

publicstaticvoidFlashFeature(AxMapControlmapControl,IFeatureiFeature,IMapiMap)

IActiveViewiActiveView=iMapasIActiveView;

if(iActiveView!

=null)

iActiveView.ScreenDisplay.StartDrawing(0,(short)esriScreenCache.esriNoScreenCache);

//根据几何类型调用不同的过程

switch(iFeature.Shape.GeometryType)

caseesriGeometryType.esriGeometryPolyline:

FlashLine(mapControl,iActiveView.ScreenDisplay,iFeature.Shape);

break;

caseesriGeometryType.esriGeometryPolygon:

FlashPolygon(mapControl,iActiveView.ScreenDisplay,iFeature.Shape);

caseesriGeometryType.esriGeometryPoint:

FlashPoint(mapControl,iActiveView.ScreenDisplay,iFeature.Shape);

default:

iActiveView.ScreenDisplay.FinishDrawing();

//闪烁线

staticvoidFlashLine(AxMapControlmapControl,IScreenDisplayiScreenDisplay,IGeometryiGeometry)

ISimpleLineSymboliLineSymbol;

ISymboliSymbol;

IRgbColoriRgbColor;

iLineSymbol=newSimpleLineSymbol();

iLineSymbol.Width=4;

iRgbColor=newRgbColor();

iRgbColor.Red=255;

iLineSymbol.Color=iRgbColor;

iSymbol=(ISymbol)iLineSymbol;

iSymbol.ROP2=esriRasterOpCode.esriROPNotXOrPen;

mapControl.FlashShape(iGeometry,3,200,iSymbol);

//闪烁面

staticvoidFlashPolygon(AxMapControlmapControl,IScreenDisplayiScreenDisplay,IGeometryiGeometry)

ISimpleFillSymboliFillSymbol;

iFillSymbol=newSimpleFillSymbol();

iFillSymbol.Style=esriSimpleFillStyle.esriSFSSolid;

iFillSymbol.Outline.Width=12;

iRgbColor.RGB

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

当前位置:首页 > 医药卫生 > 临床医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2