PowerBI 從地址獲取經(jīng)緯度 - 使用高德地圖服務(wù)

PowerBI 默認使用 BING 地圖。
如果你正分析的內(nèi)容是國家,省份,區(qū)縣,城市級別的內(nèi)容,那么通常可以通過設(shè)置處理。
但如果你要分析或顯示更加細節(jié)的內(nèi)容,則可能需要使用經(jīng)緯度了。
業(yè)務(wù)場景
我們常常分析一些店鋪,這些店鋪通常都有這樣的屬性:
城市,街道,詳細地址。
如果我們要系統(tǒng)化顯示一堆店鋪的銷售狀況,那么用默認地圖由于不能識別這些中文位置的具體地點,導(dǎo)致顯示上無法正確給出。
因此,我們想到可以先將某地點的具體地址信息轉(zhuǎn)換為經(jīng)緯度信息再進行顯示即可。
在常見的地圖服務(wù)中,都提供了將具體地址轉(zhuǎn)為經(jīng)緯度的方法。本文以高德地圖為例進行說明。
基本原理概述
Power BI 的可視化控件提供了通用地圖, 并可以基于經(jīng)緯度進行顯示。
中國各個細節(jié)地址對應(yīng)的經(jīng)緯度可以利用中國成熟的地圖供應(yīng)商服務(wù)進行獲取。
獲取的時候使用 Web 服務(wù)的形式,并通過 JSON 方式返回結(jié)果,這可以在 Power Query 中使用。
對于某個表的具體地址,可以使用使用這樣的轉(zhuǎn)換就可以得到經(jīng)緯度。
注冊高德地圖服務(wù)
可以在這里注冊高德地圖服務(wù),如下:
https://lbs.amap.com/

注冊完成后,可以登錄我的控制臺,如下:

這里的應(yīng)用可以隨意填寫,例如:
應(yīng)用名稱:我的地圖應(yīng)用
應(yīng)用類型:任選一個
接著,在這個應(yīng)用下,注冊一個 KEY 用來做連接服務(wù)時候的唯一標(biāo)識,如下:

填寫說明:
Key 名稱:可以任意填寫一個自己可以記住的名字。如:Test。
服務(wù)平臺:必須選擇 Web 服務(wù)
服務(wù)平臺選擇 Web 服務(wù)是為了可以在 Power Query 階段直接使用它,更加簡單。
注冊完成后,我們就可以得到一個 Key 了。
這個 Key 非常重要,它是我們持續(xù)使用高德地圖服務(wù)的唯一標(biāo)識。
要收費嗎
由于地圖服務(wù)是非常普遍的,因此,高德地圖為普適的需求提供了一定的免費額度,而這個額度是完全夠用的。如下:

你可以每天匹配 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 )),
轉(zhuǎn)換為表 = Table.FromRecords({源}),
#"展開的“geocodes”" = Table.ExpandListColumn(轉(zhuǎn)換為表, "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", "區(qū)縣"}, {"adcode", "地址代碼"}, {"location", "經(jīng)緯度"}, {"level", "匹配級別"}}),
按分隔符拆分列 = Table.SplitColumn(重命名的列, "經(jīng)緯度", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), {"經(jīng)緯度.經(jīng)度", "經(jīng)緯度.緯度" }),
更改的類型 = Table.TransformColumnTypes(按分隔符拆分列,{{"城市代碼", type text}, {"地址代碼", type text}, {"經(jīng)緯度.經(jīng)度", type number}, {"經(jīng)緯度.緯度", type number}})
in
更改的類型
in
源我們可以這樣操作,如下:

新建一個空白查詢,如下:

打開高級編輯器,然后復(fù)制粘貼上述內(nèi)容,如下:

可以修改該查詢?yōu)椋?/p>

將已經(jīng)注冊的高德地圖 Key 輸入,相關(guān)參數(shù)含義如下:
GaoDe_Map_Key:高德地圖 Key,從上文注冊流程獲取。
GaoDe_Map_Address:要搜索的地址。
GaoDe_Map_ScopeCity:在什么城市里搜索這個地址。
以上圖為例,可得:

豎著看起來的結(jié)果,實際應(yīng)該使用橫著的表格。
模板函數(shù)
在 Power Query 中,具有參數(shù)的自定義查詢,我們稱之為模板函數(shù)。
我們可以在實際的數(shù)據(jù)中通過模板函數(shù)來進行擴展。
我們可以對一個已知的表格調(diào)用自定義函數(shù),如下:

選擇已經(jīng)準(zhǔn)備好的模板函數(shù),如下:

調(diào)用后可以選擇需要的列,如下:

這樣就得到了已知數(shù)據(jù)中地址的經(jīng)緯度。
總結(jié)
本文給出了通過高德 API 將已知數(shù)據(jù)地址轉(zhuǎn)為經(jīng)緯度的通用方法,可以直接使用。
在訂閱了BI佐羅講授的《BI真經(jīng)》之《BI進行時》課程區(qū),可以下載本文案例。

Power BI 終極系列課程《BI真經(jīng)》

BI真經(jīng) - 讓數(shù)據(jù)真正成為你的力量
掃碼與精英一起討論 Power BI,驗證碼:data2021
點擊“閱讀原文”進入學(xué)習(xí)中心
↙
