Glittering's blog Glittering's blog
Home
  • 学习手册

    • 《TypeScript教程》
    • 《Git》
    • 《Vite》
    • 《Vue3》
    • 《React18》
    • 《CSS》
    • 《Tailwind CSS》
  • 技术文档
  • 算法
  • 工作总结
  • 实用技巧
  • collect
About
  • Classification
  • Label
GitHub (opens new window)

Glitz Ma

前端开发工程师
Home
  • 学习手册

    • 《TypeScript教程》
    • 《Git》
    • 《Vite》
    • 《Vue3》
    • 《React18》
    • 《CSS》
    • 《Tailwind CSS》
  • 技术文档
  • 算法
  • 工作总结
  • 实用技巧
  • collect
About
  • Classification
  • Label
GitHub (opens new window)
  • 技术文档

  • 算法

  • 工作总结

    • 时区校正
    • 上传下载文件方式总结
    • web异常监控和分析
    • 前端优化指南
    • http缓存机制
    • 静态资源灰度发布
    • 浏览器原理及渲染机制
    • Chrome DevTools 渲染分析实战
    • Layout Thrashing(布局抖动)
    • Composite Layer(合成层)
    • 全局设置滚动条样式好吗?
    • 虚拟列表如何避免Layout和Paint
    • 前端安全知识
    • 安全(同源策略 / CSP / CORS)
    • 浏览器安全模型
    • 从chrome v8 讲安全
    • WebAssembly(Wasm)
    • XSS → JIT → 沙箱逃逸
    • 微前端总结
    • websocket聊天
    • Uni-app基础知识
    • react16高级特性
    • react16基础知识总结
    • vue2常见原理总结
    • vue2基础知识总结
    • webpack优化实践
    • webpack基础应用知识总结
    • Agent Skills是什么?跟MCP Workflow Command Prompt的关系。
    • 从cnn到transformer全解大模型
    • 什么是 Encoder 和 Decoder 结构
    • GPT 为什么能“看懂”问题
    • GPT 是怎么学会数学的
    • GIS 基础三件套
    • GIS必会知识点
    • 100 万点地图怎么渲染?
    • GIS空间索引的实现
    • Cesium 从入门到精通:实战指南
    • OpenLayers 从零到精通:2025-2026实战指南
      • 一、前言与定位
        • 与其他地图库对比
        • 2025-2026 最新版本特点
        • 学完后能做什么?
      • 二、开发环境搭建
        • 方法一:CDN(最简单)
        • 方法二:推荐方式(Vite + npm)
        • 方法三:ESM + importmap
        • 最小 HTML 模板
      • 三、核心概念速览
        • Map
        • View
        • Layer
        • Source
        • Feature
        • Geometry
        • Style
        • Interaction
        • Overlay
      • 四、入门实战:5 分钟做第一个地图
        • main.js
        • 添加控件
      • 五、中级进阶
        • 5.1 多底图
        • ⚠ 注意
        • 5.2 WMS 服务
        • 5.3 加载 GeoJSON
        • 5.4 样式系统
        • 5.5 交互
        • 5.6 弹出框 Overlay
        • 5.7 坐标系转换
      • 六、高级实战:城市 POI 管理系统
        • 项目结构
        • 加载 POI 数据
        • 聚类
        • 热力图
        • 动画效果
        • 自定义控件
        • 扩展能力
      • 七、性能优化与生产最佳实践
        • 1 瓦片缓存
        • 2 大量点位
        • 3 内存管理
        • 4 移动端适配
        • 5 常见 Bug
        • 白屏
        • 坐标偏移
        • 跨域
        • 打包部署
      • 八、学习资源
        • 进阶方向
      • 九、结语
    • Mapbox GL JS 从零到精通:2025-2026实战指南
    • Cesium、OpenLayers 和 Mapbox GL JS 的关系、区别
    • 容器领域必学的黄金组合
    • 小程序笔记
    • 小程序工程模板设计
    • 地图标绘--射线法来计算点在多边形内
  • 实用技巧

  • 收藏夹

  • 技术
  • 工作总结
mamingjuan
2026-03-06
目录

OpenLayers 从零到精通:2025-2026实战指南

# 一、前言与定位

在 WebGIS 开发领域,如果你需要构建 专业级 2D 地图应用,有一个非常成熟且强大的工具——OpenLayers。

OpenLayers 是一个开源的 JavaScript 地图库,主要用于构建 浏览器中的 2D GIS 应用。它支持丰富的 地图投影、矢量数据、OGC 服务(WMS/WFS/WMTS),是企业级 WebGIS 平台中非常常见的技术选型。

# 与其他地图库对比

技术 特点 适用场景
OpenLayers 功能最强,支持复杂 GIS WebGIS 平台
Leaflet 轻量、简单 简单地图
Mapbox GL JS 高性能矢量瓦片 地图产品
CesiumJS 3D 地球引擎 数字孪生

简单总结:

OpenLayers = WebGIS 工程
Leaflet = 轻量地图
MapboxGL = 高性能地图
Cesium = 3D 地球
1
2
3
4

# 2025-2026 最新版本特点

OpenLayers v10.x 带来了几个重要升级:

  • 完整 ESM 模块化
  • 更好的 Tree Shaking
  • WebGL 渲染增强
  • 更强的 矢量渲染性能
  • 更好的 移动端支持

# 学完后能做什么?

掌握 OpenLayers 后,你可以开发:

  • 🌍 智慧城市 GIS 平台
  • 🚦 交通监控地图
  • 🏙 城市规划系统
  • 🛰 卫星影像浏览系统

目标读者:

零基础 GIS → 能独立开发 WebGIS 项目
1

# 二、开发环境搭建

# 方法一:CDN(最简单)

适合快速体验。

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/ol/ol.css" />

<script src="https://cdn.jsdelivr.net/npm/ol/dist/ol.js"></script>
1
2
3

# 方法二:推荐方式(Vite + npm)

现代项目推荐使用:

npm create vite@latest openlayers-demo
cd openlayers-demo

npm install
npm install ol
1
2
3
4
5

启动项目:

npm run dev
1

# 方法三:ESM + importmap

现代浏览器方式:

<script type="importmap">
  {
    "imports": {
      "ol": "https://cdn.jsdelivr.net/npm/ol@latest/dist/ol.js"
    }
  }
</script>
1
2
3
4
5
6
7

# 最小 HTML 模板

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>OpenLayers Demo</title>

    <link rel="stylesheet" href="node_modules/ol/ol.css" />

    <style>
      html,
      body,
      #map {
        width: 100%;
        height: 100%;
        margin: 0;
      }
    </style>
  </head>

  <body>
    <div id="map"></div>

    <script type="module" src="main.js"></script>
  </body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

# 三、核心概念速览

# Map

Map 是地图对象。

import Map from "ol/Map";

const map = new Map();
1
2
3

# View

View 控制地图视角。

import View from "ol/View";

const view = new View({
  center: [0, 0],
  zoom: 2,
});
1
2
3
4
5
6

# Layer

地图图层。

常见类型:

  • TileLayer
  • VectorLayer
  • ImageLayer

示例:

import TileLayer from "ol/layer/Tile";
1

# Source

数据来源。

例如:

OSM
XYZ
Vector
WMS
1
2
3
4

示例:

import OSM from "ol/source/OSM";
1

# Feature

Feature 是 地图要素。

例如:

点
线
面
1
2
3
new Feature();
1

# Geometry

几何对象:

Point
LineString
Polygon
1
2
3

# Style

控制样式。

new Style({
  stroke: new Stroke({
    color: "red",
  }),
});
1
2
3
4
5

# Interaction

交互系统:

Draw
Modify
Select
1
2
3

# Overlay

用于 弹出框。


# 四、入门实战:5 分钟做第一个地图

# main.js

import Map from "ol/Map";
import View from "ol/View";

import TileLayer from "ol/layer/Tile";
import OSM from "ol/source/OSM";

import { fromLonLat } from "ol/proj";

const map = new Map({
  target: "map",

  layers: [
    new TileLayer({
      source: new OSM(),
    }),
  ],

  view: new View({
    center: fromLonLat([121.47, 31.23]),
    zoom: 10,
  }),
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

运行后就能看到:

OpenStreetMap 地图
1

# 添加控件

import { ScaleLine, MousePosition } from "ol/control";
1

添加:

map.addControl(new ScaleLine());
map.addControl(new MousePosition());
1
2

# 五、中级进阶

# 5.1 多底图

XYZ 示例:

import XYZ from "ol/source/XYZ";

new TileLayer({
  source: new XYZ({
    url: "https://tile.openstreetmap.org/{z}/{x}/{y}.png",
  }),
});
1
2
3
4
5
6
7

# ⚠ 注意

国内地图需要 坐标系转换(GCJ02)。


# 5.2 WMS 服务

import TileWMS from "ol/source/TileWMS";

new TileLayer({
  source: new TileWMS({
    url: "http://localhost:8080/geoserver/wms",

    params: {
      LAYERS: "topp:states",
    },
  }),
});
1
2
3
4
5
6
7
8
9
10
11

# 5.3 加载 GeoJSON

import VectorSource from "ol/source/Vector";
import GeoJSON from "ol/format/GeoJSON";
1
2
const source = new VectorSource({
  url: "data.geojson",

  format: new GeoJSON(),
});
1
2
3
4
5

# 5.4 样式系统

import Style from "ol/style/Style";
import Stroke from "ol/style/Stroke";
1
2
const style = new Style({
  stroke: new Stroke({
    color: "blue",
    width: 2,
  }),
});
1
2
3
4
5
6

# 5.5 交互

import Draw from "ol/interaction/Draw";
1
map.addInteraction(
  new Draw({
    type: "Polygon",
  }),
);
1
2
3
4
5

# 5.6 弹出框 Overlay

import Overlay from "ol/Overlay";
1
const popup = new Overlay({
  element: document.getElementById("popup"),
});

map.addOverlay(popup);
1
2
3
4
5

# 5.7 坐标系转换

import { fromLonLat, toLonLat } from "ol/proj";
1
fromLonLat([116.39, 39.9]);
1

# 六、高级实战:城市 POI 管理系统

项目目标:

城市 POI 管理平台
1

支持:

  • POI 展示
  • 聚类
  • 热力图
  • 查询
  • 编辑

# 项目结构

project
 ├ index.html
 ├ main.js
 ├ style.css
 └ data
     └ poi.geojson
1
2
3
4
5
6

# 加载 POI 数据

const source = new VectorSource({
  url: "data/poi.geojson",

  format: new GeoJSON(),
});
1
2
3
4
5

# 聚类

import Cluster from "ol/source/Cluster";

const clusterSource = new Cluster({
  distance: 40,
  source: source,
});
1
2
3
4
5
6

# 热力图

import HeatmapLayer from "ol/layer/Heatmap";
1
const heatLayer = new HeatmapLayer({
  source: source,
});
1
2
3

# 动画效果

map.on("postrender", function () {
  // 动画逻辑
});
1
2
3

# 自定义控件

class MyControl extends Control {
  constructor() {
    super({
      element: document.createElement("div"),
    });
  }
}
1
2
3
4
5
6
7

# 扩展能力

可以接入:

REST API
WebSocket
实时数据
1
2
3

例如:

fetch("/api/poi");
1

# 七、性能优化与生产最佳实践

# 1 瓦片缓存

浏览器缓存:

TileCache
1

# 2 大量点位

推荐:

Cluster
WebGLPoints
1
2

# 3 内存管理

销毁地图:

map.setTarget(null);
1

# 4 移动端适配

注意:

touch 事件
设备像素比
1
2

# 5 常见 Bug

# 白屏

可能:

容器高度为0
1

# 坐标偏移

原因:

GCJ02 / WGS84
1

# 跨域

需要:

CORS
1

# 打包部署

推荐:

  • Vite
  • Webpack
  • Rollup

# 八、学习资源

官方文档:

  • OpenLayers 官方文档

示例库:

OpenLayers examples
1

GitHub:

github.com/openlayers/openlayers
1

# 进阶方向

推荐学习:

OpenLayers + Vue
OpenLayers + React
OpenLayers + Three.js
OpenLayers + Deck.gl
OpenLayers + Cesium
1
2
3
4
5

# 九、结语

通过本文,你已经掌握:

OpenLayers 基础
地图图层
矢量数据
交互系统
GIS 服务
项目架构
性能优化
1
2
3
4
5
6
7

学习路径建议:

OpenLayers 基础
↓
GIS 数据处理
↓
OGC 服务
↓
大型 GIS 平台
1
2
3
4
5
6
7

建议你:

  • Fork 官方 examples
  • 自己实现新功能
  • 将项目发布到 GitHub

最终,你将可以开发:

企业级 WebGIS 平台
1
上次更新: 2026/03/06, 08:43:08
Cesium 从入门到精通:实战指南
Mapbox GL JS 从零到精通:2025-2026实战指南

← Cesium 从入门到精通:实战指南 Mapbox GL JS 从零到精通:2025-2026实战指南→

Copyright © 2015-2026 Glitz Ma
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式