二十八、openlayers官网示例Data Tiles解析——自定义绘制DataTile源数据

使用web地图API访问地图服务 相关学习文档官网 阅读详情

官网demo地址:

 

https://openlayers.org/en/latest/examples/data-tiles.html

这篇示例讲解的是自定义加载DataTile源格式的数据。

先来看一下什么是DataTile,这个源是一个数组,与我们之前XYZ切片源有所不同。DataTile主要适用于需要动态生成、处理或渲染瓦片数据的复杂场景。

先新建一个canvas,设置一下画布参数。

   //256x256 像素是瓦片图层的常见尺寸
    const size = 256;

    const canvas = document.createElement("canvas");
    canvas.width = size;
    canvas.height = size;

    const context = canvas.getContext("2d");
    //设置描边颜色为白色。
    context.strokeStyle = "white";
    //设置文本对齐方式为居中
    context.textAlign = "center";
    //设置字体为 24 像素的无衬线字体。
    context.font = "24px sans-serif";
    //用于控制文本行高
    const lineHeight = 30;

 loader 是一个自定义数据加载函数,用于在需要时生成或获取瓦片数据。它的设计目的是为了处理动态生成的或特定格式的数据,比如在运行时计算或从非标准源获取的数据。

new TileLayer({
          source: new DataTile({
            loader: function (z, x, y) {
              const half = size / 2;
              //清除画布内容
              context.clearRect(0, 0, size, size);
              context.fillStyle = "rgba(100, 100, 100, 0.5)";
              //填充整个画布
              context.fillRect(0, 0, size, size);
              context.fillStyle = "red";
              //绘制文字
              context.fillText(`z: ${z}`, half, half - lineHeight);
              context.fillText(`x: ${x}`, half, half);
              context.fillText(`y: ${y}`, half, half + lineHeight);
              context.strokeRect(0, 0, size, size);
              //获取画布内容的像素数据
              const data = context.getImageData(0, 0, size, size).data;
              // 转换为Uint8Array以提高浏览器兼容性
              return new Uint8Array(data.buffer);
            },
            //禁用不透明度过渡,以避免在tile加载期间重叠标签
            transition: 0,
          }),
        }),

事实上,很多源都提供loader参数方便我们把获取的数据或地图路径经过二次处理之后再加载到地图上。而具体返回什么样的数据格式取决于源本身所接受的数据格式。

完整代码:

<template>
  <div class="box">
    <h1>Data Tiles自定义绘制DataTile源数据</h1>
    <div id="map"></div>
  </div>
</template>

<script>
import DataTile from "ol/source/DataTile.js";
import Map from "ol/Map.js";
import TileLayer from "ol/layer/WebGLTile.js";
import View from "ol/View.js";
export default {
  name: "",
  components: {},
  data() {
    return {
      map: null,
    };
  },
  computed: {},
  created() {},
  mounted() {
    //256x256 像素是瓦片图层的常见尺寸
    const size = 256;

    const canvas = document.createElement("canvas");
    canvas.width = size;
    canvas.height = size;

    const context = canvas.getContext("2d");
    //设置描边颜色为白色。
    context.strokeStyle = "white";
    //设置文本对齐方式为居中
    context.textAlign = "center";
    //设置字体为 24 像素的无衬线字体。
    context.font = "24px sans-serif";
    //用于控制文本行高
    const lineHeight = 30;

    const map = new Map({
      target: "map",
      layers: [
        new TileLayer({
          source: new DataTile({
            loader: function (z, x, y) {
              const half = size / 2;
              //清除画布内容
              context.clearRect(0, 0, size, size);
              context.fillStyle = "rgba(100, 100, 100, 0.5)";
              //填充整个画布
              context.fillRect(0, 0, size, size);
              context.fillStyle = "red";
              //绘制文字
              context.fillText(`z: ${z}`, half, half - lineHeight);
              context.fillText(`x: ${x}`, half, half);
              context.fillText(`y: ${y}`, half, half + lineHeight);
              context.strokeRect(0, 0, size, size);
              //获取画布内容的像素数据
              const data = context.getImageData(0, 0, size, size).data;
              // 转换为Uint8Array以提高浏览器兼容性
              return new Uint8Array(data.buffer);
            },
            //禁用不透明度过渡,以避免在tile加载期间重叠标签
            transition: 0,
          }),
        }),
      ],
      view: new View({
        center: [0, 0],
        zoom: 0,
      }),
    });
  },
  methods: {},
};
</script>

<style lang="scss" scoped>
#map {
  width: 100%;
  height: 500px;
}
.box {
  height: 100%;
}

#info {
  width: 100%;
  height: 24rem;
  overflow: scroll;
  display: flex;
  align-items: baseline;
  border: 1px solid black;
  justify-content: flex-start;
}
</style>

Vue+OpenLayers6入门教程汇总目录,OpenLayers教程,Vue+OpenLayers中文文档,OpenLayers手册,OpenLayers6文档教程,OpenLayers中文手册 OpenLayers介绍,相比较其他地图引擎有什么优点四种流行地图引擎比较Gis开发入门,OpenLayers、Leaflet、Maplibre-gl和Cesiumjs地图引擎介绍以及几种地图服务vms、vmts介绍。 阅读详情

相关推荐

Openlayers入门教程 --- 万字长篇

也许你还不熟悉Openlayers,也许你是一个Openlayers小白,零基础没关系,这篇文章提供最基础的 Openlayers 教程,简单易学,贯穿整个Openlayers 知识体系。读完本文,您将会对 Openlayers 有一个全新的认识。

大剑师兰特的GIS世界 8881

OpenLayers入门-第一篇、基本概念与核心组件

学习一下openlayers里面的一些基本概念,npm地址。 npm install ol OpenLayers是一个高性能、功能丰富的库,用于在web上创建交互式地图。它可以显示地图瓷砖,矢量数据和标记加载从任何来源在任何网页。OpenLayers的开发是为了进一步使用各种地理信息。它是完全免费的,开源JavaScript。 1.Map A map is made of layers, a view to visualize them, interactions to modify map co

球球不吃虾WHR2349博客 1万+

openlayers全面教程306+【目录】

vue+openlayers系列教程旨在为开发者提供简单快捷的示例。在每一个示例中,解释相应的API知识点。

大剑师兰特的GIS世界 2万+

OpenLayers 开源的Web GIS引擎

gis

m0_45127388的博客 1万+

setoolkit克隆网站获取用户信息

一、环境 kali、DVWA 二、步骤 首先打开kali,输入setoolkit 依次选择选项1-选项2-选项3-选项2 输入钓鱼网站的网址(默认为本地网址) 输入要克隆的网址URL 这里我的网址如图,将网址复制 然后模拟攻击场景,攻击者向受害者发送了一条钓鱼链接,此链接与DVWA的登陆页面完全一样,受害者点击之后并进行登陆信息 点击login之后,用户信息就被setool...

BeatRex的博客 2997

「0基础安装本地Hermes」本地部署Hermes|为Hermes装上UI图形界面

Hermes已经发布有一段时间了,不少小伙伴也装配上了这个Agent。相对于之前发布爆火的Openclaw,Hermes对于很多小白不是很友好,它没有属于自己的UI界面,只能在本地终端运行,前不久Github上有人发布自己的作品,让终端里的Hermes拥有属于自己的UI界面,EKKOLearnAI开发的Hermes UI界面项目为终端运行的Hermes提供了可视化操作方式,降低了使用门槛。该项目通过Web界面与本地Hermes Agent交互,实现更友好的操作体验。

qq_55438365的博客 1873

openlayers入门教程

openlayers基础入门到实战平铺图层。对于提供预呈现、平铺的网格图像的层源,这些网格按特定分辨率的缩放级别组织。图像图层。服务器呈现的映像,可用于任意范围和分辨率。(3)ol.layer.Vector()很常用矢量图层。矢量平铺图层。图层用于客户端呈现矢量平铺数据。

weixin_43239880的博客 3万+

BLDC方波控制 vs. FOC:技术选型指南与未来演进

本文深入对比BLDC电机方波控制与FOC技术的核心差异,分析两者在成本、性能和应用场景上的权衡。方波控制凭借低成本和易实现性,在电动工具和家电领域优势明显;而FOC则以平滑高效控制见长,适用于高端精密应用。文章为工程师提供了实用的技术选型指南,并展望了未来技术融合的发展趋势。

yhn4567890的博客 1172

OpenLayers使用

OpenLayers是Web GIS前端开发的利器,如果你想在浏览器中进行Web GIS的开发,那么OpenLayers可以大大减少你的工作量,让你快速开发出应用。 OpenLayers概览 OpenLayers是一个用于开发WebGIS客户端的JavaScript包。OpenLayers 支持的地图来源包括Google Maps、Yahoo、 Map、微软Virtual Earth 等,用户...

David_jiang 3万+

AI驱动的iOS逆向工程自动化:14阶段工作流与Ghidra集成实践

逆向工程是软件安全分析的核心技术,通过反汇编、调试等手段解析程序内部逻辑与数据流。其原理在于将编译后的二进制代码还原为可理解的逻辑结构,从而发现潜在漏洞或理解软件行为。在移动安全领域,iOS逆向工程具有重要技术价值,能够用于安全审计、漏洞挖掘与恶意软件分析。传统iOS逆向依赖ipsw、class-dump、Frida等工具链组合,存在学习曲线陡峭与流程碎片化问题。本文介绍的ios-reverse-skills项目创新性地将14阶段逆向工程方法论封装为AI可调用的标准化脚本集,通过Ghidra脚本实现Swif

weixin_27268733的博客 434

自制电吉他效果器 DIY PCB(二)电路图分析

自制DIY电吉他效果器 PCB(二)电路图分析 要自制一款效果器,看懂电路图是必须的,即使你已经有了完整的设计电路图,在电路的绘制已久焊接的时候电路知识都会用到。 在效果器电路中,比较简单的是过载失真类效果器的电路。混响延迟等与声相有关的由于电路比较复杂本人也没有尝试过。其他的例如EQ、哇音等等效果器复杂程度依设计各不相同,在能做出过载失真类效果器后,可以自行尝试。 我这里主要为大家介绍失真效果器...

qq_41342525的博客 2万+

openlayers开源地图开发

openlayers的中文网址:https://openlayers.org/workshop/en/webgl/points.html

Yetian_2000的博客 5136

LPDDR6 技术标准详解(JESD209-6)

是继 LPDDR5/5X 之后的新一代低功耗 DRAM 标准,专为满足移动终端、AI、边缘计算等高带宽、低功耗场景而设计。该标准通过全新架构、动态功耗控制机制和增强型数据完整性机制,实现性能、能效与可靠性的全面升级。LPDDR6 并非仅是速度升级,更是内存架构设计思路的演进,围绕“低功耗 + 高带宽 + 强安全”的三维目标,构建下一代 SoC 平台关键基础。✅ 高带宽:支持 32B/64B 动态突发✅ 低功耗:动态电压、通道切换✅ 高可靠性:ECC + 自测试 + 安全区。

weixin_43199439的博客 2584

OpenLayers地图基本概念(Map、View、Layer、Source四种基本类型)和背景介绍,OpenLayers官方文档翻译,OpenLayers官方中文教程,OpenLayers中文指南

本文翻译自OpenLayers7官方文档,用于阐述OpenLayers地图基本概念。Vue+OpenLayers中文教程推荐,不同于OpenLayers官方文档使用html+js原生原生教程,博主专栏包含大量vue整合案例和实际开发案例,非常适合地图开发小白快速入门。

GIS技术方向,GIS地图技术分享(GIS入门、Openlayers教程、Leaflet教程),做最好的GIS地图开发教程。关注博主公众号:eguid 7457

HALCON机器视觉之结合LMI Gocator 5504进行手机折叠屏异物、折痕和胶体检测(基于C# + HALCON)

手机折叠屏是一种创新的屏幕技术,它允许屏幕在一定程度上进行折叠,从而在便携性和屏幕尺寸之间取得平衡。这种屏幕通常由多层材料组成,包括柔性显示层、保护层和胶水层等。本文将详细介绍如何使用C#编程语言,结合HALCON和LMI Gocator 5504来实现手机折叠屏的异物、折痕和胶体检测。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 9321

Spring AI 实战:第二章、Spring AI提示词之玩转AI占卜的艺术

引言:程序员的神秘学探索引言:程序员的神秘学探索“下个迭代能按时发布吗?“这次晋升机会有多大?“我写的代码为什么总在半夜出bug?作为一名开发者是否也曾被这些略带玄学问题困扰?那让我们用Spring AI和提示词工程打造一个专属于程序员的"赛博占卜师",让大师来为你占卜一卦吧~一、提示词工程 - 与AI对话的艺术1.1 提示词工程是什么类比一下,AI就像一位刚从名校毕业的高材生它知识渊博但缺乏经验能解决复杂问题但需要明确指引有时会"过度脑补"(专业术语叫"幻觉")

liaokailin的专栏 1851

OpenLayers学习(一)

这里使用 OSM(OpenStreetMap)作为 source,需要科学上网。openlayers地图包含:Map、layers、view、source。本小白用的是 ol 5.3.0版本。相应的 CSS 样式。

beat4ox的博客 2164

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

openLayers基础地图操作

和高德地图,百度地图,腾讯地图,Arcgis一样,OpenLayers是一个用于开发WebGIS客户端的JavaScript包。

前端小记 8123

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

前端~地图(openlayers)基础使用

openlayers 地图

小左的博客 4122

Openlayers 快速上手教程

通过上面例子可以看出 Openlayers 使用很简单,首先定义一个 Map,这是 Openlayers 的核心,它是一个容器,所有动作、设置等都在 Map 中展开。 下面对上面 demo所简要说明: 1. 将 Map 容器与 HTML 元素(这里是 DIV 元素 `map-id`)做绑定,Map 提供有 `target` 属性来绑定; 2. 将图层 Layer 添加到 Map 中,这里是一个瓦面图层 `ol.layer.Tile`; 3. 图层是一个包装盒,需要给图层添加具体的数据源:`new ol.s

余浩的博客 3万+

初识webGIS库—OpenLayers

初识webGIS库—OpenLayers

希望看完文章的你能够带着答案离开。 1万+

零基础入门OpenLayers:打造你的第一个Web地图应用

OpenLayers是一个功能强大的开源JavaScript库,用于在网页中创建交互式地图应用。它采用分层架构设计(Map、Layer、Source、View、Feature),支持多种地图瓦片源,并提供标记点位、绘制图形、测量距离等核心功能。开发者可快速构建地图应用,需注意地图容器高度设置、跨域访问等常见问题。OpenLayers具有免费开源、功能全面、兼容性好等特点,适合开发从简单到复杂的地图应用。通过掌握其分层概念和基本功能,即可开启地图开发之旅。

weixin_67093879的博客 2919

OpenLayers API整理

整理的Openlayers 的知识笔记,随着运用不断加深理解,也会不断更新。 本文链接:Openlayers API整理 作者:狐狸家的鱼 GitHub:八至 一、创建地图 1、地图Map 创建地图底图:需要用new ol.Map({}) 地图map是由图层layers、一个可视化视图view、用于修改地图内容的交互interaction以及使用UI...

diaoyanbian8143的博客 2872

Openlayers简介|体系架构|主要API|

OpenLayers是最早的WebGIS开源库之一,迭代开发的历史较长,目前是WebGIS中功能齐全、资料和教程丰富的框架,同时其学习曲线比较平缓,很容易上手。OpenLayers采用了Canvas、WebGL和HTML5中最新的技术来构建框架,可以在移动设备上运行。

weixin_45213317的博客 3741

openlayers 中国镜像站

openlayers打不开的同学可以访问这个,不过没有翻译都是英文的 openlayers 中国镜像站http://openlayers.chinadoc.org 目前好像没办法访问例子,API什么的可以访问

yesxcv的博客 2026
上一篇: 二十六、openlayers官网示例CustomPolygonStyles——使用样式数组将多边形顶点设置成圆点,深入理解geometry和renderer函数
下一篇: 二十九、openlayers官网示例DeclutterGroup解析——避免矢量图层的文字重叠
卷新心菜
博客等级 码龄4年 720粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值