解决方案 »

  1.   

    逻辑不需要这么复杂吧,起止点应该可以随意设置,只要定义两个变量记录起止点,保证只有一个起点一个终点就可以了。
    像这样,在script中加上两个变量:
    var startPoint, endPoint; // 这两个变量记录起止点
    菜单改成: var txtMenuItem = [{
    text: '以此为起点',
    callback: function (e) {
    start(e);//调用自定义起点标注方法
    if (startPoint)
    map.removeOverlay(startPoint); // 清除原来的起点,如果有的话
    map.addOverlay(startPoint = mkr); // 加上新的起点
    }
    }, {
    text: '以此为终点',
    callback: function (e) {
    end(e);//调用自定义终点标注方法
    if (endPoint)
    map.removeOverlay(endPoint); // 清楚原来的终点,如果有的话
    map.addOverlay(endPoint = mkr02); // 加上新的终点
    }
    }, {

    }];ZoomControlDistance中的div.click改成: div.onclick = function(e) {
        if (!startPoint && !endPoint)
            alert("请右键设置起点和终点");
        else if (!startPoint)
            alert("请选择起点");
        else if (!endPoint)
            alert("请选择终点");
        else {
            drive = new BMap.DrivingRoute(map, {
                renderOptions: {
                    map: map,
                    panel: 'panel',
                    autoViewport: true,
                },
                policy: BMAP_DRIVING_POLICY_LEAST_DISTANCE //选择最短距离作为驾车方案
            });
            map.clearOverlays(); // 清楚起止点标记
            drive.search(startPoint.getPosition(), endPoint.getPosition()); // 画线路
            startPoint = endPoint = null; // 清楚起止点记录变量
        }
    };
      

  2.   

    谢谢了,我思维有问题,没想到用一个变量代替Marker,只操作那个变量,移除时不用操作Marker对象。对于第二个问题,怎么解决?
      

  3.   

    第二个问题可能是浏览器兼容性的问题,我发现只要调用 map.addOverlay(polyline)画折线后,右键菜单就会失灵。这个应该是百度地图的问题,要解决的话就要分析它的源码了。
      

  4.   

    也许吧,IE可以运行的,谷歌浏览器和Flex AIR中调用html就运行不了,后面两个兼容应该是统一的
    再次表示感谢!
      

  5.   

    对于这个代码,只是在flex中调用失效,谷歌浏览器中可以,右键菜单的反复点击距离测量不会失效
      

  6.   

    flex中的html组件用的是webkit引擎,相当于safari,但是有一些功能不支持(用safari测也是没问题的)
    http://help.adobe.com/en_US/as3/dev/WS5b3ccc516d4fbf351e63e3d118666ade46-7fb1.html你可以把问题简化(html页面上只留下右键菜单和添加折线覆盖物),然后提交一个bug给百度,看他们能不能改下。
      

  7.   

    你们好!各位大神! 为什么我用这个起点终点图标为NULL 找不到呀