• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

gisoracle

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

arcengine 判断要素是否有z值

//判断IFeatureClass图形是否含有Z值信息
IFeatureClass featureClass = this.pLayer.FeatureClass;
string shapeFieldName = featureClass.ShapeFieldName;
if (featureClass.Fields.get_Field(featureClass.FindField(shapeFieldName)).GeometryDef.HasZ)
 {
         this.hasZ = true;
}
//若有为IPoint赋Z值:
IPoint point = new PointClass();
point.X = num;
point.Y = num2;
if (this.hasZ)
{
       IZAware aware = point as IZAware;
       aware.ZAware = true;
       double num3 = Convert.ToDouble(this.Z_numericUpDown.Text);
       point.Z = num3;
}
————————————————
版权声明:本文为CSDN博主「GIS_百度」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/GIS_Y_C_B/article/details/119949462

Arcengine 开发,FeatureClass新增feature时“The Geometry has no z-value”或"The Geometry has null z-value"的解决方...

Arcengine 开发,当图层含有Z值时,新增的feature没有Z值就会 出现“The Geometry has no z-value”的错误。意思很明显,新增的geometry没有Z值。

此时按照常规想法,取出geometry的每个点,分别设置Z=0,理论可行,但实际调试过程中依然报“The Geometry has no z-value”。

可用解决方案如下:

  1.  
    IGeometry geometry = feature.ShapeCopy;
  2.  
    IZAware zAware = (IZAware)geometry;
  3.  
    zAware.ZAware = true;

这样转换一下,geometry就有Z属性了。zAware.ZAware是控制geometry是否有Z值的,当然也可以使用IZAware除去geometry的Z值。

 

故事到这里应该就结束了,可是调试时候又报错了,这时的错误是“The Geometry has null z-value”,意思也很明显,z为空,不通过....

这时再使用常规方案,取出geometry的每个点,分别设置Z=0...结果还是一样的报错。

解决方案如下:

  1.  
    IZ iz = (IZ)geometry;
  2.  
    iz.SetConstantZ(0);

运行,通过....

 

AE提供了很多转换接口,比我们自己写要简单和有效的很多...当然也是因为AE中有很多结构没有公开,我们的一些常规解决方案有时候不是那么有用。希望能帮到有这么方面困扰的AE coder!

posted on 2022-03-15 23:09  gisai  阅读(316)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3