在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值,

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
ArcEngine实现要素图层的唯一符号化,您可以按照以下步骤进行操作: 1. 打开要素类并获取要素集合。使用IFeatureClass接口打开要素类,并使用IFeatureCursor接口获取要素集合。 ```csharp IFeatureClass featureClass = ...; // 打开要素类 IFeatureCursor featureCursor = featureClass.Search(null, false); // 获取要素集合 ``` 2. 创建唯一符号化渲染器。使用ISimpleRenderer接口创建一个新的SimpleRenderer对象,并使用IUniqueValueRenderer接口将其转换为唯一符号化渲染器。 ```csharp ISimpleRenderer simpleRenderer = new SimpleRenderer(); IUniqueValueRenderer uniqueValueRenderer = simpleRenderer as IUniqueValueRenderer; ``` 3. 设置字段和符号。指定用于唯一分类的字段,并为每个唯一设置符号。 ```csharp uniqueValueRenderer.FieldCount = 1; // 设置字段数量 uniqueValueRenderer.set_Field(0, "FieldName"); // 设置用于分类的字段名称 // 为每个唯一设置符号 ISymbol symbol = ...; // 设置符号 uniqueValueRenderer.AddValue("Value1", "", symbol); // 添加第一个唯一和对应的符号 uniqueValueRenderer.AddValue("Value2", "", symbol); // 添加第二个唯一和对应的符号 // ... // 可以重复上述步骤为更多唯一设置符号 ``` 4. 应用渲染器到图层。获取要素图层对象,并将唯一符号化渲染器应用到图层的渲染器属性。 ```csharp IFeatureLayer featureLayer = ...; // 获取要素图层对象 featureLayer.Renderer = uniqueValueRenderer as IFeatureRenderer; // 应用渲染器到图层 ``` 5. 刷新地图并显示唯一符号化的结果。调用IMap接口的Refresh方法刷新地图,并使用IActiveView接口的Refresh和PartialRefresh方法来更新显示。 ```csharp IMap map = ...; // 获取地图对象 map.Refresh(); // 刷新地图 IActiveView activeView = map as IActiveView; activeView.Refresh(); // 刷新活动视图 activeView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); // 部分刷新,更新地理数据 ``` 请根据您的具体需求自行填充代码的缺失部分,例如打开要素类、设置字段和符号等。希望这些信息对您有所帮助!如有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值