符号层绘图使用Arc GIS Pro SDK for .NET

1008
3.
06-24-2021 06:02 am
JFr87
通过
新贡献者II

你好,

关于使用Arc GIS Pro SDK for .NET进行符号层绘制,我有两个问题:

  1. 如何启用符号层绘图(相当于下面的标记设置)?
  2. 我想在组层中设置符号的绘制顺序,如下面的截图所示。背景:在很多情况下,一些符号会与其他符号重叠。改变组层中各层的顺序是行不通的。如果我尝试这样做,那么其他符号就不再可见了。
    因此,我想设置符号的绘制顺序。是否有一种方法可以通过使用ArcGIS Pro SDK来实现这一点?

jfr87_0 - 1624539564733. - png

提前谢谢你。

0荣誉
3回复
CharlesMacleod
亚博搜索yabovip28点com

我们在公共API中没有直接支持这一点,至少,我认为我们可以在2.9的公共API中添加启用/禁用符号层绘图(SLD)。

按符号层配置绘图顺序不是简单的这确实应该通过公共API和CIM来尝试——尽管这是有可能的——代码会非常脆弱。对符号的任何改变,例如改变一个特征符号定义或改变一个唯一的值类,都可能破坏任何外接程序代码,这些代码对给定层的符号和渲染器的结构进行了假设。

我建议您继续使用UI配置SLD顺序,当您按照自己的喜好配置了符号时,将该层保存为层文件(.lyrx)。

这是一个简单的过程,通过API读取层文件,并将具有正确SLD定义的渲染器应用到相同模式的现有层- ProSnippet:从图层文件中应用符号到一个图层, -或简单地创建一个基于层文件的新层-ProSnippet:从lyrx文件创建层

与此同时,假设您确实有一个带有符号层绘图的层,而不是使用专用的公共API方法来启用/禁用SLD配置(例如使用我上面提到的两种技术之一)-你可以使用下面的代码启用/禁用它:

在我的例子中,我为一个名为“rivers”的特征层开启/关闭SLD。然而,在我对这段代码的测试中,尽管在层上切换了SLD,但符号UI却切换了_not_更新SLD窗格上的“启用符号层绘图”复选框。所以我们在Pro中有一个bug,我们也需要解决。请注意这一点。我使用的是Pro 2.8版本。

protected override void OnClick() {var rivers = mapview . activemap . getlayersasflatedlist (). oftype ()。FirstOrDefault(l => l. name == "rivers");If (rivers == null)返回;QueuedTask.Run() => {var def = rivers.GetDefinition() as CIMFeatureLayer;/ / def。如果符号层绘图没有//之前配置if (def.SymbolLayerDrawing != null){//打开/关闭符号层绘图//TODO: UI中的Bug。“启用符号层绘图”复选框不更新def.SymbolLayerDrawing.UseSymbolLayerDrawing = !rivers.SetDefinition(def);}

melihguldaş
通过
新的因素

你可以将代码更新到3.0,如何在代码中使用高级掩码层和掩码层定义

0荣誉
JFr87
通过
新贡献者II

谢谢你的回复。

该代码片段将对我的外接程序有用。

关于我的第二个问题,我要和一些同事商量一下,今后该怎么做。也许在不久的将来(接下来的两周左右)我还会有另一个关于这个话题的问题,所以我想把这个帖子保留一段时间。

0荣誉