分享
 
 
 

由神秘到简单 教你在网页中添加微软地图

王朝html/css/js·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

自Google推出地图服务以后,微软和百渡也相继推出地图服务。地图成为目下网络流行的时尚,如果你想追赶它,那么来吧,我将会帮助你学会使用微软的Virtual Earth Map Control,为你的网站添加一道亮丽的风景。

本文最终效果图:

MapControl控件

Virtual Earth Map Control脚本可以在MSN网站下载:http://virtualearth.msn.com/js/MapControl.js

当然你可以直接在网站中链接这个脚本,但这会导致一些安全上的问题,因为缺省情况下大部分的浏览器不会允许来自其他的不是当前正在浏览的站点的JavaScript程序运行。使用者必须确认他们允许来自VirtualEarth的脚本运行,这样会给用户不爽的感觉。

简单的方式就是下载MapControl.js文件到你的站点,这样就可以轻松访问并进行编程了。

创建Map Control实例

为了创建一个Map Control实例,你需要在你的页面里写一个小方法。这将会创建一个MapControl的实例,在页面上放置它,并设置control里初始显示的内容。

VE_MapControl的构造函数原型如下:

VE_MapControl(Latitude, Longitude, Zoom, MapStyle, PositionType, Left, Top, Width, Height);

Latitude:在control里显示的地图中心的纬度;

Longitude:在control里显示的地图中心的经度;

Zoom:显示地图的缩放尺度。可以设置为2到18的数。2是允许的最远的俯瞰距离,18是允许的最近的俯瞰距离。

MapStyle:显示地图的风格。目前有3种式样可选:高空的(aerial),道路的(road)和混合的(hybrid)。用每种式样的首字母小写来代表该式样。

·a-aerial:显示高空的卫星图像。

·r-road:显示地区的街道地图;

·h-hybrid:显示以上两者的结合,卫星图像将和道路和位置信息重叠在一起。

PositionType:control在页面上的放置的方式,可选项为相对(relative)和绝对(absolute)。

Left:control左边在页面上的位置。

Top:control上部在页面上的位置。

Width:control宽度。

Height:control高度。

例子:

map = new VE_MapControl(32.69, -117.13, 12, ’r’, "absolute", 400, 10, 400, 300);

一个简单的具有Virtual Earth map control的页面可以如下创建:

<html>

<head>

<title>My Virtual Earth</title>

<script src="MapControl.js"></script>

<script>

var map = null;

function OnPageLoad()

{

map = new VE_MapControl(32.69, -117.13, 12, ’r’, "absolute", 10, 100, 700, 500);

document.body.appendChild(map.element);

map.onEndContinuousPan = function(e)

{

document.getElementById("info").innerHTML =

’Latitude = ’ + e.latitude +

’, Longitude = ’ + e.longitude +

’, Zoom=’ + e.zoomLevel;

}

}

</script>

</head>

<body onLoad="OnPageLoad()">

<div id="info" style="font-size:10pt">

</div>

</body>

</html>

效果图如下所示,你可以使用一些control的特性:

·拖动整个地图刷新显示

·使用鼠标滚轮进行缩放

·双击某个地点进行放大

从Map Control接收事件

当control上显示的地图变化的时候,map control会触发事件,事件提供了有关地图的相关信息。

你可以从control上获取的事件有:

· onStartContinuousPan

· onEndContinuousPan

· onStartZoom

· onEndZoom

· onMouseClick

· onMouseDown

· onMouseUp

所有的事件函数都传入一个参数。事件参数在MapControl.js这样被定义:

function VE_MapEvent(srcMapControl,latitude,longitude,zoomLevel)

{

this.srcMapControl=srcMapControl;

this.latitude=latitude;

this.longitude=longitude;

this.zoomLevel=zoomLevel;

}

纬度(latitude)和经度(longitude)表明了地图的中心位置。缩放尺度(zoomlevel)提供了可以缩放的尺度的量。

我们首先看到的是第一个event--载入事件(panning event)。每次地图开始或者停止载入或者卷动(scrolling)时都会触发此事件。当地图开始卷动时onStartContinousPan事件会触发,当map control停止卷动地图时onEndContinousPan事件会被触发。

我们可以给上一步中创建的简单页面增加一些代码,来处理onEndContinuousPan事件,显示当前map的中心信息。

代码如下:

<html>

<head>

<title>My Virtual Earth</title>

<script src="MapControl.js"></script>

<script>

var map = null;

function OnPageLoad()

{

map = new VE_MapControl(32.69, -117.13, 12, ’r’, "absolute", 10, 100, 700, 500);

document.body.appendChild(map.element);

map.onEndContinuousPan = function(e)

{

document.getElementById("info").innerHTML =’Latitude = ’ + e.latitude +

’, Longitude = ’ + e.longitude +

’, Zoom=’ + e.zoomLevel;

}

}

</script>

</head>

<body onLoad="OnPageLoad()">

<div id="info" style="font-size:10pt">

</div>

</body>

</html>

我们可以通过增加一个函数处理onEndZoom事件完成以上功能:

<html>

<head>

<title>My Virtual Earth</title>

<script src="MapControl.js"></script>

<script>

var map = null;

function OnPageLoad()

{

map = new VE_MapControl(32.69, -117.13, 12, ’r’, "absolute", 10, 100, 700, 500);

document.body.appendChild(map.element);

var updateInfo = function(e)

{

document.getElementById("info").innerHTML =’Latitude = ’ + e.latitude +’, Longitude = ’ + e.longitude +

’, Zoom=’ + e.zoomLevel;

}

map.onEndContinuousPan = updateInfo;

map.onEndZoom = updateInfo;

}

</script>

</head>

<body onLoad="OnPageLoad()">

<div id="info" style="font-size:10pt">

</div>

</body>

</html>

地图显示如下:

变换地图样式

上面我们已经介绍了有三种样式可以选择:

·a-aerial:显示高空的卫星图像。

·r-road:显示地区的街道地图;

·h-hybrid:显示以上两者的结合,卫星图像将和道路和位置信息重叠在一起。

当map control显示的时候,可以通过SetMapStyle函数来变换地图样式:

SetMapStyle(mapStyle)

函数通过mapStyle参数来设置式样,如上文所述,使用a,r或者h。

我们可以通过增加两个checkbox来允许用户改变地图样式:

<html>

<head>

<title>My Virtual Earth</title>

<script src="MapControl.js"></script>

<script>

var map = null;

function OnPageLoad()

{

map = new VE_MapControl(32.69, -117.13, 12, ’r’, "absolute", 10, 100, 700, 500);

document.body.appendChild(map.element);

var updateInfo = function(e)

{

document.getElementById("info").innerHTML = ’Latitude = ’ + e.latitude + ’, Longitude = ’ + e.longitude +

’, Zoom=’ + e.zoomLevel;

}

map.onEndContinuousPan = updateInfo;

map.onEndZoom = updateInfo;

}

function ChangeMapStyle()

{

var Aerial = document.getElementById("AerialStyleCheck");

var Vector = document.getElementById("VectorStyleCheck");

var s = ’r’;

if (Aerial.checked && Vector.checked)

{

s = ’h’;

}

else if (Aerial.checked)

{

s = ’a’;

}

map.SetMapStyle(s);

}

</script>

</head>

<body onLoad="OnPageLoad()">

<div id="info" style="font-size:10pt">

</div>

<div id="MapStyle" style="POSITION:absolute;LEFT:470px;TOP:60px">

<input id="VectorStyleCheck" type="checkbox" onclick="ChangeMapStyle()" checked="checked">

Street Style

<input id="AerialStyleCheck" type="checkbox" onclick="ChangeMapStyle()">

Aerial Style

</div>

</body>

</html>

效果如下:

给地图增加图钉(pin)标记

增加图钉标记的功能允许我们在map control上指出特殊位置。图钉在map control上显示覆盖的信息。AddPushpin方法的原型如下:

AddPushpin(id,lat,lon,width,height,className,innerHtml)

id:图钉的标识符。在map control上每个图钉都具有唯一的标识号。

lat:放置图钉的地点的纬度。

lon:放置图钉的地点的经度。

width:图钉的宽度。

height:图钉的高度。

width和height使用来计算图钉的偏移,使得图钉可以放置到指定的经纬度。

提示:如果你希望使得图钉的底部右脚处于指定的经纬度,你需要将这些值乘2:

Classname:图钉的样式类型(style class)的名称。如果没有这个参数图钉不会显示。样式可以通过CSS文件描述或者通过嵌入式的代码描述。

innerHTML:显示在图钉上的文字。

下面的例子中,使用onMouseClick事件,当用户点击的时候给点击处增加一个图钉:

<html>

<head>

<title>My Virtual Earth</title>

<style type="text/css" media=screen>

<!--

.pin

{

width:44px;height:17px;

font-family:Arial,sans-serif;

font-weight:bold;font-size:8pt;

color:White;overflow:hidden;

cursor:pointer;text-decoration:none;

text-align:center;background:#0000FF;

border:1px solid #FF0000;

z-index:5;

}

-->

</style>

<script src="MapControl.js"></script>

<script>

var map = null;

function OnPageLoad()

{

map = new VE_MapControl(32.69, -117.13, 12, ’r’, "absolute", 10, 100, 700, 500);

document.body.appendChild(map.element);

var updateInfo = function(e)

{

document.getElementBy

[1] [2] [3] [4] [5] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有