ArcGIS Pro SDK (七)編輯 12 編輯模版

ArcGIS Pro SDK (七)編輯 12 編輯模版

文章目錄

  • ArcGIS Pro SDK (七)編輯 12 編輯模版
    • 1 在圖層上按名稱查找編輯模板
    • 2 查找屬于獨立表的表模板
    • 3 當前模板
    • 4 更改模板的默認編輯工具
    • 5 隱藏或顯示模板上的編輯工具
    • 6 使用圖層創建新模板
    • 7 使用表創建新表模板
    • 8 更新表模板
    • 9 創建注釋模板
    • 10 刪除表模板
    • 11 活動模板已更改

環境:Visual Studio 2022 + .NET6 + ArcGIS Pro SDK 3.0

1 在圖層上按名稱查找編輯模板

ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run(() =>{// 獲取模板var map = ArcGIS.Desktop.Mapping.MapView.Active.Map;if (map == null)return;var mainTemplate = map.FindLayers("main").FirstOrDefault()?.GetTemplate("Distribution");var mhTemplate = map.FindLayers("Manhole").FirstOrDefault()?.GetTemplate("Active");});

2 查找屬于獨立表的表模板

ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run(() =>{var map = ArcGIS.Desktop.Mapping.MapView.Active.Map;if (map == null)return;// 獲取特定的表模板var tableTemplate = map.FindStandaloneTables("Address Points").FirstOrDefault()?.GetTemplate("Residences");// 獲取獨立表的所有模板var ownersTableTemplates = map.FindStandaloneTables("Owners").FirstOrDefault()?.GetTemplates();var statisticsTableTemplates = MapView.Active.Map.GetStandaloneTablesAsFlattenedList().First(l => l.Name.Equals("Trading Statistics")).GetTemplates();});

3 當前模板

EditingTemplate template = EditingTemplate.Current;

4 更改模板的默認編輯工具

public Task ChangeTemplateDefaultToolAsync(ArcGIS.Desktop.Mapping.FeatureLayer flayer,string toolContentGUID, string templateName)
{return ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run(() =>{// 通過名稱從圖層中檢索編輯模板var template = flayer?.GetTemplate(templateName) as ArcGIS.Desktop.Editing.Templates.EditingTemplate;// 獲取圖層的定義var layerDef = flayer?.GetDefinition() as ArcGIS.Core.CIM.CIMFeatureLayer;if ((template == null) || (layerDef == null))return;if (template.DefaultToolID != this.ID){bool updateLayerDef = false;if (layerDef.AutoGenerateFeatureTemplates){layerDef.AutoGenerateFeatureTemplates = false;updateLayerDef = true;}// 檢索 CIM 編輯模板定義var templateDef = template.GetDefinition();// 分配工具 DAML 定義中的 GUID,例如// <tool id="TestConstructionTool_SampleSDKTool" categoryRefID="esri_editing_construction_polyline" ….>//   <tooltip heading="">Tooltip text<disabledText /></tooltip>//   <content guid="e58239b3-9c69-49e5-ad4d-bb2ba29ff3ea" />// </tool>// 然后 toolContentGUID 將是 "e58239b3-9c69-49e5-ad4d-bb2ba29ff3ea"// 在 2.x 版本中 -//templateDef.ToolProgID = toolContentGUID;templateDef.DefaultToolGUID = toolContentGUID;// 設置定義template.SetDefinition(templateDef);// 也更新圖層定義if (updateLayerDef)flayer.SetDefinition(layerDef);}});
}

5 隱藏或顯示模板上的編輯工具

QueuedTask.Run(() =>{// 隱藏圖層上的所有工具,除了線工具var featLayer = MapView.Active.Map.FindLayers("Roads").First();var editTemplates = featLayer.GetTemplates();var newCIMEditingTemplates = new List<CIMEditingTemplate>();foreach (var et in editTemplates){// 初始化模板,通過激活默認工具et.ActivateDefaultToolAsync();var cimEditTemplate = et.GetDefinition();// 獲取此模板上的可見工具var allTools = et.ToolIDs.ToList();// 添加此模板上的隱藏工具allTools.AddRange(cimEditTemplate.GetExcludedToolIDs().ToList());// 隱藏所有工具,然后允許線工具// 在 2.x 版本中 -//allTools.AddRange(cimEditTemplate.GetExcludedToolDamlIds().ToList());allTools.AddRange(cimEditTemplate.GetExcludedToolIDs().ToList());// 在 2.x 版本中 - //cimEditTemplate.SetExcludedToolDamlIds(allTools.ToArray());//cimEditTemplate.AllowToolDamlID("esri_editing_SketchLineTool");cimEditTemplate.SetExcludedToolIDs(allTools.ToArray());cimEditTemplate.AllowToolID("esri_editing_SketchLineTool");newCIMEditingTemplates.Add(cimEditTemplate);}// 更新圖層模板var layerDef = featLayer.GetDefinition() as CIMFeatureLayer;// 將 AutoGenerateFeatureTemplates 設置為 false 以使模板更改生效layerDef.AutoGenerateFeatureTemplates = false;layerDef.FeatureTemplates = newCIMEditingTemplates.ToArray();featLayer.SetDefinition(layerDef);});

6 使用圖層創建新模板

var layer = MapView.Active.Map.GetLayersAsFlattenedList().OfType<FeatureLayer>().FirstOrDefault();
if (layer == null)return;
QueuedTask.Run(() =>{var insp = new Inspector();insp.LoadSchema(layer);insp["Field1"] = value1;insp["Field2"] = value2;insp["Field3"] = value3;var tags = new[] { "Polygon", "tag1", "tag2" };// 使用 daml-id 設置默認工具 string defaultTool = "esri_editing_SketchCirclePolygonTool";// 工具過濾器是要過濾掉的工具var toolFilter = new[] { "esri_editing_SketchTracePolygonTool" };// 創建一個新模板  var newTemplate = layer.CreateTemplate("My new template", "description", insp, defaultTool, tags, toolFilter);});

7 使用表創建新表模板

var table = MapView.Active.Map.GetStandaloneTablesAsFlattenedList().FirstOrDefault();
if (table == null)return;
QueuedTask.Run(() =>{var tableTemplate = table.GetTemplate("Template1");var definition = tableTemplate.GetDefinition();definition.Description = "New definition";definition.Name = "New name";// 使用此定義創建新表模板table.CreateTemplate(definition);// 也可以使用此擴展方法創建新表模板。可以像使用 layer.CreateTemplate 方法一樣使用此方法。table.CreateTemplate("New template name", "Template description", tags: new string[] { "tag 1", "tag 2" });});

8 更新表模板

QueuedTask.Run(() =>{var tableTemplate = table.GetTemplate("Template1");var definition = tableTemplate.GetDefinition();definition.Description = "New definition";definition.Name = "New name";// 更新定義tableTemplate.SetDefinition(definition);});

9 創建注釋模板

// 獲取注釋圖層
AnnotationLayer annoLayer = MapView.Active.Map.GetLayersAsFlattenedList().OfType<AnnotationLayer>().FirstOrDefault();
if (annoLayer == null)return;QueuedTask.Run(() =>{Inspector insp = null;// 獲取注釋要素類var fc = annoLayer.GetFeatureClass() as ArcGIS.Core.Data.Mapping.AnnotationFeatureClass;// 獲取包含標簽、符號的要素類 CIM 定義var cimDefinition = fc.GetDefinition() as ArcGIS.Core.Data.Mapping.AnnotationFeatureClassDefinition;var labels = cimDefinition.GetLabelClassCollection();var symbols = cimDefinition.GetSymbolCollection();// 確保有標簽和符號if ((labels.Count == 0) || (symbols.Count == 0))return;// 查找所需的標簽類// 通常會使用子類型名稱或其他特征// 在此情況下,只使用第一個var label = labels[0];// 每個標簽都有一個 textSymbol// symbolName 應該是要使用的 symbolIDvar symbolName = label.TextSymbol.SymbolName;int symbolID = -1;if (!int.TryParse(symbolName, out symbolID)){// int.TryParse 失敗 - 嘗試在符號集合中查找 symbolNameforeach (var symbol in symbols){if (symbol.Name == symbolName){symbolID = symbol.ID;break;}}}// 沒有符號?if (symbolID == -1)return;// 加載架構insp = new Inspector();insp.LoadSchema(annoLayer);// 可以使用 inspector[fieldName] 方法分配這些字段// 這些字段在注釋架構中保證存在insp["AnnotationClassID"] = label.ID;insp["SymbolID"] = symbolID;// 設置一些附加的注釋屬性AnnotationProperties annoProperties = insp.GetAnnotationProperties();annoProperties.FontSize = 36;annoProperties.TextString = "My Annotation feature";annoProperties.VerticalAlignment = VerticalAlignment.Top;annoProperties.HorizontalAlignment = HorizontalAlignment.Justify;insp.SetAnnotationProperties(annoProperties);var tags = new[] { "Annotation", "tag1", "tag2" };// 使用 daml-id 而不是 guidstring defaultTool = "esri_editing_SketchStraightAnnoTool";// 工具過濾器是要過濾掉的工具var toolFilter = new[] { "esri_editing_SketchCurvedAnnoTool" };// 創建一個新模板var newTemplate = annoLayer.CreateTemplate("new anno template", "description", insp, defaultTool, tags, toolFilter);});

10 刪除表模板

var table = MapView.Active.Map.GetStandaloneTablesAsFlattenedList().FirstOrDefault();
if (table == null)return;
QueuedTask.Run(() =>{var tableTemplate = table.GetTemplate("Template1");// 刪除表模板table.RemoveTemplate(tableTemplate);// 通過名稱刪除模板table.RemoveTemplate("Template2");});

11 活動模板已更改

ArcGIS.Desktop.Editing.Events.ActiveTemplateChangedEvent.Subscribe(OnActiveTemplateChanged);async void OnActiveTemplateChanged(ArcGIS.Desktop.Editing.Events.ActiveTemplateChangedEventArgs args)
{// 如果傳入的模板為空則返回if (args.IncomingTemplate == null)return;// 為圖層地圖中的 Freeway 模板激活兩點線工具if (args.IncomingTemplate.Name == "Freeway" && args.IncomingMapView.Map.Name == "Layers")await args.IncomingTemplate.ActivateToolAsync("esri_editing_SketchTwoPointLineTool");
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/39769.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/39769.shtml
英文地址,請注明出處:http://en.pswp.cn/web/39769.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

how to use Xcode

Xcode IDE概覽 Xcode 頁面主要分為以下四個部分&#xff1a; 工具欄&#xff08;ToolBar area&#xff09;&#xff1a;主要負責程序運行調試&#xff0c;編輯器功能區域的顯示 / 隱藏&#xff1b;編輯區&#xff08;Editor area&#xff09;&#xff1a;代碼編寫區域&#xf…

140. 好二叉樹(卡碼網周賽第二十四期(23年騰訊音樂筆試真題))

140. 好二叉樹&#xff08;卡碼網周賽第二十四期&#xff08;23年騰訊音樂筆試真題&#xff09;&#xff09; 題目描述 小紅定義一個二叉樹為“好二叉樹”&#xff0c;當且僅當該二叉樹所有節點的孩子數量為偶數(0 或者 2)。 小紅想知道&#xff0c;n&#xff08;1< n <…

vue table表格 ( parseTime-格式化時間)

<el-table-column label"發布時間" width"420px" prop"bidPublishDatetime"><template slot-scope"scope"><span>{{ parseTime(scope.row.bidPublishDatetime, {y}-{m}-{d}) }}</span></template></…

若依代碼生成

在若依框架中&#xff0c;以下是這些代碼的作用及它們在程序運行中的關聯方式&#xff1a; 1. domain.java&#xff1a;通常用于定義實體類&#xff0c;它描述了與數據庫表對應的對象結構&#xff0c;包含屬性和對應的訪問方法。作用是封裝數據&#xff0c;為數據的操作提供基…

Richtek立锜科技車規級器件選型

芯片按照應用場景&#xff0c;通常可以分為消費級、工業級、車規級和軍工級四個等級&#xff0c;其要求依次為軍工>車規>工業>消費。 所謂“車規級元器件”--即通過AEC-Q認證 汽車不同于消費級產品&#xff0c;會運行在戶外、高溫、高寒、潮濕等苛刻的環境&#xff0c…

澳藍榮耀時刻,6款產品入選2024年第一批《福州市名優產品目錄》

近日&#xff0c;福州市工業和信息化局公布2024年第一批《福州市名優產品目錄》&#xff0c;澳藍自主研發生產的直接蒸發冷卻空調、直接蒸發冷卻組合式空調機組、間接蒸發冷水機組、高效間接蒸發冷卻空調機、熱泵式熱回收型溶液調濕新風機組、防火濕簾6款產品成功入選。 以上新…

飛利浦的臺燈值得入手嗎?書客、松下多維度橫評大分享!

隨著生活品質的持續提升&#xff0c;人們對于健康的追求日益趨向精致與高端化。在這一潮流的推動下&#xff0c;護眼臺燈以其卓越的護眼功效與便捷的操作體驗&#xff0c;迅速在家電領域嶄露頭角&#xff0c;更成為了眾多家庭書房中不可或缺的視力守護者。這些臺燈以其精心設計…

(vue)eslint-plugin-vue版本問題 安裝axios時npm ERR! code ERESOLVE

(vue)eslint-plugin-vue版本問題 安裝axios時npm ERR! code ERESOLVE 解決方法&#xff1a;在命令后面加上 -legacy-peer-deps結果&#xff1a; 解決參考&#xff1a;https://blog.csdn.net/qq_43799531/article/details/131403987

【C語言】指針剖析(完結)

©作者:末央&#xff06; ©系列:C語言初階(適合小白入門) ©說明:以凡人之筆墨&#xff0c;書寫未來之大夢 目錄 回調函數概念回調函數的使用 - qsort函數 sizeof/strlen深度理解概念手腦并用1.sizeof-數組/指針專題2.strlen-數組/指針專題 指針面試題專題 回調函…

云服務器linux系統安裝配置docker

在我們拿到一個純凈的linux系統時&#xff0c;我需要進行一些基礎環境的配置 &#xff08;如果是云服務器可以用XShell遠程連接&#xff0c;如果連接不上可能是服務器沒開放22端口&#xff09; 下面是配置環境的步驟 sudo -s進入root權限&#xff1a;退出使用exit sudo -i進入…

process.env.VUE_APP_BASE_API

前端&#xff1a;process.env.VUE_APP_BASE_API 在Vue.js項目中&#xff0c;特別是使用Vue CLI進行配置的項目&#xff0c;process.env.VUE_APP_BASE_API 是一個環境變量的引用。Vue CLI允許開發者在不同環境下配置不同的環境變量&#xff0c;這對于管理API基礎路徑、切換開發…

MySQL調優的五個方向

客戶端與連接層的優化&#xff1a;調整客戶端DB連接池的參數和DB連接層的參數。MySQL結構的優化&#xff1a;合理的設計庫表結構&#xff0c;表中字段根據業務選擇合適的數據類型、索引。MySQL參數優化&#xff1a;調整參數的默認值&#xff0c;根據業務將各類參數調整到合適的…

【leetcode78-81貪心算法、技巧96-100】

貪心算法【78-81】 技巧【96-100】

谷粒商城-個人筆記(集群部署篇二)

前言 ?學習視頻&#xff1a;?Java項目《谷粒商城》架構師級Java項目實戰&#xff0c;對標阿里P6-P7&#xff0c;全網最強?學習文檔&#xff1a; 谷粒商城-個人筆記(基礎篇一)谷粒商城-個人筆記(基礎篇二)谷粒商城-個人筆記(基礎篇三)谷粒商城-個人筆記(高級篇一)谷粒商城-個…

【數據結構】02.順序表

一、順序表的概念與結構 1.1線性表 線性表&#xff08;linear list&#xff09;是n個具有相同特性的數據元素的有限序列。線性表是?種在實際中廣泛使用的數據結構&#xff0c;常見的線性表&#xff1a;順序表、鏈表、棧、隊列、字符串… 線性表在邏輯上是線性結構&#xff0…

GEE計算遙感生態指數RSEI

目錄 RESI濕度綠度熱度干度源代碼歸一化函數代碼解釋整體的代碼功能解釋:導出RSEI計算結果參考文獻RESI RSEI = f (Greenness,Wetness,Heat,Dryness)其遙感定義為: RSEI = f (VI,Wet,LST,SI)式中:Greenness 為綠度;Wetness 為濕度;Thermal為熱度;Dryness 為干度;VI 為植被指數…

【多媒體】Java實現MP4和MP3音視頻播放器【JavaFX】【音視頻播放】

在Java中播放音視頻可以使用多種方案&#xff0c;最常見的是通過Swing組件JFrame和JLabel來嵌入JMF(Java Media Framework)或Xuggler。不過&#xff0c;JMF已經不再被推薦使用&#xff0c;而Xuggler是基于DirectX的&#xff0c;不適用于跨平臺。而且上述方案都需要使用第三方庫…

拒絕信息差!一篇文章說清Stable Diffusion 3到底值不值得沖

前言 就在幾天前&#xff0c;Stability AI正式開源了Stable Diffusion 3 Medium&#xff08;以下簡稱SD3M&#xff09;模型和適配CLIP文件。這家身處風雨飄搖中的公司&#xff0c;在最近的一年里一直處于破產邊緣&#xff0c;就連創始人兼CEO也頂不住壓力提桶跑路。 即便這樣&…

[leetcode]minimum-absolute-difference-in-bst 二叉搜索樹的最小絕對差

. - 力扣&#xff08;LeetCode&#xff09; /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(null…

java如何在字符串中間插入字符串

java在字符串中插入字符串&#xff0c;需要用到insert語句 語法格式為 sbf.insert(offset,str) 其中,sbf是任意字符串 offset是插入的索引 str是插入的字符串 public class Insert {public static void main(String[] args) {// 將字符串插入到指定索引StringBuffer sbfn…