虚拟地球鸟瞰视图取中心点坐标的办法
2009年12月24日不知微软出于什么考虑,虚拟地球(Virtual Earth)在使用鸟瞰视图(Bird’s Eye)工作模式时,利用GetCenter()函数取中心点坐标时返回的Latitude和Longitude值都是null。可能是鸟瞰视图太方便了,如果提供了坐标容易遭到恐怖袭击吧:) 查看文档得到的唯一信息是:返回的是一个加密的(encrypted)坐标,利用脚本debug来看的话,的确有个“_reserved”变量存放了一串加密的字符串。好在VE有个文档中没有说明的函数可以对它进行解密,这样我们就可得到正常的坐标了。
窍门就是使用“(new _xy1).Decode()”函数,例子代码如下:
<!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=6.2"></script> <script type="text/javascript"> var map = null; function GetMap() { map = new VEMap('myMap'); map.LoadMap(); map.SetCenterAndZoom(new VELatLong(40.71259842942254,-74.00669574737549), 15); map.SetMapStyle(VEMapStyle.Birdseye); } function GetCenterLatLong() { if (map.GetMapStyle() == VEMapStyle.Birdseye || map.GetMapStyle() == VEMapStyle.BirdseyeHybrid) { var center = map.GetCenter(); return (new _xy1).Decode(center); } else { return map.GetCenter(); } } function DisplayCenter() { var center = GetCenterLatLong(); alert("Latitude: " + center.Latitude + "\nLongitude: " + center.Longitude); } </script> </head> <body onload="GetMap();"> <input type="button" value="获取中心点坐标" onclick="DisplayCenter();"/> <div id='myMap' style="position:relative; width:400px; height:400px;"></div> </body> </html> |