OpenLayers基础教程——视图的常规操作

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中的minZoommaxZoom属性即可,代码如下:

<!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属性配合minZoommaxZoom属性来实现。假设我们现在只需要显示[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中基本的视图操作方法,其实查阅官网后你会发现还有很多其他好玩的功能,有兴趣的同志可自行登录官网进行学习。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值