初识mapbox GL

article/2025/9/15 1:14:34

一、概述

最近由于项目的需求,借此机会对mapbox GL做了一个系统的学习,同时也对整个学习过程做一个记录,一方面留作自用,另一方面也希望看到此文的人在学习mapbox GL的时候,能够有所启发、有所收获。

二、快速认识

很多人在学习一个新的webis框架的时候,表示狗咬刺猬——无从下口。对于这一点,我的建议是快速认识。

1.目的

快速认识的目的有两个:1、对框架有一个认知性的理解;2、甄别框架是否满足需求。

2.如何快速认识

打开maobox GL官网,如下图所示:

mapbox GL官网

快速认识mapbox GL,我们只需要快速看一下OverviewExample两个部分即可。

2.1 Overview

通过Overview,我们可以获取到几个信息:1、简介;2、版本;3、引用,包括npm和cdn;4、基本的使用demo。

2.2 Example

Example 是官方提供的有关maoboxl GL功能比较全面的一个展示,对于一个初次接触的人来说,通过Example,一方面我们能够快速的获取mapbox GL的表现,另一方面,通过Example代码,可以对框架的使用有一个初步的认识。

Example

在Example页面,上方是实现的效果,下方是实现的代码,这样结合效果和代码,更方便我们对框架的理解。

Example

三、深入学习

深入学习,我们对Example外的API Reference和Style Specification的部分去认真的阅读,有必要的同时做以笔记。深入学习的时候,我建议根据文档提供的结构,必要时需要去查阅源代码做以辅助,整理框架的思维导图。在整理导图的时候,如果对于webgis比较熟悉的话,可以根据自己的理解与判断,对于部分不经常用的做以删减。下图是我在学习的时候整理的导图。

mapbox GL

从上图,我们可以明显的看出mapbox GL里面的几个核心:mapmarkerpopupcontrolhandlergeometrysourcelayers,其中maplayers更是核心中的核心,下面我将结合一定的例子对上面的内容做一分解说明。

1.map

从大的导图里面把map的部分单独拿出来,如下图。

image

1.1 option

option是初始化map是需要的一些参数:

var map = new mapboxgl.Map({container: 'map', // container idstyle: 'mapbox://styles/mapbox/streets-v11', // stylesheet locationcenter: [-74.5, 40], // starting position [lng, lat]zoom: 9 // starting zoom
});

1.2 method

method是map可调用的一些方法,方法调用所需的参数和方法需参考API Reference。

// addSource
map.addSource('warn-line', {type: 'geojson',data: geojson
});
// addLayer
map.addLayer({id: 'warn-line',type: 'line',source: 'warn-line',paint: {'line-color': ['match',['get', 'color'],'blue', 'blue','green'],'line-width': 2,'line-dasharray': [5, 3]}
});
// getCanvas
map.getCanvas().style.cursor = 'pointer';

1.3 event

event是可绑定在map上的事件,事件的绑定方式为map.on('event', eventData)

// mouseenter
map.on('mouseenter', 'points', function(e) {map.getCanvas().style.cursor = 'pointer';that.showInfo(e.features[0]);
});
// click
map.on('click', 'points', function(e) {map.getCanvas().style.cursor = 'pointer';var feature = e.features[0];var center = feature.geometry.coordinates.slice();map.flyTo({center: center, zoom: 14});
});
// mouseleave
map.on('mouseleave', 'points', function() {map.getCanvas().style.cursor = '';that.popup.remove();
});

2.marker

marker拆分后的导图如下。
image

2.1 option

option是初始化marker是需要的一些参数:

const ele = document.createElement('div');
ele.setAttribute('class', 'map-label');
ele.innerHTML = r.name;
const option = {element: ele,anchor: 'bottom',offset: [0, -10]
}
const marker = new mapboxgl.Marker(option);

2.2 method

method是marker可调用的一些方法,方法调用所需的参数和方法需参考API Reference。

marker.setLngLat([r.lon, r.lat]);
marker.addTo(map);

2.3 event

event是可绑定在marker上的事件,事件的绑定方式为marker.on('event', handler)

function onDragEnd() {var lngLat = marker.getLngLat();coordinates.style.display = 'block';coordinates.innerHTML = 'Longitude: ' + lngLat.lng + '<br />Latitude: ' + lngLat.lat;
}marker.on('dragend', onDragEnd);

3.popup

popup拆分后的导图如下。
image

3.1 option

option是初始化popup是需要的一些参数:

var popup = new mapboxgl.Popup({closeButton: false,closeOnClick: false,className: 'my-popup',offset: [0, -15],anchor: 'bottom'
});

3.2 method

method是popup可调用的一些方法,方法调用所需的参数和方法需参考API Reference。

popup.setLngLat(coordinates).setHTML(description).addTo(map);

3.3 event

event是可绑定在popup上的事件,事件的绑定方式为popup.on('event', handler)

function onOpen() {console.log('Popup Open');
}popup.on('open', onOpen);

4.source

mapbox GL里source在API Reference和Style Specification均出现了,仔细查看文档,发现在API Reference说明的是方法,Style Specification里面说明的是属性。source的导图如下图。
image

4.1 GeoJSONSource

GeoJSONSource可为json对象或者文件url。

// data可为json对象或者文件url
var geojson = 'url';
var geojson = {};
map.addSource('points', {type: 'geojson',data: geojson
});
map.getSource('points').setData(geojson);

4.2 ImageSource

ImageSource需要urlcoordinates,其中coordinates的格式为:top left, top right, bottom right, bottom left

map.addSource('loopimage', {type: 'image',url: url,coordinates: coords
});
map.getSource('loopimage').updateImage({url: url,coordinates: coords
});

4.3 VideoSource

VideoSource需要urlcoordinates,其中coordinates的格式为:top left, top right, bottom right, bottom left

map.addSource('video', {type: 'video',url: url,coordinates: coords
});
map.getSource('video').play();

4.4 CanvasSource

CanvasSource需要canvascoordinates,其中coordinates的格式为:top left, top right, bottom right, bottom left

map.addSource('canvas', {type: 'canvas',canvas: canvas,coordinates: coords
});
map.getSource('canvas').play();

4.5 vector、raster和raster-dem

vectorrasterraster-dem是在API和style里面没有对应上的,主要是一些栅格或者矢量的切片或者服务调用。

// raster——xyz切片
map.addSource('XYZLabel', {"type": "raster","tiles": ['http://www.google.cn/maps/vt?lyrs=h@189&gl=cn&x={x}&y={y}&z={z}'],"tileSize": 256
});
// raster——wms
map.addSource('wmsLayer', {"type": "raster","tiles": ['http://39.106.122.204:8086/geoserver/railway/wms?service=WMS&version=1.1.0&request=GetMap&layers=railway:layer_base&styles=&bbox={bbox-epsg-3857}&width=256&height=256&srs=EPSG:3857&format=image/png&TRANSPARENT=TRUE'],"tileSize": 256
});
// raster——tms
map.addSource('gugong', {'type': 'raster','scheme': 'tms','tiles': ['http://localhost:8086/geoserver/gwc/service/tms/1.0.0/jtmet%3Agugong@EPSG%3A900913@png/{z}/{x}/{y}.png']
});// vector
map.addSource("states", {type: "vector",url: "mapbox://mapbox.us_census_states_2015"
});
// raster-dem
map.addSource('dem', {"type": "raster-dem","url": "mapbox://mapbox.terrain-rgb"
});

5.layer

layer在mapbox GL中是非常重要的,我觉得mapbox GL的设计NB之处也在于此。layer的type的可能值有background, fill, line, symbol, raster, circle, fill-extrusion, heatmap, hillshade。layer的导图如下。
image

下面链接里是mapbox GL官方的streets-v11的图层配置参数,比较长,但是我希望你能够认真读完,他对于你理解layer非常重要!!!

链接:https://pan.baidu.com/s/1N0g2esP5POBL0GfZVMwYIw 
提取码:kgdv 

http://chatgpt.dhexx.cn/article/IXie5Cq0.shtml

相关文章

支持Genero BDL 4gl语言的编辑器

内测版本出来啦。点此下载: FglDeveloper v1.0 →此版本已下架 还有bug,分享几张截图 模板产生器&#xff1a; 画面产生器&#xff1a; 编辑器各种变量提醒 详细功能小伙伴们下载后体验。

TOPGP5.3:导入jar包并在4GL中引用

查看环境$CLASSPATH 上传引用到的JAR包到以下目录 /u1/topprod/tiptop/ds4gl2/bin/javaad/jar 以上为GP5.3目录&#xff0c;其他版本系统可根据查看到的$CLASSPATH上传到相应目录设置环境变量 GP5.3系统中&#xff0c;$CLASSPATH环境变量的设置存在下图文件中&#xff1a; …

4gl调用WEB API,实现JSON传递(Demo)

测试环境: GP5.25 , fjs版本2.32,解析json所需要的jar依赖包 (PS: 如果没有记错是fjs2.32版本及以上才支持java bridge,所以GP 5.25以下的同学就不要用这种方式去测试) 测试内容: 利用此fjs版本对java bridge的支持,实现4gl调用WEB API,实现json传递 测试步骤如下: 1.下载本…

给大家展示一下4gl编辑器

&#xff08;正式版已发布点击下载&#xff09;特地为编辑器开发内置语法解析器&#xff0c;将在代码编辑过程中实时提示代码错误&#xff0c;并且错误提示都是中文显示(楼主英文太垃圾只有做中文了),不再需要频繁上传服务器了哦&#xff0c; 经过楼主努力已经把所有的内置函数…

【实习之T100开发】Genero FGL (TIPTOP4GL) 学习笔记(1)

Genero FGL 学习 Genero FGL 简介Genero FGL 开发&#xff08;编译、连接、执行&#xff09;第一个程序 Hello World变量与运算符变量定义&#xff08;DEFINE&#xff09;预定义变量变量集合&#xff08;RECORD &#xff09;数据结构&#xff08;TYPE&#xff09;变量赋值&…

win10忘记密码重置密码,一行代码帮你解决

步骤如下&#xff1a; 1.右击windows图标&#xff0c;选择进入Windows PowerShell(管理员&#xff09; 2.敲入代码net user 加上你的用户名和新密码&#xff0c;Ok&#xff0c;问题解决&#xff0c;你就可以用你的新密码登陆了

win10 重置登录账户密码

在登陆界面按下强制关机&#xff08;重复3次&#xff09;。注意&#xff1a;不能进到登陆界面 出现下图时&#xff0c;选择“高级选项”&#xff1a; 选择“疑难解答”&#xff1a; 选择“高级选项”&#xff1a; 选择“命令提示符”&#xff1a; 在管理员窗口输入diskpart 回车…

服务器2008系统设置密码,win2008服务器设置密码

win2008服务器设置密码 内容精选 换一换 修改服务IP地址&#xff0c;并且将DNS地址指向本机&#xff0c;然后修改计算机名为server。安装AD域服务之后&#xff0c;机器名称会自动变成“主机名域名”的形式&#xff0c;例如server.huawei.com。在命令行下输入dcpromo.exe &#…

Win10系统修改开机密码

愚蠢的人才能进步&#xff0c;对于我这种记忆力差的人&#xff0c;密码这个东东随时忘&#xff0c;今天早上大无语事件&#xff0c;我自己都惊呆了&#xff0c;每天都用的办公电脑&#xff0c;今天死活想不起密码&#xff0c;死活打不开电脑&#xff0c;明明就是那些组合&#…

win10忘记密码_电脑忘记密码没关系,这招教你简单轻松改密码

相信"忘记电脑开机密码"这件事经常发生,忘记密码该怎么办呢?这个问题困扰了许多小伙伴,今天就教大家一种最简单的方法轻松重置电脑开机密码(本方法适用win10、win8、win7系统)。 划重点: 重置电脑开机密码一共分为三个步骤「 制作PE系统」「进入PE系统 」「重置密…

win10计算机默认用户名和密码是什么,win10共享的文件夹需要密码和用户名登陆...

一、共享文件夹所在电脑设置 1、右键我的电脑→管理→系统工具→本地用户和组→用户→中间空白区域右键→新用户&#xff1b; 2、输入自设的用户名和密码&#xff0c;如图勾选→创建&#xff1b; 3、右键需要共享的文件见→安全→编辑&#xff1b; 4、点击添加&#xff1b; 5、…

WIN10取消密码和休眠密码

安装Win10系统之后&#xff0c;发现每次开机都会出现登录密码&#xff1f;有些用户觉得很麻烦&#xff0c;所以想要取消Win10开机密码。那么&#xff0c;该如何操作呢&#xff1f; 按下winx组合键&#xff0c;启动快捷菜单 在弹出菜单选择运行&#xff0c;如下图所示 在运行框…

计算机共享网络的账号密码怎么设置密码,怎样才能给win10共享设置密码的操作方法...

怎样才能给win10共享设置密码呢&#xff1f;一些善于使用win10共享设置的小伙伴们&#xff0c;一定会为了隐私而设置win10的共享设置密码&#xff0c;为了可以完美的设置共享密码&#xff0c;小伙伴们找了好多方法&#xff0c;都没有解决&#xff0c;针对这一问题&#xff0c;小…

win10系统mysql重新配置密码

前言 最近捣鼓自己的破烂笔记本&#xff0c;想着写点玩具项目&#xff0c;想着&#xff1a;写项目不能没有mysql吧&#xff0c;点击mysqlbench开始上号。这个时候发现坏了&#xff0c;登录不上&#xff0c;想着估计mysql没装好呗&#xff0c;于是重装了mysql和mysqlbench&…

win10重置网络命令_Win10怎么重置网络 Win10重置网络命令使用方法

有时候Windows系统出问题的时候&#xff0c;会导致网络异常&#xff0c;无法正常上网&#xff0c;甚至是重新连接网络&#xff0c;依然会出现无法连接的现象。下面就来为大家分享2种重置网络的方法&#xff0c;有需要了解的小伙伴&#xff0c;快来涨知识吧 方法一&#xff1a;使…

win10 linux重置密码忘记了,忘记密码时如何重新设置Windows10密码

忘记了Windows10计算机的本地管理员密码&#xff0c;如果忘记密码&#xff0c;您将无法访问PC上的任何数据。为什么会这样呢&#xff1f;可能您的Microsoft帐户密码可能已被盗用&#xff0c;针对此疑问&#xff0c;接下去和大家分享忘记密码时重新设置Windows10密码的方法。 但…

win10上Redis设置密码

首先我的电脑是win10家庭版 安装redis后打开这个安装目录出现这个图上的内容就是找对地方了。先说下几个数字是什么&#xff1a;1.者是redis服务&#xff0c;如果项目用到redis要先打开这个&#xff0c;比如若依启动之前要先打开这个。2.cli是客户端。打开1之后 再打开2可以连接…

云服务器win10系统初始密码,win10忘记系统密码?教你重置-

忘记密码怎么办&#xff1f; 如果你用的是windows 10系统&#xff0c;一不小心忘记了系统密码&#xff0c;那应该怎么办呢&#xff1f; 这要分2种情况 Windows 10系统有两种账户&#xff0c; 第一种是微软账户&#xff0c;如果是忘记了微软账户的密码&#xff0c;那很简单&…

Win10强制更改/重置开机密码

PS&#xff1a;适用情况↓ 我想shift进入疑难设置重置电脑并保留文件和应用&#xff0c;但这样必须输入现在本地账户的密码&#xff0c;我忘了密码是啥&#xff0c;因为每次登陆要么指纹要么PIN就进入了。如果有小伙伴情况和我类似可以尝试一下这个方法。 1.按下组合键win加x&a…

win10pe系统计算机名修改,pe 重置win10登陆密码怎么操作_如何用pe系统重置win10电脑密码-win7之家...

对于一些私人的win10电脑&#xff0c;有些用户为了保证系统中文件的安全&#xff0c;同时电脑不被他人使用&#xff0c;就会给win10系统设置一个登陆密码&#xff0c;同时为了提高安全性&#xff0c;也会每隔一段时间通过pe 重置登陆密码&#xff0c;那么如何用pe系统重置win10…