在更新时扩展Azure Map标记

时间:2019-08-22 08:01:50

标签: asp.net-mvc azure json.net azure-web-app-service azure-maps

我在Azure Web app中使用Azure Atlas Map。我想平稳地移动符号而不刷新整个页面。 我对现有代码进行了一些更改。我已经在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
        }
    }

我正在ajax电话中将此电话称为GetJsonMap

1 个答案:

答案 0 :(得分:0)

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

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

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