hi-ucs/front/public/leaflet/libs/iclient8c/examples/js/layer/Tianditu.js

259 lines
6.9 KiB
Vue
Raw Normal View History

2022-06-14 09:32:49 +08:00
/**
* @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'
});