初识Maptalks:离线/在线底图加载实战指南

举报
夜郎king 发表于 2026/03/28 08:10:42 2026/03/28
【摘要】 本篇将详细的介绍Maptalks中的一个核心对象,即Map对象,通过介绍Map参数和选项的具体说明,相比大家对Maptalks的基本知识有了最基本的了解。

目录


前言

一、Maptalks参数介绍

1、Map参数简介

2、参数选项说明

二、Maptalks加载在线底图

1、接入参数及地址

2、完整接入代码

3、在线底图加载展示

三、Maptalks加载离线底图

1、接入参数及地址

2、完整接入例子

3、离线底图加载展示

四、总结


前言

        在当今数字化时代,地理信息系统的应用愈发广泛,而地图作为地理信息的重要载体,其呈现方式与加载效率对于各类应用的用户体验起着至关重要的作用。Maptalks 作为一个强大的开源地图可视化库,凭借其灵活的架构与丰富的功能,为开发者提供了便捷的地图开发解决方案。无论是构建精美的在线地图应用,还是打造稳定可靠的离线地图环境,Maptalks 都能轻松应对。


1.jpg

对于许多初学者而言,地图开发往往因底图加载这一基础环节的复杂性而望而却步。在线底图加载看似简单,实则涉及网络请求、瓦片服务等诸多细节;离线底图加载更是需要面对数据存储、渲染优化等难题。然而,Maptalks 通过其简洁易懂的 API 设计,将这些复杂问题进行了有效封装,使得开发者能够以较低的学习成本快速上手。本文从最基础的 Maptalks 环境搭建讲起,逐步深入到在线底图加载的配置要点。通过详细的操作步骤与实例代码,读者可以清晰地看到每一个环节的实现过程,从而在实践中积累经验。


1.jpg

 通过学习这些知识,读者不仅能够掌握离线底图加载的技术细节,还能了解到如何在不同设备上实现最佳的离线地图体验。读者将能够从理论到实践全方位地了解 Maptalks 在底图加载方面的强大能力,为后续深入探索地图开发的更多领域奠定坚实的基础。

一、Maptalks参数介绍

        本节将对Maptalks的配置参数和选项参数进行详细介绍,受限于博主的英文水平,一些说明不是特别准确,在此恳请各位的原谅。

1、Map参数简介

        首先来看一下Maptalks的Map对象的参数说明,见如下官网:Maptalks API地址


1.jpg

与Leaflet、OpenLayers、Cesium等GIS类产品应用一致,Map是GIS的一个非常重要的核心类。通过文档中的方法来看一下Map对象有哪些属性和方法。首先来看一个最简单的例子:


var map = new maptalks.Map("map",{
     center:     [180,0],
     zoom:  4,
     baseLayer : new maptalks.TileLayer("base",{
         urlTemplate:'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
         subdomains:['a','b','c']
     }),
     layers : [
         new maptalks.VectorLayer('v', [new maptalks.Marker([180, 0])])
     ]
});
 参数 类型 描述
container String | HTMLElement | Object 创建地图的容器,可以是:
1. 一个 HTMLElement 容器。
2. HTMLElement 容器的 ID。
3. 任何兼容 canvas 的容器
options Object 构造选项

        在构造选项中,我们可以设置的参数如下:

参数 类型 默认值 描述
center Array.<Number> 地图初始中心点。
zoom Number 地图初始缩放级别。
spatialReference (可选) Object null 地图的空间参考,默认使用 EPSG:3857 投影和 Google/OSM 使用的分辨率。
baseLayer (可选) Layer null 初始设置到地图的底图图层。
layers (可选) Array.<Layer> null 初始添加到地图的图层。
* * Map.options 中定义的任何其他选项

2、参数选项说明

        配置属性信息也是非常丰富的,通过参数选项我们可以进行很多参数的定义。关于参数选项的说明如下:

名称 类型 默认值 描述
centerCross (可选) Boolean false 在地图中心显示红色十字。
seamlessZoom (可选) Boolean true 是否使用无缝缩放模式。
zoomInCenter (可选) Boolean false 缩放时是否固定在中心。
zoomOrigin (可选) Number null 容器点中的缩放原点,例如 [400, 300]。
zoomAnimation (可选) Boolean true 启用缩放动画。
zoomAnimationDuration (可选) Number 330 缩放动画持续时间。
panAnimation (可选) Boolean true 拖拽或触摸结束后继续执行平移动画。
panAnimationDuration (可选) Boolean 600 平移动画持续时间。
rotateAnimation (可选) Boolean true 拖拽或触摸旋转结束后继续执行旋转动画。
rotateAnimationDuration (可选) Boolean 800 旋转动画持续时间。
zoomable (可选) Boolean true 是否启用地图缩放。
enableInfoWindow (可选) Boolean true 是否在地图上启用信息窗口。
hitDetect (可选) Boolean true 是否在地图上启用图层点击检测以改变光标样式,禁用它可提高性能。
hitDetectLimit (可选) Boolean 5 执行点击检测的最大图层数。
fpsOnInteracting (可选) Boolean 25 地图交互时的帧率,当帧率较低时某些慢图层在交互时不会被绘制。设为 0 可禁用。
layerCanvasLimitOnInteracting (可选) Boolean -1 交互时绘制的图层 canvas 限制,设置它以改善性能。
maxZoom (可选) Number null 地图可缩放到的最大级别。
minZoom (可选) Number null 地图可缩放到的最小级别。
maxExtent (可选) Extent null 设置 maxExtent 后,地图将限制在给定的最大范围内,当用户尝试平移出范围时会回弹。
fixCenterOnResize (可选) Boolean true 地图大小改变时是否固定地图中心。
maxPitch (可选) Number 80 最大俯仰角。
maxVisualPitch (可选) Number 70 可视的最大俯仰角。
viewHistory (可选) Extent true 是否记录视图历史。
viewHistoryCount (可选) Extent 10 视图历史记录的数量。
draggable (可选) Boolean true 设为 false 可禁用地图拖拽。
dragPan (可选) Boolean true 如果为 true,地图可通过拖拽平移。
dragRotate (可选) Boolean true 默认为 true。如果为 true,地图可通过右键拖拽或 Ctrl+左键拖拽旋转。
dragPitch (可选) Boolean true 默认为 true。如果为 true,地图可通过右键拖拽或 Ctrl+左键拖拽俯仰。
dragRotatePitch (可选) Boolean true 如果为 true,地图在拖拽时同时俯仰和旋转。
switchDragButton (可选) Number false 切换使用左键(或移动端触摸)旋转地图,右键移动地图。
touchGesture (可选) Boolean true 是否允许通过双指触摸手势缩放/旋转/倾斜地图。
touchZoom (可选) Boolean true 是否允许通过触摸捏合缩放地图。
touchRotate (可选) Boolean true 是否允许通过触摸捏合旋转地图。
touchPitch (可选) Boolean true 是否允许通过触摸捏合俯仰地图。
touchZoomRotate (可选) Boolean false 如果为 true,地图可通过触摸捏合同时缩放和旋转。
doubleClickZoom (可选) Boolean true 是否允许通过双击事件缩放地图。
scrollWheelZoom (可选) Boolean true 是否允许通过滚轮事件缩放地图。
geometryEvents (可选) Boolean true 启用/禁用触发几何体事件。
clickTimeThreshold (可选) Number 280 mousedown(touchstart) 和 mouseup(touchend) 之间的时间阈值,用于判断是否为点击事件。
control (可选) Boolean true 是否允许地图添加控件。
attribution (可选) Boolean | Object true 是否在地图上显示归属控件。如果为 true,归属显示 maptalks 信息;如果为对象,可指定位置或基础内容,或两者都指定。
zoomControl (可选) Boolean | Object false 如果设为 true 或对象作为控件构造选项,则在地图上显示缩放控件。
scaleControl (可选) Boolean | Object false 如果设为 true 或对象作为控件构造选项,则在地图上显示比例尺控件。
overviewControl (可选) Boolean | Object false 如果设为 true 或对象作为控件构造选项,则在地图上显示鹰眼图控件。
fog (可选) Boolean true 是否在远处绘制雾效。
fogColor (可选) Array.<Number> [233, 233, 233] 雾的颜色:[r, g, b]。
renderer (可选) String canvas 渲染器类型。如果不确定,请不要更改。关于渲染器,参见 TODO。
devicePixelRatio (可选) Number null 设备像素比,覆盖设备的默认值。
heightFactor (可选) Number 1 高度/高程计算的因子,这影响所有图层(vectortilelayer/gllayer/threelayer/3dtilelayer)的高度计算。
cameraInfiniteFar (可选) Boolean false 将相机远平面增加到无限远。启用此选项可能会降低地图性能。
stopRenderOnOffscreen (可选) Boolean true 当容器离屏时是否停止地图渲染。
originLatitudeForAltitude (可选) Boolean 40 map.altitudeToPoint 方法的默认纬度。
mousemoveThrottleTime (可选) Number 48 mousemove 事件间隔时间(毫秒)。

二、Maptalks加载在线底图

        介绍完Maptalks的参数信息后,我们就基于Maptalks来做一个实践,根据不同的需要,我们分别接入在线底图和离线底图。首先是介绍如何加载在线底图。

1、接入参数及地址

        在线底图比较简单,用户端不需要自己维护瓦片,采用的是访问别人的电子瓦片的机制。因此瓦片来源于第三方,但是第三方网站为了保证自己应用的可用性,通常会采用负载均衡来进行设置,将访问请求分散到不同的机器中,以此来保证性能。这里接入的地图是一个线上电子地图:

序号 瓦片地址 说明
1 https://webst01.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z} 实例:https://webst01.is.autonavi.com/appmaptile?style=6&x=53340&y=27407&z=16
2 subdomains 可以根据负载情况进行合理设置


1.jpg

2、完整接入代码

        在Maptalks中接入在线瓦片的方法比较简单,这里直接给出最小的一个实现代码,供大家参考。大家可以使用本地的电脑直接打开网页进行测试。

<!DOCTYPE html>
<html>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Maptalks地图 - 显示-加载在线地图</title>
  <style type="text/css">
    html,body{margin:0px;height:100%;width:100%}
    .container{width:100%;height:100%}
  </style>
  <link rel="stylesheet" href="https://unpkg.com/maptalks/dist/maptalks.css">
  <script type="text/javascript" src="https://unpkg.com/maptalks/dist/maptalks.min.js"></script>
  <body>
    <div id="map" class="container"></div>
    <script>
      var map = new maptalks.Map('map', {
        center: [113.009491, 28.224021], 
        zoom: 15,
        baseLayer: new maptalks.TileLayer('base', {
			urlTemplate: "https://webst01.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}",
            subdomains: ["1", "2", "3", "4", "5"],
			attribution: '&copy; 加载在线瓦片'
        })
      });
    </script>
  </body>
</html>

3、在线底图加载展示

        在自己的电脑上打开以后,在浏览器中可以看到如下地图结果,就说明程序是没有问题的:

1.jpg

同时在网络栏中可以看到瓦片的加载是没有问题的。

三、Maptalks加载离线底图

        有的时候我们为了项目的具体使用,并不能访问在线的瓦片,因此需要将瓦片进行离线部署,在本地才能进行访问,因此我们这节重点讲讲如何在Maptalks中加载离线底图。

1、接入参数及地址

        同样的,在本地我们需要准备准备离线瓦片,投影是3857的。瓦片我们使用NGINX来进行发布。参数地址如下:

序号 参数名 说明
1 http://localhost:8086/data/basemap_water/{z}/{x}/{y}.png 本地瓦片地址
2 zoom 访问地图等级,13
3 center 中心点坐标
4 attribution 地图属性配置

        有了前面的在线例子基础之后,再来实现离线底图接入就比较简单了。

2、完整接入例子

<!DOCTYPE html>
<html>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Maptalks地图 - 显示-加载离线地图</title>
  <style type="text/css">
    html,body{margin:0px;height:100%;width:100%}
    .container{width:100%;height:100%}
  </style>
  <link rel="stylesheet" href="https://unpkg.com/maptalks/dist/maptalks.css">
  <script type="text/javascript" src="https://unpkg.com/maptalks/dist/maptalks.min.js"></script>
  <body>
    <div id="map" class="container"></div>
    <script>
      var map = new maptalks.Map('map', {
        center: [112.93808, 28.22576], 
        zoom: 13,
        baseLayer: new maptalks.TileLayer('base', {
			urlTemplate: "http://localhost:8086/data/basemap_water/{z}/{x}/{y}.png",
			attribution: '&copy; 加载本地离线瓦片'
        })
      });
    </script>
  </body>
</html>

3、离线底图加载展示

1.jpg

可以在地址栏中看到,Maptalks成功的加载到了本地瓦片,大家可以将自己的网络暂时设置为不可用用来测试一下Maptalks服务的可靠性。请求基本是没问题的。

四、总结

        以上就是本文的主要内容,本篇将详细的介绍Maptalks中的一个核心对象,即Map对象,通过介绍Map参数和选项的具体说明,相比大家对Maptalks的基本知识有了最基本的了解。接着通过两个实战案例,重点介绍如何使用Maptalks加载在线底图和离线底图,让想学习Maptalks的朋友更加容易入门。行文仓促,定有不足之处,欢迎各位朋友在评论区批评指正,不胜感激。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。