使用FME实现电子地图应用之地址解析

原文发布时间:2013-09-02 09:23:58

  原创:小新

随着电子地图的不断发展,应用也越来越多。像诸如百度地图等地图服务厂商还提供了免费的百度地图API,包括JaveScript API、Flash API、Android SDK、Web服务API等多种API产品。今天这篇文章是基于Web服务API中的Geocoding API,在FME中实现一体化的地址解析和逆地址解析流程。

利用FME实现该流程的好处在于:

?  可以将需要获取坐标的地名地址,或者需要获取地名地址的坐标,作为参数进行发布,使用户在每次运行模板时能够灵活配置需要解析的地名地址;

?  整个流程一体化,将调用API的过程及返回结果的解析一站式完成,提高工作效率,并且流程可复制。

下面来看看具体的实现过程:

一、注册百度账号,申请调用API的key

http://developer.baidu.com/map/geocoding-api.htm

点击“获取密钥”,在打开的页面中,填好申请资料,然后“生成API密钥”,则会提示你的key值,将key值复制到记事本中记录保存,如我的key值为:

30b080e2eed01f10fd2951552653470a

二、创建FME模板

根据获取地址的说明,不管是地址解析还是逆地址解析都是通过访问URL来完成,如下:

在FME中创建模板时,首先需要生成上图中的URL,再通过HTTP访问的转换器调用该URL,最后解析返回的结果。

以地址解析为例:

1、 首先创建将“地址”、“输出格式类型”、“用户密钥”、“城市名”创建为模板的发布参数:

2、 按照URL的格式,创建调用的URL,并通过HTTP的转换器进行访问:

由于我打算输出JSON格式的返回结果,因此,在HttpFetcher之后需要JSON相关的转换器进行结果解析,通过运行模板,把结果输出到viewer中查看,分析JSON解析的步骤,以查询“重庆市磁器口”的坐标为例:

运行时,参数输入为:

HttpFetcher后的返回结果格式为JSON,内容为:

{

    "status":"OK",

    "result":{

        "location":{

            "lng":106.458997,

            "lat":29.586607

        },

        "precise":0,

        "confidence":40,

        "level":"\u6751\u5e84"

    }

}

通过JSON结果查看,分析结果存储在JSON中的位置。

3、 添加JSONExtractor转换器,提取返回的坐标:

通过两个JSONExtractor转换器分别获取经纬度的值。

4、至此,就通过百度地图API得到了“重庆磁器口”的经纬度坐标。可以把坐标存储到目标数据的属性中,也可以通过2DPointReplacer生成对应的点数据。

结束语:

1、  逆地址解析的过程与之类似,只是调用API时的URL格式有差异;

2、  除了这个API,其他如POI API也可以用类似的方式来调用。

猜你喜欢

转载自blog.csdn.net/fmechina/article/details/81297161
今日推荐