百度地图的求助

cyyjm 2018-09-02 09:27:20
我想实现这样的功能。
在百度地图上展示一些点(marker),这些点都有label,然后每隔几秒,就更新一下label的内容。 现在有两个问题。
1、如果前后label的内容长度不一样,后面的label内容少的话,还是会展示出前一个label的内容。就像下面那样。

2、我定时更新的时候,控制台会提示错误。


代码如下:

function refreshPage() {
var allOverlay = map.getOverlays();
for (var i = 0; i < allOverlay.length -1; i++) {
var keyword = allOverlay[i].name;
var thatMarker = allOverlay[i];
$.ajax({
url:'queryOK2.php',
dataType:"json",
type:"POST",
data:{"keyword":keyword},
async:false,
success:function(json) {
var temp='';
for (var y = 0; y < json.length; y++) {
temp += json[y].name + ":" + json[y].value + " ";
}
var label = new BMap.Label(temp, { offset: new BMap.Size(-10, 25) });
//console.log(temp);
//console.log(label);
thatMarker.setLabel(label);

}
});
}

}
//window.onload = setTimeout(refreshPage,3000);
window.onload = setInterval(refreshPage,3000);
...全文
165 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
cyyjm 2018-09-03
  • 打赏
  • 举报
回复
有两个数组。
var json = [
{"id":"1257","value":"0.39","time":"2018/9/3 10:40:30","name":"临东水厂压力"},
{"id":"1258","value":"0.313","time":"2018/9/3 10:40:30","name":"临东水厂水位"},
{"id":"1259","value":"0.382","time":"2018/9/3 10:40:30","name":"龙划水厂压力"},
{"id":"1260","value":"0.176","time":"2018/9/3 10:40:30","name":"龙划水厂水位"},
{"id":"1261","value":"0.36","time":"2018/9/3 10:40:30","name":"平乐水厂压力"},
{"id":"1262","value":"0.27","time":"2018/9/3 10:40:30","name":"平乐水厂水位"},
{"id":"1263","value":"0.266","time":"2018/9/3 10:40:30","name":"圆岭小区泵前"},
{"id":"1264","value":"0.36","time":"2018/9/3 10:40:30","name":"圆岭小区泵后"},

]
var allOverlay= [
{"name":"临东水厂","leixing":"水厂","coordinate":"110.344492,21.137511"},
{"name":"平乐水厂","leixing":"水厂","coordinate":"110.407909,21.245864"},
{"name":"圆岭小区","leixing":"二次加压","coordinate":"110.420287,21.232615"},
{"name":"海滨水厂","leixing":"水厂","coordinate":"110.420588,21.219622"},
{"name":"龙划水厂","leixing":"水厂","coordinate":"110.402404,21.181497"}


];
然后,我怎么通过allOverlay[i].name来获取到对应json下的value
cyyjm 2018-09-03
  • 打赏
  • 举报
回复
按照你的思路,我该怎么改成一次请求再加载呢?因为我是模糊匹配的。例如:allOverlay[i].name="李三",而json[y].name=“李三的能力”
应该可以使用正则表达式的,但是,不懂怎么使用。
现在label我固定住大小了,应该就不会出现那样
nayi_224 2018-09-03
  • 打赏
  • 举报
回复
setLabel是market的方法,getOverlays()可能会返回其他类型的对象。需要做一个类型判断。
重设label可以map.clearOverlays();再重新加载。(还是要注意类型判断)
你的这种请求方法太耗资源了。应该一次请求后循环加载,而不是循环请求加载。

87,922

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧