zoukankan      html  css  js  c++  java
  • 爆出错误:The Geometry has no Z values

    ArcGis添加地图标注,爆出错误:The Geometry has no Z values

    解决方法如下:

    public bool AddFeature( ESRI.ArcGIS.Geometry.IGeometry geometry,System.Collections.Generic.Dictionary<string ,object> properties)

            {

                try

                {

                    ESRI.ArcGIS.Geodatabase.IFeature feature = _featureLayer.FeatureClass.CreateFeature();

                    int index;

                    index = feature.Fields.FindField("Shape");

                    IGeometryDef pGeometryDef;

                    pGeometryDef = feature.Fields.get_Field(index).GeometryDef as IGeometryDef;

                    if (pGeometryDef.HasZ)

                    {

                        IZAware pZAware = (IZAware)geometry;

                        pZAware.ZAware = true;

                        //IZ iz1 = (IZ)geometry;

                        //iz1.SetConstantZ(0);  //将Z值设置为0

                        IPoint point = (IPoint)geometry;

                        point.Z = 0;

                    }

                    else

                    {

                        IZAware pZAware = (IZAware)geometry;

                        pZAware.ZAware = false;

                    }

                    if (pGeometryDef.HasM)

                    {

                        IMAware pMAware = (IMAware)geometry;

                        pMAware.MAware = true;

                    }

                    else

                    {

                        IMAware pMAware = (IMAware)geometry;

                        pMAware.MAware = false;

                    }

                    feature.Shape = geometry;

                    foreach (string key in properties.Keys)

                    {

                        SetFeatueProperty(feature, key, properties[key]);

                    }

                     

                    feature.Store();  

                    return true;

                }

                catch (Exception ee)

                {

                    return false;

                }

            }

    网上有一篇文章,参考:http://xxy12300.blog.163.com/blog/static/2634345820097231939796/

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

    2009-08-02 15:19:39|  分类: GIS开发|字号 订阅

     
     
    Engine中如何把没有Z值的Gemetry转为有Z值的Geomtry:报错the geometry has no Z values - sunfowler - Sunfowler
    在用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值的,也是同样的道理。

     
  • 相关阅读:
    今天英语有何新收获?
    今天了解了解了外包这一行业
    今天英语有何新收获?
    sicp 练习1.7
    今天英语有何新收获
    今天英语有何新收获?
    反射(初尝)
    初学正则表达式
    sicp 练习1.8 【有点疑惑】
    [tip]Windows filename MAX_PATH limitation
  • 原文地址:https://www.cnblogs.com/xianyin05/p/3024562.html
Copyright © 2011-2022 走看看