原文发布时间: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也可以用类似的方式来调用。