问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

openlayer怎么加载瓦片

发布网友 发布时间:2022-05-26 12:24

我来回答

1个回答

热心网友 时间:2023-10-16 21:36

1、先给个类图简单的介绍下

我们在客户端看到的瓦片其实是一个图片列表 也就是上面的grid 类 ,每张图片都是通过http从后来请求过来的图片也就是方法getURL(bound),
每张图片都有自己的url 也就是他的请求地址,而且grid的列表的每个单元格都有边框也就是bound,那要获取每个单元格中正确的图片都是通过bound来计
算而获取到相应的图片,如想要加载自己瓦片就需要重写grid中的getURL(bound)方法,这也就是最下排6个不同类型的瓦片根据自己的瓦片特点及地图服务
的特点编写的类,如果你有自己的瓦片却跟上面的几种都不相同也不相似,那你可以选择重写grid类,如果你的瓦片操作跟下面的6中服务相同或者类似,那
可以根据自己工作考虑重写那面6个类中的其中某一个中的getURL(bound)的方法。在计算的过程中能涉及到多个参数将在下篇来详细介绍,在这给几个重写
getURL(bound)的例子, 第一个例子是网上的不过在工作中验证过,绝对可用,写的还不错给大家个参考。
1、重写grid类中的getURL(bound)方法加载本地图片(天地图)
[html] view plain copy print?
OpenLayers.Layer.TiandituLayer = OpenLayers.Class(OpenLayers.Layer.Grid,
{

TileType : null,
mirrorUrls : null,
topLevel : null,
bottomLevel : null,
topLevelIndex : 0,
bottomLevelIndex : 20,
topTileFromX : -180,
topTileFromY : 90,
topTileToX : 180,
topTileToY : -90,
isBaseLayer : true,
initialize : function(name, url, options) {

options.topLevel = options.topLevel ? options.topLevel
: this.topLevelIndex;
options.bottomLevel = options.bottomLevel ? options.bottomLevel
: this.bottomLevelIndex;
options.maxResolution = this
.getResolutionForLevel(options.topLevel);
options.minResolution = this
.getResolutionForLevel(options.bottomLevel);
var newArguments = [ name, url, {}, options ];
OpenLayers.Layer.Grid.prototype.initialize.apply(this,
newArguments);
},

clone : function(obj) {

if (obj == null) {
obj = new OpenLayers.Layer.TDTLayer(this.name, this.url,
this.options);
}

obj = OpenLayers.Layer.Grid.prototype.clone
.apply(this, [ obj ]);

return obj;
},

getURL : function(bounds) {
var level = this.getLevelForResolution(this.map.getResolution());
var coef = 360 / Math.pow(2, level);
var Row = this.topTileFromX < this.topTileToX ? Math.round((bounds.left - this.topTileFromX) / coef) : Math.round((this.topTileFromX - bounds.right) / coef);
var Col = this.topTileFromY < this.topTileToY ? Math.round((bounds.bottom - this.topTileFromY) / coef): Math.round((this.topTileFromY - bounds.top) / coef);

var type = this.TileType;
if (type == "EMap") {
if (level >= 2 && level <= 10) {
type = "A0512_EMap";
} else if (level == 11 || level == 12) {
type = "B0627_EMap1112";
} else if (level >= 13 && level <= 18) {
type = "siwei0608";
}
}else if(type=="RMap"){
if (level >= 2 && level <= 7) {
type = "sbsm0210";
} else if (level >= 8 && level <= 10) {
type = "sbsm0210";
} else if (level >= 11 && level <= 14) {
type = "e11";
}else if (level >= 15 && level <= 18) {
type = "sbsm1518";
}
}

var url = this.url;

if (this.mirrorUrls != null) {
url = this.selectUrl(Row, this.mirrorUrls);
}

return this.getFullRequestString({
T : type,
X : Row,
Y : Col,
L : level
}, url);
},
selectUrl : function(a, b) {
return b[a % b.length]
},
getLevelForResolution : function(res) {
var ratio = this.getMaxResolution() / res;
if (ratio < 1)
return 0;
for ( var level = 0; ratio / 2 >= 1;) {
level++;
ratio /= 2;
}
return level;
},
getResolutionForLevel : function(level) {
return 360 / 256 / Math.pow(2, level);
},
getMaxResolution : function() {
return this.getResolutionForLevel(this.topLevelIndex)
},
getMinResolution : function() {
return this.getResolutionForLevel(this.bottomLevelIndex)
},
addTile : function(bounds, position) {
var url = this.getURL(bounds);
return new OpenLayers.Tile.Image(this, position, bounds, url,
this.tileSize);
},

CLASS_NAME : "OpenLayers.Layer.TiandituLayer"
});
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
中美有什么经济冲突 杨凌衡水实验中学高中学费是多少 蒂芙尼珍珠项链怎么清洗和保养? tiffany&amp;co 的缺点 如何保养蒂芙尼的项链? tiffany保养要多久时间 Tiffany珠宝需要多长时间保养? 人为什么活着,怎样活着都是无憾!! 孩子犟的不行家长怎么教育 有什么比较好用的游戏视频录制软件? 适用于Windows的10个好用的游戏录制软件 台机XP系统无线网卡在主机能搜索到wifi信号,挂载到虚拟机搜索不到? PSP2000存档转换问题 请问以下文件夹如何删除 oracle,导入版本不对的dmp数据库后,想更换新的数据库,该怎么解决?求oracle大神解惑。 电脑常常蓝屏。也不知道怎么回事。这个是最近两次的dmp文件。求高手帮忙。 我同学说看到一本书上说会考有C就不能报考211大学。是真的吗? 冰箱是风冷好,还是直冷好 学业水平考试都是C2021大学有关吗? 如何把dmp文件导入指定的表空间 会考如果都是C可以考一本吗? 会考考了一个c,对于考一些985院校是否有影响 清华北大等985211顶级名校会对新高考学业水平考试有硬性要求吗? - 河南的考生如果会考成绩有c能不能报考985和211 老师您好,我想问一下会考有科考c能上985,211之类的大学吗 女孩初中毕业适合学什么专业? 新高考下985211对学业水平测试有要求吗 会考成绩有c的不能报考211工程吗? 在学校交的30元钱的学平险都保什么 老师您好,我想问一下会考有科考c能上985,211之类的大学吗? 小米云服务,本地的相片同步到了云端后,删除本地的云端的会没有吗? OpenLayer3怎么样加载Arcgis服务器发布的WFS服务 加载类nnet.cnn.layer.Layer的异构数组时检测到无效的默认对象,怎么解决? js中的onchange事件已经触发,select中有值,其中的值变化的时候出现加载中。怎么写 loading...... 为啥Layer的onTouchBegan/onTouchEnded不被调用 C#开发ArcGIS图层的一下操作。 蛋糕奶油的制作方法制作蛋糕奶油的方法 佳能800定焦镜头拍摄飞鸟技巧 抖音卸载了重新安装拉黑过的好友还能收到我的作品吗? 抖音卸载了别人还能看到吗 增值税上月有留抵本月进项大于销项怎么做账 上个月有留抵,比本月销项税额还高,这个月进项、税负该怎么算 留抵税额大于销项税额 税局让再交增值税 该怎么办 增值税进项税额大于销项税额可以一直抵扣下去吗?有无时间限制? 我公司本月收租金40万,上月又有大于销项的留抵税额,应怎么做分录 - 信息提示 应交增值税进项税额大于销项税额怎么处理 在微信那里可以翻译 如何把QQ好友的声音放到音频app里? 长城魏派vv7什么时候 手机拍照显示时间可以改吗?