如何在Power BI Custom Visuals中设置Bing地图?

时间:2018-08-21 19:42:38

标签: powerbi bing-maps

我正在为Power BI创建自定义视觉,并希望在插件中包含Bing Maps功能。但是,我无法在自定义视觉的javascript类中初始化Bing maps脚本。

这是实现IVisual的类的构造函数的基本代码:

    constructor(options: VisualConstructorOptions) {

        console.log('Visual constructor', options);

        const initializer  = () => {

            if (typeof document !== "undefined") {

                //map setup
                const mapContainerDiv: HTMLElement = document.createElement("div");
                options.element.appendChild(mapContainerDiv);
                mapContainerDiv.id = options.element.id + "_mapDiv";

                const map = new Microsoft.Maps.Map("#" + mapContainerDiv.id,{
                    credentials: "xxx-my-key-xxx"
                });
            }

        };

        const mapScript: HTMLScriptElement = document.createElement("script");
        mapScript.addEventListener("load", event => initializer());
        mapScript.async = true;
        mapScript.defer = true;
        mapScript.src = "https://www.bing.com/api/maps/mapcontrol?callback=GetMap";

        options.element.appendChild(mapScript);

    }

以上使用load事件的代码不起作用,因为我不断从mapcontrol javascript中收到以下错误:

“未捕获的TypeError:无法读取null的属性'prototype'。”

在谷歌搜索时,似乎使用加载事件不适用于最新版本的必应地图,因此必须采用另一种方法。

然后我注释掉了将事件侦听器添加到mapScript标记的行,并将mapScript src行更改为以下行,以便使用Bing Maps推荐的触发回调的方式:

mapScript.src = "https://www.bing.com/api/maps/mapcontrol?callback=initializer";

从不调用回调函数。

然后我尝试将初始化函数移到构造函数之外,并将其声明为类的公共字段,但这也不起作用。

在这种情况下初始化Bing地图的正确方法是什么?我所见过的所有文档都表明,您必须在全局范围或页面上的脚本标签中为Bing maps脚本URL创建回调,但是在Power BI自定义视图中,我只能操作自定义javascript实现IVisual的类。 Power BI中Microsoft的默认地图插件使用Bing Maps作为引擎,因此我知道一定有可能实现,我只是不确定采用哪种方法。

0 个答案:

没有答案