在Bing地图上绘制多边形奇数行为setLocations

问题描述:

以下是我用于在Bing地图上绘制多边形的所有代码。我的问题是鼠标移动我试图删除多边形中的最后一个点,并将其替换为鼠标当前的位置。当点击发生时,添加一个额外的点来完成所述点,并且它应该在点击时加1点,并且在鼠标移动时应该是点中立(因为它弹出一次并且推一次)。我的问题是,由于某种原因,当我调用Polygon.setLocations(点)时,它会在内部附加一个点到我的多边形。在调用setLocations之前,我已经通过调试进行了验证,在调用setLocations之后,我比我少了1个点。控制台输出显示在代码下面以验证这一点。看起来像库中的一个bug,任何帮助将不胜感激找出如何防止这种情况,它似乎只发生在点的数组大于长度1时,因为当我只有1点时它不会引起这个怪异行为。在Bing地图上绘制多边形奇数行为setLocations

编辑:好吧,它重复了第一个元素在最后,而不是像内部引用自己一样,期望你必须修改倒数第二个索引,否则它有这种行为。

Microsoft.Maps.Events.addHandler(map, 'mousemove', PolygonDrawMouseMove); 

    Microsoft.Maps.Events.addHandler(map, 'click', function (e) { 
     HideInfobox(); 
     HideContextInfobox(); 
     ClearPinSelection(); 
     PolygonDrawClick(e); 
    }); 

    Microsoft.Maps.Events.addHandler(map, 'rightclick', function() { 
     HideInfobox(); 
     HideContextInfobox(); 
     ClearPinSelection(); 
    }); 

var Polygon = null; 
var isDrawingMode = false; 


function PolygonDrawClick(event) { 

    if (isDrawingMode && Polygon !== null && Polygon instanceof Microsoft.Maps.Polygon) 
    { 
     var locations = Polygon.getLocations(); 
     var location = propertyMap.tryPixelToLocation(new Microsoft.Maps.Point(event.getX(), event.getY())); 
     locations.push(location); 
     Polygon.setLocations(locations); 
    } 
} 

function PolygonDrawMouseMove(event) 
{ 
    if (isDrawingMode && Polygon !== null && Polygon instanceof Microsoft.Maps.Polygon) 
    { 
     var points = Polygon.getLocations(); 

     if (points.length > 1) 
     { 
      console.log('start'); 
      console.log(points.length); 
     } 

     if (points.length > 0) 
     { 
      points.pop(); 
     } 

     if (points.length > 1) 
      console.log(points.length); 

     var location = propertyMap.tryPixelToLocation(new Microsoft.Maps.Point(event.getX(), event.getY())); 
     points.push(location); 

     if (points.length > 1) 
      console.log(points.length); 

     Polygon.setLocations(points); 

     if(points.length > 1) 
     { 
      console.log(Polygon.getLocations().length); 
     } 
    } 
} 

function DeletePolygons() { 
    if (!propertyMap) 
     return; 

    for (var i = propertyMap.entities.getLength() - 1; i >= 0; i--) { 
     var polygon = propertyMap.entities.get(i); 
     if (polygon instanceof Microsoft.Maps.Polygon) 
      propertyMap.entities.removeAt(i); 
    } 

    Polygon = null; 
} 

$("#compsMap").keyup(function (event) { 

    //escape 
    if (event.keyCode === 27 && isDrawingMode && Polygon !== null && Polygon instanceof Microsoft.Maps.Polygon) 
    { 
     isDrawingMode = false; 
     var locations = Polygon.getLocations(); 
     if (locations.length > 0) locations.pop(); 

     if (locations.length === 0) 
      DeletePolygons(); 
     else 
      Polygon.setLocations(locations); 
    } 
    else if (event.keyCode === 32 && !isDrawingMode) //space 
    { 
     DeletePolygons(); 
     isDrawingMode = true; 
     Polygon = new Microsoft.Maps.Polygon([new Microsoft.Maps.Location(0,0)], { fillColor: 'rgba(255,212,42,0.6)', strokeColor: '#000000', strokeThickness: 2 }); 
     propertyMap.entities.push(Polygon); 
    } 
}); 

[![screen shot of console output][1]][1] 

这是设计。多边形在V8中自动关闭它们的环以帮助使它们有效。简单地引用它本身并不是正常的,它也不会起作用。