Openlayers 快速上手教程

news2025/2/23 14:12:00

📢欢迎点赞👍/ 收藏⭐/ 留言📝如有错误敬请指正!

1. Openlayers简介

Openlayers 是开源的前端地图框架,官网地址:https://openlayers.org/
它的作用主要是用于展现数据并且提供相应的地图操作工具。

1.1 官网首页

在这里插入图片描述
在这里插入图片描述

1.2 使用示例example

Openlayers6版本官网提供了 228 个使用案例,可以根据自己的需要筛选:
如: popup、draw、style 等
在这里插入图片描述
例如搜索popup:
在这里插入图片描述
点击进入后有详细的代码示例:
在这里插入图片描述

1.3 阅读api

在学会了 Openlayers 的基本使用后,API 的阅读使用则是工作必备。
左侧列表列出了Openlayers的所有类,方便快速搜索
在这里插入图片描述
例如搜索Map后进入:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 快速开始示例

我将通过一个官网的demo介绍如何使用Openlayers
在这里插入图片描述
初始代码:

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.13.0/css/ol.css" type="text/css">
    <style>
      .map-class {
        height: 50rem;
        width: 100%;
      }
    </style>
    <!-- 加载OpenLayers 类库 -->
    <script src="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.13.0/build/ol.js"></script>
    <title>OpenLayers例子</title>
  </head>
  <body>
    <h2>我的地图</h2>
    <div id="map-id" class="map-class"></div>
    <script type="text/javascript">
      var map = new ol.Map({
        // 绑定 DIV 元素
        target: 'map-id',
        // 添加图层
        layers: [
          new ol.layer.Tile({
            // 设置图层的数据源
            source: new ol.source.OSM() 
          })
        ],
        // 设置视图窗口
        view: new ol.View({
          //center: ol.proj.fromLonLat([37.41, 8.82]),
          center: ol.proj.transform([104, 30], 'EPSG:4326', 'EPSG:3857'),
          zoom: 5
        })
      });
    </script>
  </body>
</html>

通过上面例子可以看出 Openlayers 使用很简单,首先定义一个 Map,这是 Openlayers 的核心,它是一个容器,所有动作、设置等都在 Map 中展开。

下面对上面 demo所简要说明:

  1. 将 Map 容器与 HTML 元素(这里是 DIV 元素 map-id)做绑定,Map 提供有 target 属性来绑定;
  2. 将图层 Layer 添加到 Map 中,这里是一个瓦面图层 ol.layer.Tile
  3. 图层是一个包装盒,需要给图层添加具体的数据源:new ol.source.OSM(),数据源表示一个服务,可以理解为是一个 URL;
  4. 最后设置 Map 容器的视图窗口:new ol.View,就是我们初始化能看到的地图样子。

Openlayers 其核心组件是 Map、Layer、Source、View、Control、Interaction几乎所有的动作都是围绕这几个核心类展开。

Map

Map是 Openlayers 的使用的基础,所有的图层、地图控件、地图工具等必须添加到 Map 中才能使用。
往 Map 中添加图层、地图控件、地图工具等可以在初始化 Map 时就添加(如上 demo),可以调用 Map 相关的方法添加 addControl(control)addInteraction(interaction)addLayer(layer)
Map 还提供了很多事件,如:点击地图(click)、双击地图(dbclick)等。
绑定 click 事件使用:

this.map.on("click", evt => {
  this.map.forEachFeatureAtPixel(evt.pixel, feature => {
	//鼠标点击某一个要素后,获取这个要素,执行业务逻辑
  });
});

PS: 另一种事件调用方式:this.map.dispatchEvent({type: "click", event: 回调函数 })

Layer

Layer 图层:单单一个 Map 是没有什么用的,只用绑定图层才能显示数据,Layer 作用能控制数据是否显示,以及地图可显示的最大或最小比例尺(即放大或缩小到某个级别不显示地图),这里特别说明下,图层主要是根据数据源的不同来选择,不同的数据源选择不同的图层,使用:

this.map.addLayer(new ol.layer.Vector({
  source: new TileWMS({
    url: "http://192.168.1.244:9090/geoserver/fj/wms",
    params: {
         LAYERS: "fj:cityErase"
     }
  })
}))

Source

这是整个 Openlayers 的灵魂,source 分为矢量数据源影像数据源。有时候底图使用影像数据,而与我们业务相关的河流、行政区、水环境监测点等都是矢量数据。
数据源的使用如下:

this.map.addLayer(new ol.layer.Tile({
        //加载影像数据
   source: new ol.source.XYZ({
        url: "https://{a-c}.tile.thunderforest.com/cycle/{z}/{x}/{y}.png?apikey=a5dd6a2f1c934394bce6b0fb077203eb",
        attributions: "测试"
   })
}));

this.map.addLayer(new VectorLayer({
    //加载矢量数据
   source: new ol.source.Vector(),
   //这里设置数据展示边框颜色
   style: function(feature) {
        return new Style({
             stroke: new Stroke({
                   color: "blue",
                   width: 1
             })
         })
     }
 }))

View

view 用来设置地图的展示位置范围、地图中心位置以及当前地图使用的投影坐标系(有很多坐标系,如地理坐标系:4326)等,也可以设置地图旋转等,使用:

this.map.setView(new ol.View({
     center: [114.064839,22.548857],    //深圳
     zoom: 15,    
     projection: 'EPSG:4326'     //使用的坐标,这里是 WGS84 坐标系
}))

Control

Control 控件,就是与地图相关操作的工具。如下图:
在这里插入图片描述
地图默认包含了放大缩小控件,控件的使用可以更加方便的帮助我们浏览数据,提高交互体验。

new ol.Map({
    target: 'map2',
    layers: [
      new ol.layer.Tile({
        source: new ol.source.OSM()
      })
    ],
    view: new ol.View({
      center: ol.proj.transform(
          [104, 30], 'EPSG:4326', 'EPSG:3857'),
      zoom: 10
    }),
    // 在默认控件的基础上,再加上其他内置的控件
	// 在上面 demo 中没有设置 controls 属性,直接使用 Map 的默认控件(放大、缩小)
    controls: ol.control.defaults().extend([
        new ol.control.FullScreen(),
        new ol.control.MousePosition(),
        new ol.control.OverviewMap(),
        new ol.control.ScaleLine(),
        new ol.control.ZoomSlider(),
        new ol.control.ZoomToExtent()
    ]),
});

Interaction

交互操作就是我们与地图的相互操作,比如在地图上绘制要素、选择、修改、移动、拉伸等等操作。使用如下:

new ol.Map({
      // 修改 openlayers 提供的默认的交互方式
      interactions: ol.interaction.defaults({
          doubleClickZoom: false,
          mouseWheelZoom: false
      }),
      layers: [
        ... ...
      ],
      target: 'map2',
      view: new ol.View({
          ... ...
      })
  });

也可以手动添加:

// 添加绘制工具
this.map.addInteraction(new Draw({
  //在地图上绘制好的要素添加到指定数据源
  source: this.drawVectorSource,   
  //绘制要素的类型
  type: GeometryType.POLYGON
});

📢欢迎点赞👍/ 收藏⭐/ 留言📝如有错误敬请指正!
后续持续更新中…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/405937.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringCloud 分布式微服务架构

SpringCloud 分布式架构前言SpringCloud微服务单体架构和微服务分布式架构单体架构分析微服务分布式架构分析服务拆分和远程调用服务拆分 案例需求准备远程调用初步Eureka注册中心服务注册与负载均衡服务注册Ribbon负载均衡指定负载均衡规则Nocas 注册中心环境配置启动服务注册…

vue3+动态路由

动态路由&#xff0c;也就是不是写死的路由&#xff0c;根据自己的需求加载不同的页面&#xff1b;现在很多的后台管理项目就是根据用户角色的不同分配不同的功能菜单&#xff08;页面&#xff09;&#xff1b; 根据用户登录的角色返回可以访问的页面路由&#xff0c;前端将路由…

JSON parse error: Cannot deserialize value of type `java.util.Date` from String

DateTimePicker DateTimeFormat("yyyy-MM-dd HH:mm:ss")日期格式转换异常 最近在学习,练习一个项目使用的日期格式是yyyy-MM-dd HH:mm:ss格式的,在后端Java与MySQL这边的转换中一开始格式没有统一间歇性的就会报异常,后面采用了一个DateTimeFormat("yyyy-MM-d…

vue组件的动态加载

​ 平常的vue项目开发&#xff0c;已经很难遇见一千行&#xff0c;甚至几千行代码的页面了&#xff0c;毕竟大家都会去拆分组件。但如果一个页面需要通过十几个组件或者几十个组件中的某几个组件去排列组合渲染&#xff0c;此时用动态加载就很有必要了。 ​ 我自己在开发过程中…

v-if与v-for为什么不建议一起使用?

1、作用 v-if指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回true值的时候被渲染。 v-for指令基于一个数组来渲染一个列表。v-for指令需要使用item in items 形式的特殊语法&#xff0c;其中items是源数据数组或者对象&#xff0c;而item则是被迭代的数组元素的…

JS-获取DOM元素的五种方法

介绍 本文主要介绍通过JS获取DOM元素的5种方法&#xff1a; 根据id名获取元素&#xff1a;getElementById;根据标签名获取元素&#xff1a;getElementsByTagName&#xff0c;返回一个数组&#xff1b;根据类名获取元素&#xff1a;getElementsByClassName&#xff0c;返回一个…

当后端给我返回了302状态码

本文首发于&#xff1a;https://github.com/bigo-frontend/blog/ 欢迎关注、转载。 前言 前段时间接手了一个项目&#xff0c;在代码中看到了这样的一段代码&#xff1a; if (isHTML(data) &&response.request.responseURL?.indexOf(CAS_PREFIX) > -1) {window.l…

cesium简介

文章目录1.什么是Cesium&#xff1f;2.Cesium能做什么&#xff1f;3.Cesium的依赖性4.Cesium学习参考Cesium实战系列文章总目录&#xff1a; 传送门1.什么是Cesium&#xff1f; Cesium是AGI公司计算机图形开发小组与2011年研发的三维地球和地图可视化开源JavaScript库&#xf…

【微信小程序 | 实战开发】实现ES6转ES5开关

个人名片: 🐼作者简介:一名大二在校生,喜欢编程🎋 🐻‍❄️个人主页🥇:小新爱学习. 🐼个人WeChat:hmmwx53 🕊️系列专栏:🖼️ 零基础学Java——小白入门必备重识C语言——复习回顾

Java开发框架选型对比:ruoyi与yudao框架

1、基础开发框架 1.1 什么是基础开发框架&#xff1f; 基础框架可以理解为建立一个项目所需的基础框架&#xff0c;这个基础框架为凝聚了之前开发项目的通用、共性的方法、工具、技术等组成的代码包。 现有我们公司有两类基础框架&#xff1a;&#xff08;1&#xff09;基于w…

vue2使用element UI中Descriptions组件的遍历问题

需求描述&#xff1a;展示信息时其中部门区域是未知数量的&#xff0c;需要通过遍历进行展示。如下图举例&#xff0c;其中地址和备注是一一对应关系&#xff0c;需遵循该样式。 问题描述&#xff1a;起初我在el-descriptions中直接使用v-for进行遍历地址和备注两个el-descript…

实现异步的8种方式

前言异步执行对于开发者来说并不陌生&#xff0c;在实际的开发过程中&#xff0c;很多场景多会使用到异步&#xff0c;相比同步执行&#xff0c;异步可以大大缩短请求链路耗时时间&#xff0c;比如&#xff1a;「发送短信、邮件、异步更新等」&#xff0c;这些都是典型的可以通…

Switch语句用法及案例

​ 一、Switch语句用法 switch是多分支语句&#xff0c;用于判断一个表达式的值&#xff0c;然后执行相应的语句。&#xff08;可以实现多选一&#xff09; switch语句执行思路&#xff1a;利用表达式的值&#xff0c;来判断执行哪个语句。&#xff08;简单的来说就是利用我们…

Vue 3 安装及环境配置

Vue 3 安装及环境配置1、安装 Node.js2、配置默认安装目录和缓存日志目录3、配置环境变量4、配置淘宝镜像5、安装 vue 和脚手架6、安装vue-cli 3.x7、创建 vue 3 项目8、可能遇到的问题1、安装 Node.js Node.js 官网&#xff1a;https://nodejs.org/en/download 安装成功后在…

Vue项目实战——实现一个任务清单【基于 Vue3.x 全家桶(简易版)】

Vue3.x 项目实战&#xff08;一&#xff09; 内容参考链接Vue2.x全家桶Vue2.x 全家桶参考链接Vue2.x项目&#xff08;一&#xff09;Vue2.x 实现一个任务清单Vue2.x项目&#xff08;二&#xff09;Vue2.x 实现GitHub搜索案例Vue3.x项目&#xff08;三&#xff09;Vue3.x 实现一…

Vue项目部署(Nginx)

本文记录如何将做好的Vue项目部署到服务器上&#xff0c;需要准备&#xff1a; linux系统的服务器或者虚拟机Vue项目打包Nginx服务器的配置和部署1、linux系统准备 本次使用云主机作为部署主机。 2、Vue项目打包 切换到项目所在目录&#xff0c;使用 npm run build 命令完成项目…

深度学习——VGG16模型详解

1、网络结构 VGG16模型很好的适用于分类和定位任务&#xff0c;其名称来自牛津大学几何组&#xff08;Visual Geometry Group&#xff09;的缩写。 根据卷积核的大小核卷积层数&#xff0c;VGG共有6种配置&#xff0c;分别为A、A-LRN、B、C、D、E&#xff0c;其中D和E两种是最…

yolov5源码解析(9)--输出

本文章基于yolov5-6.2版本。主要讲解的是yolov5是怎么在最终的特征图上得出物体边框、置信度、物体分类的。 一。总体框架 首先贴出总体框架&#xff0c;直接就拿官方文档的图了&#xff0c;本文就是接着右侧的那三层输出开始讨论。 Backbone: New CSP-Darknet53Neck: SPPF, …

JavaWeb酒店管理系统

酒店管理系统 一、项目介绍 1、项目用到的技术栈 开发工具&#xff1a;idea语言&#xff1a;java、js、htmlajax数据库&#xff1a;MySQL服务器&#xff1a;Tomcat框架&#xff1a;mybatis、jQuery 2、项目实现功能 管理员和用户登录和退出功能以及用户注册功能&#xf…

【第二趴】uni-app开发工具(手把手带你安装HBuilderX、搭建第一个多端项目初体验)

文章目录写在前面HBuilderXHBuilderX 优势HBuilderX 安装uni-app 初体验写在最后写在前面 聚沙成塔——每天进步一点点&#xff0c;大家好我是几何心凉&#xff0c;不难发现越来越多的前端招聘JD中都加入了uni-app 这一项&#xff0c;它也已经成为前端开发者不可或缺的一项技能…