当前位置: 首页 > news >正文

WebGIS开发的常见框架及优缺点

WebGIS开发引擎的发展历程:

内容来自公众号:Spatial Data

地图API分类

WebGIS系统通常都围绕地图进行内容表达,但并不是有地图就一定是WebGIS,所以下面要讨论下基于Web的地图API分类及应用场景。Web上的Map API主要分类:

01 Charts可视化图表

主要负责可视化功能,以D3.js,Echarts等为代表。我们常见的WebGIS开发地图周围有一些可视化的图标,就是通过这些可视化图表实现的。

02 LBS地图开放平台

LBS就是Location Based Service,指的是通过电信移动运营商的网络(如GSM网、CDMA网)获取移动终端用户的位置信息(经纬度坐标),在电子地图平台的支持下,为用户提供相应服务的一种增值业务。

LBS技术已经成为移动互联网不可或缺的基础能力,但对于大部分开发者来说,自建LBS能力的门槛很高——需要具备地图测绘资质,拥有足够的地图数据采集和后端云数据处理能力。国内的LBS以高德/谷歌/百度/天地图等为代表。

03 WebGIS商业API

这类也是工作中比较常见的,例如ESRI的ArcGIS API For JS,超图的IClient,中地数码的MapGIS Client for JS,都属于商业API。

添加图片注释,不超过 140 字(可选)

Google Maps、ESRI、国内的超图、中地等公司都创建了企业级数据和 API,但是通常使用软件、库、包,这些通常需要购买才能使用。这些库的优点是这些库是由专门的开发人员创建的,因此这些库非常稳定并且有据可查。而且是安全且可扩展的,因此成为大公司的优先选择。他们的缺点是成本很高,特别是一家初创公司或小公司,与其他成本相比,光使用企业API,成本就已经非常高了。除此之外,开发人员需要依赖公司发布新功能,因为它的源代码不共享。

04 WebGIS开源API:

今天要讨论的重点来了,开源框架是目前使用最多最广泛的,比较出名的就有Leaflet,OpenLayers,Cesium,MapboxGL等。开源API最大的优势就是免费,并且可以根据任何商业或非商业应用程序的需要,更改源代码,以实现需要的功能,使其成为您自己的产品并进行售卖。所以很多小型初创公司,或者预算不多的公司,都选择使用开源项目,这样的库、包和软件也存在于GIS领域。他们的缺点是由于这些都是基于社区的,所以并没有专门的技术支持。通常为了构建这样的产品,开发人员使用现有的开源产品,因此,当一旦涉及到新版本发布时,工作就会变得复杂。开源和企业API对比如下图所示:

下面主要介绍几款开源API和他们的优缺点。

1. LeafLet

Leaflet是一个轻量级二维开源JavaScript地图数据库。

Canvas渲染机制,仅支持二维表达,地图坐标系墨卡托投影,不支持球,特点是入手简单,缺陷是不支持webgl渲染性能有瓶颈,适用于轻量级简单地理信息主题可视化。

WebGIS开发需要重点学习JS的核心概念,使用Leaflet JavaScript构建基于地图的应用程序,并将学习的内容放到实际应用。当然,学习JS的前提是先掌握Web前端编程的内容,否则会很乱。

2. Openlayers

Openlayers也是一个开源二维地图数据库,支持canvas和webgl两种方式渲染地图,默认采用的是canvas。仅支持二维表达,不限制坐标系,不支持球。

OpenLayers的存在也是为了方便进一步利用各种地理信息进行开发,可以显示从任何源加载的地图分幅、矢量数据和标记,它将动态地图放置到网页中,适合传统webGIS开发。

目前企业不满足于Openlayers的二维功能,更青睐三维地图引擎。

也就是我们下面要重点讨论的。

3. Mapbox

Mapbox是一款二三维结合的开源地图数据库,mapbox和cesium相比更美观,与openlayers相比支持三维。

Mapbox是二三维一体化,墨卡托坐标系,明星数据格式是矢量切片,特点是最具美感的专题地图,适用于互联网场景复杂地理信息表达,内网追求地图可视化效果的也适用,Mapbox很多优化都是基于互联网场景的。

Mapbox类似于一个leaflet的加强版,它专注于Mobile与Web应用的地图体验,有自己定义的地图样式、地图业务,该公司也创建开源了很多的开源工具,同时也专注于Web GL方向,比如Mapbox GL在3D GIS渲染上效果很好。

新中地学员作品

Mapbox能做什么:

  • 能通过各种投影系进行地图瓦片的投影。

  • 支持在地图瓦片上叠加各种图层,支持 geojson、图片、文本 等多种信息在图层上进行加载显示。

  • 支持自定义 Style (矢量瓦片)

  • 支持 2.5D 视角旋转及显示

  • 支持加载 3D 模型

  • 支持通过 DOM 的方式添加 HTML 元素

  • 支持 web-gl 能力进行图形渲染

  • 支持进行 3D 形式的球星地理渲染和星空背景渲染

尤其是其 "2.5D 视角旋转及显示"、"加载 3D 模型" 这两点,是非常亮眼的,相比于 OpenLayers 和 Leaflet 这两款竞品,这也是它最为吸引人的地方所在。

4. Cesium

Cesium是一个三维可视化地图库,WebGL渲染机制。它支持2D\2.5D\3D形式的地图展示;可以绘制各种几何图形、高亮区域,支持导入图片,甚至3D模型等多种数据可视化展示;还可用于动态数据可视化并提供良好的触摸支持,支持绝大多数的浏览器和mobile端。

此外,Cesium还支持基于时间轴的动态数据展示cesium二三维一体化,经纬度坐标系,支持球。

cesium的明星数据格式是3DTiles,特点是唯一开源的WebGIS三维引擎,缺陷是卡,体验差,地图丑。

可能是为了支持球,所有的平面瓦片都要进行纹理转换贴球,计算量偏大,最新的矢量切片也是变成图片再纹理转换到球上,栅格化严重一点都不精美,可以说为了球,牺牲了太多性能和地图美观度,适用于Web强三维应用场景。

Cesium城市建筑规划

Cesium支持的数据格式:

  • 影像数据:Bing、天地图、ArcGIS、OSM、WMTS、WMS等

  • 地形数据:ArcGIS、谷歌、STK等

  • 矢量数据:KML、KMZ、GeoJSON、TopoJSON、CZML

  • 三维模型:GLTF、GLB(二进制glTF文件)

  • 三维瓦片:3D Tiles(倾斜摄影、人工模型、 三维建筑物、CAD、BIM,点云数据等)

Cesium能做什么:

  • 支持2D,2.5D,3D 形式的地理(地图)数据展示

  • 可以绘制各种几何图形、高亮区域,支持导入图片,甚至三维模型等多种数据可视化展示

  • 可用于动态数据可视化并提供良好的触摸支持,支持绝大多数的浏览器和移动端浏览器

  • 支持基于时间轴的动态流式数据展示

在WebGIS 3D领域,比较有争议性的是cesium与mapboxgl。简单来说,两者都是二三维一体化的GIS引擎,但产品侧重点不同 ,Cesium追求的三维功能全面,Mapbox追求用户体验。

Cesium和Mapbox的优缺点

CesiumGL的优点>>

1)全局视图支持

Cesium支持三维地球视图模型,能够通过更改视角和位置在虚拟环境中自由移动,支持地球表面的不同视图。

2)纯3D

与Mapbox不同,Cesium是开箱即用的3D,允许多个角度旋转和可视化对象。

Cesium缺点>>

1)占内存

与Mapbox相比,Cesium的SDK大小相对较大,最新的Cesium.js版本大约79.4 MB。

2)加载慢

在7.2Mbps网速下,更新速度约为3秒或以上。

Mapbox优点>>

1)地图样式多

Mapbox提供了很多不同的地图样式,可以直接使用,也可以自定义样式。

2)加载速度快

Mapbox比Cesium更新地图更快,在稳定的7.2Mbps互联网连接下,加载时间不到2秒。

3)更精细的建筑信息

相比Cesium,Mapbox提供了对3D建筑信息的支持。

下图是Mapbox中3D建筑的一个例图,可以看到清楚地提供了周围建筑的信息,导航地图会更加容易。

下面是Cesium中类似3D建筑的示例。这里没有建筑信息,这会使导航地图变得更加复杂。

Mapbox缺点>>

1)使用复杂

Cesium使用3D开箱即用,Mapbox使用2.5D,使得使用其他第三方库(如Three.js)收集和组合多个3D对象时流程有点复杂。

2)3D功能较弱

相比于 Cesium,Mapbox无法支持“地下管网开挖”这种形式的页面展示;3D支持上能力比较弱。此外,mapbox账号注册十分麻烦。

更多WebGIS开发教程:

免费领取GIS开发相关学习资料

相关文章:

WebGIS开发的常见框架及优缺点

WebGIS开发引擎的发展历程: 内容来自公众号:Spatial Data 地图API分类 WebGIS系统通常都围绕地图进行内容表达,但并不是有地图就一定是WebGIS,所以下面要讨论下基于Web的地图API分类及应用场景。Web上的Map API主要分类&#xff…...

ansible 配置jspgou商城上线(MySQL版)

准备环境 准备两台纯净的服务器进行,在实验之前我们关闭防火墙和selinux systemctl stop firewalld #关闭防火墙 setenforce 0 #临时关闭selinux hosts解析(两台服务器都要去做) [rootansible-server ~]# vim /etc/hosts 10.31.162.24 ansible-ser…...

算法导论复习——CHP22 分支限界法

LIFO和FIFO分枝-限界法 采用宽度优先策略,在生成当前E-结点全部儿子之后再生成其它活结点的儿子,且用限界函数帮助避免生成不包含答案结点子树的状态空间的检索方法。两种基本设计策略: FIFO检索:活结点表采用队列&#x…...

鸿蒙系列--装饰器

一、基础UI组件结构 每个UI组件需要定义为Component struct对象,其内部必须包含一个且只能包含一个build(){}函数,用于绘制UI;struct之内、build()函数之外的地方用于存放数据。 二、基本UI装饰器 Entry 装饰struct,页面的入口…...

FairGuard游戏加固产品常见问题解答

针对日常对接中,各位用户对FairGuard游戏加固方案在安全性、稳定性、易用性、接入流程等方面的关注,我们梳理了相关问题与解答,希望可以让您对产品有一个初步的认知与认可。 Q1:FairGuard游戏加固产品都有哪些功能? A:FairGuar…...

Redis(二)数据类型

文章目录 官网备注十大数据类型StringListHashSetZSetBitmapHyperLogLog:GEOStreamBitfield 官网 英文:https://redis.io/commands/ 中文:http://www.redis.cn/commands.html 备注 命令不区分大小写,key区分大小写帮助命令help…...

2023年广东省网络安全B模块(笔记详解)

模块B 网络安全事件响应、数字取证调查和应用安全 一、项目和任务描述: 假定你是某网络安全技术支持团队成员,某企业的服务器系统被黑客攻击,你的团队前来帮助企业进行调查并追踪本次网络攻击的源头,分析黑客的攻击方式,发现系统漏洞,提交网络安全事件响应报告,修复系统…...

每日力扣算法题(简单篇)

543.二叉树的直径 原题: 给你一棵二叉树的根节点,返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们之间边数表示。 解题思路: …...

Flume基础知识(三):Flume 实战监控端口数据官方案例

1. 监控端口数据官方案例 1)案例需求: 使用 Flume 监听一个端口,收集该端口数据,并打印到控制台。 2)需求分析: 3)实现步骤: (1)安装 netcat 工具 sudo yum …...

通过IP地址如何进行网络安全防护

IP地址在网络安全防护中起着至关重要的作用,可以用于监控、过滤和控制网络流量,识别潜在威胁并加强网络安全。以下是通过IP地址进行网络安全防护的一些建议: 1. 建立IP地址白名单和黑名单: 白名单:确保只有授权的IP地…...

Vue.js 中使用 Watch 选项实现动态问题判断与展示答案

组件结构 以下是组件的基本结构&#xff1a; <template><div><!-- 输入框&#xff0c;用于输入问题 --><p>提出一个是/否问题&#xff1a;<input v-model"question" :disabled"loading" /></p><!-- 显示答案 --&…...

python笔记-自用

2024/1/3# python用号实现字符串的拼接&#xff0c;非字符串不能拼接 from pymysql import Connection# 连接mysql数据库salary 100 name "wang"ans "%s" % salary name print(ans)x 1 y 2 sum "%s %s" % (x, y) print(sum)# %s字符串占…...

安克创新与火山引擎数智平台开展合作:数据分析降门槛 数据协同破边界

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 近日&#xff0c;消费电子品牌安克创新与火山引擎数智平台&#xff08;VeDI&#xff09;达成合作&#xff0c;双方将聚焦安克创新大数据平台的海量数据分析场景&…...

LDD学习笔记 -- Linux内核模块

LDD学习笔记 -- 内核模块 简介LKM类型Static Linux Kernel ModuleDynamic Linux Kernel ModuleLKM编写语法 syntax详细描述内核头文件用户空间头文件Module Initialization FunctionModule Cleanup FunctionKeyword & Tag宏 __init __exitLKM入口注册Module Metadate&#…...

springboot整合springbatch批处理

springboot整合springbatch实现批处理 简介项目搭建步骤 简介 项目搭建 参考博客【场景实战】Spring Boot Spring Batch 实现批处理任务&#xff0c;保姆级教程 步骤 1.建表 建表sql CREATE TABLE student (id int NOT NULL AUTO_INCREMENT,name varchar(100) NOT NULL C…...

答案解析——C语言—第2次作业:转义字符

本次作业的链接如下&#xff1a;C语言—第2次作业&#xff1a;转义字符 1.下面哪个不是C语言内置的数据类型&#xff1a; C char //字符数据类型short //短整型int //整形long //长整型long long //更长的整形float //单精度浮点数double //双精度浮点数 …...

HTML5-新增表单input属性

新增表单属性 form控件主要新增的属性: autocomplete 是否启用表单的自动完成功能&#xff0c;取值&#xff1a;on&#xff08;默认&#xff09;、off novalidate 提交表单时不进行校验&#xff0c;默认会进行表单校验 autocomplete属性 概念&#xff1a;autocomplete属性…...

css-、串联选择器和后代选择器的用法

& &表示嵌套的上一级&#xff0c;这是sass的语法&#xff0c;代表上一级选择器 .btn {&.primary {background-color: #007bff;color: #fff;} } 编译出来的结果是同一个元素&#xff0c;有两个类名&#xff0c;两个类名之间没有空格&#xff1a; .btn.primary {…...

nifi详细介绍--一款开箱即用、功能强大可靠,可用于处理和分发数据的大数据组件

目录 目录 一、引言 二、NiFi 的历史背景介绍 三、NiFi 是什么&#xff1f; 核心特性 应用领域 四、NIFI 入门 五 、NiFi 工作流程 六、实际应用场景 七、优势总结 一、引言 NiFi&#xff08;Apache NiFi&#xff09;&#xff0c;全名为“Niagara Files”&#xff0…...

K8S Dashboard登录Token过期问题处理

整体思路 用户访问一个页面&#xff0c;在该页面中设置一个超链接&#xff0c;点击跳转至K8S Dashboard&#xff1b;跳转后&#xff0c;使用剪贴板上已复制的Token粘贴到Dashboard页面中的输入框登录即可。 写个定时任务将Token复制到页面上&#xff0c;过期了重新再登…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...