ARCGIS二维点线数据增加高程(Z)方法

我是文明,文章来源于项目实践,以下即代表我的个人认同与看法,有不同看法的可以留言哈,谢谢你的阅读,文章有错字或代码错误请指正,谢谢你哦。

1、ARCGIS中二维点、线数据默认没有高程z值的;高程的作用主要是添加在三维数据中展现;

(1)添加高程的方法1:gp操作:

 

 输入相关参数即可:对于线字段添加终止高程即可;

以上gp操作可自行转换为gp代码:略

(2)添加高程的方法2:AE代码实现:

应用IFeatureWorkspace.CreateFeatureClass的方法创建具有高程值的点、线数据;以下为核心内容:

//创建要素类的关键字段shape字段支持类型设置。
IField field = new ESRI.ArcGIS.Geodatabase.FieldClass();
IFieldEdit fieldEdit = field as ESRI.ArcGIS.Geodatabase.IFieldEdit;
            ESRI.ArcGIS.Geodatabase.IGeometryDef geoDef = new ESRI.ArcGIS.Geodatabase.GeometryDefClass();
            ESRI.ArcGIS.Geodatabase.IGeometryDefEdit geoDefEdit = (ESRI.ArcGIS.Geodatabase.IGeometryDefEdit)geoDef;
            ESRI.ArcGIS.Geometry.ISpatialReferenceFactory spatialRefFactory = new ESRI.ArcGIS.Geometry.SpatialReferenceEnvironmentClass();
            ESRI.ArcGIS.Geometry.ISpatialReference spatialReference = spatialRefFactory.CreateESRISpatialReferenceFromPRJFile(foldprj);//设置空间参考
            geoDefEdit.SpatialReference_2 = spatialReference;
            geoDefEdit.AvgNumPoints_2 = 5;
            geoDefEdit.GeometryType_2 = ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint;
            geoDefEdit.GridCount_2 = 1;
            geoDefEdit.HasM_2 = true;//支持M字段
            geoDefEdit.HasZ_2 = true;//设置为true以支持存储高程
            fieldEdit.Name_2 = "SHAPE";
            fieldEdit.Type_2 = ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeGeometry;
            fieldEdit.GeometryDef_2 = geoDef;
            fieldEdit.IsNullable_2 = true;
            fieldEdit.Required_2 = true;
            fieldsEdit.AddField(field);//添加字段

 创建好要素类之后要设置z值存储设置代码如下:

 //设置线的z值存储,点设置同*(略)
 IPolyline polyline = m_Feature.Shape as IPolyline;
 IPoint pFromPoint = new PointClass();
 pFromPoint.PutCoords(polyline.FromPoint.X, polyline.FromPoint.Y);
 pFromPoint.Z = ZFrom;//起点高程
 IZAware fromZAware = pFromPoint as IZAware;
 fromZAware.ZAware = true;

 IPoint pToPoint = new PointClass();
 pToPoint.PutCoords(polyline.ToPoint.X, polyline.ToPoint.Y);
 pToPoint.Z = ZTo;//终点高程
 IZAware toZAware = pToPoint as IZAware;
 toZAware.ZAware = true;

 IPolyline pPolyline = new PolylineClass();
 IZAware iPolylineAware = (IZAware)pPolyline;
 iPolylineAware.ZAware = true;
 pPolyline.FromPoint = pFromPoint;
 pPolyline.ToPoint = pToPoint;
 m_Feature.Shape = pPolyline;

 以上代码经过实测;

方法3:直接修改shap字段

对于能否直接修改shap字段,经测试会出现该类型不支持z输入的错误。具体可自行测试。

错误原因:对于已存在的shap字段,不能修改GeometryDef的z值。

发布了35 篇原创文章 · 获赞 8 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/wenming111/article/details/81533476
今日推荐