一、写在前面
获取公交路线、AOI数据,经常需要将经纬度数据集合(文本)转换成矢量的线、面(几何图形),经纬度数据集合格式大致有两种形式;第一种是经度与纬度之间用一种符号分割(如“,”),经纬度对之间用另一种符号分割(如“;”),图1;第二种是经纬度数据集合仅用一种符号分割(如“,”)见图2。
图1 经纬度数据集合格式一
图2经纬度数据集合格式一
第一种格式的经纬度集合,采用5个转换器就可以完成几何图形转换,图3,流程简单这就不再介绍。
图3 第一种经纬度数据集合转矢量流程
第二种格式的经纬度集合,稍微复杂,也只需8个转换器(6个也没问题)就可以完成几何图形转换,图4,流程也不难,关键在于需要先对分割暴露出来的经纬度数据进行计数(“Counter”),然后采用四则运算器(这里用“AttributeManager”),新建属性,计算余数,而后将将经纬度分成两个属性(“Tester”)后分别计数在挂接,见图5。
图4 第二种经纬度数据集合转矢量流程
图5 counter求余公式
二、思路介绍
文本数据转矢量数据(几何图形)还是存在需求,以前在处理上述两种数据时,对FME了解还是非常少,用习惯了上述两种处理方式,也没考虑是否有其他更高效的方式,万能的FME肯定有其他解决办法。
这次就记录用一对前段时间介绍给其他网友将矢量数据整合到自定义转换器中建议使用的一对转换器:“GeometryExtractor”“GeometryReplacer”(好基友!),“GeometryExtractor”可以将几何图形的描述按照特定的格式(如:GeoJson等)提取出来保存到属性中,“GeometryReplacer”可以将属性中存有特定格式的数据还原为几何图形;这两个转换器配合使用可便于数据的交换,其强大的功能这里就不再展开,请有需要的自行查看帮助。
这组转换器有一种数据格式“GeoRSS(Simple)”,与上述的两种数据格式非常接近:“line xmlns:georss="http://www.georss.org/georss">13288965.69 2988327.48 13288960.132988313.80 13288929.18 2988300.86 13288902.46 2988234.92line>”经纬度数据集合均以半角空格“”分割,“georss:”后边的“line”表示集合几何形状(面为polygon),只需将待转换的数据通过替换将经纬度间的分隔符换成半角空格后,置于上述格式黄色数据区域,就可以转换成符合需要的数据格式。
三、模板介绍
这个自定义转换器有4个转换器组成(不含输入输出端口),见图6。一是“ParameterFetcher”用于获取自定义发布参数,二是“StringReplacer”将“,”“;”等经纬度分割符号置换成半角空格,为了保证模板的通用性(替换多种符号),这里的替换模式采用正则(如:“\,|\,”,其它类型的符号可自行编写正则表达式);三是用“AttributeManager”新建属性,属性值按照“GeoRSS(Simple)”格式进行构建,见7;最后是用“GeometryReplacer”将“AttributeManager”构建的属性还原为几何图形(线、面;点当然也可以,但好像没这个必要)。流程就这么简单,当然仅两个转换器也可以胜任。
图6 自定义转换器模板
图7 “AttributeManager”参数设置
自定义转换器的参数介绍,见图8。共设三个参数:
1、“属性字段”:即保存经纬度数据集的字段(处理前);
2、“现有经纬分割符号(正则表达式)”:这个属性有用户书写正则表达式由于替换“属性字段”中经纬度的分隔符(没看过这篇记录的估计看不明白);
3、“几何类型”:即“属性字段”保存的经纬度数据集合还原后的几何形状,面或线(重要提醒,不支持多线!!!)
图8 自定义转换器参数设置页面
这个模板的流程实在是太简单了,这就不再分享。这篇记录主要是展现FME条条大道通罗马作用。