虚拟地球鸟瞰视图取中心点坐标的办法

2009年12月24日

不知微软出于什么考虑,虚拟地球(Virtual Earth)在使用鸟瞰视图(Bird’s Eye)工作模式时,利用GetCenter()函数取中心点坐标时返回的Latitude和Longitude值都是null。可能是鸟瞰视图太方便了,如果提供了坐标容易遭到恐怖袭击吧:)  查看文档得到的唯一信息是:返回的是一个加密的(encrypted)坐标,利用脚本debug来看的话,的确有个“_reserved”变量存放了一串加密的字符串。好在VE有个文档中没有说明的函数可以对它进行解密,这样我们就可得到正常的坐标了。

窍门就是使用“(new _xy1).Decode()”函数,例子代码如下:

?View Code JAVASCRIPT
<!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>




标签: , ,
归类: 地图

Leave a Reply

*

您也可以使用微博账号登陆