PMTiles介绍与MapboxGL中使用

news2024/9/21 12:30:19

概述

本文介绍PMTiles以及PMTiles在MapboxGL中的使用。

PMTiles简介

PMTiles 是一种对瓦片数据的单文件压缩格式。PMTiles 压缩包可以托管在如 S3 这样的商品级存储平台上,并允许创建低成本、零维护的“无服务器”地图应用程序——这些应用程序无需自定义瓦片后端或第三方提供商。

  • 试用地址
  • 官网博客
  • 官方文档
  • 参考文档

PMTiles的构造

PMTiles的构造包括:

  • 头信息(Header):
  • 根目录(Root Directory):
  • JSON元数据(JSON metadata):
  • 子目录(Leaf Directories):
  • 切片数据(Tile Data):

下载与使用

windows下载地址为:https://github.com/protomaps/go-pmtiles/releases

通过如下命令将mbtiles转换为pmtiles

# ./pmtiles.exe convert ./源mbtiles文件 ./目标pmtiles文件
./pmtiles.exe convert ./province.mbtiles ./province.pmtiles

HTTP 206简介

HTTP 206 Partial ContentHTTP协议中的一种状态码,它表示服务器已经成功处理了部分GET请求。这个状态码主要用于实现断点续传或分块下载,对于处理大文件下载、流媒体播放和优化网络传输性能具有重要意义。

HTTP 206 的定义

  • 状态码分类HTTP状态码是用以表示网页服务器HTTP响应状态的3位数字代码。HTTP 206属于2xx这一类型的状态码,代表网页请求已成功被服务器接收、理解、并接受。
  • 具体含义HTTP 206 Partial Content 表示服务器只处理了客户端请求的资源的一部分,而不是全部。这通常发生在客户端使用Range请求头字段指定了资源的一个或多个部分时。

HTTP 206 的用途

  • 断点续传:当下载大文件时,如果网络中断导致下载失败,使用HTTP 206Range请求头,客户端可以从上次中断的地方继续下载,而不是重新下载整个文件。
  • 分块下载:对于大文件或流媒体内容,服务器可以将资源分成多个部分,客户端可以并发请求这些部分,从而提高下载速度或播放流畅度。
  • 优化网络传输:通过分块传输,客户端可以根据网络状况动态调整请求的块大小和顺序,从而优化网络传输性能。

Range 请求头字段

  • 作用Range请求头字段允许客户端请求资源的一个或多个部分,而不是整个资源。
  • 语法Range: bytes=start-end。其中,start表示起始字节位置,end表示结束字节位置。例如,Range: bytes=0-499表示请求资源的前500个字节。

HTTP 206 的响应

当服务器成功处理了Range请求时,它会返回一个HTTP 206 Partial Content响应,并在响应头中包含Content-Range字段,指示实际返回的字节范围。

image.png

mapboxGL中使用

mapboxGL中pmtiles的使用参考如下文档:

  • mapbox-pmtiles
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <link rel="stylesheet" href="lib/mapbox-gl.css" type="text/css">
    <style>
      html,
      body,
      #map {
        width: 100%;
        height: 100%;
        inset: 0;
        overflow: hidden;
      }
    </style>
  </head>
  <body>
    <div id="map" class="map"></div>
    <script src="lib/mapbox-gl.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/mapbox-pmtiles@1/dist/mapbox-pmtiles.umd.min.js"></script>
    <script>
      const map = new mapboxgl.Map({
        container: "map",
        center: [114.06705183665042, 22.65447650819611],
        zoom: 3,
      });
      mapboxgl.Style.setSourceType(
        mapboxPmTiles.SOURCE_TYPE,
        mapboxPmTiles.PmTilesSource
      );
      map.on("load", () => {
        const PMTILES_URL = "./data/province.pmtiles";
        mapboxPmTiles.PmTilesSource.getHeader(PMTILES_URL).then((header) => {
          const bounds = [
            header.minLon,
            header.minLat,
            header.maxLon,
            header.maxLat,
          ];
          map.addSource("pmtiles", {
            type: mapboxPmTiles.PmTilesSource.SOURCE_TYPE,
            url: PMTILES_URL,
            // minzoom: header.minZoom,
            // maxzoom: header.maxZoom,
            bounds: bounds,
          });
          map.addLayer({
            id: "province-fill",
            source: "pmtiles",
            "source-layer": "province",
            type: "fill",
            paint: {
              "fill-color": "#ff0000",
              "fill-opacity": 0.2,
            },
          });
          map.addLayer({
            id: "province-line",
            source: "pmtiles",
            "source-layer": "province",
            type: "line",
            paint: {
              "line-color": "#ff0000",
              "line-width": 1.2,
            },
          });
        });
      });
    </script>
  </body>
</html>

image.png

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

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

相关文章

手机误操作导致永久删除照片的恢复方法有哪些?

随着手机功能的不断增强和应用程序的不断丰富&#xff0c;人们越来越依赖手机&#xff0c;离不开手机。但有时因为我们自己的失误操作&#xff0c;导致我们手机上重要的照片素材被永久删除&#xff0c;这时我们需要怎么做&#xff0c;才能找回我们被永久删除的照片素材呢&#…

LeetCode.676.实现一个魔法字典

题目描述&#xff1a; 设计一个使用单词列表进行初始化的数据结构&#xff0c;单词列表中的单词 互不相同 。 如果给出一个单词&#xff0c;请判定能否只将这个单词中一个字母换成另一个字母&#xff0c;使得所形成的新单词存在于你构建的字典中。 实现 MagicDictionary 类&a…

前端工程化项目 用npm拉git项目的时候是在是太慢了怎么办

最近在家拉git项目发现npm i之后,开始下得挺快&#xff0c;过会就卡着不动了&#xff0c;大概几分钟后才下好。这对一个有强迫症的码农来说是不能容忍的。 只能退出去 重新下载 其实我们只要换一下国内的下载镜像源就好了 npm config set registry https://registry.npmmirror…

[C++][opencv]基于opencv实现photoshop算法灰度化图像

测试环境】 vs2019 opencv4.8.0 【效果演示】 【核心实现代码】 BlackWhite.hpp #ifndef OPENCV2_PS_BLACKWHITE_HPP_ #define OPENCV2_PS_BLACKWHITE_HPP_#include "opencv2/core.hpp"namespace cv {class BlackWhite { public:float red; //红色的灰度系…

vs code编辑区域右键菜单突然变短

今天打开vs code发现鼠标在编辑区域按右键&#xff0c;出来的菜单只显示一小段 显示不全&#xff0c;而之前的样子是 显示很多项&#xff0c;怎么设置回到显示很多项呢&#xff1f;

自动驾驶TPM技术杂谈 ———— 可行驶区域

文章目录 介绍基于传统计算机视觉的方法基于直接特征的可行驶区域检测基于颜色的可行驶区域检测基于纹理的可行驶区域检测基于边缘的可行驶区域检测 基于间接特征的可行驶区域检测 基于深度学习的方法语义分割基于FCN的可行驶区域分割 介绍 可行驶区域检测主要是为了自动驾驶提…

数据科学的定义,如果做数据科学,非计算机的你,一般来说最好还是选择R语言,图像挖掘除外

一、数据科学&#xff08;Data Science&#xff09; 数据科学的起源可以追溯到1962年&#xff0c;当时统计学家John W. Tukey在他的文章《数据分析的未来》中首次提出了数据分析作为一门独立的科学方法。1974年&#xff0c;计算机学家Peter Naur在《计算机方法的简明调研》中明…

shell外壳与Linux权限

&#x1f308;个人主页&#xff1a;Yui_ &#x1f308;Linux专栏&#xff1a;Linux &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;数据结构专栏&#xff1a;数据结构 文章目录 1.shell命令以及运行原理2. Linux权限的概念3.Linux权限管理3.1 文件访问者的分类…

大语言模型 LLM book 笔记(二)

第二部分 预训练 第四章 数据准备 4.1 数据来源 4.1.1 通用文本数据 网页 书籍 4.1.2 专用文本数据 多语文本 科学文本 代码 4.2 数据预处理 4.2.1 质量过滤 基于启发式规则的方法 基于语种的过滤&#xff1a;语言识别器筛选中英文&#xff0c;对于多语的维基百科由于…

高阶数据结构——LRU Cache

1.什么是LRU Cache LRU是Least Recently Used的缩写&#xff0c;意思是最近最少使用&#xff0c;它是一种Cache替换算法。 什么是Cache&#xff1f;狭义的Cache指的是位于CPU和主存间的快速RAM&#xff0c; 通常它不像系统主存那样使用DRAM技术&#xff0c;而使用昂贵但较快速…

制约AI发展的关键在于人机环境系统智能的失配

人工智能&#xff08;AI&#xff09;发展的关键挑战之一就是人机环境系统之间的智能失配。这种失配指的是人工智能系统、其操作人员和应用环境之间的协调和适配问题&#xff0c;通常会影响系统的有效性和安全性。以下是一些具体方面&#xff0c;这些方面展示了人机环境系统智能…

《企业微服务实战 · 接口鉴权思路分享》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

ES JavaApi

1.RestClient操作索引库 2.RestClient操作文档 2.1查询 2.2更新 2.3删除 2.4批量新增&#xff08;bulk&#xff09; 3.DSL查询 对应的api 3.0解析响应 3.1全文检索 3.2精确查询 3.3复合查询-boolQuery 构建boolQuery 3.4排序和分页 3.5高亮

浙大数据结构慕课课后题(06-图2 Saving James Bond - Easy Version)(拯救007)

题目要求&#xff1a; This time let us consider the situation in the movie "Live and Let Die" in which James Bond, the worlds most famous spy, was captured by a group of drug dealers. He was sent to a small piece of land at the center of a lake fi…

C++打怪小游戏

这是一款用C代码写出来的打怪游戏。 上图片&#x1f447; ![](https://i-blog.csdnimg.cn/direct/6a4497c784ff4ba7a3332bc97d433789.png 一个11岁小朋友&#xff0c;爆肝532行&#xff0c;11小时完成代码&#xff0c;内部14个函数&#xff0c;5个结构体&#xff0c;三连…

ffmpeg使用x11录屏

version #define FFMPEG_VERSION "6.1.1" note x11视频采集结构:AVInputFormat ff_xcbgrab_demuxer code void CFfmpegOps::CaptureVideo(const char *outFileName) {const AVInputFormat *iFmt nullptr;size_t n 0;AVFormatContext *iFmtCtx nullptr;AVDict…

三十九、大数据技术之Kafka3.x(2)

&#x1f33b;&#x1f33b; 目录 一、Kafka 生产者1.1 生产者消息发送流程1.1.1 发送原理1.1.2 生产者重要参数列表 1.2 异步发送API1.2.1 普通异步发送1.2.2 带回调函数的异步发送 1.3 同步发送 API1.4 生产者分区1.4.1 分区好处1.4.2 生产者发送消息的分区策略1.4.3 自定义分…

使用Leaks定位iOS内存泄漏问题并解决

使用Leaks定位iOS内存泄漏问题并解决 前言 内存泄漏问题一直是程序开发中最令人头疼的问题&#xff0c;特别是C/C。虽然C/C在C11之后引入了许多新特性&#xff0c;包括智能指针&#xff0c;自动类型推导等&#xff0c;但C中动态内存的分配和释放仍然需要程序员来显式地进行。…

Linux线程thread详解(线程池)

在我们的进程虚拟地址的代码区&#xff0c;对于代码中的每个函数都有对应的地址&#xff0c;每个函数中的每行代码都有对应的代码&#xff0c;并且每个函数中的每行代码的地址都是连续的。既然代码是连续的&#xff0c;也就意味着我们可以将我们代码分块&#xff0c;分成不同的…

机器学习笔记:序列到序列学习[详细解释]

介绍 本节我们使用两个循环神经网络的编码器和解码器&#xff0c; 并将其应用于序列到序列&#xff08;sequence to sequence&#xff0c;seq2seq&#xff09;类的学习任务。遵循编码器&#xff0d;解码器架构的设计原则&#xff0c; 循环神经网络编码器使用长度可变的序列作为…