将地图视口点击位置转换为地图坐标(Bing地图)

时间:2014-06-24 01:28:46

标签: javascript canvas map bing-maps

所以我在Bing JavaScript v7地图上覆盖了canvas,其想法是当用户点击画布时,它会在同一点后面的地图中创建一个图钉。

然而,在我目前使用的kludged代码中,总是将图钉置于错误的位置。小提琴参考; http://jsfiddle.net/89SCq/2/

如何修复数学以使其工作?注意:我必须使用重叠的画布,而不是直接在地图上捕获点击事件。

2 个答案:

答案 0 :(得分:1)

你为什么使用画布?为什么不直接向地图添加点击事件:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
  <title></title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

  <script type="text/javascript" src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=7.0"></script>
  <script type="text/javascript">
    var map;

    function GetMap()
    {   
        map = new Microsoft.Maps.Map(document.getElementById("myMap"), { 
            credentials: "YOUR_BING_MAPS_KEY"
        });

        Microsoft.Maps.Events.addHandler(map, 'click', addPushpin);
    }

    function addPushpin(e){
        var loc = map.tryPixelToLocation(new Microsoft.Maps.Point(e.getX(), e.getY()));
        var pin = new Microsoft.Maps.Pushpin(loc);
        map.entities.push(pin);
    }
    </script>
</head>
<body onload="GetMap();">
    <div id='myMap' style='position:relative;width:800px;height:600px;'></div>
</body>
</html>

答案 1 :(得分:1)

好的,如果你必须使用画布,你可以计算画布上用户点击的像素坐标,然后通过相对于地图控件位置的tryPixelToLocation方法传递它们。以下是点击事件的更新版本:

$("canvas").click(function(e){
    var relativeX = e.pageX - this.offsetLeft;
    var relativeY = e.pageY - this.offsetTop;

    var loc = map.tryPixelToLocation(new Microsoft.Maps.Point(relativeX, relativeY), Microsoft.Maps.PixelReference.control);

    // push pin; location is top right corner in degs plus a portion of map degree dimension based on relative click pos
    map.entities.push(
        new Microsoft.Maps.Pushpin(loc, null)
    );

    // DEBUG; zoom out to show marker pos
    map.setView({ zoom: 9 });    
});