基于Mapbox的Mvt矢量瓦片集成实践

目录

前言

一、数据说明

1、基本数据

2、属性数据

二、Mapbox集成Mvt矢量瓦片

1、关于访问令牌

2、定义html

3、初始地图

4、加载矢量瓦片

5、效果展示

 总结


前言

        熟悉矢量瓦片的朋友一定知道,在Webgis当中,矢量瓦片的格式除了pbf的格式,还有geojson等格式。而提出mvt等pbf格式的,是大名鼎鼎的Mapbox,关于Mapbox中的矢量瓦片生成和加载,在Mapbox中最为完备,在之前的博客中,对于矢量瓦片的应用和展示有几个篇幅的介绍。但是暂时没有涉及Mapbox的相关实践博客。

        本文将为各位朋友简单介绍Mapbox,以及如何基于Mapbox来进行Mvt矢量瓦片的集成展示,最后为朋友们生成一个完整的案例,如果您当前业务当中有需要,可以作为参考。

一、数据说明

        本次实战数据采用Mapbox自带的底图,矢量瓦片数据是以湖南省的行政区划数据。

1、基本数据

序号参数说明
1文件格式

ESRI Shapefile

2编码

ISO-8859-1

3几何图形

Polygon (MultiPolygon)

4坐标参照系

EPSG:4326 - WGS 84 - 地理的

5范围

108.6201356299999929,24.4147307699999985 : 114.4100520700000061,30.3505439400000014

6要素数目

2,664

2、属性数据

序号字段名类型长度
1

gml_id

String

80
2

Name

String

80

3

layer

String80
4

code

String80
5

grade

Integer

9

属性列数据展示如下:

二、Mapbox集成Mvt矢量瓦片

        关于Mapbox的知识,大家可以到mapbox的官方网站去学习,在C站也有很多优秀的博主分享了相关的博客。大家可以去找找,资料非常详细,这里不再赘述,mapbox官网。

1、关于访问令牌

        在Mapbox当中,有一个令牌的概念,因此在每个应用创建之前需要申请一个令牌,申请的流程也不复杂,还是比较简单的。大家有兴趣的可以到官网自己申请,开发者没有任何限制,大家直接申请后直接在项目中学习使用即可。申请的参考博客mapbox申请链接。

        如果想更加偷懒的,可以直接使用官网的示例token,不过可能会过期,在国企后再去官网找一个可以用的继续使用。 本文中使用的token是从官网演示示例中获取的。

2、定义html

首先定义一个html文件,里面定义基础网页,关键代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8' />
    <title>基于Mapbox的矢量瓦片集成实例</title>
    <meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' />
    <script src='./mapbox/mapbox-gl.js'></script>
    <link href='./mapbox/mapbox-gl.css' rel='stylesheet' />
    <style>
        body {
            margin: 0;
            padding: 0;
        }
        
        #map {
            position: absolute;
            top: 0;
            bottom: 0;
            width: 100%;
        }
    </style>
</head>
<body>
    <div id='map'></div>
</body>

</html>

这里采用了mapbox-gl框架实现,在页面中引入以下资源。

<script src='./mapbox/mapbox-gl.js'></script>
<link href='./mapbox/mapbox-gl.css' rel='stylesheet' />

3、初始地图

        下面定义了mapbox的地图容器,并设置了访问token,关键代码如下:

<script>
        mapboxgl.accessToken = 'pk.eyJ1IjoibGFicy1zYW5kYm94IiwiYSI6ImNqejl3a2o0NDBieWczZXBqNnI4OGxjd24ifQ.PeWoqmCrmHKgMwM6GCAfEg';
        var tileset = 'mapbox.streets';
        var map = new mapboxgl.Map({
            container: 'map',
            zoom: 6,
            center: [112.742578, 27.669359],
            style: 'mapbox://styles/mapbox/light-v9',
            hash: false,
        });    
</script>

4、加载矢量瓦片

        使用以下代码加载矢量瓦片,

<script>
        map.on('load', function loaded() {
          //添加刚才发布的mvt数据源
            map.addSource('tile', {
                "type": "vector",
                "tiles": [
    				'http://localhost:8050/zgis/vector/tile/{z}/{x}/{y}'
                ],
                "minZoom": 1,
                "maxZoom": 7
            })
            //添加各图层
            map.addLayer({
                "id": "area-layer",
                "type": "fill",
                "source": "tile",// 上一步添加的数据源id
    			"source-layer": "points",// source-layer和mvt服务中的图层名对应
                //"layout": {"visibility": "visible"},
                "paint": {"fill-color": '#51bbd6', "fill-opacity": 0.6, "fill-outline-color": '#0000ff'}
            })
            
        });
        
    </script>

        这里需要注意的是,在加载矢量瓦片的时候,注意source-layer和发布的矢量瓦片的id对应。同时layer中的soure要和source中的name一致,同时需要给layer定义一个唯一的id。

5、效果展示

 使用mapbox可以使用鼠标进行地图旋转,点击鼠标右键,可开启旋转功能,展示界面如下:

 总结

        以上就是本文的主要内容,本文将为各位朋友简单介绍Mapbox,以及如何基于Mapbox来进行Mvt矢量瓦片的集成展示,最后为朋友们生成一个完整的案例,如果您当前业务当中有需要,可以作为参考。行文仓促,难免有错误,不当之处,还请朋友们在评论区留言批评指正。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mysql 安装通过mysql installer安装+配置环境+连接可视化工具

注意&#xff1a;不适合纯小白&#xff0c;小白建议移步别的大佬MySQL详细安装教程 目录 注意&#xff1a;不适合纯小白&#xff0c;小白建议移步别的大佬MySQL详细安装教程 前言 准备工作 一、Mysql下载 二、MySQL installer 安装以及系统环境配置 三、检验MySQL 四、可…

CleanMyMac X .4.14.7如何清理 Mac 系统?

细心的用户发现苹果Mac电脑越用越慢&#xff0c;其实这种情况是正常的&#xff0c;mac电脑用久了会产生很多的缓存文件&#xff0c;如果不及时清理会影响运行速度。Mac系统在使用过程中都会产生大量系统垃圾&#xff0c;如不需要的系统语言安装包&#xff0c;视频网站缓存文件&…

宝塔发布网站问题汇总和记录

1、添加网站站点后打不开 解决办法&#xff0c;关闭防跨站攻击2 2、laravel项目部署到linux的时候出现The stream or file "/home/www/storage/logs/laravel.log" could not be opened in append mode 给目录加权限 chmod -R 777 storage 3、Class "Redis"…

交友系统程序开发,前后端源码交付,允许二开,UI配色新颖,APP小程序H5随心搭配!

在开发设计与测试阶段&#xff0c;主要包括了程序开发、测试和上线运营等环节。根据产品经理确定的功能需求&#xff0c;开发团队开始进行具体的编程和开发工作。这个过程中需要考虑到不同设备、不同系统和不同版本的需求&#xff0c;确保软件可以在不同平台上稳定运行。 测试是…

在线录屏-通过Web API接口轻松实现录屏

在线录屏是指在互联网上进行屏幕录制的过程。它允许用户通过网络连接&#xff0c;将自己的屏幕活动记录下来&#xff0c;并可以在需要时进行播放、共享或存档。在线录屏常用于教育、培训、演示、游戏等场景&#xff0c;可以帮助用户展示操作步骤、解决问题、分享经验等。通常&a…

MySQL运维篇(三)分库分表

一、介绍 1. 问题分析 随着互联网及移动互联网的发展&#xff0c;应用系统的数据量也是成指数式增长&#xff0c;若采用单数据库进行数据存储&#xff0c;存在以下 性能瓶颈&#xff1a; &#xff08;1&#xff09;IO瓶颈&#xff1a;热点数据太多&#xff0c;数据库缓存不足&…

Redis的事务

一、Redis中事务的定义 1) Redis事务是一个单独的隔离操作&#xff1a;事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中&#xff0c;不会被其他客户端发送来的命令请求所打断 2) Redis事务的主要作用就是串联多个命令防止别的命令插队。 二、multi 、exe…

高精度算法笔记·····························

目录 加法 减法 乘法 除法 高精度加法的步骤&#xff1a; 1.高精度数字利用字符串读入 2.把字符串翻转存入两个整型数组A、B 3.从低位到高位&#xff0c;逐位求和&#xff0c;进位&#xff0c;存余 4.把数组C从高位到低位依次输出 1.2为准备 vector<int> A, B, …

vite 打包优化

✨专栏介绍 在当今数字化时代&#xff0c;Web应用程序已经成为了人们生活和工作中不可或缺的一部分。而要构建出令人印象深刻且功能强大的Web应用程序&#xff0c;就需要掌握一系列前端技术。前端技术涵盖了HTML、CSS和JavaScript等核心技术&#xff0c;以及各种框架、库和工具…

消息中间件面试题

目录 一.为什么使用消息队列 二.RabbitMQ 1.RabbitMQ如何保证消息不丢失 2.RabbitMQ消息的重复消费问题 3.RabbitMQ延迟队列 4.RabbitMQ消息堆积 5.RabbitMQ高可用机制 三.Kafka 1.Kafka如何保证消息不丢失 2.Kafka如何保证消费消息的顺序性 3.Kafka高可用机制 4.Ka…

GitLab Runner 实现项目 CI/CD 发布

Gitlab Runner简介 Gitlab实现CICD的方式有很多&#xff0c;比如通过Jenkins&#xff0c;通过Gitlab Runner等&#xff0c;今天主要介绍后者。Gitlab在安装的时候&#xff0c;就默认包含了Gitlab CI的能力&#xff0c;但是该能力只是用于协调作业&#xff0c;并不能真的去执行…

PLSQL去除一个字符串中的数字

PLSQL去除一个字符串中的数字 SQL Select regexp_replace(abc1234ABC678aaad590AAA, [0-9], ) As 去数字后From dual;效果

Web开发介绍

1 什么是web开发 Web&#xff1a;全球广域网&#xff0c;也称为万维网(www World Wide Web)&#xff0c;能够通过浏览器访问的网站。 所以Web开发说白了&#xff0c;就是开发网站的&#xff0c;例如下图所示的网站&#xff1a;淘宝&#xff0c;京东等等 那么我们知道了web开发…

【Linux】Linux 系统编程——touch 命令

文章目录 1.命令概述2.命令格式3.常用选项4.相关描述5.参考示例 1.命令概述 在**Linux 中&#xff0c;每个文件都与时间戳相关联&#xff0c;每个文件都存储了上次访问时间、**上次修改时间和上次更改时间的信息。因此&#xff0c;每当我们创建新文件并访问或修改现有文件时&a…

1.17 day4 IO网络编程

用udp实现tftp下载和上传功能 #include <myhead.h> #define PORT 69 #define IP "192.168.122.24" int shangchuan(int sfd,struct sockaddr_in sin,socklen_t socklen) {int cfd-1;if((cfdopen("./01udpk.c",O_RDONLY))-1){perror("open erro…

Python算法例36 丑数Ⅱ

1. 问题描述 设计一个算法&#xff0c;找出只含素因子2、3、5的第n小的数&#xff0c;符合条件的数如&#xff1a;1、2、3、4、5、6、8、9、10、12… 2. 问题示例 如果n9&#xff0c;返回10。 3. 代码实现 def find_nth_number(n):if n < 0:return Nonenumbers [1]idx…

SpringBoot项目如何优雅的实现操作日志记录

SpringBoot项目如何优雅的实现操作日志记录 前言 在实际开发当中&#xff0c;对于某些关键业务&#xff0c;我们通常需要记录该操作的内容&#xff0c;一个操作调一次记录方法&#xff0c;每次还得去收集参数等等&#xff0c;会造成大量代码重复。 我们希望代码中只有业务相关…

React16源码: React中的异步调度scheduler模块的源码实现

React Scheduler 1 ) 概述 react当中的异步调度&#xff0c;称为 React Scheduler发布成单独的一个 npm 包就叫做 scheduler这个包它做了什么&#xff1f; A. 首先它维护时间片B. 然后模拟 requestIdleCallback 这个API 因为现在浏览器的支持不是特别的多所以在浏览当中只是去…

【Dynamo学习笔记】Dynamo for Revit建模基础

目录 前言1 Revit模型的结构2 图元的操作2.1 图元的选择2.2 图元参数的读取和写入2.3 图元的创建2.3.2 创建轴网2.3.2 创建结构柱2.3.3 创建结构框架2.3.4 创建墙体 3 自定义节点 参考资料&#xff1a; &#xff08;1&#xff09; 罗嘉祥&#xff0c;宋姗&#xff0c;田宏钧. 《…

代码随想录-刷题第五十七天

42. 接雨水 题目链接&#xff1a;42. 接雨水 思路&#xff1a;本题十分经典&#xff0c;使用单调栈需要理解的几个问题&#xff1a; 首先单调栈是按照行方向来计算雨水&#xff0c;如图&#xff1a; 使用单调栈内元素的顺序 从大到小还是从小到大呢&#xff1f; 从栈头&…