1、前言
这篇博客开始介绍OpenLayers
中视图的一些常规操作。其实地图的常规操作无非就是放大
、缩小
、平移
等等。利用OpenLayers
中的view
可以很轻易地实现以上功能,下面进入正题。
2、常规操作
在创建地图对象后,我们可以利用var view = map.getView()
获取视图对象,可以发现view
中包含了许多针对视图操作的方法,比如setZoom()
、setCenter()
、setRotation()
等等,代码如下:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>OpenLayers</title>
<!-- openlayers -->
<link href="lib/ol/ol.css" rel="stylesheet" />
<script src="lib/ol/ol.js"></script>
<!-- bootstrap -->
<link href="lib/bootstrap/css/bootstrap.min.css" rel="stylesheet" />
<script src="lib/bootstrap/js/jquery-3.4.1.min.js"></script>
<script src="lib/bootstrap/js/bootstrap.min.js"></script>
</head>
<body>
<div id="map" style="width:800px;height:800px;"></div>
<button id="zoomIn" class="btn btn-primary">放大</button>
<button id="zoomOut" class="btn btn-primary">缩小</button>
<button id="toLeft" class="btn btn-primary">左移</button>
<button id="toRight" class="btn btn-primary">右移</button>
<button id="toTop" class="btn btn-primary">上移</button>
<button id="toBottom" class="btn btn-primary">下移</button>
<button id="toBeijing" class="btn btn-primary">平移至北京</button>
<script>
var map = new ol.Map({
target: 'map',
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})
],
view: new ol.View({
projection: 'EPSG:3857',
center: ol.proj.transform([120, 30], 'EPSG:4326', 'EPSG:3857'),
zoom: 15
})
})
// 放大
$('#zoomIn').click(function () {
var view = map.getView();
var zoom = view.getZoom();
view.setZoom(zoom + 1);
})
// 缩小
$('#zoomOut').click(function () {
var view = map.getView();
var zoom = view.getZoom();
view.setZoom(zoom - 1);
})
// 左移
$('#toLeft').click(function () {
var view = map.getView();
var center = view.getCenter();
center[0] += 50000;
view.setCenter(center);
map.render();
})
// 右移
$('#toRight').click(function () {
var view = map.getView();
var center = view.getCenter();
center[0] -= 50000;
view.setCenter(center);
map.render();
})
// 上移
$('#toTop').click(function () {
var view = map.getView();
var center = view.getCenter();
center[1] += 50000;
view.setCenter(center);
map.render();
})
// 下移
$('#toBottom').click(function () {
var view = map.getView();
var center = view.getCenter();
center[1] -= 50000;
view.setCenter(center);
map.render();
})
// 平移至北京
$('#toBeijing').click(function () {
var center = ol.proj.transform([116.20, 39.56], 'EPSG:4326', 'EPSG:3857');
var view = map.getView();
view.setCenter(center);
view.setZoom(9);
})
</script>
</body>
</html>
3、视图联动
假设现在有两幅地图,我们希望它们能够联动,这该怎么实现呢?其实很简单,让这两个地图共享一个view
即可,代码如下:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>OpenLayers</title>
<link href="lib/ol/ol.css" rel="stylesheet" />
<script src="lib/ol/ol.js"></script>
</head>
<body>
<h2>地图一</h2>
<div id="map_1" style="width:800px;height:400px;"></div>
<h2>地图二</h2>
<div id="map_2" style="width:800px;height:400px;"></div>
<script>
var view = new ol.View({
projection: 'EPSG:3857',
center: ol.proj.transform([120, 30], 'EPSG:4326', 'EPSG:3857'),
zoom: 15
})
var map_1 = new ol.Map({
target: 'map_1',
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})
],
view: view
})
var map_2 = new ol.Map({
target: 'map_2',
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})
],
view: view
})
</script>
</body>
</html>
结果如下图所示:
4、限制地图缩放等级
有时候我们希望能够限制地图的缩放等级,比如最小5级,最大15级。其实这也很简单,只需要利用view
中的minZoom
和maxZoom
属性即可,代码如下:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>OpenLayers</title>
<link href="lib/ol/ol.css" rel="stylesheet" />
<script src="lib/ol/ol.js"></script>
</head>
<body>
<div id="map" style="width:800px;height:800px;"></div>
<script>
var map = new ol.Map({
target: 'map',
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})
],
view: new ol.View({
projection: 'EPSG:3857',
center: ol.proj.transform([120, 30], 'EPSG:4326', 'EPSG:3857'),
zoom: 10,
minZoom: 5, // 最小缩放等级
maxZoom: 15 // 最大缩放等级
})
})
</script>
</body>
</html>
5、限制地图的显示范围
在一般的WebGIS
开发中,我们并不需要把整个世界的地图都显示出来,可能我们只需要显示一定范围内的地图就行了,这时候就需要使用view
中的extent
属性配合minZoom
和maxZoom
属性来实现。假设我们现在只需要显示[117, 20]-[120, 30]
范围内的地图,其代码如下:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>OpenLayers</title>
<link href="lib/ol/ol.css" rel="stylesheet" />
<script src="lib/ol/ol.js"></script>
</head>
<body>
<div id="map" style="width:800px;height:800px;"></div>
<script>
var map = new ol.Map({
target: 'map',
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})
],
view: new ol.View({
projection: 'EPSG:4326',
extent: [117, 20, 120, 30], //限制范围
center: [118, 25],
zoom: 10,
minZoom: 10, // 最小缩放等级
maxZoom: 15 // 最大缩放等级
})
})
</script>
</body>
</html>
6、结语
这里只是介绍了一些OpenLayers
中基本的视图操作方法,其实查阅官网后你会发现还有很多其他好玩的功能,有兴趣的同志可自行登录官网进行学习。