Bing地图上下文菜单

时间:2011-12-09 16:56:36

标签: javascript html css bing-maps

我只是对使用Bing地图感兴趣,所以我认为它会很棒,所以看看他们的一个例子。所以我从微软的样本中获取了完整的源代码,但它无法正常工作。代码错了还是我做错了什么? 以下是该网站的链接:http://msdn.microsoft.com/en-us/library/aa907681.aspx

这是我的代码:

<html>
<head>
<title>Driving Directions in Bing Maps</title>
<style type="text/css" media="screen">
ul, li {margin:0;padding:0;}

ul.pmenu
{
    position:absolute;
    margin: 0;
    padding: 1px;
    list-style: none;
    width: 150px; /* Width of Menu Items */
    border: 1px solid #ccc;
    background:white;
    display:none;
    z-index:10;
}

ul.pmenu li { position: relative; }

/* Styles for Menu Items */
ul.pmenu li a
{
    display: block;
    text-decoration: none;
    color: black;
    padding: 2px 5px 2px 20px;
}

ul.pmenu li a:hover
{
    background:#335EA8;
    color:white;
}
</style>

<script src="http://dev.virtualearth.net/mapcontrol/v4/mapcontrol.js"></script>
<script>
var map = null;
var popuplat;
var popuplon;
var startpt = null;
var endpt = null;

function OnPageLoad()
{
map = new VEMap('myMap');
map.LoadMap(new VELatLong(-33.7939, 151.1093), 10, 'r', false);
map.SetScaleBarDistanceUnit(VEDistanceUnit.Kilometers);
map.AttachEvent("oncontextmenu", ShowPopupMenu);

}

function ShowPopupMenu(e)
{
popuplat = e.view.LatLong.Latitude;
popuplon = e.view.LatLong.Longitude;
var latlong = map.LatLongToPixel(new VELatLong(popuplat,popuplon));

var x = map.GetLeft();
var y = map.GetTop();

var menu = document.getElementById('popupmenu');
menu.style.display='block'; //Showing the menu
menu.style.left = latlong.x + x; //Positioning the menu
menu.style.top = latlong.y + y;
}

function RemovePopupMenu()
{
var menu = document.getElementById('popupmenu').style.display='none';
}

function SetStart()
{
try {
map.DeletePushpin('start');
} catch(err) {}

startpt = new VELatLong(popuplat, popuplon);
var pin = new VEPushpin('start', startpt, null, 'Start Here', 'Starting point');
map.AddPushpin(pin);

 RemovePopupMenu();
}

function SetEnd()
{
try {
map.DeletePushpin('end');
} catch(err) {

endpt = new VELatLong(popuplat, popuplon);
var pin = new VEPushpin('end', endpt, null, 'pin', 'end');
map.AddPushpin(pin);

 RemovePopupMenu();
}

function GetDirections()
{
map.GetRoute(startpt, endpt, VEDistanceUnit.Kilometers, VERouteType.Quickest, OnGotRoute);

RemovePopupMenu();
}

function OnGotRoute(route)
{
var routeinfo="Route info:\n\n";
routeinfo+="Total distance: ";
routeinfo+=   route.Itinerary.Distance+" ";
routeinfo+=   route.Itinerary.DistanceUnit+"\n";
var steps="";
var len = route.Itinerary.Segments.length;
for(var i = 0; i < len ;i++)
{
  steps+=route.Itinerary.Segments[i].Instruction+" -- (";
  steps+=route.Itinerary.Segments[i].Distance+") ";
  steps+=route.Itinerary.DistanceUnit+"\n";
}
routeinfo+="Steps:\n"+steps;
alert(routeinfo);
}

 </script>
 </head>
<body onload="OnPageLoad();">
<div id="myMap" style="position:relative;width:600px;height:400px;"></div>
<div id="menu">
<ul id="popupmenu" class="pmenu">
<li><a href="#" onclick='SetStart()'>Set Start</a></li>
<li><a href="#" onclick='SetEnd()'>Set End</a></li>
<li><a href="#" onclick='GetDirections()'>Get Directions</a></li>
</ul>
</div>
</body>
     </html>

3 个答案:

答案 0 :(得分:2)

您粘贴的示例代码正在尝试使用Bing Maps控件的第4版,该版本至少已过期4年。 (在复制它的MSDN页面的顶部有一个警告说明)

最新的Bing Maps API是版本7(一年前发布),并且有一套全面的示例脚本,展示了http://www.bingmapsportal.com/ISDK/AjaxV7提供的控件的各种功能

您还可以在http://msdn.microsoft.com/en-us/library/gg427610.aspx

上找到MSDN上的方法参考,开发人员指南和“入门”部分。

我建议您放弃当前的代码,而不是将其重写为版本7。你将来会为自己省去很多麻烦。

答案 1 :(得分:1)

答案 2 :(得分:0)

正如托马斯所说,js不存在,但是here

最重要的是,SetEnd()函数中存在js问题。您应该在第100行附近添加一个结束括号:

      map.AddPushpin(pin);
      RemovePopupMenu();
   }
}

function GetDirections() {

有了这个,你就会得到你的地图,就像这个小提琴一样:http://jsfiddle.net/VEETB/

不接受不完整的答案! :P

相关问题