电子地图中要素旋转功能实现

简介:

    添加到电子地图上的资源点经常需要对其进行旋转操作。本文主要讲解如何基于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);

好了,旋转看看吧



相关文章
|
2月前
OEEL——使用OEEL快速画出精美图案(以土地利用转移变化为例)
OEEL——使用OEEL快速画出精美图案(以土地利用转移变化为例)
18 0
|
4月前
ArcGIS依据矢量要素消除另一个面要素中部分区域(擦除)
ArcGIS依据矢量要素消除另一个面要素中部分区域(擦除)
|
4月前
|
C语言
创建各类三角形图案
C 语言实例 - 创建各类三角形图案
39 1
|
4月前
|
数据可视化 Java 关系型数据库
智慧工厂高精度定位系统源码,支持零维、一维、二维定位方式
电子巡检 可提前为标签预设巡检任务,包括巡检时间/路线/名称。一旦巡检人员未按规定的时间/路线巡查,系统将立即报警。 人员管理 可以提前将人员的详细数据(如姓名、职务ID) 输入到系统中,并与标签ID绑定。 角色管理
|
11月前
如何做一个俄罗斯方块3:形状控制
今天,我们来继续学习和实现下一个模块:玩家控制形状。在俄罗斯方块游戏中,玩家可以对下落的形状进行控制,控制分为两种,一种是控制形状的移动(左,右,下),一种是控制形状的旋转(顺时针旋转 90 度)。
102 0
|
前端开发 数据可视化
基于canvas的粒子酷炫效果,可用作可视化大屏的背景展示,即拿即用......
基于canvas的粒子酷炫效果,可用作可视化大屏的背景展示,即拿即用......
93 0
ArcMap去掉某一面要素与另一面要素重合的部分
本文介绍在ArcMap软件中,对矢量面要素的部分区域加以剔除的操作~
414 1
ArcMap去掉某一面要素与另一面要素重合的部分
|
存储 C# 开发工具
C#编程的构成要素(结合unity做实例分析)
C#编程的构成要素(结合unity做实例分析)
C#编程的构成要素(结合unity做实例分析)
Qt Qwdget 汽车仪表知识点拆解7 图像绘制,旋转
先贴上效果图,注意,没有写逻辑,都是乱动的
93 0
Qt Qwdget 汽车仪表知识点拆解7 图像绘制,旋转
|
物联网
ThingJS有4种技术实现对象拾取方式
对象的拾取,这是3D技术的一个专业术语。
ThingJS有4种技术实现对象拾取方式

热门文章

最新文章