利用FME完成小比例尺到大比例尺的图幅自动分幅及命名

原文发布时间:2015-02-10 09:22:51

作者:小新

模板下载

需求:完成小比例尺到大比例尺的分幅和自动命名,命名要符合以下规则。以1000到500比例尺为例:1000的图到500,需要划分成4块。

如果1000图 命名分别为 5504901

5504902

                              5504903 

       5504904

生成对应的500图就是 55049001 55049002 55049003 55049004

                     55049005.................

                     55049009................

                     55049013.............

实现思路:

  1. 一个1000图到500图的分幅规则,按照下图所示的规则进行ID编号,

  1. 分析小比例尺到大比例尺分幅后的命名规则

1000图的命名7位数,500图的命名8位数,前5位是固定的,区别在于后面的序号(暂且在本文中叫做索引)。只对后面的索引进行分析,

1000图索引为01的分成4幅500图后对应的索引为001 002 003 004

1000图索引为02的分成4幅500图后对应的索引为005 006 007 008

……

只取数位值非0的有效数进行分析,可以得出公式,

500图索引=(1000图索引-1)*4+ID

并将这个索引格式化为3位整数,不足3位左边依次补0。

 

  1. 组合生成500图对应的图幅号

500图的图幅号=(1000图幅号取前5位)&500图索引

 

4、利用新的图幅号进行文件扇出即可。

实现过程:

  1. 添加DWG读模块,加载一个1000图
  2. 使用AttributeExposer暴露需要的格式属性fme_basename和fme_feature_type。fme_basename文件名即图幅号,需要根据文件名计算分幅后500的图幅号。fme_feature_type是图层名,输出时进行扇出用。
  1. 使用三个SubstringExtractor分别提取图幅号的最后一位、倒数第二位、后两位。

倒数第二位进行是否为0的判断,如果倒数第二位为0,则使用最后一位进行索引计算;如果不为0,则使用后两位进行索引计算。

4、 使用Tiler进行分幅,Tiling Type设置为Number of Tiles(根据瓦片数进行裁减)

  1. 对tiler之后的瓦片进行ID编号,按照图1的示例进行ID编号。

先使用AttributeCreator连接Tiler中的行列属性row_column,行列好的连接值如下所示:

然后使用AttributeValueMapper进行属性值映射:

  10映射为1

  11映射为2

  00映射为3

  01映射为4

6、 判断第3个步骤中取出的倒数第二位是否为0,按照“实现思路”第2步中的计算公式,计算新的索引值,并格式化为3位整数,不足3位左边补0

  1. 按照“实现思路”第3步中的公式连接得到新的图幅号
  2. 按照新图幅号进行扇出。

注:由于Tiler不能分组进行裁减,在批处理的时候,一定要保存模板,使用菜单(File)——Batch Depoly完成批处理操作。

否则,如果在读模块中直接添加多个源数据,将把所有源数据整个合在一起分成4幅,不能满足要求。

若对文章有疑问,可发送邮件至[email protected]提问或讨论。

猜你喜欢

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