更新时扩展 Azure 映射标记



我在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

如果您收到映射为 null 的错误,则表示它超出了代码的范围。它是全局变量还是局部变量?

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

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