目录
前言
在当今数字化浪潮的推动下,地理信息系统(GIS)技术正以前所未有的速度融入我们的生活和工作。从城市的交通管理到环境监测,从企业的物流规划到智慧城市的建设,GIS技术的应用场景不断拓展,其重要性日益凸显。然而,随着技术的快速发展,传统的GIS解决方案逐渐暴露出一些问题:功能臃肿、性能不足、开发成本高昂,以及对国外技术的过度依赖等。这些问题不仅限制了GIS技术的广泛应用,也为数据安全和自主可控带来了潜在风险。在这种背景下,MapTalks应运而生。作为一款国产轻量化二三维一体化GIS引擎,MapTalks凭借其创新的技术架构和卓越的性能表现,为GIS行业带来了一股清新的空气。它不仅解决了传统GIS引擎的诸多痛点,还为开发者和企业提供了更加灵活、高效且自主可控的解决方案。

在现代Web应用中,性能和用户体验至关重要。MapTalks的核心设计理念之一就是"轻量化"。通过精心优化代码结构和功能模块,MapTalks在保持强大功能的同时,将资源占用和加载时间降至最低。其核心库经过压缩后仅数十KB,却能支持矢量和栅格图层的渲染、投影转换、空间分析等核心功能。这种轻量化的特性,使得MapTalks能够快速加载并运行在各种设备上,无论是桌面浏览器还是移动终端,都能提供流畅的用户体验。
本文将作为Maptalks的技术系列首篇,作为开篇首先将简单介绍MapTalks的相关知识,让大家对Maptalks的基本功能有一个基本的认识,后续我们将陆续分享MapTalks的多篇技术内容。技术的发展永无止境,MapTalks也在不断创新和突破。随着WebGPU、WebAssembly等新兴技术的逐渐成熟,MapTalks正在积极探索这些技术在GIS领域的应用,以进一步提升渲染性能和用户体验。未来,MapTalks将支持更高级的图形渲染技术,如实时光线追踪、物理材质渲染等,为用户提供更加逼真的三维可视化效果。
一、Maptalks知识简介
本节将重点对Maptalks的基本内容给大家简单讲解,让大家对Maptalks首先有一个简单的了解。首先对Maptalks的官方仓库进行简单介绍,让大家知道遇到问题可以去哪里寻找资源以及找到技术支持。然后给大家简单讲解一下Maptakls是什么和其具体可以实现什么功能?
1、Maptalks官方
想学习某个技术,首先我们可以在官方网站上寻找相关的内容,Maptalks的官网地址为:Maptalks官网地址。在浏览器中输入地址后可以看到以下界面:

MapTalks通过倾斜和旋转二维地图来实现二三维一体化,为地图的绘制、可视化和分析提供了一个额外的维度,同时保留了二维地图的简洁性。
同时MapTalks是一个开放的可扩展库。你可以使用任何喜欢的技术(如CSS 3、Canvas和WebGL)为MapTalks添加新功能。查看与MapTalks兼容的顶级插件(如Mapbox GL JS、THREE、D3、ECharts等)。并且你可以自由地创建自己的插件,这既简单又有趣。因此Maptalks可以集成许多的有趣功能。

性能方面,性能始终是Maptalks优先考虑的。借助MapTalks及其插件,你可以使用Canvas 2D流畅渲染数万个几何图形,使用WebGL则可以渲染数十万个几何图形。
2、Maptalks的github仓库
作为一个优秀的二三维GIS引擎,Maptalks的源代码是直接托管在github上的,github的地址为:maptalks.js。
可以看到,github的star截止目前有4.5k的star,还是非常受欢迎的。
3、Maptalks能做什么?
功能特性
-
支持矢量瓦片格式
-
支持 3DTiles 格式
-
支持 GLTF 格式
-
通过 WebGL 实现显著的性能提升
-
丰富的 3D 分析功能
-
交通模拟动画
包介绍
基础库
-
gltf-loader:gltf 格式解析库。
-
reshader.gl:一个基于 regl 的 3D 渲染接口实现,包括渲染器、场景、网格、材质等常用渲染基类以及预定义的渲染材质,例如 PBR。
地图
- maptalks:maptalks 库的源代码。
图层
-
gl:WebGL 基础图层功能,包括 GroupGLLayer、地形、后处理以及各种 3D 遮罩实现。
-
layer-3dtiles:3dtiles 图层(Geo3DTilesLayer)的实现。
-
layer-gltf:gltf 图层(GLTFLayer/GLTFMarker)的实现。
-
layer-video:视频图层(VideoLayer/VideoSurface)的实现。
矢量瓦片
-
vt-plugin:矢量瓦片渲染插件的接口定义。
-
vt:矢量瓦片图层(VectorTileLayer/GeoJSONVectorTileLayer)的实现。
三维分析
-
analysis:各种 3D 分析功能的实现。
-
traffic:交通模拟的实现。
转码器
-
transcoders.crn:crn 格式解析库。
-
transcoders.draco:draco 格式解析库。
-
transcoders.ktx:ktx2 压缩纹理格式解析库。
二、Maptalks技术能力
本节将从二三维以及对Threejs的兼容角度对Maptalks的技术能力进行简单介绍。通过技术能力的介绍,让大家对Maptalks可以在哪些场景发力有更全面的掌握。
1、传统二维GIS
与Leaflet、Openlayers等传统二维GIS类似,Maptalks的二维地图能力也是比较强的。可以在其示例网站""中看到以下内容,基础地图能力矩阵:

瓦片与地图投影支持:

图形标绘:

更多二维地图的支持,可以在其官网上查看。
2、面向有限的三维GIS
MapTalks的二三维一体化能力,为智慧城市、数字孪生等应用场景提供了强大的技术支持。例如,在智慧城市建设中,开发者可以利用MapTalks快速构建城市的三维模型,并在模型上叠加二维地图数据,如交通流量、环境监测数据等。用户可以通过旋转、缩放、倾斜等操作,从不同角度查看城市的空间信息,实现对城市运行状态的实时监控和分析。
这里要说明一下有限的三维,可以看到,Maptalks虽然是支持三维的。从数据接入上来看,maptalks依然非常丰富,从3dtiles到地形数据,到模型数据,这些都是无缝接入的。之所以说明有限,是因为与Cesium等传统3DGIS渲染组件相比,还是有一定的区别的。这个对比,大家可以结合例子进行对比。


如果之前做过Cesium的项目,相信大家对这些数据一定都不陌生,所以如果熟悉Cesium,平滑过度到Maptalks应该问题不大。

对GLTF模型的支持也是非常好的:

3、良好的兼容Threejs
众所周知,如果是使用Cesium进行三维地图开发,需要集成Threejs将是一个比较麻烦的技术问题,虽然现在有一些公开的组件进行了集成,因此实现的难度没那么大。而Maptalks已经内置了Threejs。

可以看到,maptalks不止对于Threejs有插件支持,同时对于Mapbox、Echarts等图表插件都是有良好的支持。关于Maptalks的技术能力,远不止于此,大家可以通过官网去详细了解,深入实践。
三、第一个Maptalks集成实例
经过前面的介绍,相信大家对Maptalks的功能已经充满期待,同时都准备好了环境,在自己的开发环境中实践起来把。下面就简单的介绍一下Maptalks的第一个简单的例子。心动不如行动,大家都行动起来吧。
1、依赖包引入
这里以传统的Html5的形式对Maptalks进行集成。当然,Maptalks不仅仅可以跟Html5进行集成。如果您当前的技术栈对Vue和React非常熟悉,可以使用这些成熟的前端框架进行集成。新建示例html页面后,在页面中引入以下资源:
<link rel='stylesheet' href='https://maptalks.com/api/maptalks-gl.css' />
<script type='text/javascript' src='https://maptalks.com/api/maptalks-gl.js'></script>
这是通过CDN的方式引入资源,如果大家需要在离线环境下进行使用,可以将依赖的css和js离线下载下来。参考如下:
javascript
<link rel="stylesheet" href="https://unpkg.com/maptalks-gl/dist/maptalks-gl.css">
<script type="text/javascript" src="https://unpkg.com/maptalks-gl/dist/maptalks-gl.js"></script>
<script type="text/javascript" src="https://unpkg.com/@maptalks/transcoders.draco/dist/transcoders.draco.js"></script>
<script type="text/javascript" src="https://unpkg.com/@maptalks/transcoders.crn/dist/transcoders.crn.js"></script>
<script type="text/javascript" src="https://unpkg.com/@maptalks/transcoders.ktx2/dist/transcoders.ktx2.js"></script>
2、地图组件创建
引入相应的css和js资源后,就可以在html网页中创建map地图对象,关键代码如下:
javascript
<div id="map" class="container"></div>
<script>
const map = new maptalks.Map("map", {
center: [-0.113049, 51.498568],
zoom: 14,
baseLayer: new maptalks.TileLayer("base", {
urlTemplate: "https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png",
subdomains: ["a", "b", "c", "d"],
attribution: "© <a href='http://osm.org'>OpenStreetMap</a> contributors, © <a href='https://carto.com/'>CARTO</a>",
}),
});
</script>
以上代码跟Cesium和Leaflet有点类似,基本思路都是创建Maptalks的页面展示元素,然后初始化底图信息。经过这个设置,就可以在页面中创建地图。完整的代码如下:
javascript
<!DOCTYPE html>
<html>
<meta charset='UTF-8' />
<meta name='viewport' content='width=device-width, initial-scale=1' />
<title>地图 - 显示</title>
<style type='text/css'>
html,
body {
margin: 0px;
height: 100%;
width: 100%;
}
.container {
width: 100%;
height: 100%;
}
</style>
<link rel='stylesheet' href='https://maptalks.com/api/maptalks-gl.css' />
<script type='text/javascript' src='https://maptalks.com/api/maptalks-gl.js'></script>
<body>
<div id="map" class="container"></div>
<script>
const map = new maptalks.Map("map", {
center: [-0.113049, 51.498568],
zoom: 14,
baseLayer: new maptalks.TileLayer("base", {
urlTemplate: "https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png",
subdomains: ["a", "b", "c", "d"],
attribution: "© <a href='http://osm.org'>OpenStreetMap</a> contributors, © <a href='https://carto.com/'>CARTO</a>",
}),
});
</script>
</body>
</html>
3、成果展示
将以上代码复制到一个Html文件中,然后在nginx中发布或者直接浏览网页文件后可以看到如下效果:

如果能看到以上页面,说明成功集成,是不是很简单,大家可以跟着一起去试试看实际的效果吧。下面再分享一个maptalks首页的示例页面:

相较于Cesium而言,我自己的开发机器是带不动的,运行就报错。而Maptalks完全可以正常运行。因此对于普通的电脑而言,满足了可视化的基础要求。而其三维支持能力,又很好的弥补了Leaflet和OpenLayers等二维GIS面临的不足。
四、总结
以上就是本文的主要内容,本文将作为Maptalks的技术系列首篇,作为开篇首先将简单介绍MapTalks的相关知识,让大家对Maptalks的基本功能有一个基本的认识,后续我们将陆续分享MapTalks的多篇技术内容。技术的发展永无止境,MapTalks也在不断创新和突破。通过实例的真实开发,我们不仅展示了Maptalks的基础能力,同时看到了Maptalks对硬件的适配很好,配置很低的电脑也完全跑的起来,让它的展示能力得到了大范围的扩展。行文仓促,定有不足之处,欢迎各位朋友在评论区批评指正,不胜感激。