javascript - JS调用百度地图的删除标注功能时出现getLabel().content为空或者不是对象
巴扎黑
巴扎黑 2017-04-10 15:28:52
[JavaScript讨论组]

我在C#调用JS进行百度地图定位,其中C#不断传入经纬度,然后js进行标注,在更新标注时我采用删除重复的标注然后再标注过来的数据。这是js代码
function DrawPoint()
{
var Array = [];

var total_num =3;
for( var i=0;i<total_num;i++)
{
Array.push(window.external.Getpoints(i));
}
var point = new BMap.Point(Array[0], Array[1]);

deletePoint(Array[2]);
trans(Array[0], Array[1]);

}
translateCallback=function addaddess(point)
{
var Array = [];
var total_num = 3;
for (var i = 0; i < total_num; i++) {
Array.push(window.external.Getpoints(i));
}
var Carnum = Array[2];
var marker=new BMap.Marker(point);
map.addOverlay(marker);
var label = new BMap.Label(Carnum, { "offset": new BMap.Size(9, -15) });
marker.setLabel(label);
map.setZoom(14);
}
function trans(x,y){
var BDPoint=new BMap.Point(x,y);
BMap.Convertor.translate(BDPoint,0,translateCallback); //真实经纬度转成百度坐标
}

function deletePoint(num) {
var allOverlay = map.getOverlays();
for (var i = 1; i < allOverlay.length; i++) {

if (allOverlay[i].getLabel().content == num) {

        map.removeOverlay(allOverlay[i]);
        return false;
    }
}

}
在运行的时候第一个点可以标注,到第二个点时就有可能会出现getLabel().content,可是我用alert("marker的名称是"+allOverlay[i].getLabel().content);显示数据是对的。搞不懂这是为什么,求大神指导。

巴扎黑
巴扎黑

全部回复(2)
怪我咯

同求结果
,不过我发现这个跟缓存似乎有关系,彻底清空缓存后,一切正常,重新打开页面或者刷新了页面,这个问题必然出现
不知道是不是百度api的bug

已找到解决方法,先判断overlay类型,在调用对应类型的的方法
function getMapLabel(imei) {

                var reLable = null;
                var allOverlay = map.getOverlays();
                for (var i = 0; i < allOverlay.length - 1; i++) {
                    if (allOverlay[i].toString() == "[object Marker]") {
                        if (allOverlay[i].getTitle() == imei) {
                            reLable = allOverlay[i].getLabel();
                            break;
                        }
                    }
                }
                return reLable;
            }
ringa_lee
 function deletePoint() {//删除标注点
       //getMapLabel();
        var allOverlay = map.getOverlays();
        for (var i = 0; i < allOverlay.length - 1; i++) {
            console.log(allOverlay[i].toString() )
            if (allOverlay[i].toString() == "[object Marker]") {
                if (allOverlay[i].getLabel().content == "当前所在位置") {
                    map.removeOverlay(allOverlay[i]);
                      //console.log(allOverlay[i])
                    return false;
                }
            }

        }
    };
    
    
   楼上的回答真的很有帮助,我解决了!
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号