编这个模板主要是因为日常工作中,经常需要将他人录入Excel或Word的经纬度数据进行矢量化经纬度表示格式,这些数据一般以度分秒表示,度分秒输入的经纬度由于中文输入法切换,“°”“′”“″”单位,经常出现半角、全角混输的情况创业项目,这种情况FME Hub中的“DMSToDecimalDegreesConverter”转化器可以处理,但这个转换会将需要转换的属性值以转换后的值替换。FME(含Hub)有多个度分秒与度互转的转换器(见图1),能满足大部分日常的工作需求;根据日常使用情景编制了这个模板。
图1 FME和FME Hub中有关经纬度互转的转换器
一、业务需求
编制完成后的模板见图2,转换器参数见图3。
图2 模板流程
图3 自定义转换器参数设置
模板介绍,两个“Tester”转换器用于判断经纬度是否存在空值的列经纬度表示格式,“AttributeManager”用于增加提示使用者数据中存在空值属性。两个“StringSearcher”用正则表达式将经纬度中的阿拉伯数字(/d+)提取出来(见图4)。
图4 “StringSearcher”转换器参数设置
“StringFormatter”(参数设置见图5)作用是将“StringSearcher”提取出的秒的小数点后面的数据(见图6)保持两位,如不足两位以零补齐(-02s,“-”右边补齐、“0”用“0”补齐、“2s”保持两位字符),这主要是为了数字美观。
图6 “StringFormatter”参数设置
图5 list{}大括号内数值与提取经纬度数值的对应关系
第一个“AttributeManager”作用是,将“StringSearcher”获取的数值按需要换算(构建)成需要新属性,如以度表示的经度纬度、单位为半角的度分秒等(见图7)。
图7 “AttributeManager”构建新属性
紧接着的“StringFormatter”作用是将新生成的以度表示的经纬度小数点后面数值四舍五入保留六位,不足时以零补齐(见图8);紧接着使用了两个“StringReplacer”,第一个用文本替换的形式处理原始数值秒为正数,生成标注度分秒时产生的错误,第二个是处理“秒”拆分出单独列时产生的错误。
图8 “StringFormatter”参数设置
图9 第一个“StringReplacer”参数设置
图10 第二个“StringReplacer”参数设置
最后两个转换器“Tester”和“AttributeManager”作用分别是判断是否增加“°”单位,和对需要增加的情况进行处理。
最后展示下计算结果。
图11 不同需求的处理结果展示
后台发送“DMS”获取自定义转换器,如觉得有用,点赞点在看!