SuperMap iClient for JavaScript 提供了Elements图层,其自身是一个div,用户可以在该图层上添加任意dom对象,并且支持第三方扩展应用。
调用Elements图层的 getDiv方法获得该图层的div后,将dom对象添加到该div中,便可拓展应用。
下面我们来详细介绍一下如何使用Elements图层扩展应用
//创建Elements的实例,获得其div var elementsLayer = new SuperMap.Layer.Elements("elementsLayer"); map.addLayers([elementsLayer]); var elementsDiv = elementsLayer.getDiv()
//设置Elements实例的div为地图大小 var size = map.getSize elementsDiv.style.width = size.w; elementsDiv.style.height = size.h;
例如:添加简单DOM对象
//创建一个图片对象并添加到Elements的实例中 myDom = document.createElement("img"); myDom.src = "images/china.png"; elementsDiv.appendChild(myDom);
以上代码片段中,调用document.createElement()方法创建一个dom对象,并调用Dom函数的appendChild方法将其添加到Elements图层的div上。
该方法把地理坐标转换为Elements图层的像素坐标。
function setDom(){ var bounds = new SuperMap.Bounds(73.620048522949, 3.8537260781999, 134.76846313477, 53.553741455078); var lonlatLeftTop = new SuperMap.LonLat(bounds.left, bounds.top); var lonlatRightBottom = new SuperMap.LonLat(bounds.right, bounds.bottom); //然后分别将左上右下点转换为像素点 var pxLeftTop = elementsLayer.getLayerPxFromLonLat(lonlatLeftTop); var pxRightBottom = elementsLayer.getLayerPxFromLonLat(lonlatRightBottom); //设置图片的大小 myDom.style.width = pxRightBottom.x - pxLeftTop.x +"px"; myDom.style.height = pxRightBottom.y - pxLeftTop.y + "px"; //设置图片的位置 myDom.style.position = "absolute"; myDom.style.left = pxLeftTop.x + "px"; myDom.style.top = pxLeftTop.y + "px"; }
以上代码片段中,将图片DOM的范围设置为一地理范围转换的像素范围中,并且将图片DOM的中心位置也设置为某一地理位置转换的像素位置中,从而将DOM对象关联到地图中,且可使其随着地图缩放和平移。
例如:监听map的moveend事件
//监听地图的moveend事件 map.events.on({moveend: function (evt) { //判断是否缩放 if(evt.zoomChanged){ //可在此实现Dom对象随着地图缩放的其他行为 } //重置图片的大小和位置,让图片可以随地图缩放和平移(具体代码如3中所示) setDom(); }});
以上代码片段,可实现Dom对象随着地图缩放、移动及其他行为。
此完整范例请见 示范程序->可视化->可视化图层->Elements Layer 扩展。
用户可以在Elements图层上添加任意dom对象,以上范例说明是其一简单示范。
基于d3js制作风向图图层,将风向图图层绘制在Elements图层的div上,从而将风向图图层与地图关联,在地图上演示风向动态。
基于d3js制作文字云图层,将文字云图层绘制在Elements图层的div上,从而将文字云图层与地图关联,通过文字(首都名称)快速定位其所指定的国家。
将Twaver提供的Chart组件中的饼图DOM对象,绑定到Elements图层的div中,从而将饼图与地图关联,实现高效交互,动态展示数据。
将Twaver提供的network组件的DOM对象,绑定到Elements图层的div中,从而将Network与地图关联,实现高效交互,动态展示数据。