做这个工具的原因是,想做一个湘源控规用地颜色的.stylx文件。
但是湘源所有用地类型太多了,如下图所示,足足110类。这么多颜色的面符号,一个个做到.stylx文件里不得累死?
好在Pro对CAD文件的支持比较好,我们直接加载CAD的Polygon到Pro中,Polygon已经按图层分好了,并且颜色也与CAD中一致(仔细对一下CAD与Pro中相同图层的RGB颜色,还是能发现RGB值有一些出入,但是颜色大致是对的,不清楚有没有办法能保持完全一致。上面的示意图中Pro界面内用地颜色较浅,是因为Pro自动为所有CAD面图层加了50%的透明度,这也是之后的步骤中需要处理的)。
一、Pro中取消CAD图层的透明度
要在Pro中手动取消这110个CAD图层的透明度也是一件美事。。。麻烦事,好在之前已经捣鼓过怎么借助代码修改了。
二、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样式文件写入符号了。
三、从简单渲染图层组生成样式符号
脚本的主要处理流程为:先读取每个CAD图层的名称、符号,再将这些信息写入到.stylx样式文件(SQLite数据库)中。CAD图层名称使用ArcPy便能获取,而获取图层符号则需要使用Python CIM,因为这样能直接获取到可写入CONTENT属性的json字符串。
参数设置
效果演示
工具说明
- 只适合于ArcGIS Pro
- 运行工具前,请切换到地图视图
- 该工具可批量生成点、线、面3种类型的样式符号