Arc Objects10创建线要素图层
来源:互联网 发布:淘宝代销选择品牌技巧 编辑:程序博客网 时间:2024/06/04 03:40
程序的运行环境为VS2010+ArcObjects10,代码完全使用C#。
创建线要素时要分别定义一个线对象和起止点对象,关键代码如下:
IPolyline line = new PolylineClass(); IPoint StartPoint = new PointClass(); IPoint EndPoint = new PointClass(); double X1, Y1, X2, Y2; X1 = Convert.ToDouble(currentFeature.get_Value(10)); Y1 = Convert.ToDouble(currentFeature.get_Value(11)); X2 = Convert.ToDouble(currentFeature.get_Value(15)); Y2 = Convert.ToDouble(currentFeature.get_Value(16)); StartPoint.X = X1; StartPoint.Y = Y1; EndPoint.X = X2; EndPoint.Y = Y2; line.FromPoint = StartPoint; line.ToPoint = EndPoint;
首先完成起始点的坐标赋值,这里currentFeature.get_Value(X)读到的是一个string类型的变量,可先不予理会,理解创建线要素的关键过程:起止点的XY坐标赋值——>把起止点赋给线对象的相应属性。
上面是线要素的几何属性的赋值过程,完整的创建线要素的过程可参考如下:
//代码完成的是根据选择的要素集合生成shapefile的过程 //outfileNamePath指定的是输出的shape文件的路径和文件名 //IEnumFeature指定的是输入的某层的要素集合 private IFeatureLayer CreateShpFromSelected(string outfileNamePath, IEnumFeature selectedFeatures) { string folder = System.IO.Path.GetDirectoryName(outfileNamePath); string file = System.IO.Path.GetFileName(outfileNamePath); IWorkspaceFactory pWSF = new ShapefileWorkspaceFactoryClass(); IFeatureWorkspace pFWS = pWSF.OpenFromFile(folder, 0) as IFeatureWorkspace; if (File.Exists(outfileNamePath)) { IFeatureClass featureClass = pFWS.OpenFeatureClass(file); IDataset pDataset = featureClass as IDataset; pDataset.Delete(); } IFields pFields = new FieldsClass(); IFieldsEdit pFieldsEdit = pFields as IFieldsEdit; //添加Shape字段 IField pField = new FieldClass(); IFieldEdit pFieldEdit = pField as IFieldEdit; pFieldEdit.Name_2 = "Shape"; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry; IGeometryDef pGeometryDef = new GeometryDefClass(); IGeometryDefEdit pGeometryDefEdit = pGeometryDef as IGeometryDefEdit; pGeometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolyline; pGeometryDefEdit.SpatialReference_2 = (MainForm.selectedLayer.FeatureClass as IGeoDataset).SpatialReference; pFieldEdit.GeometryDef_2 = pGeometryDef; pFieldsEdit.AddField(pField); //添加非几何字段 pField = new FieldClass(); pFieldEdit = pField as IFieldEdit; pFieldEdit.Name_2 = "Shape_Leng"; pFieldEdit.Length_2 = 20; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString; pFieldsEdit.AddField(pField); pField = new FieldClass(); pFieldEdit = pField as IFieldEdit; pFieldEdit.Name_2 = "X1"; pFieldEdit.Length_2 = 20; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString; pFieldsEdit.AddField(pField); pField = new FieldClass(); pFieldEdit = pField as IFieldEdit; pFieldEdit.Name_2 = "Y1"; pFieldEdit.Length_2 = 20; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString; pFieldsEdit.AddField(pField); pField = new FieldClass(); pFieldEdit = pField as IFieldEdit; pFieldEdit.Name_2 = "Z1"; pFieldEdit.Length_2 = 20; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString; pFieldsEdit.AddField(pField); pField = new FieldClass(); pFieldEdit = pField as IFieldEdit; pFieldEdit.Name_2 = "X2"; pFieldEdit.Length_2 = 20; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString; pFieldsEdit.AddField(pField); pField = new FieldClass(); pFieldEdit = pField as IFieldEdit; pFieldEdit.Name_2 = "Y2"; pFieldEdit.Length_2 = 20; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString; pFieldsEdit.AddField(pField); pField = new FieldClass(); pFieldEdit = pField as IFieldEdit; pFieldEdit.Name_2 = "Z2"; pFieldEdit.Length_2 = 20; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString; pFieldsEdit.AddField(pField); IFeatureClass pFeatureClass = pFWS.CreateFeatureClass(file, pFields, null, null, esriFeatureType.esriFTSimple, "Shape", ""); IFeature currentFeature = selectedFeatures.Next(); //遍历要素集,同时创建一个新要素接收该要素的所有属性值,并加到要素类中。 while (currentFeature != null) { IFeature pFeature = pFeatureClass.CreateFeature(); IPolyline line = new PolylineClass(); IPoint StartPoint = new PointClass(); IPoint EndPoint = new PointClass(); double X1, Y1, X2, Y2; X1 = Convert.ToDouble(currentFeature.get_Value(10)); Y1 = Convert.ToDouble(currentFeature.get_Value(11)); X2 = Convert.ToDouble(currentFeature.get_Value(15)); Y2 = Convert.ToDouble(currentFeature.get_Value(16)); StartPoint.X = X1; StartPoint.Y = Y1; EndPoint.X = X2; EndPoint.Y = Y2; line.FromPoint = StartPoint; line.ToPoint = EndPoint; pFeature.Shape = line as IGeometry; pFeature.set_Value(pFeature.Fields.FindField("Shape_Leng"), currentFeature.get_Value(3)); pFeature.set_Value(pFeature.Fields.FindField("X1"), currentFeature.get_Value(10)); pFeature.set_Value(pFeature.Fields.FindField("Y1"), currentFeature.get_Value(11)); pFeature.set_Value(pFeature.Fields.FindField("Z1"), currentFeature.get_Value(12)); pFeature.set_Value(pFeature.Fields.FindField("Y2"), currentFeature.get_Value(15)); pFeature.set_Value(pFeature.Fields.FindField("X2"), currentFeature.get_Value(16)); pFeature.set_Value(pFeature.Fields.FindField("Z2"), currentFeature.get_Value(17)); pFeature.Store(); currentFeature = selectedFeatures.Next(); } IFeatureLayer pFeatureLayer = new FeatureLayerClass(); pFeatureLayer.FeatureClass = pFeatureClass; return pFeatureLayer; }
首先要创建一个Feature对象,然后把创建的line赋值到Feature对象的Shape属性上,再依次对Feature的各非几何字段赋值,最后调用Feature对象的Store函数完成存储。对IEnumFeature的所有Feature对象执行此操作,最终生成的结果为一个shapefile类型的要素层。
0 0
- Arc Objects10创建线要素图层
- arcengine创建要素类、图层的方法
- Arcgis engine 指定图层创建点要素
- Arcgis engine 指定图层创建点要素
- Arcgis engine 指定图层创建点要素
- ArcEngine创建要素类_线图层
- ArcEngine c# 创建shp图层,并将要素写入图层保存
- ArcEngine c# 创建shp图层,并将要素写入图层保存
- ArcEngine c# 创建shp图层,并将要素写入图层保存
- 判断要素所在图层
- ARCEngine 添加创建线要素
- 条件显示Dynamic图层要素
- 要素图层编辑学习笔记
- 浅谈iClient for javascript 要素图层
- 要素图层范围查询属性
- AE开发之计算要素图层
- C#之要素图层过滤显示
- AE二次开发,右键图层,设置图层要素标注
- JAVA中Array与ArrayList的区别
- 关于学习1
- 搭建SVN
- 浙江大学PAT---Basic Level---1005----继续(3n+1)猜想
- 软件架构师的定位、成长曲线及能力模型
- Arc Objects10创建线要素图层
- Servlet的配置(建立项目的时候每写一个servlet都要在web.xml中声明servlet)
- 从小到大排序
- RSA加密算法 公钥(N,e)产生
- 自 增 运 算
- W7和W8中IIS安装,及错误分析
- NoSQL Databases, why we should use, and which one we should choose
- 浙大PAT 2-09. 装箱问题模拟 (解题思路)
- 多处理器