平面图转换为2.5D(二)

原文发布时间:2010-06-26

作者:毛毛虫

平面图转换为2.5D(一)中我们说了下如何在2Dpdf中显示3D效果,现在举个例子:

有下面几个图层,我们想使用这几个图层生成一个地图,如下,原图层为:


原图共包括四个图层,分别是道路streets(红色)、公园parks(绿色)、水体waterbodies(蓝色)和建筑物buildings(灰色)。想要达到的效果如下: 

图片已丢失

对比上下两幅图,分析这个处理的过程:

1、对建筑物buildings图层,按照平面图转换为2.5D(一)所讲的方法处理该图层,达到三维视图的效果。

2、对于公园parks(绿色)、水体waterbodies(蓝色)图层,只需要使用PDFStyler转换器对图层赋予相应的颜色即可。

3、对于道路streets图层,处理起来可能有点麻烦。首先要把把线转换为多边形,然后把注记显示出来并能使其处于道路的多边形内部,最后也是使用PDFStyler转换器设置下样式即可。

4、可以看到在下面的pdf的右上角中显示了改地图的标题“Vancouver West End”(我测试了下,可能PDF格式在支持中文方面还有问题,没法不能输出中文字体)。同时,我们想有一个框架作为该显示地图的范围,这时候可以使用两个Creator转换器来完成这一操作。

下面是具体操作过程:

1、buildings图层处理:

再源数据buildings后面添加一个Counter转换器,然后使用转2D为3D效果的过程(这里我们采用平面图转换为2.5D(一)中提到的第二种方法,如图:


然后使用Aggregator转换器,设置如下:


从这个转换器的设置我们知道为什么前面添加了一个Counter转换器,我们用这个属性来对要素分组,把每个建筑物的“墙”和“屋顶”聚合为一个要素。然后设置pdf样式后写入pdf即可。

2、道路streets图层的处理:

    使用Bufferer转换器把线转换为多边形,如图:


把交叉的部分道路放大后,如图:

图片已丢失

对于这种情况可以使用Dissolver转换器溶解重叠部分,转换器设置如下:


转换后的效果:

图片已丢失

然后考虑把注记(即道路名称)写在道路上,使用Labeller生成注记。这是会发现有部分注记是在道路多边形外部的,如图:


这样不太好看,下面的操作就是解决这个问题,使得标注都位于多边形内部。使用一个GeometryExtractor转换器(用处稍后会提及),然后使用TextStroker转换器把注记点转换为多边形之后,在用转换器BoundingBoxReplacer生成注记的最小约束矩形。再用转换器SpatialFilter,两个输入端口分别连接刚才的转换器Dissolver和BoundingBoxReplacer,如图:


转换器SpatialFilter的设置如下:

图片已丢失

这几步操作就是把让注记显示在streets多边形的内部,此时的效果如图:

图片已丢失

然后用转换器GeometryReplacer获取刚才在GeometryExtractor转换器生成的几何(如果不明白这两个转换器,可以参考一些函数的用法和注意事项(三))。

为了对Dissolver转换器输出端口(此时的fme_geometry   为fme_donut)的多边形能够用PDFStyler转换器正确填充颜色,需要把洞转换为多边形,使用转换器DonutBridgeBuilder(该转换器参考一些函数的用法和注意事项(三))。

3、下面是对 标题和框架的处理:

对于标题,直接使用转换器Creator创建一个文本就可以了。

对于框架,同样适用转换器Creator创建一个多边形,然后使用Bufferer、DonutBuilder和DonutBridgeBuilder生成一个边框,也可以再使用一个GeometryCoercer转换器生成这个框架的边界线,为了避免缓冲时不能生成直角,把缓冲的数值设置为负值,设置如下:


转换器设置如图:


检查下是否每个图层都使用PDFStyler设置了PDF样式,最后的输出为:

图片已丢失

在文章开头,地图边框的颜色我设置为白色,这里为了能让大家看的清楚,我把边框多边形的边界设置为紫色,填充为黄色。






猜你喜欢

转载自blog.csdn.net/fmechina/article/details/80789262
今日推荐