arcgis教程其他engine开发总结集锦_第1页
arcgis教程其他engine开发总结集锦_第2页
arcgis教程其他engine开发总结集锦_第3页
arcgis教程其他engine开发总结集锦_第4页
arcgis教程其他engine开发总结集锦_第5页
已阅读5页,还剩124页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1用ArcEngine的工具条添加图层要 ArcEngine中对Feature的编 Feature的概 如何实现经度纬度到平面坐标的相互转换?( ArcEngine中使用上下左右键移动地图功能的实 缓冲区的创 C#制作鹰眼全过程(引自中国社区 ArcEngine中拓扑的使用 为什么使用接口编程{ ArcEngine中闪烁目 创建多个ArcSDE实 空间查询与空间分析功 AO中的空间关 ArcGISEngine中的相交分析的实 GIS基本概念集 AE开发中矢量图层叠加求交分 矢量数据分 GIS空间信息基本分析方 如何判断图形间的逻辑运 AE中2种方式 ArcEngine中实现捕捉功 基于AE删除选择的要素 基于AO/AE获取要素信 ArcEngine中拓扑的使用 ArcEngine渲染的使 利用ArcEngin进行空间分析的简单应用 常用数据入sde库的代 ArcEngine开发感 Geometry对象浅 AE开发中的一些基本方法(1)数据连 AEGIS来要好用的多bt的地方AEMapEditing的示例AO的示例改造而来想想如果这样搞的话OAEAEGraphicsprivatevoidForm1_Load(objectsender,System.EventArgs{//SDE System.IpropertySetProset=new //Proset.SetProperty("user","用户名");//SDE用户名Fact =FeatureWorkspace=Workspaceas.ArcGIS.Geodatabase.IFeatureWorkspace;//传递给Feature工作空FeatureClassFeatureWorkspace.OpenFeatureClass("SDE.BBBB");//Feature.ArcGIS.Carto.FeatureLayerFLayer= FLayer.FeatureClassFeatureClass;//Feature}privatevoidForm1_Closed(objectsender,System.EventArgs{.ArcGIS.System.IAoInitializeaoi=new.ArcGIS.System.AoInitializeClass();}privatevoidbutton1_Click(objectsender,System.EventArgs{{}IFeatureIDatasetFeatureLayer(IFeatureLayer)this.axMapControl1.get_Layer(0);//选中导入图层FeatureClass=FeatureLayer.FeatureClass;//feature集DatasetIDataset)FeatureClass;//WorkspaceEdit(IWorkspaceEdit)Dataset.Workspace;//关联到编辑空间FeatureFeatureClass.CreateFeature();//featureIGraphicsContainerGraphicsContainerIGraphicsContainer)GraphicsContainerSelect;GraphicsContainer.DeleteAllElements();//graphic图层}ArcEngineFeatureFeatureIWorkspaceEditIFeatureClassIFeatureCursor是一个游标提供数据的接口和修改数据的接IFeature//spaceIFeature//Feature添加属性设置图形FeatureIFeatureCursor来添加数据FeatureStoreIFeatureDeleteIFeatureCurorDeleteFeatureFeature,经测试FeatureFeatureFeatureFeatureShapeFeatureFeatureFeature是二次开发中最常用的对象,featurefeatureclassobject中派生出来的,因此也具有属性和方法,objectrowfeatureclass其实一张表,featured就是表中的一条记录,feature可以保存空间数据对象,要素中的几何IfeatureEditMoveSet、RotateSet、DeleteSet分别是移动、旋转、删除一个或者是多个要素组成的要素集上。Split主要是用来分割IfeatureDrawInvalidArea属性得到一个绘画的区域。DrawIfeatureChangesOriginalShape得到要素的最初几何类型,ShapeChangedIfeatureSimplifySimplifyGeometry现在好多人在使用ArcObject的时候都可能需要作和平面坐标的相互转换。由于是球面坐标,平面坐标是X-Y的笛卡尔坐标好多人一上来就搬出地图学、地图投影学或者测绘学中的投影(如高斯投影或墨卡托投影,又是基准坐标又是角度的搞的人头easyARCEngineIPoint就可以进行投影和反投影运算了。(C#///flatref投影的坐标系统,这里的54013是世界投影,世界投影所有都可以转换为平面坐标,但是由于投影面积大失真也会比较(相当于把整个地球劈成一片片的,然后拉伸最后贴到平面上,失真当然大了。当然也可以选择精度更高的平面如: 对应数值21483仅仅把 flatref=//没什么说的,标准大地,可以将X-Y逆投影为经度和纬earthref=pfactory.CreateGeographicCoordinateSystem((int)SRGeoCSType.SRGeoCS///将点转换为平面坐标privateIPointGetProject(doublex,double{IPointpt=newPointClass();pt.PutCoords(x,y);IGeometrygeo=(IGeometry)pt;geo.SpatialReference=earthref;return}///将平面坐标转换为privateIPointGetGeo(doublex,double{IPointpt=newPointClass();pt.PutCoords(x,y);IGeometrygeo=(IGeometry)pt;geo.SpatialReference=flatref;doublexx=pt.X;returnpt;}IPointIPoint//publicstaticvoidFlashFeature(AxMapControlmapControl,IFeatureiFeature,IMap{IActiveViewiActiveView=iMapasIActiveView;if(iActiveView!=null){switch(iFeature.Shape.GeometryType){FlashLine(mapControl,iActiveView.ScreenDisy,iFeature.Shape);caseGeometryType.FlashPolygon(mapControl,iActiveView.ScreenDisy,iFeature.Shape);FlashPoint(mapControl,iActiveView.ScreenDisy,iFeature.Shape);}}

{ISimpleLineSymboliLineSymbol;ISymboliSymbol;IRgbColoriRgbColor;iLineSymbol=newSimpleLineSymbol();iLineSymbol.Width=4;iRgbColor=newRgbColor();iRgbColor.Red=255;iLineSymbol.Color=iRgbColor;iSymbol=(ISymbol)iLineSymbol;iSymbol.ROP2=RasterOpCode.ROPNotXOrPen;mapControl.FlashShape(iGeometry,3,200,iSymbol);}staticvoidFlashPolygon(AxMapControlmapControl,IScreenDisyiScreenDisy,IGeometry{ISymbolIRgbColoriFillSymbol=newiFillSymbol.Style=SimpleFillStyle.SFSSolid;iFillSymbol.Outline.Width=12;iRgbColor=newiRgbColor.RGB=System.Drawing.Color.FromArgb(100,180,180).ToArgb();iFillSymbol.Color=iRgbColor;iSymbol=iSymbol.ROP2=RasterOpCode.ROPNotXOrPen;mapControl.FlashShape(iGeometry,3,200,}staticvoidFlashPoint(AxMapControlmapControl,IScreenDisyiScreenDisy,IGeometry{ISimpleMarkerSymboliMarkerSymbol;ISymboliSymbol;IRgbColoriMarkerSymbol=newiMarkerSymbol.Style=SimpleMarkerStyle.SMSCircle;iRgbColor=newRgbColor();iRgbColor.RGB=System.Drawing.Color.FromArgb(0,0,0).ToArgb();iMarkerSymbol.Color=iRgbColor;iSymbol=iSymbol.ROP2=RasterOpCode.ROPNotXOrPen;mapControl.FlashShape(iGeometry,3,200,iSymbol);}蓝蓝的小志于2005-6-5本文以面图层为例,并且把创建的缓冲区就在面图层中,当然也可以把创建的缓冲区另存为一个新的图层。程序运行环PrivateSubITopologicalOperator_Buffer(ByValpFeatLyrAs .ArcGIS.Carto.IFeatureLayer,ByValdistanceAsDouble,OptionalByValpFeatClassAs.ArcGIS.Geodatabase.IFeatureClass=Nothing)'pFeatLyr'distanceDimpFeatureClassAs.ArcGIS.Geodatabase.IFeatureClassDimpTopoOperAs.ArcGIS.Geometry.ITopologicalOperatorDimpBufferPolyAs.ArcGIS.Geometry.IPolygonDimpFeatCursorAs.ArcGIS.Geodatabase.IFeatureCursorDimpFeatureAs.ArcGIS.Geodatabase.IFeaturepFeatureClass=pFeatCursor=pFeatureClass.Search(Nothing,False)pFeature=pFeatCursor.NextFeatureIfNot(pFeatureIsNothing)ThenpTopoOper=pFeature.Shape()pBufferPoly=pTopoOper.Buffer(distance)'pFeature=pFeatClass.CreateFeaturepFeature.Shape=pBufferPolypFeature=pFeatCursor.NextFeature()EndIfLoopUntil(pFeatureIsNothing)MsgBox(Err.Description,MsgBoxStyle.OKOnly,错误提示")pFeature=NothingpFeatCursor=NothingpBufferPoly=NothingpTopoOper=NothingpFeatureClass=NothingpFeatLyr=NothingEndpFeature=pFeatCursor=NothingpBufferPoly=NothingpTopoOper=NothingpFeatureClass=NothingpFeatLyr=NothingEnd}}9.2.IActiveViewpAv=pGraasIRectangleElementpRectangleEle=newIElementpEle=pRectangleEleasaxMapControl1是主控件,axMapControl2privatevoid{ced(objectsender,cedEventaxMapControl2.Extent=10.privatevoidaxMapControl1_OnExtentUpdated(objectsender,IMapControlEvents2_OnExtentUpdatedEventIGraphicsContainerpGra=axMapControl2.Mapas IEnvelopepEnv=(IEnvelope)e pEle.Geometry=IRgbColorpColor=newpColor.Red=pColor.Green=pColor.Blue=pColor.Transparency=ILineSymbolpOutline=newpOutline.Width=pOutline.Color=pColor=newpColor.Red=pColor.Green=pColor.Blue=pColor.Transparency=IFillSymbolpFillSymbol=newpFillSymbol.Color=pFillSymbol.Outline=IFillShapeElementpFillShapeEle=pEleaspFillShapeEle.Symbol=pGra.AddElement((IElement)pFillShapeEle,pAv.PartialRefresh(ViewDrawPhase.ViewGraphics,null,} privatevoidaxMapControl2_OnMouseDown(object privatevoidaxMapControl2_OnMouseDown(objectsender,IMapControlEvents2_OnMouseDownEvent{IPointpPt=newPointClasspPt.PutCoords(emapX,emapY} axMapControl1 t(pPtArcEngine中拓扑的使用拓扑(ITopology)TopologyITopology必须要通过调用ITopologyContainer::CreateTopologyTopologyFeatureDataset实现了ITopologyContainer这个接口。那么这就是说拓扑只能在一个FeatureDatasetWorkspace中。这样做的原因是需要保证FeatureClassObjectClassObjectClass的对象之间的关系了。ITopologyRule来表达的。ITopologyRule必须要被ITopologyRuleContainerTopology实现了这个接口。ITopologyRuleObjectClass的对象之间的某个关系。ITopologyValidateTopology的拓扑可以在任何时候验证。而有版本的拓扑必须在编辑回话中验证。(ITopologyGraph)//topoLayer是一个打开的拓扑图层ITopologyGraphpTG=topoLayer.Topology.Cache;ITopologyElementtopeElepTG.HitTest(...reftopeEle);true.topeEleref参数将选中的元素(点或者边)Select然后可以查询拓扑图的选点集合就可以找到该节点//pNode就是当前节点sr//还有给Feedback设置Dism_pNodeFeedback=pTG.GetSplitMoveNodeFeedback(pNode,false,sr);m_pNodeFeedback.Disy=activeView.ScreenDisy;FeedbackMoveTo{//activeView//然后调用MoveToIPointpt=activeView.ScreenDisy.DisyTransformation.ToMapPoint(X,Y);}ITopologyGraph//IPointpt=pA.ScreenDisy.DisITopologyNodeIEnvelopepE;pTG.Post(outpE);ITopologyContainerFeatureDatasetCreateTopologyDefaultClusterToleranceThedefaultclustertoleranceasperthetopologyengine.umClusterToleranceThealclustertoleranceasperthetopologyengine.MinimumClusterToleranceTheminimalclustertoleranceasperthetopologyengine.Topology通过索引打开拓扑.TopologyByIDID打开拓扑TopologyByNameTopologyCountsmalltalk,Pascal,Basic,C语言,C++,java,.net作是从面向过程向面向对象发展的一段历史。很多面向对象的书在介绍自己的历史的时候,都会给读者介绍这一段历史,并OO编程Pascal,老师告诉我们这种面向过程语言的最基本的单元是过程和函数,它们是程序中的最小的组件。过程和函数可以实现最000010000个人的企业一样,如果没有部门和职务,这还不乱了套?!OO语言吹的天花乱坠,其实它出现就为一个理由??提高编程的粒度。面向对象语言CLASS,类封装了很多数据成员和成员函数,过程,将最小组件的提高了一个等级,我们需要直接操作的不是过程和函数了,而是一个个更次上的类。我们把10000人分了很多部门,不同的部门负责不同的事宜,这样公司终于可以走上正轨了。CLSS现更好的管理呢?好比我们有一个类,它提供了很多种方法和属性,这些方法和属性其实可以分为一堆堆,为不同的功能服务,但是我们O种,map这个时候,接口interface出现了,C++的发明者第一次提出纯虚函数(其实就是接口)概念的时候,遭到了很多,很多人都不明白的方法,函数和属性,map类实现这些接口,这样我们可以使用接口定义,实现对象。因此,所谓接口就是一系列相关方法与属性集合的DimpGraphicsContainerasiGraphicsContainerpGraphicsContainer可以使用的属性和方法就只能是它定义的那部分了,而不能使用管理元素等的接口定义的方法和属性,那我们如何使用QI(QueryInterface)功能。从一个接口查询另一个接口。DimpGeoFeatureLayerasiGeofeatureLayerpGeoFeatureLayer=pGraphicsContainer MM部不断提高组件粒度的历史,不断提高代码重用的历史。以前我们使用过程和函数,后来我们使用类,现在我们使用接口,都是为了一个目的,让我们操作的组件在具体和抽象之间寻找一个平衡点。太具体了,如过程和函数,就没有了框架;太抽象,如类,就无法分别。publicinterface{voidvoid}publicclass{publicvoid{}publicvoid{}}publicclass{publicvoid{}publicvoid{}}publicclass{publicstaticIFormCreateInstance(string{if(parm=={returnnewA();elseif(parm=="B")returnnew}return}}这就是编写程序的哲学ArcEngine//publicstaticvoidFlashFeature(AxMapControlmapControl,IFeatureiFeature,IMap{IActiveViewiActiveView=iMapasIActiveView;if(iActiveView!=null){switch(iFeature.Shape.GeometryType){FlashLine(mapControl,iActiveView.ScreenDisy,iFeature.Shape);FlashPolygon(mapControl,iActiveView.ScreenDisy,iFeature.Shape);caseGeometryType.FlashPoint(mapControl,iActiveView.ScreenDisy,iFeature.Shape);}}

{ISimpleLineSymboliLineSymbol;ISymboliSymbol;IRgbColoriLineSymbol=newSimpleLineSymbol();iLineSymbol.Width=4;iRgbColor=newRgbColor();iRgbColor.Red=255;iLineSymbol.Color=iRgbColor;iSymbol=(ISymbol)iLineSymbol;iSymbol.ROP2=RasterOpCode.ROPNotXOrPen;mapControl.FlashShape(iGeometry,3,200,iSymbol);}staticvoidFlashPolygon(AxMapControlmapControl,IScreenDisyiScreenDisy,IGeometry{ISymbolIRgbColoriFillSymbol=newiFillSymbol.Style=SimpleFillStyle.SFSSolid;iFillSymbol.Outline.Width=12;iRgbColor=newiRgbColor.RGB=System.Drawing.Color.FromArgb(100,180,180).ToArgb();iFillSymbol.Color=iRgbColor;iSymbol=iSymbol.ROP2=RasterOpCode.ROPNotXOrPen;mapControl.FlashShape(iGeometry,3,200,iSymbol);}staticvoidFlashPoint(AxMapControlmapControl,IScreenDisyiScreenDisy,IGeometry{ISimpleMarkerSymboliMarkerSymbol;ISymboliSymbol;IRgbColoriMarkerSymbol=newiMarkerSymbol.Style=SimpleMarkerStyle.SMSCircle;iRgbColor=newRgbColor();iRgbColor.RGB=System.Drawing.Color.FromArgb(0,0,0).ToArgb();iMarkerSymbol.Color=iRgbColor;iSymbol=iSymbol.ROP2=RasterOpCode.ROPNotXOrPen;mapControl.FlashShape(iGeometry,3,200,iSymbol);}ArcSDE000037ArcSDE3.x,8.x,9.0N/A2004-08-232004-08-31内容ArcSDE实例同时运行。只要存在多个数据库实例,就可以实现这个目的。ArcSDERDBMS之间必须是一个一一对应的关系。ArcSDEArcSDE实例。拷贝%SDEHOME%RDBMS连接变量(RACLE_SID)dbinit.sde用新的实例名、端和网络协议更新%SDEHOME%etcservices.sde文件添加服务名、端和网络协议到WINNTsystem32driversetcservices文件中。须确认所用的端没有被用过dbtune.sde确认SDEHOME变量指向正确的新ArcSDE实例位置,并运行给对应数据库使用的sdesetup命令来创建新数据的表“sdeserviceocreate”ArcSDE服务。UNIX:给新实例创建一个新的工 拷贝$SDEHOME到新创建的工 RDBMS连接变量(ORACLE_SID)dbinit.sde用新的实例名、端和网络协议更新$SDEHOME/etc/services.sde文件添加服务名、端和网络协议到/etc/services文件。须确认所用的端没有被用过dbtune.sde确认SDEHOME变量指向正确的新ArcSDE实例位置,并运行给对应数据库使用的sdesetup命令来创建新数据的表。ArcSDE命令ArcSDE服务操作命令创建ArcSDEfororacle9i服 sdeservice-ocreate-doracle9i,sid-psde-i删除ArcSDEfororacle9i服 sdeservice-odelete-i_sde-d注:-dSIDsdeservice命令帮助SDEArcSDE服务操作命令检测服务状态命令:Sdemon-ostatus-I启动服务命令:Sdemon-ostart-I_sde-p停止服务命令:Sdemon-oshutdown-I_sde-psdeSdemon命令帮助GISGIS目标之间的空间关系中获取派生的信息和新的知识,用以回答有关空间关系的查询和应用分析。的交点建立具有多重属性的多边形,后者则进行多边形范围的属性特征统计分析(1-3所示。合成叠加得到一张新的叠加图,产生了等高线图是人们传统上观测地形的主要,可以从等高线上精确地获得地形的起伏程度,区域内各部分的高程等。网上,使图形更为真。DTM中计算坡度和坡向,派生出坡度坡向图供地形分析(如日照分析、土地适宜性分析等。用户可以在断面图上该剖面地形的起伏并计算剖面面积,以便用于工程设计和工程量算。DTM数据,可以比较容易地求出所需要地区的地形表面面积以及施工区域内填挖方的体积(土石方量GIS开发人员和用户来共同完成的。地理信息系统技术广泛应用于农业、林业、资源、地矿、军事、交通、测绘、水利、广播电视、通讯、电力、、社区管理、教育、AO最近在做AO的一些东西,有些空间关系让不太懂,查到一个东西,还是很好的空间关系具体描述(QueryableSpatialRelationships):1,SpatialRelTouches(邻接)除点与点之间的关系外,其它的要间都可以具有该关系。如果二个要素有相同的边界,且它们内部不相交的话,称这二个要间的关系是邻接的关系,图1-1、2-1、3-1、3-2,注意图3-3中点与当查询要素和被查询要素具有该关系时,即spatialRel的值 2,SpatialRelCrosses(交叉线与面,线与线等。不能用于面与面(面与面相交部分是面,不能二个要素中的最高维数低一),面与点,点与线(素具有交叉关系,图2-4、4-1,图2-1二条线的关系属于邻接关系,而不属于交叉关系,因为它们的内部相交部分为空。3,SpatialRelOverlaps(关系)二个同维的要间的相交部分的图形具有与这二个要素相同的维数的,且不与任何一个要素完全相同,则称这二个要素。图1-2、2-2均是关系,但是2-3中的二条线不是关系,因为相交的部分与黄色的线完全相同。当查询要素和被查询要素具有该关系时,即spatialRel的值是SpatialRelOverlaps,则会返回查询要素1221当查询的要素完全位于被查询的要素内部的话(即spatialRel的值是SpatialRelWithin),则返回被查询的要素;同时如果查询的要素全被被查询的要素包括时(即spatialRel的值是SpatialRelContains)则返回被查询的要素。相交关系是一个广义的关系,包括上述4种关系。因此如果spatialRel的值是SpatialRelIntersects关系的话,只要查询要素和被查询要素 SpatialRelDescription属性对二个要素的空间关系进行定制,可以对二个要素的内部,外部,边界之间的相交的情况进行描述,例ArcGISEngineArcGISEngineIBasicGeoprocessor.Intersect以下代码编译通过,但是在运行时,就报错,说是参数错误,各位帮忙看看,谢谢 privatevoidM_OverLayer_Click(objectsender,System.EventArgs2{34{5//6ILayer7IFeatureLayerpInputFeatLayer=yeras8ITablepInputTable=yeras9IFeatureClass// //IFeatureClassNamepFeatClassName=new//pNewWSName.WorkspaceFactoryProgID="pNewWSName.PathName=@"C:\temp"; //IDatasetNamepDatasetName=pFeatClassNameas//IBasicGeoprocessorpBGP=newIFeatureClass//IFeatureLayerpOutputFeatLayer=new}catch(Exception{}}GIS需信息的空间信息系统。gis有以下子系统:数据输入子系统,数据和检索子系统,数据操作和分析子系统,报告子系统.管理信息系统非地理学的cad/camgis社会经济,人口普查基于非地块,2giscad、caccac——计算机辅助制图,适合地图制图的软件,缺乏空间分析能力。(gps(2)(3)形,这个多边形处于另一个更大的多边形内部,或发生在两条线沿着平行路径而不是交叉路径相交的地方(节点——特殊点。摇摆结点:有时称为摇摆,来源于3种可能的错误类型:闭合失败的多边形;欠头线,即结点延伸程度不够,未与应当连接的目一次地被数字化。高度不规则的国家边境线,例如洲,特别容易出现这样的数字变形。标注错误:丢失标注和重复标注。异常多边形:113、函数距离——基础上,但是还有其他实质性的成分。确定缓冲区距离的四种基本方法:随机缓冲区、成因缓冲区、可测量缓冲区、合法缓冲区。17、统计表面——z值的形貌,zxy坐标对定义且在区域范围内分布。z值也常被认为z值构成了许多要素的统计学的表述(robinsonetal.,1995model建立数字地形模型(digitalterrainmodel)dem直接或间接导出,称为“派生数据”,如坡度、坡向。21、线密度——22、连通性——γα指数计算它。其中,γ所有连线数之比;αα指数,23、图形叠加——将一个被选的图形所表示的专题信息放在另一个被选的图形所表示的专题信息之上27、布尔叠加——29、地理模型的类型——潜在市场的距离呈反比这一基础上的经济地理模型——重力模型。4、通过空间验证思想如今广泛用于生态群落,通过地理空间动植物象的选择、生成和放置,以明确突出研究的重要属性和空间关系,同时还要考虑参考系统。gis专题地图输出的规则:不但要有精美的33、聚合——34、克立金法——35、四叉树——36gis,具有一般的功能和特点,向用户提供一个统一的操作平台。一般没有地理空间实体,而是由用户应用型地理信息系统:在较成工具型gis软件基础上,根据用户的需求和应用目的而设计的用于解决一类或多类实际问题的地理信息系lis、cgis、ugis。371234、系统的调试与运行:α调试、β5、系统的评价与:功能评价、费用评价、效益评39、地理数据测量标准——命名(对数据命名,允许我们对把对象叫什么做出,但不允许对两个命名的对象进行直接比较、序数(提AE开发中矢量图层叠加求交分析C#+AE9.1privatevoidM_OverLayer_Click(objectsender,System.EventArgs{{//ILayerIFeatureLayerpInputFeatLayer=yerasITablepInputTable=yerasIFeatureClass //IFeatureClassNamepFeatClassName=new//pNewWSName.WorkspaceFactoryProgID="pNewWSName.PathName=@"C:\temp";//IDatasetNamepDatasetName=pFeatClassNameas//IBasicGeoprocessorpBGP=newIFeatureClass//IFeatureLayerpOutputFeatLayer=new}catch(Exception{}}aeoverlay2(shapefile)ITopology接口:voidCOverlayDlg::Overlay(ILayerPtrinputLayer,ILayerPtrOverlayLayer,IFeatureClassPtr{ bo.GetCurSel();IFeatureLayerPtripPutlayer(inputLayer);IFeatureClassPtripPutClass;IFeatureClassPtripOutClass;IFeatureLayerPtripOverlayer(OverlayLayer);IQueryFilterPtripQF(CLSID_QueryFilter);longnumber1,number2;IFeaturePtripFeature1,ipFeature2;IGeometryPtripGeo1,ipGeo2,ipNew;for(longi=0;i<number1;i++)for(long{{casecasecase}IFeaturePtr}featurefeatureclass接口中。IBasicGeoprocess接口//0个图层叠置IFeatureLayerPtripFeaLay;IFeatureClassPtripFeaCls;HRESULThr;ILayerPtriIMapPtripMap(m_ctrlMap.GetMap());{if(FAILED(hr))return;}if(FAILED(hr))return;IBasicGeoprocessorPtrIFeatureLayerPtripOutputFeaLay(CLSID_FeatureLayer);BSTROutFeaClsAliName;if(FAILED(hr))return;if(FAILED(hr))return;GIS操作,点状地图上的每个点被赋予点所落入的多边形内的属性数据。GIS(Intersect(Union(IdentityGIS最小制图单元:由机构或组织所指定的最小面积单元 空间信息分析的内涵极为丰富。作为GIS的部分之一,空间信息分析在地理数据的应用中发挥着举足轻重的作用。叠置分析(Overlayysis)GIS新属性的普查区的人口数。 对地理网络(如交通网络)、城市基础设施网络(如各种网线、电力线、线、供排水管线等)进行地理分析和模型化,是地理信息系统中网络(2)(Barriers),网络中链上流动的点中心(Centers),是接受或分配资源的位置,库、商业中心、电站等,其状态属性包括资源容量,如总的资源量;阻力限额,如中心与链之站点(Stops),在路径选择中资源增减的站点,如库房、汽车站等,其状态属性有要被的资源需求,如产品数动态分段技术:给定一条路径由多段联系组成,要求标注出这条的公里点或要求定位某一公的某一点,标注出某条从某一公里数到另数的路段。动态最佳路径分析:实际网络分析中权值是随着权值关系式变化的而且可能会临时出现一些点所以往往需要动态地计算最佳路径资源分配模型可用来计算中心地的等时区,等交通距离区,等费用距离区等。可用来进行城心,商业中心或港口等地的吸引范围分析,缓冲区分析(Buffer空间统计分析(Spacialysis)空间自相关分析是认识空间分布特征、选择适宜的空间尺度来完成空间分析的最常用的方法。目前,普遍使用空间自相关系数MoranI指数,其计算如下机分布的。Wijij的空间关系,它通过拓扑关系获得。—复合:调用符合程序,根据用户对各个feature给定的权重值进行叠加,得到最后的结果Polyline(Polygon类似)为例,IRelationalOperator在本例中,使用RelationalOperator对两个图形进行比较,返回一个布尔值来这两个图形间是否存在特定的关系。一些关系的判断是要是互斥的。RelationalOperator的具体方法有:Polyline之间或者两个Polygon之间。下面针对较易的两个概念,Crosses和Touch进行举例说明(Polyline/Polyline AE2aeoverlay2(voidCOverlayDlg::Overlay(ILayerPtrinputLayer,ILayerPtrOverlayLayer,IFeatureClassPtr{ IFeatureLayerPtripPutlayer(inputLayer);IFeatureClassPtripPutClass;IFeatureClassPtripOutClass;IFeatureLayerPtripOverlayer(OverlayLayer);IQueryFilterPtripQF(CLSID_QueryFilter);longnumber1,number2;ITopologicalOperatorPtripTo;IFeaturePtripFeature1,ipFeature2;IGeometryPtripGeo1,ipGeo2,ipNew;for(longi=0;i<number1;i++)for(longj=0;j<number2;j++){{casecasecase}IFeaturePtr}}featurefeatureclass接口中。IBasicGeoprocess接口//0IFeatureLayerPtrIFeatureClassPtrILayerPtriIMapPtripMap(m_ctrlMap.GetMap());{if(FAILED(hr))return;}hr=ipMap->get_Layer(1,&ihr=ipFeaLay-if(FAILED(hr))return;IBasicGeoprocessorPtripBGP(CLSID_BasicGeoprocessor);IFeatureClassPtripOutputFeaCls;IFeatureLayerPtripOutputFeaLay(CLSID_FeatureLayer);BSTROutFeaClsAliName;if(FAILED(hr))return;if(FAILED(hr))return;if(FAILED(hr))return;ArcEngineArcEngineIFeatureCacheFeatureClassFeatureClass又可以做多种点击测试我们称呼每一个可以执行捕捉的对象叫捕捉,所有的在一个捕捉环境中方案1:每个负责测试一种FeatureClass的一种点击方式方案4:一个负责测试所有FeatureClass的所有点击方在实际使用过程中我们使用的是第案。但是我个人认为第二种方案比较好。当然这只是个人推测下面给出第案的代码//////IFeatureSnapAgent的说明///publicinterface{IFeatureCache{} {}{}//////为捕捉连接,当捕捉发生的时候,就会触发//////<param//////不再捕捉//////<paramvoidRemoveSnapedEventHandler(GeometrySnapedEventHandler}//////默认的要素捕捉///publicclassDefaultFeatureSnapAgent .ArcGIS.System{#region//////为指定别名。注意该目前还没有关联到任何目标///要使得该起作用,必须要为他设置//////<paramname="name">名称(请确保唯一)</param>publicDefaultFeatureSnapAgent(stringname):this(name,null){}//////将使用该FeatureClass的别名做的名//////<parampublicDefaultFeatureSnapAgent(IFeatureClass{}//////完全初始化捕捉///<paramname="name">名称(请确保唯一<paramname="feaClass">publicDefaultFeatureSnapAgent(stringname,IFeatureClass{ }#regionIFeatureSnapAgentprivateevent ///FeatureClass///privateIFeatureCache//////该将捕捉在该FeatureClass上的Feature.和///privateIFeatureClass/////////protectedGeometryHitPartType/////////private /////////publicIFeatureCache{{return}}//////FeatureClass。SnapAgentFeatureClass///publicIFeatureClass{{return}{}}/////////{{ DefaultFeatureSnapAgent.HitPartTypegetterreturn}{}}/// ///privatevoid{ }/// 由于缓冲是在捕捉方法内部被使用的。所以可以保证m_featureClass必然不会为空///<paramname="point">当前点///<paramname="size">缓冲区大小</param>privatevoidFillCache(IPointpoint,double{{}if(!m_featureCache.Contains{}}//////添加侦听者。捕捉发生后,将会被发送到该侦听者}}//////<parampublicvoidAddSnapedEventHandler(GeometrySnapedEventHandler{}//////移去侦听者//////<parampublicvoidRemoveSnapedEventHandler(GeometrySnapedEventHandler{}#regionISnapAgentprivatestring///SnapAgent//////privatebool publicstringName{{return}publicbool{returnthis.m_isSnapWorking}/// //////<param///<param///<param///publicvirtualboolSnap(IGeometrymetry,IPointsnapPoint,double{10Geometry{//捕捉已经被用户关闭了。不会有任何捕捉动作发return}{returnfalse; //FeaturefeatureintfeatureIndex,featureCount;{{IPointhitPoint=new .ArcGIS.Geometry.PointClass();doublehitDist=0;inthitPartIndex=-1;boolbRightSide=false;inthitSegmentIndex=-1;,refhitPartIndex,refhitSegmentIndex,ref{GeometrySnapEventArgsargs=newGeometrySnapEventArgs(hitPoint,curMetry,returntrue;}}}return}//////打开捕捉///</summary>publicvoidTurnOn(){}//////关闭捕捉///</summary>publicvoidTurnOff(){}privatevoidLaunchSnapEvent(SnapEventArgs{{}}#regionObject//////agent//////<param///publicoverrideboolEquals(object{if(!(objis{return}DefaultFeatureSnapAgentagent=(DefaultFeatureSnapAgent)obj;return}publicoverrideint{return}#regionIEditEvents}}publicvoidAfterDrawSketch(IObject{ DefaultFeatureSnapAgent.AfterDrawSketch}publicvoidOnChangeFeature(IObject{ DefaultFeatureSnapAgent.OnChangeFeature}publicvoidOn{// 添加DefaultFeatureSnapAgent.OnsDetected实}publicvoidOnCreateFeature(IObject{ DefaultFeatureSnapAgent.OnCreateFeature}publicvoid{ DefaultFeatureSnapAgent.OnCurrentLayerChanged}publicvoid{ DefaultFeatureSnapAgent.OnCurrentTaskChangedpublicvoidOnDeleteFeature(IObject{ DefaultFeatureSnapAgent.OnDeleteFeature}publicvoid{ DefaultFeatureSnapAgent.OnRedo}publicvoid{ DefaultFeatureSnapAgent.OnSelectionChanged}publicvoid{ DefaultFeatureSnapAgent.OnSketchFinished}publicvoidOnSket{// 添加DefaultFeatureSnapAgent.OnSketodified实}publicvoid{ DefaultFeatureSnapAgent.OnStartEditingpublicvoidOnStopEditing(Boolean{ DefaultFeatureSnapAgent.OnStopEditing}publicvoid{ DefaultFeatureSnapAgent.OnUndo}#regionISnapFeedback成员privatestringm_snapFeedbackText;publicstringSnapText{{return}}privatevoidSetFeedback(string{}#regionIPersistVariantpublic.ArcGIS.System {{.ArcGIS.System.UIDuid=new .ArcGIS.System.UIDClass();uid.Value="ls.gis.Editor.DefaultFeatureSnapAgent"+this.m_snapAgentName;returnuid;}}publicvoidLoad(.ArcGIS.System.IVariantStream{this.m_snapAgentName=(string)vs.Read();this.m_isSnapWorking=(bool)vs.Read();stringhitPartStr=(string)vs.Read();boolhasFeatureClass=(bool)vs.Read();{.ArcGIS.System.INamename=( .ArcGIS.System.IName)vs.Read();this.m_featureClass=(IFeatureClass)name.Open();}}publicvoidSave(.ArcGIS.System.IVariantStream{vs.Write(this.m_snapAgentName);vs.Write(this.m_isSnapWorking);if(this.m_featureClass!=null){vs.WriteIDatasetdataset=(IDataset)this.m_featureClass;vs.Write(dataset.FullName);}{vs.Write}}}publicclass{private privateSnapToleranceUnit privateArrayList /////////privateIActiveView////////////activeView///ActiveView///public{}publicDefaultSnapAgentEnvironment(IActiveView{m_snapAgentArray=newArrayList();}/// ///{{}{return}}#regionISnapAgentEnvironmentpublicvoidAddSnapAgent(ISnapAgent{{}{}}publicvoid{}//////null//////<param///publicISnapAgentGetSnapAgent(int{{return}{return}}////////////<param///{ISnapAgentretAgent=null;intretAgentIndex=-1;for(intindex=0;{{}}return}publicvoidRemoveSnapAgent(string{ISnapAgentretAgent=null;intretAgentIndex=-1;for(intindex=0;{{}}}/////////<paramname="index"></param>publicvoidRemoveSnapAgent(intindex){{return}}publicboolSnapPoint(IPoint{for(int{ISnapAgentagent=(ISnapAgent)this.m_snapAgentArray[index];{return}}return}publicint{{ FeatureSnapAgentEnvironment.SnapAgentCountgetterreturn}}publicdouble{{ FeatureSnapAgentEnvironment.SnapAgentTolerancegetterreturn}{}}publicSnapToleranceUnit{{return}{}}privatedoubleConvertTolerance(double{doubleretValue=tolerance;{}{{ mon.CommonCooperation.ConvertPixelsToMapUnits(this.m_activeView}{//不需要转换}}return}privatedouble{returnthis.ConvertTolerance}}2007-08-13'/GR/LAYER(i)PublicFunctionInsertBuffToLayer(pTopoAsITopologicalOperator,iLayerAsInteger)AsIGeometryDimpfeatAsIFeatureDimpFeatClassAsIFeatureClassDimpFeatLayerAsIFeatureLayerDimpFeatcursorAsIFeatureCursor'Setg_cllBuffShapeNewCollection清除缓冲区Setpfeat=NewFeatureSetpFeatLayer=g_pActiveView.FocusMap.Layer(iLayer)SetpFeatClass=pFeatLayer.FeatureClassDimstrAsSetpfeat=Setpfeat.Shape=pTopo.buffer(frmBuffDis.g_BuffDis)SetInsertBuffToLayer=pfeat.ShapeEndPublished2007-9-2217:13:00-500行的代码(不包括机器产生的代码25580Usepartialclasseswheneverpossibletofactoroutthemaintaineda)onlyoperationalassumptions,algorithminsightsandsoAPI在publicclassMyClass{publicreadonlyintNumber;{Number=}publicconstintDaysInWeek=}Asserta)15行要有一次检查usingobjectobjectobj=Debug.Assert(obj!=在捕获(catch)语句的抛出异常子句中(throw),总是抛出原始异常原始错误的堆栈分配catch(Exception{throw;//和throwexception一样。}MainAvoidfriendassemblies,asitincreasesinter-assemblyAvoidcodethatreliesonanassemblyrunningfromaparticular使应用程序集尽量为最小化代码(EXE客户程序)publicenumColor{}//publicenum{Red=1,Green=2,Blue=}//publicenumColor:{}ififtrinaryboolbool//if(IsEverythingOK//boolok=IsEverythingOK();if(ok)0在循环中总是显式的初始化类型的数组publicclassMyClass[]array=newfor(intindex=0;index<array.Length;{array[index]=new}public和protectednewoverridesealedpublicprotectedvirtualinterop(COM+dll)代码否则不要使用不安全的代码(unsafecode)asDogdog=newGermanShepherdshepherd=dogasGermanShepherd;if(shepherd!=null)CopyadelegatetoalocalvariablebeforepublishingtoavoidconcurrencyracepublicclassMySource{publiceventEventHandlerMyEvent;publicvoidFireEvent(){EventHandlertemp=MyEvent;if(temp!=null){}}}不要提供公共的成员变量,使用器替换这些变量publicclass{MyDelegatem_SomeEventpubliceventMyDelegate{{m_SomeEvent+=}{m_SomeEvent-=}}}使用一个帮助类来公布的定义2:13-520a)12避免接口成员中包含从不假设一个类型兼容一个接口。DefensivelyqueryforthatIMyInterface/*obj1,接下来obj2=obj1asIMyInterface;if(obj2!=null){}{//}StringBuilder使用应用程序的日志和switchgotoswitchdefault子句来显示信息(Assert)intnumber=SomeMethod();{case ine("Case1:");case ine("Case2:");default}this//thispublicclass{publicMyClass(stringmessagepublicMyClass():this("}除非你想重写子类中存在名称的成员或者调用基类的构造函数否则不要使用base来基类的成员//basepublicclass{publicDog(stringvirtualpublicvoidBark(int}publicclassGermanShepherd:{publicGermanShepherd(stringname):baseoverridepublicvoidBark(int{base}}System.ObjectSystem.Objectasclass//class{voidSomeMethod(T{objecttemp=SomeClassobj=}}//classMyClass<T>whereT:{voidSomeMethod(T{SomeClassobj=}}publicclass//publicinterfaceIList<T>whereT://publicinterfaceICustomerList:AE删除选择的要素'//DeletesallfeaturesselectedonthecurrentPublicSubDeleteAllSelectedFeatures(ByValpFeatureCursorAsIFeatureCursor,ByValGeometryTypeStrAsString)DimpWorkspaceEditAsIWorkspaceEditDimpFeatureAs'IftherearenofeaturescurrentlyselectedthennothingtodoIfpFeatureCursorIsNothingThenExitSubDimbResponseAsbResponseMsgBox("您确定删除所有&GeometryTypeStr&要素吗?IfbResponse=Windows.Forms.DialogResult.Yes'LoopovertheselectedfeaturesdeletingeachinturnpWorkspaceEdit=pSdeWorkspacepFeature=pFeatureCursor.NextFeatureWhileNotpFeatureIsNothingpFeature=pFeatureCursor.NextFeatureEndWhileEndExitSubCatchexAsExceptionEndTryEndSubAO/AE1AEPrivateSubAxMapControl1_OnMouseDown(ByValsenderAsObject,ByValeAs.ArcGIS.MapControl.IMapControlEvents2_OnMouseDownEvent)HandlesAxMapControl1.OnMouseDownMe.AxMapControl1.MousePointer=.ArcGIS.SystemUI.ControlsMousePointer.PointerIdentifyDimpMapAsIMapDimiAsDimgrouyerAsIGrouyergrouyer=NewGrouyerFori=0ToMe.AxMapControl1.Map.LayerCount-1DimpPointAspMap=pPoint=Me.AxMapControl1.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论