添加信息框
在地图上,信息框一般通过用户点击鼠标弹出,用于展示个性化的信息。 以iClient for JavaScript为例,弹窗类定义为SuperMap.Popup,其中的Anchored是固定锚点位置的浮动弹窗,可以围绕指定位置四周自适应显示,是最常用的信息框。
Step1 初始化地图
var map, layerWorld,marker,markers,
url = "http://www.supermapol.com/iserver/services/vm3sbiax/rest/maps/World";
var value = "VZ88xbrMEMpGv4yiisTojgVq";
var name = "ak";
SuperMap.Credential.CREDENTIAL = new SuperMap.Credential(value, "ak");
function init(){
//map上添加控件
map = new SuperMap.Map("map",{controls: [
new SuperMap.Control.ScaleLine(),
new SuperMap.Control.Zoom(),
new SuperMap.Control.LayerSwitcher(),
new SuperMap.Control.Navigation({ //添加导航控件到map
dragPanOptions: {
enableKinetic: true //拖拽动画
}
})]
});
//定义layerWorld图层,获取图层服务地址
layerWorld = new SuperMap.Layer.TiledDynamicRESTLayer("World", url);
}
Step2 定义mouseClickHandler函数
触发click事件会调用此函数,实现鼠标点击时将弹出框添加到地图上。
var infowin = null;
//定义mouseClickHandler函数,触发click事件会调用此函数
function mouseClickHandler(event){
closeInfoWin();
//初始化Anchored类
popup = new SuperMap.Popup.Anchored(
"chicken",
marker.getLonLat(),
new SuperMap.Size(220,140),
'<img src="http://sandbox.runjs.cn/uploads/rs/3/dofmucai/xila.jpg">',
icon,
true,
null
);
infowin = popup;
//添加弹窗到map图层
map.addPopup(popup);
}
Step3 定义addLayer函数
触发layerInitialized事件会调用此函数,把地图与Marker添加到地图窗口。
//定义addLayer函数,触发layerInitialized事件会调用此函数
function addLayer(){
//map上添加分块动态REST图层和标记图层
map.addLayers([layerWorld,markers]);
map.setCenter(new SuperMap.LonLat(23, 38), 4);
}
Step4 定义addMarker函数
触发layerInitialized事件会调用此函数,初始化Marker,并注册 click 事件,用于触发mouseClickHandler()方法。
//定义addMarker函数,触发layerInitialized事件会调用此函数
function addMarker(){
size = new SuperMap.Size(21,25);
offset = new SuperMap.Pixel(-(size.w/2), -size.h);
icon = new SuperMap.Icon('http://sandbox.runjs.cn/uploads/rs/3/dofmucai/markerbig_select.png', size, offset);
//初始化标记覆盖物类
marker = new SuperMap.Marker(new SuperMap.LonLat(23.6530190,37.9439259),icon);
//添加覆盖物到标记图层
markers.addMarker(marker);
//注册 click 事件,触发 mouseClickHandler()方法
marker.events.on({"click":mouseClickHandler,
"touchstart":mouseClickHandler });
}
Step5 添加layerInitialized事件,实现添加图层和Marker到地图上
//为图层初始化完毕添加layerInitialized事件
layerWorld.events.on({"layerInitialized": addLayer});
//初始化标记图层类
markers = new SuperMap.Layer.Markers("Markers");
layerWorld.events.on({"layerInitialized": addMarker});
在线演示与源码编辑
您可以在线访问完整代码、体验演示效果,也可以直接在线编辑源码并实时查看效果。