创建地图容器元素
地图需要一个HTML元素作为容器,这样才能展现到页面上。
这里我们创建了一个div元素。
命名空间
API使用BMap作为命名空间,所有类均在该命名空间之下,比如:
BMap.Map、BMap.Control、BMap.Overlay。
创建地图实例
1.varmap=newBMap.Map("container");
位于BMap命名空间下的Map类表示地图,通过new操作符可以创建一个地图实例。
其参数可以是元素id也可以是元素对象。
注意在调用此构造函数时应确保容器元素已经添加到地图上。
创建点坐标
1.varpoint=newBMap.Point(116.404,39.915);
这里我们使用BMap命名空间下的Point类来创建一个坐标点。
Point类描述了一个地理坐标点,其中116.404表示经度,39.915表示纬度。
地图初始化
map.centerAndZoom(point,15);
在创建地图实例后,我们需要对其进行初始化,BMap.Map.centerAndZoom()方法要求设置中心点坐标和地图级别。
地图必须经过初始化才可以执行其他操作。
地图配置与操作
地图被实例化并完成初始化以后,就可以与其进行交互了。
API中的地图对象的外观与行为与XX地图网站上交互的地图非常相似。
它支持鼠标拖拽、滚轮缩放、双击放大等交互功能。
您也可以修改配置来改变这些功能。
比如,默认情况下地图不支持鼠标滚轮缩放操作,因为这样可能会影响整个页面的用户体验,但是如果您希望在地图中使用鼠标滚轮控制缩放,则可以调用map.enableScrollWheelZoom方法来开启。
配置选项可以在Map类参考的配置方法一节中找到。
此外,您还可以通过编程的方式与地图交互。
Map类提供了若干修改地图状态的方法。
例如:
setCenter()、panTo()、zoomTo()等等。
下面示例显示一个地图,等待两秒钟后,它会移动到新中心点。
panTo()方法将让地图平滑移动至新中心点,如果移动距离超过了当前地图区域大小,则地图会直跳到该点。
1.varmap=newBMap.Map("container");
2.varpoint=newBMap.Point(116.404,39.915);
3.map.centerAndZoom(point,15);
4.window.setTimeout(function(){
5.map.panTo(newBMap.Point(116.409,39.918));
6.},2000);
控件
地图控件概述
XX地图上负责与地图交互的UI元素称为控件。
XX地图API中提供了丰富的控件,您还可以通过Control类来实现自定义控件。
地图API中提供的控件有:
Control:
控件的抽象基类,所有控件均继承此类的方法、属性。
通过此类您可实现自定义控件。
NavigationControl:
地图平移缩放控件,默认位于地图左上方,它包含控制地图的平移和缩放的功能。
OverviewMapControl:
缩略地图控件,默认位于地图右下方,是一个可折叠的缩略地图。
ScaleControl:
比例尺控件,默认位于地图左下方,显示地图的比例关系。
MapTypeControl:
地图类型控件,默认位于地图右上方。
CopyrightControl:
版权控件,默认位于地图左下方。
向地图添加控件
可以使用Map.addControl()方法向地图添加控件。
在此之前地图需要进行初始化。
例如,要将标准地图控件添加到地图中,可在代码中添加如下内容:
varmap=newBMap.Map("container");
map.centerAndZoom(newBMap.Point(116.404,39.915),11);
map.addControl(newBMap.NavigationControl());
可以向地图添加多个控件。
在本例中我们向地图添加一个平移缩放控件、一个比例尺控件和一个缩略图控件。
在地图中添加控件后,它们即刻生效。
map.addControl(newBMap.NavigationControl());
map.addControl(newBMap.ScaleControl());
map.addControl(newBMap.OverviewMapControl());
map.addControl(newBMap.MapTypeControl());
map.setCurrentCity("北京");//仅当设置城市信息时,MapTypeControl的切换功能才能可用
控制控件位置
初始化控件时,可提供一个可选参数,其中的anchor和offset属性共同控制控件在地图上的位置。
控件停靠位置
anchor表示控件的停靠位置,即控件停靠在地图的哪个角。
当地图尺寸发生变化时,控件会根据停靠位置的不同来调整自己的位置。
anchor允许的值为:
BMAP_ANCHOR_TOP_LEFT表示控件定位于地图的左上角。
BMAP_ANCHOR_TOP_RIGHT表示控件定位于地图的右上角。
BMAP_ANCHOR_BOTTOM_LEFT表示控件定位于地图的左下角。
BMAP_ANCHOR_BOTTOM_RIGHT表示控件定位于地图的右下角。
控件位置偏移
除了指定停靠位置外,还可以通过偏移量来指示控件距离地图边界有多少像素。
如果两个控件的停靠位置相同,那么控件可能会重叠在一起,这时就可以通过偏移值使二者分开显示。
本示例将比例尺放置在地图的左下角,由于API默认会有版权信息,因此需要添加一些偏移值以防止控件重叠。
varopts={offset:
newBMap.Size(150,5)}
map.addControl(newBMap.ScaleControl(opts));
修改控件配置
地图API的控件提供了丰富的配置参数,您可参考API文档来修改它们以便得到符合要求的控件外观。
例如,NavigationControl控件就提供了如下类型:
BMAP_NAVIGATION_CONTROL_LARGE表示显示完整的平移缩放控件。
BMAP_NAVIGATION_CONTROL_SMALL表示显示小型的平移缩放控件。
BMAP_NAVIGATION_CONTROL_PAN表示只显示控件的平移部分功能。
BMAP_NAVIGATION_CONTROL_ZOOM表示只显示控件的缩放部分功能。
下图从左向右依次展示了上述不同类型的控件外观:
下面的示例将调整平移缩放地图控件的外观。
varopts={type:
BMAP_NAVIGATION_CONTROL_SMALL}
map.addControl(newBMap.NavigationControl(opts));
自定义控件
XX地图API允许您通过继承Control来创建自定义地图控件。
要创建可用的自定义控件,您需要做以下工作:
定义一个自定义控件的构造函数。
设置自定义控件构造函数的prototype属性为Control的实例,以便继承控件基类。
实现initialize()方法并提供defaultAnchor和defaultOffset属性。
定义构造函数并继承Control
首先您需要定义自定义控件的构造函数,并在构造函数中提供defaultAnchor和defaultOffset两个属性,以便API正确定位控件位置,接着让其继承于Control。
在下面的示例中我们定义一个名为ZoomControl的控件,每一次点击将地图放大两个级别。
它具有文本标识,而不是平移缩放控件中使用的图形图标。
//定义一个控件类,即function
functionZoomControl(){
//设置默认停靠位置和偏移量
this.defaultAnchor=BMAP_ANCHOR_TOP_LEFT;
this.defaultOffset=newBMap.Size(10,10);
}
//通过JavaScript的prototype属性继承于BMap.Control
ZoomControl.prototype=newBMap.Control();
初始化自定义控件
当调用map.addControl()方法添加自定义控件时,API会调用该对象的initialize()方法用来初始化控件,您需要实现此方法并在其中创建控件所需的DOM元素,并添加DOM事件。
所有自定义控件中的DOM元素最终都应该添加到地图容器(即地图所在的DOM元素)中去,地图容器可以通过map.getContainer()方法获得。
最后initialize()方法需要返回控件容器的DOM元素。
//自定义控件必须实现initialize方法,并且将控件的DOM元素返回
//在本方法中创建个div元素作为控件的容器,并将其添加到地图容器中
ZoomControl.prototype.initialize=function(map){
//创建一个DOM元素
vardiv=document.createElement("div");
//添加文字说明
div.appendChild(document.createTextNode("放大2级"));
//设置样式
div.style.cursor="pointer";
div.style.border="1pxsolidgray";
div.style.backgroundColor="white";
//绑定事件,点击一次放大两级
div.onclick=function(e){
map.zoomTo(map.getZoom()+2);
}
//添加DOM元素到地图中
map.getContainer().appendChild(div);
//将DOM元素返回
returndiv;
}
添加自定义控件
添加自定义控件与添加其他控件方法一致,调用map.addControl()方法即可。
//创建控件实例
varmyZoomCtrl=newZoomControl();
//添加到地图当中
map.addControl(myZoomCtrl);
覆盖物
地图覆盖物概述
所有叠加或覆盖到地图的内容,我们统称为地图覆盖物。
如标注、矢量图形元素(包括:
折线和多边形和圆)、信息窗口等。
覆盖物拥有自己的地理坐标,当您拖动或缩放地图时,它们会相应的移动。
地图API提供了如下几种覆盖物:
Overlay:
覆盖物的抽象基类,所有的覆盖物均继承此类的方法。
Marker:
标注表示地图上的点,可自定义标注的图标。
Label:
表示地图上的文本标注,您可以自定义标注的文本内容。
Polyline:
表示地图上的折线。
Polygon:
表示地图上的多边形。
多边形类似于闭合的折线,另外您也可以为其添加填充颜色。
Circle:
表示地图上的圆。
InfoWindow:
信息窗口也是一种特殊的覆盖物,它可以展示更为丰富的文字和多媒体信息。
注意:
同一时刻只能有一个信息窗口在地图上打开。
可以使用map.addOverlay方法向地图添加覆盖物,使用map.removeOverlay方法移除覆盖物,注意此方法不适用于InfoWindow。
标注
标注表示地图上的点。
API提供了默认图标样式,您也可以通过Icon类来指定自定义图标。
Marker的构造函数的参数为Point和MarkerOptions(可选)。
注意:
当您使用自定义图标时,标注的地理坐标点将位于标注所用图标的中心位置,您可通过Icon的offset属性修改标定位置。
下面的示例向地图中心点添加了一个标注,并使用默认的标注样式。
varmap=newBMap.Map("container");
varpoint=newBMap.Point(116.404,39.915);
map.centerAndZoom(point,15);
varmarker=newBMap.Marker(point);//创建标注
map.addOverlay(marker);//将标注添加到地图中
定义标注图标
通过Icon类可实
展开阅读全文
相关搜索