1. 概述
1.1 应用场景
用户数据库存储了经纬度数据,希望转换成对应的中文地址(国家、省份、城市、区县、街道等),最后将转换后的数据保存到数据库中。
1.2 实现思路
可以调用高德或百度地址转换的 API 接口实现。
1.3 任务展示
FineDataLink 中的数据处理过程,详情参见:https://demo.finedatalink.com/ 中定时任务:「经纬度转中文地址」
2. 操作步骤
2.1 场景模拟
示例数据:经纬度信息.xls
示例数据如下图所示:
「经纬度信息」表中保存着高德坐标系的经纬度数据,想获取对应的百度地图中文地址(国家、省份、城市、区县、街道等),将转换后的数据保存到数据库中。如下图所示:
2.2 方案说明
调用百度地址转换的 API 接口实现:
1)通过「参数赋值」节点将经度和纬度数据作为参数输出,使用 坐标转换 接口,将高德坐标系的经纬度数据转换为百度坐标系的经纬度数据。
2)使用 逆地理编码 接口,将百度坐标系经纬度数据转换为中文。
3)使用「循环容器」节点,遍历所有参数执行上述过程。
2.3 申请百度 API 密钥
1)访问http://lbsyun.baidu.com/apiconsole/key,登录百度账号并完成实名认证。
2)点击「创建应用」按钮,自定义「应用名称」,「应用类型」选择服务器端,「请求校验方式」选择IP白名单校验,IP白名单处输入0.0.0.0/0,点击「提交」按钮。
提交后,可看到密钥信息。如下图所示:
点击查看具体步骤 |
2.4 取出经纬度数据并输出为参数
1)新建定时任务,拖入「参数赋值」节点。
2)取出经纬度数据,并将经度和纬度输出为参数。如下图所示:
参数默认值只是为了下游节点提前预览设置的,实际运行时不会用到这个默认值。
2.5 设置循环容器
使用「循环容器」节点,将「参数赋值」节点的输出结果赋值给「循环容器」节点后,一次次循环来遍历赋值节点的输出结果。
循环方式选择「遍历循环」,勾选 jingdu 和 weidu 两个参数,需要将这两个参数传递给「循环容器」中的节点。如下图所示:
2.6 将原始坐标系转换为百度坐标系
「经纬度信息」表中保存着高德坐标系的经纬度数据,需要使用百度坐标系的 API 接口,转换为百度坐标系。
2.6.1 设置 API 输入算子
1)将「数据转换」节点拖入「循环容器」中,进入「数据转换」节点,拖入「API输入」算子。
2)「API输入」算子中,请求URL说明如下:
需要用到的请求参数说明:
API 接口说明:坐标转换
请求参数 | 含义 | 使用说明 |
---|---|---|
coords | 需转换的源坐标,多组坐标以“;”分隔 (经度,纬度) | ${jingdu},${weidu}----注意精度在前,纬度在后 |
ak | 开发者密钥,申请AK | 本文 2.3 节中申请的密钥 |
from | 源坐标类型: 3:火星坐标(gcj02),即高德地图、腾讯地图和MapABC等地图使用的坐标 | 本文「经纬度信息」表中保存着高德坐标系的经纬度数据,所以参数值写3 |
to | 目标坐标类型: 5:百度地图采用的经纬度坐标(bd09ll) | 由于需要转换成百度地图采用的经纬度坐标,所以参数值写 5 |
所以,请求URL为:https://api.map.baidu.com/geoconv/v1/?coords=${jingdu},${weidu}&ak=vUyAM6tIqG4c2FJ3dtNxW3GMt9F62Qfn&from=3&to=5
「API输入」算子设置界面如下图所示:
点击「数据预览」,如下图所示:
result 字段为 JSON 格式数据,需进行解析得到百度坐标系的经纬度数据(即经度和纬度数据单独为一列,便于后续转化为对应的中文地址)。
2.6.2 解析经纬度数据
1)拖入「JSON解析」算子,解析 result 字段。不勾选「解析后保留所有上游输出字段」按钮,只保留解析后的字段信息。如下图所示:
2)点击「数据预览」,解析后数据如下图所示:
2.6.3 将经纬度数据作为参数输出
将解析后的经纬度数据,作为参数输出,便于后续转化为中文地址。
1)拖入「参数输出」节点,将 x 值输出为参数 jingdu1 ,y 值输出为参数 weidu1。如下图所示:
2)点击右上角「保存」按钮。
2.7 将百度坐标系经纬度转换成中文
2.6 节已将高德坐标系经纬度数据转换为百度坐标系经纬度数据,并作为参数输出,本节将百度坐标系经纬度数据转换为中文。
2.7.1 设置 API 输入算子
1)将「数据转换」节点拖入「循环容器」中,进入「数据转换」节点,拖入「API输入」算子。
2)「API输入」算子中,请求URL说明如下:
需要用到的请求参数说明:
API 接口说明:逆地理编码
请求参数 | 含义 | 使用说明 |
---|---|---|
location | 根据经纬度坐标获取地址 | ${weidu1},${jingdu1}----注意纬度在前,精度在后 |
ak | 用户申请注册的key,自v2开始参数修改为“ak”,之前版本参数为“key” 申请ak | 本文 2.3 节中申请的密钥 |
output | 输出格式为json或者xml | 本文示例输出为 json 格式 |
coordtype | 坐标的类型,目前支持的坐标类型包括:bd09ll(百度经纬度坐标)、bd09mc(百度米制坐标)、gcj02ll(国测局经纬度坐标,仅限中国)、wgs84ll( GPS经纬度) 坐标系说明 | bd09ll(百度经纬度坐标) |
所以,请求URL为:
https://api.map.baidu.com/reverse_geocoding/v3/?location=${weidu1},${jingdu1}&ak=vUyAM6tIqG4c2FJ3dtNxW3GMt9F62Qfn&output=json&coordtype=bd09ll
「API输入」算子中,取消勾选「将解析后的JSON数据展开为二维表」按钮,不使用二维表形式展示数据,使用 json 格式展示数据,后续使用「JSON 解析」节点统一对数据进行解析。
2.7.2 解析数据
1)拖入「JSON解析」算子,对 2.7.1 节的数据进行解析。不勾选「解析后保留所有上游输出字段」按钮,只保留解析后的字段信息。
选择解析字段:lng、lat、country、province、city、district、town、street、street_number,需注意,勾选节点时,建议勾选该节点的父节点。具体勾选方式请参见下图:
2)点击「数据预览」,如下图所示:
2.7.3 输出数据
1)拖入「DB表输出」算子,将数据输出。如下图所示:
2)点击「字段映射」,删除 lng、lat 字段。
3)点击右上角「保存」按钮。
2.8 效果查看
1)点击「保存并运行」按钮,任务运行成功后,如下图所示:
2)数据库表信息如下图所示: