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

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

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

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

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

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

比如point ZM,Polyline ZM

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

ArcEngine会忽略Z值,

两步走,解决问题:

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

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

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

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

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

IPoint pFromPoint = new PointClass(); pFromPoint.PutCoords(fromX, fromY); pFromPoint.Z = formZ; IZAware fromZAware = pFromPoint as IZAware; fromZAware.ZAware = true; //IZ iFromZ = (IZ)pFromPoint; IPoint pToPoint = new PointClass(); pToPoint.PutCoords(toX, toY); pToPoint.Z = toZ; IZAware toZAware = pToPoint as IZAware; toZAware.ZAware = true; //IZ iToZ = (IZ)pToPoint; IPolyline pPolyline = new PolylineClass(); IZAware iPolylineAware = (IZAware)pPolyline; iPolylineAware.ZAware = true; pPolyline.FromPoint = pFromPoint; pPolyline.ToPoint = pToPoint;

顺便提一下ArcSDE C API中的此种问题,

一开始我以为比较简单,使用SE_layerinfo_set_3D就能解决问题,

但老有几条记录导入不了,使用field calculator查看一下图元的Z值才发现,

高程都变成整数了,我可以确定传入的数据是double型的,但是调用

SE_shape_generate_point和SE_shape_generate_line之后,生成的数据就是高程为整数

查了查,网上有代码说使用SE_coordref_set_precision设置坐标为高精度的,

我在创建layerinfo和插入shape的时候都进行了设置,却没有任何效果,只好暂时作罢..

20100723更新:

上面高程精度丢失问题解决了,

本来以为很简单,直接生成shape再用ArcCatalog导入到ArcSDE中,

用的时候发现,有几个图层死活导入不了,

提示错误是 ORA-01426: numeric overflow ,

于是还是得写代码直接导入,今天折腾了将近一天,想法是用C++直接调用SDE的C API来做,试试看值传入的有没有问题,

搞到下午,折腾的差不多了的时候,突然发现这个函数SE_coordref_set_z_by_range

使用高程的最大值最小值加0.001后传入这个函数,效果是立竿见影啊,立即搞定了,

囧的是,为了这个问题,午饭都没吃

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

  1. ArcGIS高程Z值的去除方法

    在ArcGIS中,我们常用的几何类型有点.线.面.体(体,在涉及三维的情况下使用),但在这之外,可能会遇到带ZM的类型,如图所示,面ZM,它与面类似,但比面多两个字段. 在编辑中查看草图属性可看到Z值 ...

  2. [译]LightSwitch 如何实现:在查询中创建和使用全局值(Eric Erhardt)

    原文标题:How Do I: Create and Use Global Values In a Query (Eric Erhardt) 原文链接地址:http://blogs.msdn.com/b ...

  3. c#.net中创建带图标的ListBox

    下面的代码实现了带图标的ListBoox的功能,可以直接拷贝即可运行.运行结果如下: using System; using System.Drawing; using System.Collecti ...

  4. java导出的文件名带正斜杠_如何在名称中创建带正斜杠的注册表项

    我需要创建以下注册表项 HKLM:\software\bmc software\control-m/agent 但由于在"agent"之前的正斜杠而出现问题 创建没有正斜杠的条目我 ...

  5. mysql 创建带参数的存储过程_在MySQL中创建带有IN和OUT参数的存储过程的方法

    在 MySQL 中创建储存过程的语法很难记,除非你经常跟储存过程打交道,原因很简单,语法不是什么小笑话.如果你通过命令行控制 MySQL,你需要记住准确的语法.一个快速示例可以很好的帮助你做到这点.在 ...

  6. arcgis数据的M/Z值设置问题

    如何利用arcpy设置数据空间参考中的M/Z值信息 空间参考和地理处理 1.M 分辨率(环境设置) 2.M 容差(环境设置) 3.输出包含 M 值(环境设置) 4.Z 分辨率(环境设置) 5.Z 容差 ...

  7. 在GitHub存储库中创建标记

    本文翻译自:Create a tag in a GitHub repository I have a repository in GitHub and I need to tag it. 我在GitH ...

  8. java list初始容量_java中快速创建带初始值的List和Map实例

    java中快速创建带初始值的List和Map实例 初始化一个List和Map对象并为期加入值的写法如下: List sList = new ArrayList(); sList.add("s ...

  9. java方法带参数返回值_Java方法中的参数太多,第6部分:方法返回

    java方法带参数返回值 在当前的系列文章中,我正在致力于减少调用Java方法和构造函数所需的参数数量,到目前为止,我一直专注于直接影响参数本身的方法( 自定义类型 , 参数对象 , 构建器模式 , ...

最新文章

  1. RxJava 教程第一部分:入门之 生命周期管理
  2. Android编译系统分析二:mm编译单个模块
  3. 国产手机都会用鸿蒙吗,华为鸿蒙系统已经发布,小米等国产手机会使用鸿蒙系统吗?来看看...
  4. “约见”面试官系列之常见面试题之第六十五篇之ajax如何解析jsonp(建议收藏)
  5. 每个程序员都必须知道的8种通用数据结构
  6. 2.3.3单链表的双向链表
  7. c语言成绩管理系统开题报告,学生信息管理系统,开题报告(共篇).doc
  8. phpcmsV9网页http路由静态化设置——URL地址规则
  9. HOJ 1157 SCUD Busters
  10. c语言订单管理,C语言课程设计订单管理系统方案.doc
  11. java 调用mysql存储过程实例_java调用mysql存储过程实例分析
  12. React从0到1--JSX样式
  13. 全球与中国车载摄像头模块市场现状及未来发展趋势
  14. 经验分享 | ENVI app store
  15. 星星之火,可以燎原|”分阶段“裂变带来1周1万+垂直户
  16. 演讲发言时太紧张怎么办?只需三招帮你彻底克服当众讲话前的紧张感
  17. codeforce 417D Cunning Gena (状压DP)
  18. 剑指offer-丑数(Java)
  19. 分享一些QQ常用的WEB接口(新)
  20. 22、R329刷机受阻和测试仿真环境demo

热门文章

  1. 新闻图片处理软件:Microsoft Office Picture Manager
  2. docker以及docker-compose 使用加速器部署
  3. docker的常用基本命令
  4. Linux系统时区时间修改
  5. decimal 后面的后缀M的意思
  6. STM32+Zigbee的使用
  7. 微信小程序网络请求之设置合法域名后不显示oss、cos的图片问题
  8. 唐山初中计算机考试知识点,唐山:2017小升初英语必考的十个知识点(推荐)...
  9. 互联网直播点播平台EasyDSS登录页广告位图片上传接口报错问题分析
  10. HTML广告位出售单页网页模板源码分享