PowerBI 默認地圖最佳實踐
- 2019 年 10 月 6 日
- 筆記

此前寫過PowerBI地圖解決方案,但仍然比較複雜,隨著PowerBI最近的更新,我們來研究下最佳的使用實踐。我們先來看下效果:

如果這個圖你沒有感覺,那麼來看這個圖:

好吧,如果這個圖你還是沒有感覺,那麼再來看這個圖:

這裡呈現了熱力地圖,這屬於非常基礎的內容就不再贅述。我們現在要來看BING地圖的問題以及如何解決了。
問題1:如果某個地方顯示錯位怎麼辦?例如把中國的城市顯示到日本去。 問題2:如果某個地方顯示得不精確怎麼辦?不是真正你希望看到的位置。 問題3:無法解析某個具體的位置怎麼辦?例如中國著名核工業小鎮「低窩鋪」。
問題1:顯示錯位

很明顯顯示的位置不對。
問題2:顯示得不精確

很明顯對於省份的顯示應該顯示在省會城市上,而實際是不一定如此的。
問題3:無法解析某個具體的位置
正常情況下,南通客運站是無法顯示出來的,因為無法精確定位。

解決方案:經緯度
為了解決上述問題,我們需要一個經緯度表來準確定義這些位置。每一個點都有一個唯一的經緯度來對應。

經緯度表
我們在Excel中維護這個經緯度表如下:
【省級】

【市級】

這裡對經緯度表進行了編碼,並與維護他們的父子關係。當然,大家可以舉一反三,再添加縣級或鄉鎮級乃至自定義級均可。
注意,為了可以擴展以及用戶自定義叫法的考慮,這裡還留有自定義名稱欄位。
計算經緯度
? 技巧 PowerBI中BING地圖可視化對象可以在經緯度處放置度量值。
這裡製作兩個度量值來分別提取省市的經緯度坐標。同時考慮到層級關係,定義度量值如下:
Latitude = IF ( ISINSCOPE ( '城市'[城市] ), SELECTEDVALUE ( '城市'[緯度] ), SELECTEDVALUE ( '省份'[緯度] ) )
以及:
Longtidude = IF ( ISINSCOPE ( '城市'[城市] ), SELECTEDVALUE ( '城市'[經度] ), SELECTEDVALUE ( '省份'[經度] ) )
這樣一來,就可以很容易的解決問題,並同時兼顧了層級問題,其中ISINSCOPE
用來判斷當前的層級以進行正確的計算。
問題1解決:修復顯示錯位

可以看出,數據點全部精確顯示在我們國家的地圖內部的準確位置了。
問題2解決:修復顯示不精確
要想顯示精確,我們必須知道某個城市在BING地圖中的坐標,這裡可以藉助BING的API工具,如果你不知道是什麼意思也不要緊。Excel120為大家提供了一個免費的簡單方法。
API網址:
https://dev.virtualearth.net/REST/v1/Locations/{地點名稱}?o=xml&key=AsEOe_l0spE058w1vLXNKTCFQ72el–B6WrqTAS5dvVlA4GJNYpHFmrEPqcRWgyk
請在瀏覽器輸入上述內容,並替換{地點名稱}為實際名稱,例如:石家莊。結果如下:

值得注意的是上面的紅色高亮資訊就顯示了真正的地點以及經緯度。值得一提的是這裡的名字被自動轉成了英文。在中國有一個很有意思的地方是:山西和陝西,你知道他們的英文名字嗎?我們用這個方法來試試看。

以及:

可以看出一個叫shaanxi,一個叫shanxi,是不同的。
用這種方法,我們就可以找到一個地點的精確經緯度。
問題3解決:解析具體的位置
例如:南通客運站。
這就無法讓BING解析出來,大家可以自行嘗試。既然無法解析,這裡我們轉用百度地圖來解析。分享給大家一個工具:
http://api.map.baidu.com/lbsapi/getpoint/index.html
它可以幫我們直接在地圖上選取地點,如下:

我們找到南通客運站,如下:

我們得到了這個經緯度坐標,我們將它填寫進入我們的地理位置表,如下:

我們返回到PowerBI的BING地圖,來看:

可以發現其大致的位置是對的,但是有一定偏差,目前這個偏差無法修正。但對於精確到城市或要求精確度不是特別高的場景已經夠用了。
總結
這裡通過使用一個地理位置配置表以及BING地圖API及輔助工具來實現獲取經緯度以便實現對地圖的準確控制。