示例演示如何在openlayers里叠加mapbox矢量地图作为底图
<html>
<head>
<title>OpenLayers Editor</title>
<link
rel="stylesheet"
type="text/css"
href="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io/en/v6.5.0/css/ol.css"
/>
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/mapbox-gl@1.12.0/dist/mapbox-gl.css"
/>
<meta charset="utf-8" />
</head>
<body>
<script src="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io/en/v6.5.0/build/ol.js"></script>
<script src="https://cdn.jsdelivr.net/npm/jsts@2.0.6/dist/jsts.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/mapbox-gl@1.12.0/dist/mapbox-gl.js"></script>
<style>
#map {
position: relative;
height: 100%;
}
#app {
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
color: #2c3e50;
min-height: 100%;
overflow: hidden;
position: absolute;
width: 100%;
height: 100%;
}
</style>
<div id="app">
<div id="map"></div>
</div>
<script type="text/javascript">
let mbMap;
mapboxgl.accessToken = '<your token>';
var mbMap = new mapboxgl.Map({
container: 'map',
center: ol.proj.toLonLat([873708.375917, 6105425.847789]),
attributionControl: false,
interactive: false,
style: 'mapbox://styles/mapbox/streets-v11', // style UR
});
var mbLayer = new ol.layer.Layer({
render: function (frameState) {
if (!mbMap) {
return null;
}
var canvas = mbMap.getCanvas();
var viewState = frameState.viewState;
var visible = mbLayer.getVisible();
canvas.style.display = visible ? 'block' : 'none';
var opacity = mbLayer.getOpacity();
canvas.style.opacity = opacity;
var rotation = viewState.rotation;
mbMap.jumpTo({
center: ol.proj.toLonLat(viewState.center),
zoom: viewState.zoom - 1,
bearing: (-rotation * 180) / Math.PI,
animate: false,
});
return canvas;
},
});
var map = new ol.Map({
layers: [mbLayer],
target: 'map',
view: new ol.View({
center: [873708.375917, 6105425.847789],
zoom: 15,
}),
keyboardEventTarget: document,
});
</script>
</body>
</html>