【openlayers系统学习】1.1渲染GeoJSON,添加link交互

一、渲染GeoJSON

在进入编辑之前,我们将看一下使用矢量源和图层进行基本要素渲染。Workshop在 data​ 目录中包含一个 countries.json​ GeoJSON文件。我们首先加载该数据并将其渲染在地图上。

首先,编辑 index.html​ 以便向地图添加深色背景:

js 复制代码
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>OpenLayers</title>
    <style>
      @import "node_modules/ol/ol.css";
    </style>
    <style>
      html, body, #map-container {
        margin: 0;
        height: 100%;
        width: 100%;
        font-family: sans-serif;
        background-color: #04041b;
      }
    </style>
  </head>
  <body>
    <div id="map-container"></div>
    <script src="./main.js" type="module"></script>
  </body>
</html>

现在我们在mian.js文件中导入处理矢量数据的三个重要要素:

  • 'ol/format/GeoJSON':用于读取和写入序列化数据的格式(本例中为 GeoJSON)
  • 'ol/source/Vector':用于获取数据和管理要素空间索引的矢量源
  • 'ol/layer/Vector':用于在地图上渲染要素的矢量图层
js 复制代码
import GeoJSON from 'ol/format/GeoJSON';
import Map from 'ol/Map';
import VectorLayer from 'ol/layer/Vector';
import VectorSource from 'ol/source/Vector';
import View from 'ol/View';

new Map({
  target: 'map-container',
  layers: [
    new VectorLayer({
      source: new VectorSource({
        format: new GeoJSON(),
        url: './data/countries.json',
      }),
    }),
  ],
  view: new View({
    center: [0, 0],
    zoom: 2,
  }),
});

您现在应该能够在 http://localhost:5173/ 上看到带有国家边界的地图。

由于我们将多次重新加载页面,因此如果地图重新加载时保留位置,那就太好了。我们可以引入 Link​ 交互来完成这项工作。

js 复制代码
i/**
 * 导入Link交互功能。
 * 该交互功能允许用户在地图上创建一个链接,将地图上的两个位置连接起来。
 * 
 * 参数无。
 * 
 * 返回值无,仅为导入模块。
 */
import Link from 'ol/interaction/Link';

接下来我们需要将地图分配给一个变量(名为 map​ ),以便我们可以向其中添加交互:

js 复制代码
const map = new Map({

现在我们可以向地图添加新的链接交互:

js 复制代码
/**
 * 向地图中添加一个交互操作。
 * 这里的交互操作是指通过`Link`类创建的一个新的交互实例,它允许用户与地图进行某种形式的交互。
 * 
 * new Link() - 创建的一个新的Link交互实例。
 * 参数通过`new Link()`的方式创建,并直接传递给`addInteraction`方法进行添加。
 * 
 * 该方法没有返回值,其主要作用是将新的交互实例添加到地图中,以增强地图的可用性和用户体验。
 */
map.addInteraction(new Link());

现在您应该看到页面重新加载时保持地图视图稳定。并且后退按钮的功能与您预期的一样。

相关推荐
不在逃避q5 小时前
一步一步学习使用LiveBindings()TListView进阶使用(),打造天气预报程序
服务器·数据库·学习
知识分享小能手6 小时前
高等数学学习教程,从入门到精通,微分中值定理与导数的应用(5)
学习·机器学习·概率论
520拼好饭被践踏6 小时前
JAVA+Agent学习day25
java·开发语言·学习
魔术师Dix6 小时前
StartGame:Unity TDD 外部工程指南
学习·游戏·unity·c#·测试驱动开发
小弥儿7 小时前
GitHub今日热榜 | 2026-07-31:AI Agent工作流共享赛道升温
人工智能·学习·github
小蒋学算法16 小时前
算法-M个非重叠子数组最大和II-WQS二分学习
数据结构·学习·算法
重庆小透明18 小时前
带你从不同视角了解三大MQ
java·学习·spring·kafka·rabbitmq·rocketmq
~光~~19 小时前
【xv6学习】L0_环境配置
单片机·嵌入式硬件·学习
实验如有神祝女士21 小时前
不同参数规模大模型在医学翻译场景的适配差异
论文阅读·人工智能·深度学习·学习·算法·语言模型·论文笔记
若衹如初見1 天前
一步一步学习使用LiveBindings() LiveBindings图像绑定与自定义绑定方法()
学习·命令模式