• 在ArcEngine中创建带高程Z值的点和线图层


    在ArcEngine中创建带高程Z值的点和线图层

     

    管线和其附属物的坐标数据都是带有Z值的

    而且有些情况下,一个管段的两个端点的x,y值一模一样(垂直的管段)

    这样的线,在直接生成shape图层的时候,就会产生问题,特别是

    使用ArcSDE的C API直接创建到表中的时候你会发现,这样的数据是生成不了的

    解决的方法就是为图层添加Z值,一个图层是否带有高程值,可以在ArcMap中通过查看

    图层的属性表得知,带有Z值的图元,在Shape字段中,其类型后面会有个ZM字样

    比如point ZM,Polyline ZM

    带高程值的图元Shape字段显示状态

    创建带高程Z值的图层时,只设置Point的Z属性是没有用的,默认情况下

    ArcEngine会忽略Z值,

    两步走,解决问题:

    第一步:创建Shape图层,使用IFeatureWorkspace.CreateFeatureClass

    此函数的第二个参数是IFields,字段定义,在字段定义中对Shape字段的类型

    使用IGeometryDefEdit.HasZ_2 = true指定其包含Z值,

    1. IGeometryDef pGeometryDef = new GeometryDef(); // 为esriFieldTypeGeometry类型的字段创建几何定义,包括类型和空间参照   
    2.                     IGeometryDefEdit pGeometryDefEdit = pGeometryDef as IGeometryDefEdit;  
    3.                     pGeometryDefEdit.GeometryType_2 = geometryType;  
    4.                     pGeometryDefEdit.HasZ_2 = true;//图层是有高程值的  
    5.                     pGeometryDefEdit.SpatialReference_2 = axmapcontrol.SpatialReference;                      
    6.                     pFieldEdit.GeometryDef_2 = pGeometryDef;  
     

    第二步:添加图元,需要使用IZAware接口指定其ZAware为true

    1. IPoint pFromPoint = new PointClass();  
    2. pFromPoint.PutCoords(fromX, fromY);                                                             
    3.                                 pFromPoint.Z = formZ;  
    4.                                 IZAware fromZAware = pFromPoint as IZAware;  
    5.                                 fromZAware.ZAware = true;  
    6.                                 //IZ iFromZ = (IZ)pFromPoint;  
    7.                                 IPoint pToPoint = new PointClass();  
    8.                                 pToPoint.PutCoords(toX, toY);                                  
    9.                                 pToPoint.Z = toZ;  
    10.                                 IZAware toZAware = pToPoint as IZAware;  
    11.                                 toZAware.ZAware = true;  
    12.                                 //IZ iToZ = (IZ)pToPoint;  
    13.                                   
    14.                                   
    15.                                 IPolyline pPolyline = new PolylineClass();  
    16.                                 IZAware iPolylineAware = (IZAware)pPolyline;  
    17.                                 iPolylineAware.ZAware = true;  
    18.                                 pPolyline.FromPoint = pFromPoint;  
    19.                                 pPolyline.ToPoint = pToPoint;  
     

     原文地址:http://blog.csdn.net/nickwar/article/details/5752679

  • 相关阅读:
    spring的常用配置
    aop切入点表达式
    代理模式
    hibernate的常用配置
    正则表达式
    Java配置
    性能提升
    创建vue3 项目
    manjaro
    单调队列
  • 原文地址:https://www.cnblogs.com/gisoracle/p/16010911.html
Copyright © 2020-2023  润新知