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