Engine中如何把没有Z值的Gemetry转为有Z值的Geomtry:报错"the geometry has no Z values"

转载 2013年12月05日 14:30:55

在用Feedback新建要素时,得到的要素没有Z值,如果数据源(图层要素)有Z值,则新建要素不成功,报错"the geometry has no Z values"。可有用以下方法解决:
//先判断图层要素是否有Z值
 int index;
                index = pFeature.Fields.FindField("Shape");
                IGeometryDef pGeometryDef;
                pGeometryDef = pFeature.Fields.get_Field(index).GeometryDef  as IGeometryDef;

                IPointCollection  pPointCollection = pGeom as IPointCollection;
                if (pGeometryDef.HasZ)
                {                                     
                    IZAware pZAware = (IZAware)pGeom;
                    pZAware.ZAware = true;                  
                    IZ iz1 = (IZ)pGeom;
                    iz1.SetConstantZ(0); //将Z值设置为0
                }
                else
                {
                    IZAware pZAware = (IZAware)pGeom;
                    pZAware.ZAware = false;
                }
                if (pGeometryDef.HasM)
                {
                    IMAware pMAware = (IMAware)pGeom;
                    pMAware.MAware = true;                  
                }
                else
                {
                    IMAware pMAware = (IMAware)pGeom;
                    pMAware.MAware = false;
                }


(转)在把Geodatabase数据进行要素类间倒腾的时候,如果数据源是没有Z值的,但目标数据源是有Z值的,在进行set a.Shape =b.Shape的时候会出错。

解决办法简单的就是用FME进行转换,把没有要素类的数据源进行转换,默认的Z值都为零。这种方法的缺点就是麻烦。

在用Engine的借口进行转换行不行呢?可以。但是如果直接获得数据源的Geometry然后强行给它赋Z值(使用IZWare=True是不行的),而需要根据这个数据源的Geometry重新New 一个相应的Geometry,然后对每个节点进行赋Z值。

需要注意两个问题:在循环数据源的Geoemtry节点的时候需要注意临时变量需要为long,一般人喜欢dim i as integer,但是节点数据很多会大于3万哦:)

第二个需要注意的问题是:数据源的要素可能是多个部分组成,polyline可能有多个path,而polygon可能有多个ring,呵呵,好好再看看geometry 的Modal pdf文件哦,如果数据源只有一个part,遍历所有pointcollection的point赋Z值是可以的,如果有多个part,稍微有经验的人就知道,这样不行的。呵呵,要一个part一个part的搞哦。

在对要素切割的时候,如果要素是有Z值的,也是同样的道理。

The Geometry has no Z values 解决办法

我们在ArcEngine开发过程中进行创建要素时,简单的IFeatureClass.CreateFeature之后,然后把IGeometry对象赋给Feature.shape,会引发“The Geom...
  • u010212353
  • u010212353
  • 2016年05月26日 18:02
  • 849

Geometry cannot have Z values

在对矢量要素类添加要素,进行赋几何信息时(FeatureBuffer.Shape = IGeometry)可能会报Geometry cannot have Z values 的错误,原因是赋值的IG...
  • Tweeenty
  • Tweeenty
  • 2015年03月13日 22:00
  • 1450

Geometry cannot have Z values /the geometry has no z values的问题

AE开发,创建要素类,向要素类添加要素时:pFeature.Shape = pGeoCol as IMultiPatch;报错:Geometry cannot have Z values。因为pGeo...
  • kone0611
  • kone0611
  • 2017年06月12日 20:42
  • 271

Geometry cannot have Z values.

添加Z pGeometryDefEdit.HasZ_2 设置下 或者(去掉Z) IGeometry pGeo = pfeature.ShapeCopy; IZAware pZAware =...
  • yh0503
  • yh0503
  • 2016年06月01日 14:08
  • 668

统计_z值

z值
  • Young_Gy
  • Young_Gy
  • 2015年09月11日 10:59
  • 3756

基于C#和engine的shp文件去z值的主要代码

基于C#和engine的shp文件去z值的主要代码             progressBar1.Minimum = 0;             progressBar1.Maximum =...
  • hailiannanhai
  • hailiannanhai
  • 2016年12月28日 10:36
  • 511

ArcGIS中去除Z或M值的方法

ARCGIS数据处理中Z值或M值对线转面的操作造成了错误,本文介绍如何去除坐标中的Z值和M值......
  • shaxiaozilove
  • shaxiaozilove
  • 2016年10月21日 09:48
  • 4041

ArcEngine为几何图形Geometry设置Z值

代码如下: IZAwarePtr ipZAware = ipGeometry; if (NULL == ipZAware) { return; } ipZAware->put_ZAwa...
  • a_dev
  • a_dev
  • 2017年06月22日 17:06
  • 219

白话空间统计之四:P值和Z得分(下)

上篇讲了P值与Z得分的一些基本概念,大家其实也都知道,P值和Z得分其实是有一定的相应关系的,Z得分有正负两种结果,而P值有显著和不显著两种可能。 如果按照我们一般的思维,P值和Z得分就应该有4种组合...
  • allenlu2008
  • allenlu2008
  • 2015年08月03日 17:43
  • 5813

白话空间统计之四:P值和Z得分(中)

要说P、Z之前(本文的P、Z写法,请忽略大小写),我们先看看一个中学化学的概念:PH值。 另外,还要纠正一个说法,p 是一个值(p value),而z是一个得分(z scores),上篇文章中,称...
  • allenlu2008
  • allenlu2008
  • 2015年07月31日 16:23
  • 8303
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Engine中如何把没有Z值的Gemetry转为有Z值的Geomtry:报错"the geometry has no Z values"
举报原因:
原因补充:

(最多只允许输入30个字)