PowerBI 从地址获取经纬度 - 使用高德地图服务
PowerBI 默认使用 BING 地图。
如果你正分析的内容是国家,省份,区县,城市级别的内容,那么通常可以通过设置处理。
但如果你要分析或显示更加细节的内容,则可能需要使用经纬度了。
业务场景
我们常常分析一些店铺,这些店铺通常都有这样的属性:
城市,街道,详细地址。
如果我们要系统化显示一堆店铺的销售状况,那么用默认地图由于不能识别这些中文位置的具体地点,导致显示上无法正确给出。
因此,我们想到可以先将某地点的具体地址信息转换为经纬度信息再进行显示即可。
在常见的地图服务中,都提供了将具体地址转为经纬度的方法。本文以高德地图为例进行说明。
基本原理概述
Power BI 的可视化控件提供了通用地图, 并可以基于经纬度进行显示。
中国各个细节地址对应的经纬度可以利用中国成熟的地图供应商服务进行获取。
获取的时候使用 Web 服务的形式,并通过 JSON 方式返回结果,这可以在 Power Query 中使用。
对于某个表的具体地址,可以使用使用这样的转换就可以得到经纬度。
注册高德地图服务
可以在这里注册高德地图服务,如下:
https://lbs.amap.com/
注册完成后,可以登录我的控制台,如下:
这里的应用可以随意填写,例如:
应用名称:我的地图应用
应用类型:任选一个
接着,在这个应用下,注册一个 KEY 用来做连接服务时候的唯一标识,如下:
填写说明:
Key 名称:可以任意填写一个自己可以记住的名字。如:Test。
服务平台:必须选择 Web 服务
服务平台选择 Web 服务是为了可以在 Power Query 阶段直接使用它,更加简单。
注册完成后,我们就可以得到一个 Key 了。
这个 Key 非常重要,它是我们持续使用高德地图服务的唯一标识。
要收费吗
由于地图服务是非常普遍的,因此,高德地图为普适的需求提供了一定的免费额度,而这个额度是完全够用的。如下:
你可以每天匹配 30 W 次查询。
查询模板
这里直接给出 Power BI 中的查询模板,如下:
// GaoDe_GetLatLngFromAddress
let
源 = (GaoDe_Map_Key as text, GaoDe_Map_Address as any, GaoDe_Map_ScopeCity as any) => let
源 = Json.Document(Web.Contents("https://restapi.amap.com/v3/geocode/geo?key=" & GaoDe_Map_Key & "&address=" & GaoDe_Map_Address & "&city=" & GaoDe_Map_ScopeCity )),
转换为表 = Table.FromRecords({源}),
#"展开的“geocodes”" = Table.ExpandListColumn(转换为表, "geocodes"),
#"展开的“geocodes”1" = Table.ExpandRecordColumn(#"展开的“geocodes”", "geocodes", {"formatted_address", "country", "province", "citycode", "city", "district", "township", "neighborhood", "building", "adcode", "street", "number", "location", "level"}, {"formatted_address", "country", "province", "citycode", "city", "district", "township", "neighborhood", "building", "adcode", "street", "number", "location", "level"}),
删除的其他列 = Table.SelectColumns(#"展开的“geocodes”1",{"formatted_address", "country", "province", "citycode", "city", "district", "adcode", "location", "level"}),
重命名的列 = Table.RenameColumns(删除的其他列,{{"formatted_address", "匹配到地址"}, {"country", "国家"}, {"province", "省份"}, {"citycode", "城市代码"}, {"city", "城市"}, {"district", "区县"}, {"adcode", "地址代码"}, {"location", "经纬度"}, {"level", "匹配级别"}}),
按分隔符拆分列 = Table.SplitColumn(重命名的列, "经纬度", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), {"经纬度.经度", "经纬度.纬度" }),
更改的类型 = Table.TransformColumnTypes(按分隔符拆分列,{{"城市代码", type text}, {"地址代码", type text}, {"经纬度.经度", type number}, {"经纬度.纬度", type number}})
in
更改的类型
in
源
我们可以这样操作,如下:
新建一个空白查询,如下:
打开高级编辑器,然后复制粘贴上述内容,如下:
可以修改该查询为:
将已经注册的高德地图 Key 输入,相关参数含义如下:
GaoDe_Map_Key:高德地图 Key,从上文注册流程获取。
GaoDe_Map_Address:要搜索的地址。
GaoDe_Map_ScopeCity:在什么城市里搜索这个地址。
以上图为例,可得:
竖着看起来的结果,实际应该使用横着的表格。
模板函数
在 Power Query 中,具有参数的自定义查询,我们称之为模板函数。
我们可以在实际的数据中通过模板函数来进行扩展。
我们可以对一个已知的表格调用自定义函数,如下:
选择已经准备好的模板函数,如下:
调用后可以选择需要的列,如下:
这样就得到了已知数据中地址的经纬度。
总结
本文给出了通过高德 API 将已知数据地址转为经纬度的通用方法,可以直接使用。
在订阅了BI佐罗讲授的《BI真经》之《BI进行时》课程区,可以下载本文案例。
Power BI 终极系列课程《BI真经》
BI真经 - 让数据真正成为你的力量
扫码与精英一起讨论 Power BI,验证码:data2021
点击“阅读原文”进入学习中心
↙