基于mapbox搭建可离线的矢量切片地图服务-3.Mapbox个性化地图定制入门

作者:ATtuing
出处:http://www.cnblogs.com/ATtuing

最近在做关于mapbox的项目,看到这篇文章感觉特别好,特此转载记录一下。
先不说废话直接上地址:(所有东西都在阿里云的共享云虚拟主机上,访问地图可以会有点慢,请多多包涵)。
01:中国地图:http://test.sharegis.cn/mapbox/html/3china.html
02:德国-德累斯顿市:http://test.sharegis.cn/mapbox/html/6germany.html

1.简介

mapbox是一家非常牛的公司,比如像特斯拉、DJI大疆创新、孤独星球、Airbnb、GitHub、Cisco、Snap、飞猪、Keep、Bosch这些在国内外各自领域中响当当的企业都是它的客户。专注于帮助企业打造定制化地图应用的Mapbox就是这样一家“你看不见我,但我无处不在”的企业。可以开发和定制web、android、IOS、VR、无人驾驶、甚至是游戏地图场景等。

mapbox-gl是Mapbox一款开源Web地图服务解决方案,用于搭建精美的地图服务,可以免费创建并定制个性化地图的网站。他最大的优点就是可以使用类似于css的样式来描述地图,并提供类似于photoshop的图像界面来设计和生成精美的样式。我们本篇主要讲一下Mapbox在Web地图中的应用。

2.Mapbox入门

1.打开向导页:https://www.mapbox.com/install/,选择开发平台SDK,
在这里插入图片描述
2.选择Mapbox GL js 方式,第一种为CDN在线模式,类似于引用jquery一样,我们也可以下载下来。第二种为模块化js搭建,可使用webpack等模块化工具搭建。
在这里插入图片描述
3.搭建第一个页面。

<!DOCTYPE html>
<html>
<head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     <title></title>
     <meta charset="utf-8" />
     <style>
         html, body {
             padding: 0;
             margin: 0;
             height: 100%;
             overflow: hidden;
         }

        #map {
             height: 100%;
             z-index: 0;
         }
     </style>
     <script src='https://api.mapbox.com/mapbox-gl-js/v0.44.2/mapbox-gl.js'></script>
     <link href='https://api.mapbox.com/mapbox-gl-js/v0.44.2/mapbox-gl.css' rel='stylesheet' />
</head>
<body>
     <div id='map'></div>
     <script>
         mapboxgl.accessToken = 'YourToken';
         var map = new mapboxgl.Map({
             container: 'map',
             style: 'mapbox://styles/mapbox/streets-v10'
         });
     </script>
</body>
</html>

配色非常舒服的地图界面,通过js代码分析可以看出最核心的代码就是 style: ‘mapbox://styles/mapbox/streets-v10’,他包含了所有的地图样式。
在这里插入图片描述

3.Mapbox进阶

入门例子中style样式都封装到了一起,下面这个例子展示如何将style分解,为后面离线部署提供解决方案,具体可以查看一下style api.

<!DOCTYPE html>
<html>
<head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     <title></title>
     <meta charset="utf-8" />
     <style>
         html, body {
             padding: 0;
             margin: 0;
             height: 100%;
             overflow: hidden;
         }

        #map {
             height: 100%;
             z-index: 0;
         }
     </style>
     <script src='https://api.mapbox.com/mapbox-gl-js/v0.44.2/mapbox-gl.js'></script>
     <link href='https://api.mapbox.com/mapbox-gl-js/v0.44.2/mapbox-gl.css' rel='stylesheet' />
</head>
<body>
     <div id='map'></div>
     <script>
         mapboxgl.accessToken = 'pk.eyJ1IjoiYXR0dWluZyIsImEiOiJjamNham4ycTgwZzVkMndzM2lzYTJtN2VjIn0.kB9yWdGNuo7_oi3brXX4-A';
         var map = new mapboxgl.Map({
             container: 'map',
             style: {
                 "version": 8,
                 "name": "Mapbox Streets",
                 "sprite": "mapbox://sprites/mapbox/streets-v8",
                 "glyphs": "mapbox://fonts/mapbox/{fontstack}/{range}.pbf",
                 "sources": {
                     "mapbox-streets": {
                         "type": "vector",
                         "url": "mapbox://mapbox.mapbox-streets-v6"
                     }
                 },
                 "layers": [
                     {
                         "id": "water",
                         "source": "mapbox-streets",
                         "source-layer": "water",
                         "type": "fill",
                         "paint": {
                             "fill-color": "#00ffff"
                         }
                     }
                 ]
             }
         });
     </script>
</body>
</html>

在这里插入图片描述
api解析:
1.version:这个JS SDK对应版本必须为8。

2.name:样式的命名。

3.sprite:将一个地图涉及到的所有零星图标图片都包含到一张大图中去,我们看一下streets-v8的sprite图片。
在这里插入图片描述
4.glyphs:.pbf格式的字体样式,例如微软雅黑等字体库。

5.sources:图层的资源文件,可以支持矢量切片、栅格、dem栅格、图片、geojson、视频等格式。

6.layers:是对每个图层样式的描述,这里就是对地图样式渲染的关键,可以做很多精美的设计。

写到这里我们还有一个疑问 mapboxgl.accessToken 这个accessToken 是干什么的?其实Mapbox提供了在线样式的编辑,以及矢量数据上传,图标的整合等,这个accessToken 其实是为了与你上传到他们服务器的数据做关联,如果我们不依赖他的在线资源,我们完全可以不使用这个accessToken 。

4.Mapbox离线部署

通过上面的分析,mapbox-gl.js、mapbox-gl.css下载到本地就行。离线部署现在主要的问题是首先有自己的矢量切片文件,上一节我们讲过如何发布矢量切片服务,其次有个glyphs字体文件,后面文章我会提供一个微软雅黑的.pbf格式的字体库,以及我获取.pbf字体库的方式。剩下的就是编写自己的地图样式了。

5.总结

这一篇主要讲了一下Mapbox的基础,以及对离线部署的分析,下一篇讲一下我们之前提到的项目实现。

待续。。。。。。。。。。。。。。。。。。。。。

### 使用Mapbox API集成和配置卫星地图 #### 初始化Mapbox并设置卫星地图风格 为了使用Mapbox的API来创建带有卫星视图的地图,需要先引入必要的JavaScript库,并设定访问令牌。这可以通过在脚本中加入以下代码实现: ```javascript mapboxgl.accessToken = &#39;用自己申请到的token&#39;; var map = new mapboxgl.Map({ container: &#39;map&#39;, // 容器ID style: &#39;mapbox://styles/mapbox/satellite-streets-v9&#39;, // 使用卫星街道样式[^1] center: [80.99817807141773, 43.976098445868644], // 中心坐标 zoom: 12 // 缩放级别 }); ``` 这里选择了`satellite-streets-v9`作为地图样式,它结合了高分辨率卫星影像与道路网络数据。 #### 自定义位置展示 如果希望显示特定地理位置,则可以根据需求调整经纬度参数。例如,在XML布局文件中指定更详细的属性以便于Android开发环境下的MapView组件初始化时自动定位至某地: ```xml <com.mapbox.mapboxsdk.maps.MapView android:id="@+id/mapview" android:layout_width="fill_parent" android:layout_height="fill_parent" mapbox:center_latitude="39.069" mapbox:center_longitude="117.221" mapbox:style_url="@string/style_satellite_streets" mapbox:zoom="15"/> ``` 上述代码片段展示了如何通过XML配置MapView以加载预设好的卫星街景模式,并聚焦在中国北京地区的一个具体地点上[^3]。 #### 添加交互功能 对于Web应用程序而言,还可以进一步增强用户体验,比如添加鼠标悬停效果、点击事件监听等功能。这些都可以借助React框架配合`react-mapbox-gl`插件轻松达成。首先需确保已正确安装相关依赖项: ```bash npm install mapbox-gl react-mapbox-gl ``` 接着,在入口JS文件里声明全局性的accessToken变量用于身份验证目的;之后便可在应用内部自由操作地图对象了[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值