参赛单元:传统GIS数据处理
作者:王奇彪
单位:安徽中汇规划勘测设计研究院股份有限公司
近些年来,随着我国省市县“多规合一”及空间规划的编制实施,规划编制技术日益成熟,GIS技术在实际工作中得到了较好的发展,很多规划编制单位甚至要求规划设计人员熟练掌握GIS软件。这在一定程度上推进了GIS技术在规划编制的应用,特别是对过去CAD规划制图技术人员的要求更高,不仅要懂得CAD文件、更要学会运用GIS软件。尽管如此,但对于规划设计人员来说,在实际工作当中还是遇到了许多的问题,比如数据格式的转换、坐标系统的转换、甚至是操作习惯的转变等等。
年轻的规划设计人员学习软件的速度普遍较好,而对于工作五年以上甚至是十年以上的规划人员来说,则相对较为困难,他们还是习惯传统的CAD制图,同时对于甲方特别是规划主管部门而言,要求在提交成果的时候必须包含CAD文件,这对于目前“多规合一”及空间规划的编制成果要求来说,就面临着三个方面的现实需求:
第一、甲方要求。规划主管部门或者甲方单位在合同中明确规定了提交成果中必须包含CAD文件成果;
第二、规划编制单位项目负责人要求。对于项目负责人而言,还是习惯于CAD文件的浏览方式,GIS数据只是更方便设计人员使用。
第三、规划设计人员。主要是包括工作年限超过五年或者十年以上的人员,他们普遍采用CAD软件制图,对于GIS软件并不熟悉甚至没有使用过,造成GIS数据与CAD文件之间在习惯和应用上存在矛盾。
因此,本文提出:借助FME强大的数据转换功能,将GIS数据文件转化成CAD文件并制作图框和图例,方便两者能够很好的衔接,在实际工作当中更好的运用各自优势,完成相关的规划编制任务。
最终达到的成果:将某一区域范围内的用地布局SHP数据动态的转换为具有可操作的CAD文件,同时还可具有图框、图名、图例等相关信息,完成数据格式转换。
基于城市总体规划或者控制型详细规划的用地布局数据(SHP格式),利用FME强大的空间数据转换功能,借助不同转换器之间的紧密衔接和优化配合,达到将SHP格式的GIS文件数据转换为具有可操作可使用的CAD用地布局文件。
以某一规划项目范围及用地布局为例,主要分为以下几个部分:
1.1、FME制作非标准图框
利用Creator转换器,使用提供的参数生成要素,并将这些要素发送到工作空间中进行处理。这里选择方框选项,创建三种不同的图框:正方形、竖向矩形及横向矩形图框。
1.2、FME制作标准图框
根据《城市规划制图标准(CJJT97-2003)》中图幅规格的具体要求可知,直接使用0号、1号、2号、3号、4号规格幅面绘制的图纸为规格幅面图纸(也称为基本图幅或者标准图幅或图框)。
利用Creator转换器,使用提供的参数生成要素,并将这些要素发送到工作空间中进行处理。这里选择图号为A3的幅面为例,制作不带装订边的标准图纸幅面。
2.1、FME制作横向图名
首先利用Creator转换器创建一个横向矩形框,图框大小可以任意设置,保证矩形为横向即可。然后借助TextAdder转换器将矩形框设置为以点的形式替代的文本要素,并把矩形框的中心点位置作为文本的标注位置,然后利用BoundsExtractor转换器在不改变文本要素的几何形状下,提取其外接矩形(外接矩形要素并不真实显示)坐标的最大、最小值,并保存到新属性中,最后借助Offsetter转换器将文本要素标注的位置向左下方偏移,最终得到了一个居中标注的图名要素信息。
2.2、FME制作竖向图名
相比较横向图名来说,竖向图名的创建则有一点困难,主要是因为对其进行标注时,其文字一般是一组汉字为一个整体,因此需要对其进行换行处理,这样才能很好的保证竖向为一列。制作竖向图名可以选用两种办法,一种是直接对其文本字符串进行换行处理,使用转换器数量与制作横向图名一致,但缺点是如果文本字符串较多,且一旦其出现变化,手动调整较为繁琐;一种是根据字符串长度和内容进行自动调整,使用转换器较多,但对字符串调整较为方便快捷。
第一种方法。与横向图名的其它步骤一致,唯一的区别在于TextAdder转换器的文本字符串需要进行换行设置,具体如下:
第二种方法。
具体步骤如下:
(1)利用Creator转换器创建一个竖向矩形框,图框大小可以任意设置,保证矩形为竖向即可。
(2)借助AttributeCreator创建一个新的属性,命名为图名,属性值即为图名内容,在此设置为某某城市总体规划用地布局。
(3)接着分两步走:
第一步创建图名转向,即将横向的图名转变为竖向的图名,且文字保持不变。利用TextAdder转换器将矩形框设置为以点的形式替代的文本要素,并把矩形框的中心点位置作为文本的标注位置;利用StringSearcher将图名中的字符串利用指定表达式与正则表达式匹配进行处理,然后接着ListExploder 转换器将列表中的所有属性暴露出来。
第二步创建与图名字符串长度一致的多个矩形框。StringLengthCalculator计算图名的字符串长度值;利用Tiler将输入要素切成一系列瓦片,其中竖向瓦片不变,横向瓦片个数与图名的字符串长度值保持一致;Counter为横向瓦片编号,编号顺序为自上而下,同时也为图名自左向右进行属性挂接做准备。
(4)利用FeatureMerger转换器将图名内容与横向瓦片进行匹配,同时保证横向瓦片自上而下与图名内容自左向右进行匹配。
(5)利用TextAdder将匹配之后的单个字符用以点的形式替代的文本要素,利用BoundsExtractor转换器提取其外接矩形(外接矩形要素并不真实显示)坐标的最大、最小值,并保存到新属性中,最后借助Offsetter转换器将文本要素标注的位置向左下方偏移,最终得到了一个居中标注的图名要素信息。
3.1、FME制作横向图例(面状)
(1)总体设计
(2)详细步骤如下:
利用Creator转换器创建一个矩形图框,其目的有三:一是作为图例填充和图例标注的转换辅助;二是创建图例文本、三为图例外框。图框方向为横向。
创建图例外框需要对新创建的横向矩形图框进行分割,因此利用Tiler转换器创建一个两行十列的矩形小框,其属性包括_column和_row,然后利用Tester转换器筛选_column属性值为0的小矩形框,然后分三步进行操作:
第一步:利用TextAdder创建图例文本标注,需要对其进行竖向设置,即如果_row为0则创建图标注;若_row为1则创建例标注,否则不创建。利用BoundsExtractor转换器提取其标注外接矩形(外接矩形要素并不真实显示)坐标的最大、最小值,并保存到新属性中,最后借助Offsetter转换器将文本要素标注的位置向左下方偏移,最终得到了一个居中标注的图例标注信息。
第二步:利用Dissolver,对Tester转换器筛选_column属性值为0的小矩形框进行融合,制作图例标注的外接图框。
第三步:利用Tester转换器筛选_column属性值不为0的小矩形框,进行下一过程的具体操作。
首先对筛选_column属性值不为0的小矩形框进行融合(Dissolver)出来, 利用Scaler操作进行相应比例缩放,此步骤为图例创建过程中协调图例所示内容,利用2DGridAccumulator分割融合之后的矩形框,其属性包括_column1和_row1,再次利用Scaler对分割后的小图框进行缩放,以达到图例规范要求。
利用StringSearcher对分割后的小图框进行筛选,对_column1利用正则表达^\d*[02468]$,选择出偶数列,这样做的好处在于对应图例表达样式;Counter_对其进行编号,起始数为1,计数范围选择本地,这样就能够保证水平方向相邻近的两两矩形小框计数一致。
AttributeValueMapper设置映射对象,对Counter_计数映射为城市总体规划用地代码大类(该过程仅作为测试使用);Tester对矩形图框进行筛选,分为两部分,一部分为填充色块,一部分为标注属性。因此。
接着分为两步,第一步筛选出来的填充色块,利用FeatureColorSetter设置颜色;
第二步剩下的则可以利用AttributeValueMapper转换器映射标注,然后标注相对应的色块填充信息。
3.2、FME制作竖向图例(面状)
制作竖向图例(面状)原理与横向图例(面状)的制作大同小异,仅仅对其进行稍作调整即可,本节略。
3.3、FME制作横向图例(线状)
制作横向图例前需要思考的问题主要是,线状图例是用线表示还是用面来表达,不同的表达方式,制作过程不同,结果也不相同,因此需要对两种不同的方式进行制作。
(一)第一种用面状形式表达线状图例。
1、总体思路
2、具体过程:
①利用Creator转换器创建横向矩形框;
② 利用Tiler对矩形框进行切分,使其变成两列三行的小矩形,属性添加_column与_row;其中,_column值为0表示第一竖列,值为1表示第二竖列(如切分列数大于2时,以此类推)。
③利用Tester将上一步骤的两列分布筛选出来,筛选第一竖列,设置_column值为0即可,然后分两步,第一步利用Dissolver将其融合为线状图例的外框,并对其纵向进行适当缩放(Scaler)确保图例表达适中;
第二步再次Tester,筛选第一竖列中间的小图框,设置_row值为1即可,并对其纵向进行适当缩放(Scaler)。
④接着上一步骤基础上,继续筛选第二竖列中间的小图框,只需设置_row值为1即可,然后利用TextAdder添加图例标注信息并设置文字大小,借助BoundsExtractor提取标注信息的四至坐标,然后通过Offsetter对标注的文本信息进行偏移,将其移至该小图框中间位置。
(二)第二种用面状形式表达线状图例。
1、总体思路
2、具体过程:
①②两步参照第一种方法;
③ 利用BoundsExtractor转换器提取矩形图框的四个拐点坐标,然后利用VertexCreator求取矩形图框的横向中心线两端的坐标点,LineBuilder将这两个坐标点进行连接,创建线状图例样式,并借助FeatureColorSetter对其进行设置颜色。
④利用TextAdder添加图例标注信息(如规划范围)并设置文字大小,借助BoundsExtractor提取标注信息的四至坐标,然后通过Offsetter对标注的文本信息进行偏移,将其移至中间位置。
3.4、FME制作竖向图例(线状)
制作竖向图例(线状)与制作横向图例原理基本上大致相同,就不做重复之前的制作过程了。(本节略)
3.5、FME制作点状图例
制作点状图例相对较为简单,只需要根据不同的表达进行创建即可,本节略。
针对城市总体规划及控制性详细规划中的用地布局数据,通常来说都是将创建的CAD文件转换成GIS数据(SHP文件),但由于CAD文件自身缺陷,使得在规划方案调整阶段转换较为繁琐,且效率极其低下,因此,包括数据处理、数据管理以及数据后期的更新等等都在GIS软件完成,这样就造成GIS数据需要转化成CAD文件进行实际应用。以某规划项目的用地布局数据为例,结合实际情况,运用FME将GIS用地布局数据转换成具有色块填充与用地代码及图层相对应的CAD文件。
4.1、总体思路
主要是借助AttributeCreator转换器以及写模块的参数设置,同时利用模板文件对其进行数据转换。
4.2、制作过程
其实针对于CAD文件面状数据而言,主要是具有可识别其用地代码及用地属性的色块填充,而线状数据则是不创建色块填充,其用地布局具有闭合的线状文件。其制作相关步骤及过程已在第三部分详细说明,不再重复。
(1)SHP转CAD(面状数据)
该模板制作过程主要分为以下几个过程:
j 利用2DForcer转换器,移除所有的高程(Z)坐标;
k 借助AttributeCreator转换器,设置新的属性值。经过对CAD文件进行分析可知,仅需要新建autocad_layer(图层)、autocad_entity(实体)、autocad_color(颜色)三个属性值即可;并对其进行分别赋值:autocad_layer(图层)的属性值为YD-@Value(YDDM)或YDDM;autocad_entity(实体)属性值为autocad_hatch;autocad_color(颜色)属性值为bylayer。这样就可以保证SHP文件转换为CAD文件了。
l写模块设置:层 名称设置为autocad_layer(图层);同时需要对输出的CAD文件格式进行模板设置,模板文件可为标准的CAD用地布局文件(可为色块填充与图层名称一一对应的CAD文件)。
(2)SHP转CAD(线状数据)
具体步骤与上述SHP转CAD(面状数据)设置基本一致,唯一的不同在于AttributeCreator转换器对 autocad_entity(实体)的属性设置,在此需要将autocad_entity(实体)属性值为autocad_polygon即可。
1、利用研究范围制作动态图框
根据不同的研究范围可以将其分为三种情况:横向图框、竖向图框或者横向与竖向图框均可。然后借助其外接矩形框的长宽值大小来判断(BoundingBoxReplacer或者BoundsExtractor)研究范围的外接图框是横向、竖向还是两者皆可,如果外接矩形框的长度值大于其宽度,则可采用竖向图框;如果外接矩形框的长度值小于其宽度,则易采用横向图框,否则两者都可。选择好外接矩形框后,就可以根据不同的情况制作相对应的图名与图例位置。最终的所要达到的目的就是利用研究范围来动态制作图框、图名及图例内容。
2、利用网格切分制作动态图例
动态图例主要是针对图框的选项而言的,其根据切割技巧对一个完整的矩形框进行分割,然后根据切分后的矩形小图框与相应的用地分类代码及用地名称相对应,制作动态的图例。
矩形图框制作完成后,就可以确定图例所在的位置了。图例位置确定后,可以对其进行适当的缩放,然后利用2DGridAccumulator或者Tiler对其进行横向或者竖向切分,切分前需要注意的是是否加上图例二字,如果有图例二字,则需要对其进行二次切分;对切分之后的小图框进行排序和编号(Sorter和Counter),然后与相对应的图例名称进行属性连接,并一一对应,制作相对应的动态图例,这样就可以保证即使布局的用地种类数量变了,图例也相应的进行动态变化。
3、利用模板文件制作图例和转换文件
借助于城市规划用地分类标准和相对应的图例内容信息,对其进行转换。在进行该操作之前,需要对用地分类进行制作一个标准的CAD文件,按照不同的用地分类,对其进行包括图层、颜色、线型等进行标准设置,同时需要注意的是图层名称与用地分类代码、用地名称、所使用的用地颜色要一一对应才可使用。
4、过程整合及技术融合完成文件转换
本部分是整个过程最为困难的地方,不仅仅是将各过程的简单合并,更为重要的是需要考虑实际运用,完成技术上的融合。如果可以将其更加流程化,其转换的优势自然就体现出来。
其实,本人接触FME已经有三年多的时间了,但是起初并没有太在意其在城市规划中的应用,更没有感触到其在数据处理的强大。但随着参与项目的增加、接触的数据及格式越来越多以及运用FME越来越熟练的情况下,逐渐感觉到了FME是实实在在的数据转换界的瑞士军刀。本次运用FME解决城市规划中的问题,也是本人一直在思考的问题,如何能快速的对GIS文件(SHP格式数据)进行转换,并制作带有图框、图名、图例的CAD文件,总结下来,虽然感觉能做到,由于个人水平所限制,很多过程重复、转换器使用过多等等。
但同时本人深刻的意识到,FME不管是在“多规合一”、空间规划、土地利用规划(三调)或者在即将开展的国土空间规划中都可以发挥其不可替代的作用。希望有更多的FMEers提供更多的相关经验分享,也祝福FME China的实力更加强大,继续提升自己的FME水平,更上一层。
最后,个人能力及水平所限,文中难免出现错误,敬请谅解。