OpenLayers教程
OpenLayers加载离线百度地图瓦片,需要转换坐标系才能加载百度地图瓦片。
坐标转换
使用 projzh 来换算坐标系,官方地址:https://github.com/tschaub/projzh
下载百度地图瓦片
下载地址:http://www.wmksj.com/map.html
OpenLayers加载离线百度地图瓦片例子
html文件同目录的tiles文件夹,用于存放离线百度地图瓦片。projzh目录用于存放坐标换算的js。
注意:初始化地图时虽设置有默认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>望远网测试 www.wmksj.com</title>
<script src="projzh/index.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/ol@v7.2.2/dist/ol.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/ol@v7.2.2/ol.css">
<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>
const bd09Extent = [-20037726.37, -12474104.17, 20037726.37, 16474104.17];
const baiduMercator = new ol.proj.Projection({
code: 'baidu',
extent: bd09Extent,
units: 'm',
});
ol.proj.addProjection(baiduMercator);
ol.proj.addCoordinateTransforms(
'EPSG:4326',
baiduMercator,
projzh.ll2bmerc,
projzh.bmerc2ll
);
ol.proj.addCoordinateTransforms(
'EPSG:3857',
baiduMercator,
projzh.smerc2bmerc,
projzh.bmerc2smerc
);
const bmercResolutions = new Array(19);
for (let i = 0; i < 19; ++i) {
bmercResolutions[i] = Math.pow(2, 18 - i);
}
const baiduSource = new ol.source.XYZ({
projection: 'baidu',
wrapX: true,
url: '',
tileGrid: new ol.tilegrid.TileGrid({
minZoom: 3,
resolutions: bmercResolutions,
origin: [0, 0],
extent: bd09Extent,
}),
tileUrlFunction: function(tileCoord){
let x = tileCoord[1];
let y = -tileCoord[2] - 1;
const z = tileCoord[0];
return 'tiles/'+z+'/'+x+'/'+y+'.png';
},
});
const baidu = new ol.layer.Tile({
source: baiduSource,
});
const map = new ol.Map({
target: 'map_container',
layers: [baidu],
view: new ol.View({
center: ol.proj.transform(
[121.48918852071861,31.23421977234498],
'EPSG:4326',
'baidu'
),
zoom: 4,
projection: 'baidu',
}),
});
</script>
</html>
全部教程