我在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
。
答案 0 :(得分:0)
如果您收到一个错误,认为map为null,则意味着它超出了代码范围。是全局变量还是局部变量?
查看您的代码,我强烈建议您在地图ready
事件触发后创建符号图层,并且只创建一次。 Azure Maps的大多数代码示例都这样做。现在的代码方式是,每次调用GetJsonMap
函数时,它将添加一个新层。这样,随着时间的推移,您将最终获得多个图层,这些图层将尝试在地图上呈现相同的数据。请注意,数据是由数据源管理的,图层仅呈现数据源中的内容。
另一个提示,您正在遍历并将每个点逐一添加到数据源。一种更快的方法是将所有点添加到数组,然后将数组添加到数据源。每次将数据添加到数据源时,它都会尝试更新地图。此外,如果要覆盖地图上的所有数据,而不是清除数据源然后添加数据,请使用数据源的setShapes
函数。这将执行清除并添加一个功能,并且只会在地图上触发一次渲染更新。