ArcGIS接口详细说明.docx
- 文档编号:28631697
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:51
- 大小:38.59KB
ArcGIS接口详细说明.docx
《ArcGIS接口详细说明.docx》由会员分享,可在线阅读,更多相关《ArcGIS接口详细说明.docx(51页珍藏版)》请在冰豆网上搜索。
ArcGIS接口详细说明
ArcGIS接口详细说明...1
Geometry
Geometry库处理存储在特征类(featureclasses)或其它图形要素(graphicalelements)
中的特征的geometry或shape。
大多数用户交互的根本几何对象有Point、MultiPoint、
Polyline和Polygon。
除了这些顶层的实体,还有作为Polylines和Polygons构建
模块的几何体(geometries)。
这些是组成几何体的基元(primitives)。
它们是Segments、
Paths和Rings。
Polylines和Polygons由形成一条Path的依次相连的Segments组成。
一个Segment包含两个不同的点,起点和终点,和一个定义从起点到终点的曲线的要素类型。
这种segments有CircularArc、Line、EllipticArc和BezierCurve。
所有的几何
对象都可以有与它们顶点相关的Z、和IDs。
M
ISegmentCollection接口被Path,Ring,Polyline和Polygon四个类所实现,它们被称作是Segment
集合对象,使用这个接口可以处理组成Segment集合对象中的每一个子Segment对象。
使用ISegmentCollection接口可以为一个Segment集合对象添加,插入,删除Segment子对象。
ISegmentCollection接口SetCircle和SetRectangle方法提供了一种简单不需要添加Segment的情况下构建一个完成的
Path,Ring,Polyline和Polygon的方法。
Geometry集合接口
通过前边对于具体的Geometry对象的介绍可知,除了Point对象之外,
其他几何对象都是通过其他几何对象集合构建而成。
如MultiPoint对象是点的集合,Path对象
是Segment对象的集合,Polyline对象是Path对象的集合,Polygon对象是Ring对象的集合,
Multipatch对象是TriangleStrip和TrangleFan,Trangle,Ring对象的集合。
ArcGISEngine
提供了三个主要的几何图形集合接口用于对几何对象的操作,分别是IPointCollection,
ISegmentCollection和IGeometryCollection,这些接口提醒出ArcGISEngine的几何模型的实质
——它们是一种组合构成的模式,这种组合并不一定按照严格的层次构造组织。
在前面介绍一些几何对象的时候,也给大家演示了局部使用功能,这三个接口在程序开发中经常
使用到,接下来简单阐述以下这三个接口的使用方法。
2.4.9.1IGeometryCollection接口
IGeometryCollection接口被Polygon,Polyline,Multipoint,Multipatch,Trangle,TrangleStrip,
TrangleFan和GeometryBag所实现。
IGeometryCollection接口提供的方法可以让开发者对一个几何
对象的组成元素即子对象进展添加,改变和移除。
例如:
组成Polyline对象的子对象是Path对象。
组成Polygon对象的子对象是Ring对象。
组成Multipoint对象的子对象是Point对象。
组成MultiPatch对象的子对象是TrangleFanTrangleStrip,Triangle或Ring对象。
组成GeometryBag对象的是任何类型的几何体对象,实际上GeometryBag是一个可以容纳任何
类型几何对象的容器。
IGeometryCollection的Geometry属性可以通过一个索引值返回一个
组成该几何对象的某个子对象,而GeometryCount返回组成该几何对象的子对象的数目。
IGeometry的AddGeometry和AddGeometries方法都用于向一个几何对象添加子对象,
它们的区别是前者一次只能添加一个几何对象,而后者可以一次添加一个几何对象数组。
除此之外,AddGeometry方法可以将子对象添加到几何的指定索引值的位置,
而AddGeometries方法将子对象数组添加到集合的最后。
在使用AddGeometry方法添加子对象
到Polygon对象的过程中,如果子对象即Ring出现覆盖现象,那么多边形就没有封闭或出现了
包含关系,那么这个Polygon就不是简单Polygon,因此通过IGometryCollection来创立一个Polygon时,
需要使用ITopologicalOperator的Simplify方法保证其有效性。
13.关于IFeatureClass接口〔esriGeoDatabase〕
IFeatureClass接口的第一个方法AddField(Field)〔方法,增加一个属性字段到这个要素类,其中传入的参数为一个IField接口的变量,此变量可以由其他要素类获得并赋值给要操作的要素类,可用IFeilds接口的Field属性来获得〕
IFeatureClass接口的第二个方法DeleteField(Field)〔方法,删除一个属性字段,其中传入的参数为一个IField接口的变量〕
IFeatureClass接口的第三个属性Fields〔只读,获取该要素类的全部属性字段,返回一个IFields类型的变量〕
IFeatureClass接口的第四个方法FindField(Name)〔方法,去查找在该要素类里面是否含有参数名字的属性字段,如果有,那么返回索引,没有,那么返回-1〕
IFeatureClass接口的第五个属性AreaField〔只读,获取属性字段为geometry的那一个Field〕
IFeatureClass接口的第六个方法Search(filter,Recycling)〔方法,去得到一个IFeatureCursor类型的游标,该游标由filter来控制赛选,如果filter等于null,那么返回整个featureclass的游标,再用IfeatureCursor的NextFeature的方法依次得到每一个Feature〕
IFeatureClass接口的第七个方法Insert(useBuffering)〔方法,去得到一个IFeatureCursor类型的游标,来用作插入新的Features,useBuffering是一个布尔型参数,当为True时即可以插入新的Feature,再用IFeatureCursor的InsertFeature(buffer)的方法去插入一个新的Feature〕
IFeatureClass接口的第八个方法CreateFeatureBuffer〔方法,新建一个缓冲,返回一个IFeatureBuffer类型的变量,然后再对这个变量进展操作〕
关于IFeatureCursor接口〔esriGeoDatabase〕
IFeatureCursor接口的第一个方法NextFeature〔方法,将游标向前跳到下一个位置,并且返回该位置的Feature〕
IFeatureCursor接口的第二个方法UpdateFeature(Feature)〔方法,对当前游标位置的Feature进展更新〕
IFeatureCursor接口的第三个方法InsertFeature(buffer)〔方法,用参数传进来的属性值插入一个新的要素到数据库中,返回该插入新的Feature的ID值,其中参数类型为IFeatureBuffer〕
privatevoidbutton1_Click(objectsender,EventArgse)
{
stringFilePathName="E:
\\数据样本\\测试文件夹";
//创立坐标轴pline图层
stringMapLayerName="";
shapeFileFullName="测试.shp";
MapLayerName=shapeFileFullName.Substring(0,shapeFileFullName.Length-4);
stringPointLineHu="Polyline";//标记是点、线、弧pointlineyuanhu
//显示绘图页面
tabControl1.Show();
tabControl1.SelectedTab=tabPageMap;
if(Directory.Exists(FilePathName)==false)//如果不存在该文件夹就创立文件夹
{
Directory.CreateDirectory(FilePathName);
}
//接口IWorkspaceFactory提供创立和翻开workspace的成员以及访问workspacefactory信息的成员。
IWorkspaceFactorypWSF=newShapefileWorkspaceFactoryClass();
//IFeatureWorkspace接口用于访问和管理地理数据库中的要素的重要成分—数据集,
IFeatureWorkspacepFWS=(IFeatureWorkspace)pWSF.OpenFromFile(FilePathName,0);
stringoutfileNamePath=FilePathName+"\\"+shapeFileFullName;
//如果shapefile存在,询问覆盖还是返回
//如果shapefile存在,询问覆盖还是返回
if(File.Exists(outfileNamePath))
{
if(MessageBox.Show("文件已经存在,是否要重新计算覆盖原文件?
",
"询问!
",MessageBoxButtons.OKCancel,MessageBoxIcon.Question)==DialogResult.OK)
{
if(axMapView.LayerCount>0)
{
this.axMapView.ClearLayers();
this.axMapView.Refresh();
}
IFeatureClassfeatureClass=pFWS.OpenFeatureClass(shapeFileFullName);
IDatasetpDataset=(IDataset)featureClass;
pDataset.Delete();
}
else
{return;}
}
else
{
//IFeatureClassfeatureClass=pFWS.OpenFeatureClass(shapeFileFullName);
}
//调用函数CreatFields,定义坐标轴属性字段
IFieldspFields=CreatFields(MapLayerName,PointLineHu);
//定义一类地物特征
IFeatureClasspFeatureClass;
pFeatureClass=pFWS.CreateFeatureClass(shapeFileFullName,pFields,null,null,esriFeatureType.esriFTSimple,"Shape","");
//pFeatureLayer.Name=MapLayerName;
//axMapView.Map.AddLayer(pFeatureLayer);
IFeatureLayerpFeaturelayer=newFeatureLayerClass();
pFeaturelayer.FeatureClass=pFeatureClass;
IGeometrypGeom;//IGeoFeatureLayerpGFeatureLyr=pFeatureLayerasIGeoFeatureLayer;
//IGeoFeatureLayerpGFeatureLyr=pFeatureLayerasIGeoFeatureLayer;
//pGeom.GeometryType=esriFieldType.esriFieldTypeGeometry;
IWorkspaceEditw=(pFeatureClassasIDataset).WorkspaceasIWorkspaceEdit;
w.StartEditing(true);
w.StartEditOperation();
IFeatureCursorpFeatCur;
IFeatureBufferpFeatBuff;
pFeatCur=pFeatureClass.Insert(true);
pFeatBuff=pFeatureClass.CreateFeatureBuffer();
IFieldspFlds;
IFieldpFld;
objecto=Type.Missing;
for(intj=10;j<20;j++)//X坐标轴
{
IPointpPoint=newPointClass();
pPoint.X=j;
pPoint.Y=j;
for(intm=100;m<200;m=m+10)
{
IPointCollectionpPointCol=newPolylineClass();
IPointpPoint_1=newPointClass();
pPoint_1.X=m;
pPoint_1.Y=m;
pPointCol.AddPoint(pPoint,refo,refo);
pPointCol.AddPoint(pPoint_1,refo,refo);
IPolylinepline=pPointColasIPolyline;
IFeaturepFeature=pFeatureClass.CreateFeature();
pFeature.Shape=plineasIPolyline;
//pGeom=pFeatureasIGeometry;
//pline=pGeomasIPolyline;
//esriFieldType.esriFieldTypeGeometry
pFeatBuff.set_Value(pFeature.Fields.FindField("layername"),(object)(MapLayerName));
pFeatBuff.set_Value(pFeature.Fields.FindField("leibie"),(object)("K_Y_Xu"));
pFeatCur.InsertFeature(pFeatBuff);
}
}
w.StopEditOperation();
w.StopEditing(true);
if(pFeaturelayer!
=null)
{
if(MapLayerName!
=pFeaturelayer.Name)
{
pFeaturelayer.Name=MapLayerName;
axMapView.Map.AddLayer(pFeaturelayer);
}
else
{}
//在画图事件中调用
//IFeatureLayerpFeatureLayer=this.axMapControl1.get_Layer(0)asIFeatureLayer;
intmmm=pFeaturelayer.FeatureClass.FeatureCount(null);
UniqueValueRenderFlyr(pFeaturelayer,MapLayerName);
}
axMapView.Refresh();
}
/*
privatevoidAdd(IGeometrypGeom)
{
IFeatureLayerpFeatureLayer=axMapView.get_Layer(0)asIFeatureLayer;
IFeatureClasspFeatClass;
pFeatClass=pFeatureLayer.FeatureClass;
IFeatureCursorpFeatCur;
IFeatureBufferpFeatBuff;
pFeatCur=pFeatClass.Insert(true);
pFeatBuff=pFeatClass.CreateFeatureBuffer();
//esriGeometryType.esriGeometryPolyline
IFieldspFlds;
IFieldpFld;
inti;
IPolygonpPolygon;
pPolygon=pGeomasIPolygon;
pFlds=pFeatClass.Fields;
for(i=1;i { pFld=pFlds.get_Field(i); if(pFld.Type==esriFieldType.esriFieldTypeGeometry) { //pFeatBuff.set_Value(i,pGeom); //pFeatBuff.Name_2="Shape"; //pFeatBuff.Type_2=esriFieldType.esriFieldTypeGeometry; } else { if(pFld.Type==esriFieldType.esriFieldTypeInteger) pFeatBuff.set_Value(i,Convert.ToInt32(0)); elseif(pFld.Type==esriFieldType.esriFieldTypeDouble) pFeatBuff.set_Value(i,Convert.ToDouble(0)); elseif(pFld.Type==esriFieldType.esriFieldTypeSmallInteger) pFeatBuff.set_Value(i,Convert.ToInt16(0)); elseif(pFld.Type==esriFieldType.esriFieldTypeString) pFeatBuff.set_Value(i,"noname"); else MessageBox.Show("不需要这个字段"); } } pFeatCur.InsertFeature(pFeatBuff); } */ 1.IField接口〔esriGeoDatabase〕...2 2.IFieldEdit接口〔esriGeoDatabase〕...2 3.IFields接口〔esriGeoDatabase〕...2 4.IRow接口〔esriGeoDatabase〕...3 5.ITable接口〔esriGeoDatabase〕...3 6.IArea接口〔esriGeometry〕...4 7.IEnvelope接口〔esriGeometry〕...4 8.IPoint接口〔esriGeometry〕...5 9.IPointArray接口〔esriGeometry〕...5 10.IPointCollection接口〔esriGeometry〕...6 11.IPolyline接口〔esriGeometry〕...6 12.IGeometry接口〔esriGeometry〕...6 13.IFeature接口〔esriGeoDatabase〕...7 14.IFeatureLayer接口〔esriCarto〕...8 15.IFeatureClass接口〔esriGeoDatabase〕...8 16.IFeatureCursor接口〔esriGeoDatabase〕...9 17.ISpatialFilter接口〔esriGeoDatabase〕...9 18.IQueryFilter接口〔esriGeoDatabase〕...11 19.IFeatureSelection接口〔esriCarto〕...11 20.IMap接口(esriCarto).11 21.IPropertySet接口(esriSystem).12 22.IFeatureWorkspace接口〔esriGeoDatabase〕...12 23.IWorkspaceEdit接口〔esriGeoDatabase〕...12 24.IWorkspaceFactory接口〔esriGeoDatabase〕...13 25.ITopologicalOperator接口〔esriGeometry〕...13 1.1.IField接口〔esriGeoDatabase〕 IField接口的第一个属性AliasName〔只读,获得字段的别名〕 IField接口的第二个方法CheckValue〔Value〕〔方法,对于指定的属性字段,基于字段类型判断参数值是否有效,有效,那么返回True,否那么返回False〕 例子代码: IFeatureClasspFC_SCP_PT; editPT=newFieldClass(); editPT.Precision_2=8; editPT.Scale_2=3; editPT.Name_2="ELEV1"; editPT.Type_2=esriFieldType.esriFieldTypeDouble; IField接口的其他属性均为只读属性,常用有Name〔只读,获得字段的名称〕 1.2.IFieldEdit接口〔esriGeoDatabase〕 所有该接口的属性均为可读可写,经常用与对新建字段的设置,因为字段一旦被设置,其根本属性就不能被更改,所以就需要该接口类型的变量去转换,方法为: IFeatureClasspFC_SCP_PT; IFieldEditeditPT=newFieldClass(); pFC_SCP_PT.AddField((IField)editPT); 如果在vb中去编写代码,那么赋值和获取均为同一属性,而在C#中,为了区分设置和获取,属性均有两个,类似于Name和Name_2,这样就可以区分了,普遍用设置的带有_2的那个属性。 IFieldEdit接口的第一个属性N
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ArcGIS 接口 详细 说明