openlayers学习之Overlay
Overlay 从名字看,是覆盖图、覆盖物的意思,主要的用途就是在地图之上再覆盖一层,用以显示额外的可见元素,可见元素一般是 HTML 元素,利用 overlay,可以将可见元素放置到地图的任意位置,形成地图上再浮动一层的效果。例如在地图上相应的坐标放置一个标志,标签,利用 overlay 都可以做到,具体来说,点击地图上某位置,在点击位置弹出弹出框就是利用了 overlay。
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>overlay使用</title>
<link rel="stylesheet" href="./v5.3.0-dist/v5.3.0-dist/ol.css">
<script src="./v5.3.0-dist/v5.3.0-dist/ol.js"></script>
<style>
#map {
width: 100%;
height: 500px;
}
#marker {
width: 20px;
height: 20px;
border: 1px solid #088;
border-radius: 10px;
background-color: #0ff;
opacity: 0.5;
}
#vienna {
text-decoration: none;
color: white;
font-size: 12px;
font-weight: bold;
text-shadow: black 0.1em 0.1em 0.2em;
}
#poperBox {
position: absolute;
top: 0;
display: none;
width: 300px;
height: 100px;
background-color: #fff;
}
</style>
</head>
<body>
<div id="map">
</div>
<div class="mark" style="display: none;">
<a href="#" class="overlay" id="vienna" target="_blank">天天要学习</a>
</div>
<div id="poperBox">
</div>
<script>
var map = new ol.Map({
target: "map",
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})
],
view: new ol.View({
center: [108, 34],
zoom: 10,
projection: "EPSG:4326"
})
})
// 文字的图层
let textVetor = new ol.Overlay({
element: document.getElementById('vienna'),
position: [108, 34],
positioning: 'bottom-center',
stopEvent: false,
offset: [0, -50]
});
// 添加到地图
map.addOverlay(textVetor);
let feature = new ol.Feature({
geometry: new ol.geom.Point([108, 34.1])
})
// 要素加点
feature.setStyle(new ol.style.Style({
image:new ol.style.Circle({
radius:5,
fill:new ol.style.Fill({
color:'#ff0000'
})
})
}))
// 数据源
let vectorSource = new ol.source.Vector({
features: [feature]
})
// 数据源加图层
let vectorLayer = new ol.layer.Vector({
source: vectorSource
})
// 添加到地图
map.addLayer(vectorLayer)
// 获取到弹出框
let poperBox = document.querySelector('#poperBox')
// 定义一个矢量图层添加到地图中
let PoperOver = new ol.Overlay({
element: poperBox,
stopEvent: false,
offset: [0, -50]
})
// 添加到地图
map.addOverlay(PoperOver)
// 地图单击事件
map.on('singleclick', function (e) {
// 获取当前点击的坐标
let coordinate = e.coordinate;
// 设置内容
poperBox.innerHTML = `<p>经度:${coordinate[0].toFixed(5)}</p><p>纬度:${coordinate[1].toFixed(5)}</p>`;
// 设置位置
PoperOver.setPosition(coordinate);
poperBox.style.display = 'block';
})
</script>
</body>
</html>