使用FME实现GDB矢量转标准txt的思路

一、背景
前些天,有朋友想把shp转标准txt格式,可是常用的工具在那台电脑上有问题,正好前段时间做了“GDB坐标表转面_FME工具”,我想着原理应该是相同的,于是我就想自己试着用FME做一个工具出来。于是历经一个礼拜的打怪,终于把“GDB要素类转标准TXT文件_FME工具”做出来了。由于我的FME是菜鸟级别,其中的多项难题都是请教“规划GIS会”的会长大佬以及另外一个FME大佬。

二、重难点及解决方法
(一)以下是制作“GDB要素类转标准TXT文件_FME工具”对我来说的重难点。
1.对标准txt文件的结构不熟悉,需要仔细研究;

2.子面顺序号的计算;

3.界址点号的编号;

4.界址点数量计算问题;

5.地块信息的输入问题;

6.头文件的输入问题;

7.txt文件的写入问题。

总结,做这个工具是哪个步骤都有问题。以下是解决各个步骤问题的方法。

(二)各难点解决方法
1.对于对标准txt文件不熟悉的问题,我仔细分析了之前一个大佬分享给我的标准txt样例文件,进而更加了解了标准txt的构造;

2.子面顺序号的计算问题通过以下方法解决的

(1)给面编号;

(2)计算空洞数量;

(3)提取折点坐标;

(4)坐标展点;

(5)给点编号;

(6)计算重叠的点;

(7)没有空洞的赋值为1;

(8)筛选出有空洞并重叠的点并编号,通过数学关系及“AttributeManager”的“启用相邻的要素属性”功能筛选出大面编号相同的每个子面的第一个点,赋值为1;

(9)将有空洞并重叠的第一个和第二个合并后使用“AttributeManager”的“启用相邻的要素属性”功能依次由上一个加1,然后把有空洞并重叠的点和不重叠的点合并后并按最初编号排序;

(10)使用“AttributeManager”的“启用相邻的要素属性”功能将空值依次继承上一个的子面顺序号;

3.界址点号的顺序编号问题通过以下方法解决的

(1)使用“AttributeManager”转换器的“条件值”功能配合“AttributeManager”的“启用相邻的要素属性”功能筛选出同一大面编号的第一个点,赋值为1;

(2)把没有空洞的每个大面最后一个点用条件值配合“AttributeManager”的“启用相邻的要素属性”功能筛出来,赋值为1,把没有空洞的除每个大面最后一个点用条件值筛出来,使用“AttributeManager”的“启用相邻的要素属性”功能依次由上一个加1;

(3)把有空洞的每个大面第一个点用条件值配合“AttributeManager”的“启用相邻的要素属性”功能筛出来,赋值为1;

(4)筛选出有空洞并重叠的点,通过数学关系及“AttributeManager”的“启用相邻的要素属性”功能将大面编号相同的每个子面的第一个点及第二个点分别筛出来;

(5)将每个子面的第一个点与除每个子面除重叠的两个点外的其他点合并后并按最初编号排序,使用“AttributeManager”的“启用相邻的要素属性”功能配合“条件值”功能将点编号为空的依次由上一个加1;

(6)将所有点合并后按最初编号排序;

(7)筛选出有空洞并重叠的点,使用“AttributeManager”的“启用相邻的要素属性”功能配合“条件值”功能,将每个子面的第二个点的点编号使用“AttributeManager”的“启用相邻的要素属性”功能赋值为上一个值;

(8)将所有点合并后按最初编号排序,在“AttributeManager”的文本编辑器中使用“PadLeft(str, n, [char])”函数将点编号补充完善;

4.界址点数量计算问题

(1)使用“AttributeManager”的“启用相邻的要素属性”功能配合“条件值”功能给同一大面的点从1开始赋唯一编号;

(2)利用数学关系筛选出每个大面的最后一个点;

5.地块信息的输入问题

(1)筛选每个大面最后一个点的,并将点编号设置为0,将此步成果与所有点合并,按大面编号及点编号排序,重新从2开始编号;

(2)由于不同项目要求的地块信息不一样,小编将地块信息设置为手动选择存储除点数量的其余地块信息的字段;

(3)将点数量与存储除点数量的剩余地块信息拼接起来形成完整的地块信息;

6.头文件的输入问题

(1)复制第一个点,将头文件作为“多行文字”类型参数进行手动输入,并将重新编的所有点的唯一编号赋值为1;

(2)按重新编的所有点的唯一编号排序;

7.txt写入问题

(1)将所有信息集中存放在“TXTXX22”字段中;

(2)用“AttributeKeeper”转换器只保留“TXTXX22”字段;

(3)用“AttributeRenamer”转换器将“TXTXX22”字段改名为“text_line_data”;

(4)添加txt写模块,将字符编码设置为“Chinese Simplified DOS/Windows (gbk)”)。

步骤到此为止,模板成功做出来了!!!
使用FME实现GDB矢量转标准txt的思路_第1张图片

想要获取已做好的FME模板,请私信博主。

你可能感兴趣的:(使用FME实现GDB矢量转标准txt的思路)