记录GIS相关技术成长的点滴

0%

OpenLayers 基础 一:了解并简单构建

一、介绍

现在互联网地图(百度地图高德地图)都提供了很好的API使用,简单易懂,可以很快的通过文档构建自己的地图显示。但是有些时候项目和产品中需要离线的地图展示,本系列文章只讲述项目中比较常用的一些知识点,不会对每个组件进行详细的介绍。


OpenLayers 是一个开源的Web地图库,主要用于在Web段创建可交互式二维地图。本系列以6.0.1的版本进行讲解。

官网:OpenLayers

源码:GitHub

二、核心组件

组件构成

  1. Map:一个入口,用于组织和管理各个组件对象,最后渲染成地图。
  2. View:用于控制地图中心点,显示范围,显示层级等
  3. Layers:主要用于生成不同种类的图层,进行叠加展示
  4. Controls:提供不同种类的交互控件(也可以自定义控件),用来实现用户通过控件和地图交互,或者用于提供一些信息。控件会固定在页面一个位置,不会跟随地图改变而改变位置。
  5. Interactions:用来定义用户和地图交互功能和交互方式。
  6. Sources:数据源,用来给Layers提供源数据,每一个Layers 都会有一个对应的Source用以提供数据。
三、快速开始

  1. npm引入

    1
    npm install ol

    或者你可以选择CDN引入方式

    1
    2
    <script src="https://cdn.rawgit.com/openlayers/openlayers.github.io/master/en/v6.0.1/build/ol.js"></script>
    <link rel="stylesheet" href="https://cdn.rawgit.com/openlayers/openlayers.github.io/master/en/v6.0.1/css/ol.css">
  1. 构建一个html

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>OpenLayers</title>
    <style>
    #map {
    width: 1000px;
    height: 800px;
    }
    </style>
    </head>
    <body>
    <!-- 地图容器-->
    <div id="map"></div>
    <!-- 引入初始化地图的JS-->
    <script src="./js/demoMap.js"></script>
    </body>
    </html>
  1. 创建地图

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    import 'ol/ol.css';
    import {Map, View} from 'ol';
    import TileLayer from 'ol/layer/Tile';
    import OSM from 'ol/source/OSM';

    const map = new Map({
    target: 'map', // 地图容器Id
    // 展示的图层
    layers: [
    new TileLayer({
    // 数据源
    source: new OSM()
    })
    ],
    // 视图
    view: new View({
    // 中心点
    center: [0, 0],
    // 初始层级
    zoom: 0
    })
    });

这样就可以形成一个简单的地图出来

地图


四、总结

通过上面的 快速开始 可以看出,构建一个地图需要的必备属性:

  • target :地图容器的DIV
  • view :视图控制地图层级和中心点
  • layers :地图图层

只要这三个部分组织完毕,一个基本的地图应用就可以使用了。