259 lines
6.9 KiB
Vue
259 lines
6.9 KiB
Vue
|
|
|||
|
/**
|
|||
|
* @requires SuperMap/Layer/CanvasLayer.js
|
|||
|
* @requires SuperMap/Layer/Grid.js
|
|||
|
* @requires SuperMap/Tile/Image.js
|
|||
|
*/
|
|||
|
|
|||
|
/**
|
|||
|
* Class: SuperMap.Layer.Tianditu
|
|||
|
* 天地图服务图层类。
|
|||
|
* 用于显示天地图的地图服务,使用<SuperMap.Layer.Tianditu>的
|
|||
|
* 构造函数可以创建天地图图层,更多信息查看:
|
|||
|
*
|
|||
|
* Inherits from:
|
|||
|
* - <SuperMap.Layer.CanvasLayer>
|
|||
|
*/
|
|||
|
SuperMap.Layer.Tianditu = SuperMap.Class(SuperMap.CanvasLayer, {
|
|||
|
|
|||
|
/**
|
|||
|
* APIProperty: layerType
|
|||
|
* {String} 图层类型.(vec:矢量图层,img:影像图层,ter:地形图层)
|
|||
|
*/
|
|||
|
layerType:"vec", //(vec:矢量图层,cva:矢量标签图层,img:影像图层,cia:影像标签图层,ter:地形,cta:地形标签图层)
|
|||
|
|
|||
|
/**
|
|||
|
* APIProperty: isLabel
|
|||
|
* {Boolean} 是否是标签图层.
|
|||
|
*/
|
|||
|
isLabel:false,
|
|||
|
|
|||
|
/**
|
|||
|
* Property: attribution
|
|||
|
* {String} The layer attribution.
|
|||
|
*/
|
|||
|
attribution: "Data by <a style='white-space: nowrap' target='_blank' href='http://www.tianditu.com'>Tianditu</a>",
|
|||
|
|
|||
|
/**
|
|||
|
* Property: url
|
|||
|
* {String} 图片url.
|
|||
|
*/
|
|||
|
url:"http://t${num}.tianditu.com/DataServer?T=${type}_${proj}&x=${x}&y=${y}&l=${z}",
|
|||
|
|
|||
|
//cva_url:"http://t${num}.tianditu.com/DataServer?T=cva_${proj}&x=${x}&y=${y}&l=${z}",
|
|||
|
|
|||
|
/**
|
|||
|
* Property: zOffset
|
|||
|
* {Number} 图片url中z值偏移量
|
|||
|
*/
|
|||
|
zOffset:1,
|
|||
|
|
|||
|
/**
|
|||
|
* APIProperty: dpi
|
|||
|
* {Float} 屏幕上每英寸包含像素点的个数。
|
|||
|
* 该参数结合图层比例尺可以推算出该比例尺下图层的分辨率.默认为96。
|
|||
|
*/
|
|||
|
dpi: 96,
|
|||
|
|
|||
|
/**
|
|||
|
* Constructor: SuperMap.Layer.Tianditu
|
|||
|
* 创建天地图图层
|
|||
|
*
|
|||
|
* Example:
|
|||
|
* (code)
|
|||
|
* var tiandituLayer = new SuperMap.Layer.Tianditu();
|
|||
|
* (end)
|
|||
|
*/
|
|||
|
initialize: function (options) {
|
|||
|
var me = this;
|
|||
|
me.name = "Tianditu";
|
|||
|
|
|||
|
// options = SuperMap.Util.extend({
|
|||
|
// maxExtent: new SuperMap.Bounds(
|
|||
|
// minX, minY, maxX, maxY
|
|||
|
// ),
|
|||
|
// tileOrigin:new SuperMap.LonLat(minX, maxY),
|
|||
|
// //maxResolution:maxResolution,
|
|||
|
// //minResolution:minResolution,
|
|||
|
// resolutions:resolutions,
|
|||
|
// units:me.units,
|
|||
|
// projection:me.projection
|
|||
|
// }, options);
|
|||
|
SuperMap.CanvasLayer.prototype.initialize.apply(me, [me.name, me.url, null, options]);
|
|||
|
},
|
|||
|
|
|||
|
/**
|
|||
|
* APIMethod: clone
|
|||
|
* 创建当前图层的副本。
|
|||
|
*
|
|||
|
* Parameters:
|
|||
|
* obj - {Object}
|
|||
|
*
|
|||
|
* Returns:
|
|||
|
* {<SuperMap.Layer.Tianditu>} 新的图层。
|
|||
|
*/
|
|||
|
clone: function (obj) {
|
|||
|
var me = this;
|
|||
|
if (obj == null) {
|
|||
|
obj = new SuperMap.Layer.Tianditu(
|
|||
|
me.name, me.url, me.params, me.getOptions());
|
|||
|
}
|
|||
|
|
|||
|
obj = SuperMap.CanvasLayer.prototype.clone.apply(me, [obj]);
|
|||
|
obj._timeoutId = null;
|
|||
|
|
|||
|
return obj;
|
|||
|
},
|
|||
|
|
|||
|
/**
|
|||
|
* Method: getTileUrl
|
|||
|
* 获取每个tile的图片url
|
|||
|
*
|
|||
|
* Parameters:
|
|||
|
* xyz - {Object}
|
|||
|
*/
|
|||
|
getTileUrl:function(xyz){
|
|||
|
var me = this;
|
|||
|
url = me.url;
|
|||
|
|
|||
|
var proj = this.projection;
|
|||
|
if(proj.getCode){
|
|||
|
proj = proj.getCode();
|
|||
|
}
|
|||
|
|
|||
|
if(proj=="EPSG:4326"){
|
|||
|
var proj = "c"
|
|||
|
}
|
|||
|
else{
|
|||
|
var proj = "w";
|
|||
|
}
|
|||
|
|
|||
|
var x = xyz.x;
|
|||
|
var y = xyz.y;
|
|||
|
|
|||
|
var z = xyz.z+me.zOffset;
|
|||
|
var num = Math.abs((xyz.x + xyz.y) % 7);
|
|||
|
|
|||
|
var lt = this.layerType;
|
|||
|
if(this.isLabel){
|
|||
|
if(this.layerType=="vec")lt="cva"
|
|||
|
if(this.layerType=="img")lt="cia"
|
|||
|
if(this.layerType=="ter")lt="cta"
|
|||
|
}
|
|||
|
|
|||
|
url = SuperMap.String.format(url, {
|
|||
|
num: num,
|
|||
|
x: x,
|
|||
|
y: y,
|
|||
|
z: z,
|
|||
|
proj:proj,
|
|||
|
type:lt
|
|||
|
});
|
|||
|
return url;
|
|||
|
},
|
|||
|
|
|||
|
/**
|
|||
|
* Method: setMap
|
|||
|
* Set the map property for the layer. This is done through an accessor
|
|||
|
* so that subclasses can override this and take special action once
|
|||
|
* they have their map variable set.
|
|||
|
*
|
|||
|
* Here we take care to bring over any of the necessary default
|
|||
|
* properties from the map.
|
|||
|
*
|
|||
|
* Parameters:
|
|||
|
* map - {<SuperMap.Map>}
|
|||
|
*/
|
|||
|
setMap: function(map) {
|
|||
|
SuperMap.CanvasLayer.prototype.setMap.apply(this, [map]);
|
|||
|
var proCode = null;
|
|||
|
var proj = this.projection||map.projection;
|
|||
|
if(proj){
|
|||
|
if(proj.getCode){
|
|||
|
proCode = proj.getCode();
|
|||
|
}
|
|||
|
else{
|
|||
|
proCode = proj;
|
|||
|
}
|
|||
|
}
|
|||
|
this.setTiandituParam(proCode);
|
|||
|
},
|
|||
|
|
|||
|
/**
|
|||
|
* Method: setTiandituParam
|
|||
|
* 设置出图相关参数
|
|||
|
*
|
|||
|
* Parameters:
|
|||
|
* projection - {String} 投影坐标系
|
|||
|
*/
|
|||
|
setTiandituParam:function(projection){
|
|||
|
var lt = this.layerType;
|
|||
|
if(lt=="vec"){
|
|||
|
var resLen = 17;
|
|||
|
var resStart = 0;
|
|||
|
this.zOffset = 1;
|
|||
|
this.numZoomLevels = 17;
|
|||
|
}
|
|||
|
else if(lt=="img"){
|
|||
|
var resLen = 17;
|
|||
|
var resStart = 0;
|
|||
|
this.zOffset = 1;
|
|||
|
this.numZoomLevels = 17;
|
|||
|
}
|
|||
|
else if(lt=="ter"){
|
|||
|
var resLen = 13;
|
|||
|
var resStart = 0;
|
|||
|
this.zOffset = 1;
|
|||
|
this.numZoomLevels = 13;
|
|||
|
}
|
|||
|
if(projection=="EPSG:4326"){
|
|||
|
var minX = -180;
|
|||
|
var minY = -90;
|
|||
|
var maxX= 180;
|
|||
|
var maxY= 90;
|
|||
|
|
|||
|
//var maxResolution = 156543.0339;
|
|||
|
//var minResolution = 0.5971642833709717;
|
|||
|
|
|||
|
var resolutions = [];
|
|||
|
for(var i=resStart;i<resLen;i++){
|
|||
|
resolutions.push(1.40625/2/Math.pow(2,i));
|
|||
|
}
|
|||
|
|
|||
|
this.units = "degree";
|
|||
|
this.projection = new SuperMap.Projection("EPSG:4326");
|
|||
|
|
|||
|
this.maxExtent=new SuperMap.Bounds(
|
|||
|
minX, minY, maxX, maxY
|
|||
|
);
|
|||
|
this.tileOrigin = new SuperMap.LonLat(minX, maxY);
|
|||
|
this.resolutions = resolutions;
|
|||
|
}
|
|||
|
else{
|
|||
|
var minX = -20037508.3392;
|
|||
|
var minY = -20037508.3392;
|
|||
|
var maxX= 20037508.3392;
|
|||
|
var maxY= 20037508.3392;
|
|||
|
|
|||
|
//var maxResolution = 156543.0339;
|
|||
|
//var minResolution = 0.5971642833709717;
|
|||
|
|
|||
|
var resolutions = [];
|
|||
|
for(var i=resStart;i<resLen;i++){
|
|||
|
resolutions.push(156543.0339/2/Math.pow(2,i));
|
|||
|
}
|
|||
|
//this.numZoomLevels = 18;
|
|||
|
|
|||
|
this.units = "m";
|
|||
|
this.projection = new SuperMap.Projection("EPSG:3857");
|
|||
|
|
|||
|
this.maxExtent=new SuperMap.Bounds(
|
|||
|
minX, minY, maxX, maxY
|
|||
|
);
|
|||
|
this.tileOrigin = new SuperMap.LonLat(minX, maxY);
|
|||
|
this.resolutions = resolutions;
|
|||
|
}
|
|||
|
},
|
|||
|
|
|||
|
CLASS_NAME: 'SuperMap.Layer.Tianditu'
|
|||
|
});
|