Skip to content

1.3 第一个地图应用

📦 基于 OpenLayers 10.5.0+ 最新 API

🎯 本章目标

本章节将带你创建第一个 OpenLayers 地图应用,理解核心概念并掌握基础用法。学完本章你将掌握:

  • Map、View、Layer 核心概念
  • 基础地图的创建方法
  • 坐标系统的基本使用
  • 简单的事件处理

🏗️ 核心概念

OpenLayers 的核心架构包括:

Map(地图)

地图是应用程序的中心组件,由图层、视图、交互和控件组成:

javascript
import Map from 'ol/Map.js';

const map = new Map({
  target: 'map',        // 目标 DOM 元素
  layers: [],           // 图层数组
  view: null,           // 视图对象
});

View(视图)

视图管理地图的可视化参数:

javascript
import View from 'ol/View.js';

const view = new View({
  center: [0, 0],       // 地图中心点
  zoom: 2,              // 缩放级别
});

Layer(图层)

图层是轻量级容器,从数据源获取数据:

javascript
import TileLayer from 'ol/layer/Tile.js';
import OSM from 'ol/source/OSM.js';

const layer = new TileLayer({
  source: new OSM(),    // 数据源
});

🚀 创建第一个地图

步骤 1:HTML 结构

html
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>我的第一个 OpenLayers 地图</title>
  </head>
  <body>
    <div id="map"></div>
    <script type="module" src="./main.js"></script>
  </body>
</html>

步骤 2:导入模块

javascript
import './style.css';
import Map from 'ol/Map.js';
import OSM from 'ol/source/OSM.js';
import TileLayer from 'ol/layer/Tile.js';
import View from 'ol/View.js';

步骤 3:创建地图

javascript
const map = new Map({
  target: 'map',
  layers: [
    new TileLayer({
      source: new OSM(),
    }),
  ],
  view: new View({
    center: [0, 0],
    zoom: 2,
  }),
});

📝 完整示例

main.js

javascript
import './style.css';
import Map from 'ol/Map.js';
import OSM from 'ol/source/OSM.js';
import TileLayer from 'ol/layer/Tile.js';
import View from 'ol/View.js';

const map = new Map({
  target: 'map',
  layers: [
    new TileLayer({
      source: new OSM(),
    }),
  ],
  view: new View({
    center: [0, 0],
    zoom: 2,
  }),
});

// 添加点击事件
map.on('click', function(event) {
  console.log('点击坐标:', event.coordinate);
});

style.css

css
@import "node_modules/ol/ol.css";

html, body {
  margin: 0;
  height: 100%;
}

#map {
  position: absolute;
  top: 0;
  bottom: 0;
  width: 100%;
}

🌍 坐标系统基础

投影坐标转换

OpenLayers 默认使用 Web Mercator 投影(EPSG:3857):

javascript
import { fromLonLat } from 'ol/proj.js';

// 经纬度坐标(注意:经度在前,纬度在后)
const beijingLonLat = [116.4074, 39.9042]; // 北京
const beijingWebMercator = fromLonLat(beijingLonLat);

const map = new Map({
  target: 'map',
  layers: [
    new TileLayer({
      source: new OSM(),
    }),
  ],
  view: new View({
    center: beijingWebMercator,
    zoom: 10,
  }),
});

⚠️ 坐标顺序

fromLonLat() 函数期望的坐标格式是 [经度, 纬度],这与常见的 [纬度, 经度] 顺序相反。

💡 基础实践

事件处理

javascript
// 地图点击事件
map.on('click', function(event) {
  const coordinate = event.coordinate;
  console.log('点击坐标:', coordinate);
});

// 地图加载完成事件
map.once('rendercomplete', () => {
  console.log('地图加载完成');
});

响应式设计

javascript
// 窗口大小变化时更新地图
window.addEventListener('resize', () => {
  map.updateSize();
});

资源清理

javascript
// 组件卸载时清理资源
function cleanup() {
  if (map) {
    map.dispose();
  }
}

📚 学习资源

官方文档

下一步学习

🎯 总结

通过本章学习,你已经掌握了:

  • 核心概念:Map、View、Layer 的基本理解
  • 创建地图:从 HTML 到 JavaScript 的完整流程
  • 坐标转换:经纬度与投影坐标的转换
  • 事件处理:基础的地图交互
  • 最佳实践:响应式设计和资源清理

下一步:让我们学习 地图基础操作,掌握更多地图交互功能!

如有转载或 CV 的请标注本站原文地址