【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());

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

‍

相关推荐
M78佐菲22 分钟前
ARM学习笔记(12)
linux·arm开发·笔记·嵌入式硬件·学习
奇思妙想聪明勤奋的小羊34 分钟前
ai-agent-book第五章:Coding Agent 与通用 Agent 学习笔记
人工智能·笔记·学习
优化Henry1 小时前
BBU与RRU光链路详解:从双纤一收一发到单纤双向
网络·笔记·学习·5g·tdd
辣知2 小时前
辣知·化智68 半仙隐士渭水钓的不是鱼
学习
传奇开心果编程2 小时前
【用案例学Material 3 Expressive】第1课:从一封邮件开始,感受安卓设计新语言的表现力
android·学习·ui·kotlin·android jetpack
sunoo-2292 小时前
【嵌入式 ARM 学习第十二天】SPI 裸机驱动 + I2C 触摸屏驱动 + 三大串行协议深度对比
arm开发·笔记·vscode·学习·imx6ull
墨心@3 小时前
第 4 章《工具》学习总结
学习·自然语言处理·prompt·agent·harness
AOI小白新手上路3 小时前
4-1_地址空间_RISC与CISC_学习笔记
笔记·学习
Vcaker3 小时前
Linux学习36-k8s集群升级及kube-vip高可用
linux·运维·学习
probex_3 小时前
学习笔记:知识图谱落地实践
笔记·学习·知识图谱