原文发布时间:2015-02-10 09:22:51
作者:小新
需求:完成小比例尺到大比例尺的分幅和自动命名,命名要符合以下规则。以1000到500比例尺为例:1000的图到500,需要划分成4块。
如果1000图 命名分别为 5504901
5504902
5504903
5504904
生成对应的500图就是 55049001 55049002 55049003 55049004
55049005.................
55049009................
55049013.............
实现思路:
- 一个1000图到500图的分幅规则,按照下图所示的规则进行ID编号,
- 分析小比例尺到大比例尺分幅后的命名规则
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。
- 组合生成500图对应的图幅号
500图的图幅号=(1000图幅号取前5位)&500图索引
4、利用新的图幅号进行文件扇出即可。
实现过程:
- 添加DWG读模块,加载一个1000图
- 使用AttributeExposer暴露需要的格式属性fme_basename和fme_feature_type。fme_basename文件名即图幅号,需要根据文件名计算分幅后500的图幅号。fme_feature_type是图层名,输出时进行扇出用。
- 使用三个SubstringExtractor分别提取图幅号的最后一位、倒数第二位、后两位。
倒数第二位进行是否为0的判断,如果倒数第二位为0,则使用最后一位进行索引计算;如果不为0,则使用后两位进行索引计算。
4、 使用Tiler进行分幅,Tiling Type设置为Number of Tiles(根据瓦片数进行裁减)
- 对tiler之后的瓦片进行ID编号,按照图1的示例进行ID编号。
先使用AttributeCreator连接Tiler中的行列属性row_column,行列好的连接值如下所示:
然后使用AttributeValueMapper进行属性值映射:
10映射为1
11映射为2
00映射为3
01映射为4
6、 判断第3个步骤中取出的倒数第二位是否为0,按照“实现思路”第2步中的计算公式,计算新的索引值,并格式化为3位整数,不足3位左边补0
- 按照“实现思路”第3步中的公式连接得到新的图幅号
- 按照新图幅号进行扇出。
注:由于Tiler不能分组进行裁减,在批处理的时候,一定要保存模板,使用菜单(File)——Batch Depoly完成批处理操作。
否则,如果在读模块中直接添加多个源数据,将把所有源数据整个合在一起分成4幅,不能满足要求。
若对文章有疑问,可发送邮件至[email protected]提问或讨论。