OpenLayers教程
OpenLayers加载离线百度地图瓦片,因百度坐标系特殊,而且其栅格地图瓦片的呈列方式也不一样,所以需要特殊处理。
下载百度地图瓦片
下载全世界百度地图瓦片前几级用于测试,其中选项一定要选“其它使用”,否则到时离线地图会出现一竖条空白。
OpenLayers加载离线百度地图瓦片实例
html文件同目录的tiles文件夹,用于存放离线百度地图瓦片。openlayers目录存放js和css文件。
注意:初始化地图时虽设置有默认zoom层级,但实际计算栅格百度地图瓦片时会不一样,比如默认设置4,会加载5级的百度地图瓦片等,所以如果网页无地图显示时,可以F12查看其具体加载百度地图瓦片的层级,再去下载。
实例
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>OpenLayers离线百度地图</title>
<link rel="stylesheet" href="openlayers/ol.css" />
<script type="text/javascript" src="openlayers/ol.js"></script>
<style type="text/css">
html, body, #map_container{
width: 100%;
height: 100%;
overflow: hidden;
margin:0;
}
</style>
</head>
<body>
<div id="map_container"></div>
</body>
<script type="text/javascript">
//百度地图
zoom_x = {3:3,4:5,5:10,6:20,7:39,8:77,9:153,10:306,11:612,12:1224,13:2447,14:4893,15:9785,16:19569,17:39137,18:78273,19:156545}
var resolutions = [];
for (var i = 0; i < 19; i++) {
resolutions[i] = Math.pow(2, 18 - i);
}
var tilegrid = new ol.tilegrid.TileGrid({
origin: [0, 0],
resolutions: resolutions
});
var baidu_source = new ol.source.TileImage({
projection: "EPSG:3857",
tileGrid: tilegrid,
tileUrlFunction: function (tileCoord, pixelRatio, proj) {
if (!tileCoord) {
return "";
}
let z = tileCoord[0];
let x = tileCoord[1]
let y = -tileCoord[2];
let count = 2*zoom_x[z];
x = x%count;
if(x>zoom_x[z]-1) {
x = x - count;
}else if(x < -zoom_x[z]) {
x = x + count;
}
return "tiles/"+z+"/" + x + "/" + y + ".png";
}
});
var baiduMapLayer = new ol.layer.Tile({
source: baidu_source
});
var map = new ol.Map({
target: 'map_container',
layers: [
baiduMapLayer
],
view: new ol.View({
center: ol.proj.fromLonLat([118.398990578125, 30.62840809925475]),
zoom: 4,
minZoom: 3,
maxZoom: 19
})
});
</script>
</html>
全部教程