Cesium-Examples/libs/iclient8c/examples/js/iConnector/iConnectorPolymaps.js

149 lines
4.8 KiB
JavaScript
Raw Normal View History

2025-03-11 08:25:45 +00:00
/**
* Created with JetBrains WebStorm.
* User: CC
* Date: 14-12-23
* Time: 下午3:36
* To change this template use File | Settings | File Templates.
*/
//判定一下是否存在了SuperMap.Web如果没有则初始化一个
if(SuperMap.Web == undefined )
{
SuperMap.Web = new Object();
}
//判定一下是否存在了SuperMap.Web.iConnector如果没有则初始化一个
if(SuperMap.Web.iConnector == undefined )
{
SuperMap.Web.iConnector = new Object();
}
/**
* Class:
* PolyMaps适配器类
* 没有点线面对应的接口 所以这样就不涉及点线面的转换
* @constructor
* @deprecated
*/
SuperMap.Web.iConnector.PolyMaps = function(){
}
/**
* APIMethod:
* 创建PolyMaps的图层 po.layer这里的图层中切片的来源为iserver服务器支持3857的地图和4326的地图
* @param url {String} 地图服务的url地址http://localhost:8090/iserver/services/map-china400/rest/maps/China”
* @param options 可选的参数
* transparent - {Boolean} 设置切片是否透明默认为true
* cacheEnabled - {Boolean} 设置是否使用缓存默认为false
* layersID - {String} 设置临时图层的id一般用于专题图的叠加使用
* projection-{String}设置图层的投影系可设置为"3857"或者"4326"默认为"3857"
* @returns {Object} 返回Leaflet的扩展图层对象
*/
SuperMap.Web.iConnector.PolyMaps.getLayer = function(url,options){
if(url == undefined)
{
return;
}
var image = po.layer(load, unload);
var layerUrl = url + "/image.png?redirect=false&width=256&height=256";
//切片是否透明
var transparent = true;
if(options && options.transparent !=undefined)
{
transparent = options.transparent;
}
layerUrl += "&transparent=" + transparent;
//是否是否使用缓存
var cacheEnabled = false;
if(options && options.cacheEnabled !=undefined)
{
cacheEnabled = options.cacheEnabled;
}
layerUrl += "&cacheEnabled=" + cacheEnabled;
//如果有layersID则是在使用专题图
if(options && options.layersID !=undefined)
{
layerUrl += "&layersID=" +options.layersID;
}
//如果有projection并且只能是4326或者3857的地图。
var projection="3857";
if(options&&options.projection){
if(options.projection==="4326"){
projection="4326";
}
}
layerUrl+="&projection="+projection;
function load(tile) {
//计算分辨率和比例尺
var resLen = 17;
var resStart =0;
var resolutions=[];
var dpi = 95.99999999999984;
var scales=[];
if(projection==="3857"){
for(var i=resStart;i<=resLen;i++){
var res3857 = 156543.0339/Math.pow(2,i);
resolutions.push(res3857);
var scale3857 = 0.0254/dpi/res3857;
scales.push(scale3857);
}
image.scales=scales;
}
else{
for(var i=resStart;i<=resLen;i++){
var res4326 = 1.40625/Math.pow(2,i);
resolutions.push(res4326);
var scale4326 = 0.0254*360/dpi/res4326/Math.PI/2/6378137;
scales.push(scale4326);
}
image.scales=scales;
}
var cx=tile.column ;
var cy=-tile.row;
var z=tile.zoom;
cx-= Math.pow(2,z-1);
cy+=Math.pow(2,z-1)-1;
//使用bounds出图也可以使用center
var left = cx*256*resolutions[z];
var bottom = cy*256*resolutions[z];
var right = (cx + 1)*256*resolutions[z];
var top = (cy + 1)*256*resolutions[z];
var element = tile.element = po.svg("image"),
size = image.map().tileSize();
element.setAttribute("preserveAspectRatio", "none");
element.setAttribute("width", size.x);
element.setAttribute("height", size.y);
var tileUrl = layerUrl;
//将bounds组合到url里面
tileUrl+= "&viewBounds=" +"{\"leftBottom\" : {\"x\":" + left +",\"y\":" + bottom +"},\"rightTop\" : {\"x\":" + right +",\"y\":" +top + "}}";
tileUrl +="&scale=" +scales[z];
var epsg=projection==="3857"?3857:4326;
tileUrl += "&prjCoordSys={\"epsgCode\":"+epsg+"}";
element.setAttribute("opacity", 0);
if (tileUrl != null) {
tile.request = po.queue.image(element, tileUrl, function(img) {
delete tile.request;
tile.ready = true;
tile.img = img;
element.removeAttribute("opacity");
image.dispatch({type: "load", tile: tile});
});
} else {
tile.ready = true;
image.dispatch({type: "load", tile: tile});
}
}
function unload(tile) {
if (tile.request) tile.request.abort(true);
}
return image;
}