添加到电子地图上的资源点经常需要对其进行旋转操作。本文主要讲解如何基于openlayers2往地图中添加资源点,并实现资源点的旋转操作。
往地图上面添加资源点图标主要有两种方式,一种是通过markers方式,利用的接口为OpenLayers.Layer.Markers。通过marker方式往地图上添加图标的示例代码如下:
var markers = new OpenLayers.Layer.Markers( "Markers" );
map.addLayer(markers);
var size = new OpenLayers.Size(21,25);
var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);
var icon = new OpenLayers.Icon('http://www.openlayers.org/dev/img/marker.png', size, offset);
markers.addMarker(new OpenLayers.Marker(new OpenLayers.LonLat(0,0),icon));
markers.addMarker(new OpenLayers.Marker(new OpenLayers.LonLat(0,0),icon.clone()));
第二种方式就是通过vectorlayer的方式,把一个资源点作为一个矢量vector。当需要对资源点图标进行旋转的时候只有通过vectorlayer方式添加资源点才行。通过vectorlayer建立可旋转的图标步骤如下:
1.新建vectorlayer图标
vectorLayer = new OpenLayers.Layer.Vector(
"inducedScreen",
{
styleMap: new OpenLayers.StyleMap({
"default": {
externalGraphic: basePath +"/marker.png",
graphicWidth: 36,
graphicHeight: 36,
title:"${tooltip}",
// label:"${tooltip}",
//labelYOffset:-18,
fontColor:"#ff0000",
graphicXOffset: -18,
graphicYOffset: -18,
rotation: "${angle}"
},
"select": {
externalGraphic:basePath +"/marker.png",
graphicWidth: 36,
graphicHeight: 36,
title:"${tooltip}",
// label:"${tooltip}",
//labelYOffset:-18,
fontColor:"#ff0000",
graphicXOffset: -18,
graphicYOffset: -18,
rotation: "${angle}"
}
})
// rendererOptions: {yOrdering: true},
// renderers: renderer
}
);
2.为该图层注册点击事件,此时图标旋转的机制为用户按住ctrl键的同时点击图标,则图标旋转,图标每次旋转的度数为其上一次旋转度数加90。实现代码为:
//诱导屏选中事件注册
vectorLayer.events.on({'featureselected': function(evt){
if(evt.feature.attributes["resourceId"]==null){
$.say("诱导屏数据出错!");
return ;
}
//判断用户是否按下shift键盘,按下shift键表示旋转诱导屏图标,否则为管理停车位操作
if(event.ctrlKey){
//诱导屏旋转角度增加90度
var angle = ((evt.feature.attributes["angle"]*1)+90)%360;
evt.feature.attributes["angle"] = angle;
featureRotate(evt);
evt.feature.layer.drawFeature(evt.feature);
}else{
//其他操作
}
}
});
3.把vectorlayer添加到地图上
map.addLayer(vectorlayer);
4.这里有些读者可能会以为点击诱导屏的时候诱导屏的resourceId和angle是如何获取的。这两个字段是创建vector对象的时候作为属性添加上去的。具体方式如下:
featureArray = [];
featureArray.push(
new OpenLayers.Feature.Vector(
geometry, {tooltip:sparams.resource,resourceId:sparams.resourceId,angle:0}
)
);
vectorLayer.addFeatures(featureArray);