图层

地图事件概述

地图可以包含一个或多个图层,每个图层在每个级别都是由若干张图块组成的,它们覆盖了地球的整个表面。例如您所看到包括街道、兴趣点、学校、公园等内容的地图展现就是一个图层,另外交通流量的展现也是通过图层来实现的。。

目前GeoGlobe API中提供的图层包括:

WMS:加载WMS服务的图层,投影坐标系可采用经纬度投影坐标系、高斯投影坐标系、墨卡托投影坐标系;

WMTS:加载WMTS服务的图层,投影坐标系可采用经纬度投影坐标系、高斯投影坐标系、墨卡托投影坐标系;

GlobeTile:Globe瓦片图层;

ArcGISTileLayer:加载ArcGIS瓦片服务的图层;

TileMapService:ArcGIS地图瓦片图层;

GeoThematicLayer:专题图图层类;

DynamicMapService:动态瓦片图层类;

HeatMapLayer:专题图图层类;

添加和移除图层

通过map. AddLayer方法可向地图添加图层,例如下面代码将显示北京市的交通流量。

var map = new Geo.View2D.Map("mapcontainer");//这个mapcontainer就是存放地图的dom容器id
map.setCenter(new Geo.LonLat(116.404, 39.915), 11);
var wmtsLayer = new Geo.View2D.Layer.WMTS({url:"wmts服务地址", name:"图层"})
map.addLayer(wmtsLayer);

若要从地图上移除图层,需要调用map.removeLayer方法。

map.removeLayer(wmtsLayer);
自定义图层

可通过采用GeoGlobe的继承机制,来轻松实现定制自己的图层,下面就用一个简单的例子实现自定义图层,首先继承Geo.View2D.Layer.Grid类,这个类包含图层的一些基本操作:如setMap(与地图Map对象关联)方法、MoveTo(根据范围和级别重绘)、initGriddedTiles(构建瓦片结构)方法、destory等方法。

//这里的Geo.View2D.Layer.Grid是基类,包含图层操作的很多基本方法
Geo.View2D.Layer.MyGlobeTile = Geo.Class(Geo.View2D.Layer.Grid,{
	// 入口构造函数
									initialize: function(name, url, options){
		...
		//调用基类的initialize的构造方法
		this.url = url;
									var newArguments = this.options = Geo.Util.extend({}, options);
		Geo.View2D.Layer.Grid.prototype.initialize.apply(this, newArguments);
	},
	...
									clone: function(obj) {
		if (obj == null) {
			obj = new Geo.View2D.Layer.GlobeTile(this.name,
									   this.url,
									   this.options);
		};
		obj = Geo.View2D.Layer.Grid.prototype.clone.apply(this, [obj]);
		return obj;
	};
	...
									getURL: function(bounds) {
	}
});

重新定义取图规则

主要是重写getURL方法,在这个方法里主要是定义向Web服务器端取图的取图规则,主要是三大参数,行列号(x,y)和级别(level),当定义好这些信息时,向服务器端发送请求就可以显示图片了。

getURL: function(bounds) {
									var accessUrl = this.url;//服务地址;
									var x = Math.round((bounds.left - this.pyramid.topTileFromX)/deg);
									var y = Math.round((bounds.bottom - this.pyramid.topTileFromY)/deg);
									var level = ...
									var tmpUrl = accessUrl.split("/services/");
									var urlPara = {
									"T": tmpUrl[1],
									"X": x,
									"Y": y,
									"L": level,
									"INDATE": "9999-01-01 00:00:00"
	}
	//accessUrl 正确的服务地址, getFullRequestString是自定义的将urlPara参数附加在accessUrl地址后的方法
									var url = this.getFullRequestString(urlPara, accessUrl);
	return url;
}

添加自定义图层

var map = new Geo.View2D.Map("mapcontainer");//这个mapcontainer就是存放地图的dom容器id
map.setCenter(new Geo.LonLat(116.404, 39.915), 11);
var mylayer = new Geo.View2D.Layer.MyGlobeTile("自定义图层", "服务地址",{});
map.addLayer(mylayer);

移除自定义图层

map.removeLayer(mylayer);