zoukankan      html  css  js  c++  java
  • Engine中如何把没有Z值的Gemetry转为有Z值的Geomtry:报错"the geometry has no Z values"

    在用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值的,也是同样的道理。

  • 相关阅读:
    MVP模式与MVVM模式
    webpack的配置处理
    leetcode 287 Find the Duplicate Number
    leetcode 152 Maximum Product Subarray
    leetcode 76 Minimum Window Substring
    感知器算法初探
    leetcode 179 Largest Number
    leetcode 33 Search in Rotated Sorted Array
    leetcode 334 Increasing Triplet Subsequence
    朴素贝叶斯分类器初探
  • 原文地址:https://www.cnblogs.com/adodo1/p/4327386.html
Copyright © 2011-2022 走看看