做这个工具的原因是,想做一个湘源控规用地颜色的.stylx文件。

但是湘源所有用地类型太多了,如下图所示,足足110类。这么多颜色的面符号,一个个做到.stylx文件里不得累死?

好在Pro对CAD文件的支持比较好,我们直接加载CAD的Polygon到Pro中,Polygon已经按图层分好了,并且颜色也与CAD中一致(仔细对一下CAD与Pro中相同图层的RGB颜色,还是能发现RGB值有一些出入,但是颜色大致是对的,不清楚有没有办法能保持完全一致。上面的示意图中Pro界面内用地颜色较浅,是因为Pro自动为所有CAD面图层加了50%的透明度,这也是之后的步骤中需要处理的)。

一、Pro中取消CAD图层的透明度

要在Pro中手动取消这110个CAD图层的透明度也是一件美事。。。麻烦事,好在之前已经捣鼓过怎么借助代码修改了。

ArcGIS Pro脚本工具(6)——修复CAD图层数据源_学学GIS的博客-CSDN博客_arcgis脚本工具Pro对CAD文件的支持显而易见的优于ArcMap。虽然都是将CAD识别成点、线、面、多面体和注记5大类,但是当我们拖动其中一类到Pro中时,Pro自动将其分图层显示,并且图层的颜色与CAD一致。nice!但是尴尬的是,一旦CAD文件移动了位置或者改了名字,就是一长列的红色惊叹号警告。有经验的使用者可能期望修复一个图层后,其他图层自动修复,但是很可惜这对这些CAD图层无效。那我重新拖CAD进来不就成了?可能不太行,因为已经在Pro里改过一些图层的符号系统了,重新拖CAD进来就得重新做很多图层的符https://blog.csdn.net/baidu_28157641/article/details/125480952使用格式化面图层工具取消透明度之后,城规用地色块前后的对比图如下。

二、Pro中新建.stylx样式文件

可以新建.stylx样式文件,也可以使用已存在的.stylx样式文件(如果使用已有样式文件,请先判断CAD图层符号加入后是否会出现名称、键值的冲突)。

为了将CAD面图层符号写入.stylx样式文件,我们需要对.stylx有基本的认识。.stylx实际上是一个SQLite数据库,我们可以使用Navicat来连接、查看。

数据库的ITEMS表纪录了每个符号的ID、CLASS(点、线、面等)、CATEGORY(分级)、NAME、TAGS(标签)、CONTENT(json字符串)、KEY(键值)。除ID外,符号的其他属性都可在Pro中查看和修改。

学习一下Python中读写SQLite数据库的语法,我们就能向.stylx样式文件写入符号了。

sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块 — Python 3.7.13 文档https://docs.python.org/zh-cn/3.7/library/sqlite3.html

三、从简单渲染图层组生成样式符号

脚本的主要处理流程为:先读取每个CAD图层的名称、符号,再将这些信息写入到.stylx样式文件(SQLite数据库)中。CAD图层名称使用ArcPy便能获取,而获取图层符号则需要使用Python CIM,因为这样能直接获取到可写入CONTENT属性的json字符串。

Python脚本

import arcpy
import sqlite3aprx = arcpy.mp.ArcGISProject(r"CURRENT")
m = aprx.activeMap
groupLayer = arcpy.GetParameterAsText(0)
lyrs = m.listLayers()stylx_path = arcpy.GetParameterAsText(1)stylxDB = sqlite3.connect(stylx_path)cursor = stylxDB.cursor()category_switch = {4: "一级类",5: "二级类",6: "三级类", }class_switch = {"Point": 3,"Polyline": 4,"Polygon": 5}for lyr in lyrs:longName = lyr.longNameif longName.startswith(groupLayer) and lyr.isGroupLayer == False:type = arcpy.Describe(lyr).featureClass.shapeTypeclassValue = class_switch.get(type)sym = lyr.symbologyif sym.renderer.type == 'SimpleRenderer':try:cim = lyr.getDefinition("V2").renderer.symbol.symbolcontent = arcpy.cim.GetJSONForCIMObject(cim, "V2")name = lyr.namekey = lyr.namecategory = category_switch.get(len(name))new_row = (classValue, category, name, content, key)cursor.execute('INSERT INTO ITEMS(CLASS, CATEGORY, NAME, CONTENT, KEY) VALUES(?,?,?,?)', new_row)stylxDB.commit()arcpy.AddMessage("√ "+lyr.name)except:arcpy.AddMessage("× "+lyr.name)stylxDB.close()

参数设置

效果演示

工具说明

  1. 只适合于ArcGIS Pro
  2. 运行工具前,请切换到地图视图
  3. 该工具可批量生成点、线、面3种类型的样式符号

ArcGIS Pro脚本工具(10)——从图层生成.stylx样式符号相关推荐

  1. ArcGIS Pro脚本工具(6)——修复CAD图层数据源

    Pro对CAD文件的支持显而易见的优于ArcMap.虽然都是将CAD识别成点.线.面.多面体和注记5大类,但是当我们拖动其中一类到Pro中时,Pro自动将其分图层显示,并且图层的颜色与CAD一致.ni ...

  2. ArcGIS Pro脚本工具(4)——连续擦除

    ArcGIS Pro 模型构建器(2)--创建连续擦除模型_圈圈的圈圈的博客-CSDN博客ArcGIS自带的擦除工具功效大概是这样:100-10=90即使使用擦除工具的批处理,效果也只限于这样:100 ...

  3. ArcGIS Pro脚本工具(5)——排序后删除重复项

    需求描述 每个市有多个高速出入口,每个高速出入口与所在市的市政府的距离已经包含在属性表中,如何留下每个市里距离市政府最近,也就是NEAR_DIST值最小的那个高速出入口呢? 解决思路 ArcGIS自带 ...

  4. ArcGIS Pro脚本工具(14)——裁剪文件夹或数据库(保留文件夹结构)

    有网友私信,希望能做这个功能,安排... 作为规划人,很自然就能想到这个功能的应用场景.比如有一个文件夹,包含了一个县的各种shp要素类和gdb数据库,现在需要从中抽取一个乡镇的范围出来,并且还需要做 ...

  5. 【ArcGIS自定义脚本工具】批量执行栅格计算器

    文章目录 一.功能介绍 二.脚本代码 三.工具参数 四.用例 4.1 批量单位换算 4.2 批量计算植被覆盖度 4.3 批量填充空值 系列文章目录: ArcGIS自定义脚本工具 一.功能介绍 功能 将 ...

  6. 【ArcGIS自定义脚本工具】栅格统计频率和累计频率

    文章目录 一.功能介绍 二.脚本代码 三.工具参数 四.工具界面 系列文章目录: ArcGIS自定义脚本工具 一.功能介绍 在基于像元二分模型利用植被指数计算植被覆盖度的过程中,通常以某一累计频率值对 ...

  7. ae批量修改字体_AE脚本-多个文字图层批量修改样式 Dojo Text Updater v1.0

    [脚本介绍] 使用脚本可以批量更新修改多个文字层的样式,还可以自定义选择哪些图层是否更新.允许您更新合成或项目中的多个文本图层以匹配另一个文本图层的文本样式.此脚本使快速文本样式编辑变得轻而易举,具有 ...

  8. 【ArcGIS自定义脚本工具】利用聚合方法批量生成分辨率降低版本的栅格

    文章目录 一.功能介绍 二.脚本代码 三.工具参数 四.工具界面 五.使用例 5.1.参数设置 5.2.运行结果 5.3.聚合与最近邻重采样的结果对比 系列文章目录: ArcGIS自定义脚本编程 一. ...

  9. 【ArcGIS自定义脚本工具】批量重投影栅格脚本

    文章目录 〇.引言 二.脚本代码 三.工具参数 四.工具界面 〇.引言 本文主要是分享本人在编写ArcGIS自定义脚本的一些经验,内容包括各脚本的界面.代码.设置等.涉及到的大多数脚本针对批处理栅格数 ...

  10. 第三章 ArcGIS Pro创建 python 脚本工具(五)

    其实整个第三章介绍的内容很少,真正的实验步骤,一节左右就可以概述处理,只是原书作者对于基础与一些信息都给了介绍,所以内容才会显得较多.关于新建自定义脚本工具,我觉得简单的来说,步骤就是创建脚本(如何写 ...

最新文章

  1. 深度学习可解释性问题如何解决?图灵奖得主Bengio有一个解
  2. 线性分类器与非线性分类器的区别是什么?有哪些优劣特性?
  3. ValueError: output array is read-only
  4. QT连接Postgresql数据库
  5. LabVIEW2015安装教程
  6. UniDBGrid增加显示记录数的label及隐藏refresh按钮
  7. MOSS 2010 实现域账户 组员在线交流 Live Chat
  8. Reset Password Windows Server 2008 r2
  9. SpringMVC中@RequestMapping参数设置
  10. SQL求连续活跃天数
  11. Enhancing Diversity in Teacher-Student Networks via Asymmetric branches for Unsupervised reid论文解读
  12. uni-app:基于Vue的跨端框架(闪电演讲内容整理) | 掘金开发者大会
  13. 清华大学机械系研发微小型管道机器人,实现亚厘米级管道高效探测
  14. 使用tensorflow进行简单的强化学习 1—Q-learning
  15. oracle科目余额表的查询,科目余额表查询 · selfaccount-services · 看云
  16. Python基础操作_字典的遍历
  17. uva12325(分类枚举)
  18. 浙江省工程师职称评审申报时间
  19. 阿里云服务器开放某个端口
  20. 基于javaCar易达租车系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

热门文章

  1. 在线诺基亚短信图片生成器工具
  2. mongos、nanomsg、zeroMQ简述和go-mongos使用实例
  3. js之金额大小写转换工具类(测试OK)
  4. imagej得到灰度图数据_IMAGE J灰度分析
  5. WPS Excel表格安装宏插件
  6. python怎么对数用log,python中的对数log函数表示及用法
  7. 金融借贷中的风险控制
  8. MariaDB数据库导出导入
  9. Intellij IDEA企业版破解
  10. XPS格式文件如何编辑?