0

我在我Azure Web app. 我想顺利移动符号而不刷新整个页面。我对现有代码做了一些更改。我在 ajax 调用中设置了一个时间间隔,并在地图中添加了新的符号层。但面临问题。我收到错误

地图未定义。

这是代码

function GetJsonMap(jsondata) {

        if (typeof jsondata !== 'undefined') {
            var gps_data = jsondata;
            for (var i = 0; i < gps_data.length; i++) {
                var point = new atlas.data.Point([gps_data[i][0], gps_data[i][1]]);
                var feature = new atlas.data.Feature(point, { name: gps_data[i][2], description: '[' + gps_data[i][0] + ", " + gps_data[i][1] + ']' });
                datasource.add(feature);
            }

            //Add a layer for rendering point data as symbols.
            var symbolLayer = new atlas.layer.SymbolLayer(datasource, null, {
                iconOptions: {
                    image: 'pin-red'
                }
            });
            debugger;
           // $("#iotmap")
            map.layers.add(symbolLayer); -->getting error here
        }
    }

GetJsonMap在ajax调用中调用它。

4

1 回答 1

0

如果您收到 map 为 null 的错误,则意味着它超出了您的代码范围。它是全局变量还是局部变量?

查看您的代码,我强烈建议您在 mapsready事件触发后创建符号图层,并且只创建一次。Azure Maps 的大多数代码示例都执行此操作。您的代码现在的方式是,每次GetJsonMap调用函数时都会添加一个新层。因此,随着时间的推移,您最终会得到几个试图在地图上呈现相同数据的图层。请注意,数据由数据源管理,图层仅呈现数据源中的内容。

另一个提示,您正在循环并逐个将每个点添加到数据源中。稍微快一点的方法是将所有点添加到数组中,然后将数组添加到数据源中。每次将数据添加到数据源时,它都会尝试更新地图。此外,如果您想覆盖地图上的所有数据,而不是清除数据源然后添加数据,请使用setShapes数据源的功能。这将清除并添加一个功能,并且仅触发地图上的单个渲染更新。

于 2019-08-25T03:52:17.180 回答