
此前写过PowerBI地图解决方案,但仍然比较复杂,随着PowerBI最近的更新,我们来研究下最佳的使用实践。我们先来看下效果:

如果这个图你没有感觉,那么来看这个图:

好吧,如果这个图你还是没有感觉,那么再来看这个图:

这里呈现了热力地图,这属于非常基础的内容就不再赘述。我们现在要来看BING地图的问题以及如何解决了。
问题1:如果某个地方显示错位怎么办?例如把中国的城市显示到日本去。 问题2:如果某个地方显示得不精确怎么办?不是真正你希望看到的位置。 问题3:无法解析某个具体的位置怎么办?例如中国著名核工业小镇“低窝铺”。

很明显显示的位置不对。

很明显对于省份的显示应该显示在省会城市上,而实际是不一定如此的。
正常情况下,南通客运站是无法显示出来的,因为无法精确定位。

解决方案:经纬度
为了解决上述问题,我们需要一个经纬度表来准确定义这些位置。每一个点都有一个唯一的经纬度来对应。

我们在Excel中维护这个经纬度表如下:
【省级】

【市级】

这里对经纬度表进行了编码,并与维护他们的父子关系。当然,大家可以举一反三,再添加县级或乡镇级乃至自定义级均可。
注意,为了可以扩展以及用户自定义叫法的考虑,这里还留有自定义名称字段。
? 技巧
PowerBI中BING地图可视化对象可以在经纬度处放置度量值。
这里制作两个度量值来分别提取省市的经纬度坐标。同时考虑到层级关系,定义度量值如下:
Latitude =
IF (
ISINSCOPE ( '城市'[城市] ),
SELECTEDVALUE ( '城市'[纬度] ),
SELECTEDVALUE ( '省份'[纬度] )
)
以及:
Longtidude =
IF (
ISINSCOPE ( '城市'[城市] ),
SELECTEDVALUE ( '城市'[经度] ),
SELECTEDVALUE ( '省份'[经度] )
)
这样一来,就可以很容易的解决问题,并同时兼顾了层级问题,其中ISINSCOPE用来判断当前的层级以进行正确的计算。

可以看出,数据点全部精确显示在我们国家的地图内部的准确位置了。
要想显示精确,我们必须知道某个城市在BING地图中的坐标,这里可以借助BING的API工具,如果你不知道是什么意思也不要紧。Excel120为大家提供了一个免费的简单方法。
API网址:
https://dev.virtualearth.net/REST/v1/Locations/{地点名称}?o=xml&key=AsEOe_l0spE058w1vLXNKTCFQ72el--B6WrqTAS5dvVlA4GJNYpHFmrEPqcRWgyk
请在浏览器输入上述内容,并替换{地点名称}为实际名称,例如:石家庄。结果如下:

值得注意的是上面的红色高亮信息就显示了真正的地点以及经纬度。值得一提的是这里的名字被自动转成了英文。在中国有一个很有意思的地方是:山西和陕西,你知道他们的英文名字吗?我们用这个方法来试试看。

以及:

可以看出一个叫shaanxi,一个叫shanxi,是不同的。
用这种方法,我们就可以找到一个地点的精确经纬度。
例如:南通客运站。
这就无法让BING解析出来,大家可以自行尝试。既然无法解析,这里我们转用百度地图来解析。分享给大家一个工具:
http://api.map.baidu.com/lbsapi/getpoint/index.html
它可以帮我们直接在地图上选取地点,如下:

我们找到南通客运站,如下:

我们得到了这个经纬度坐标,我们将它填写进入我们的地理位置表,如下:

我们返回到PowerBI的BING地图,来看:

可以发现其大致的位置是对的,但是有一定偏差,目前这个偏差无法修正。但对于精确到城市或要求精确度不是特别高的场景已经够用了。
这里通过使用一个地理位置配置表以及BING地图API及辅助工具来实现获取经纬度以便实现对地图的准确控制。