原文发布时间:2012-05-29
作者:jason
对于勘测数据,使用的测量工具为手持GPS的情况下,测量的位置往往是经纬度坐标,单位为度(°)分(′)秒(″),如72°32′56″,这些坐标对往往代表的是重要的设施,比如采矿点、水源点、定位点等。在内业处理、数据入库等环节,如果绘图软件无法解译经纬度坐标对,或者无法存储到数据库时,这就成了一个棘手的问题。不过,FME 提供了一种解决思路,可以快速方便地解决此问题,轻松完成此类数据的绘图、入库。
思路:
1、分割经纬度为独立的经度、纬度(AttributeSplitter)
2、依次去掉经、纬度符号,使其成为分割的数据段
(AttributeSplitter)
3、再将分割的段连接起来(StringConcatenator)
4、生成对应的坐标点(2DPointReplacer)
案例:待处理属性F7(72°32′56″,126°32′22″)
1、用其自身的分隔符(,),提取经、纬度坐标,保存到_list{0},list{1};此时 ,_list{0}=72°32′56″, list{1}=126°32′22″;
2、用符号度(°)分割_list{0},保存到list1{0},list1{1}。此时,list1{0}=72,list1{1}=32′56″;
3、依次类推:
经度:list1{0}=72, list2{0}=32,list3{0}=56;
纬读:list1{1}=126 ,list2{1}=32,list3{1}=22;
4、接下来,就需要将不带符号的数据连接起来。注意:有人可能怀疑直接连接“度分秒”的正确性,不用担心,FME专门提供了转换器(AngleConverter),来将这样的数据转换为10进制数据。用转换器StringConcatenator连接经度:
结果为:_long=723256;
用同样的方法连接纬度:结果为:_lat=1263222。
5、将该经纬度数据转换为十进制数据:
注:DECIMAL_DEGREES - 角度值表示为十进制。
DDDMMSS - 角度值是以度分秒的整数形式表现。
6、用该坐标生成对应的二维点:
7、完成以上步骤,问题就已解决。整体模板思路如下:
总结:FME不愧是专业的数据处理工具,能精细化到一个细微符号的解决,并提供了各种进制转换的算法,从而免去了繁琐的换算过程,用户直接用转换器调取即可,真正实现了很多用户“不会编程,胜过编程”的愿望。