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

开源方案搭建可离线的精美矢量切片地图服务-5.Mapbox离线项目实现

系列文章目录

开源方案搭建可离线的精美矢量切片地图服务-1.开篇(附成果演示地址)

开源方案搭建可离线的精美矢量切片地图服务-2.PostGIS+GeoServer矢量切片 

开源方案搭建可离线的精美矢量切片地图服务-3.Mapbox个性化地图定制入门

开源方案搭建可离线的精美矢量切片地图服务-4.Mapbox样式设计

开源方案搭建可离线的精美矢量切片地图服务-5.Mapbox离线项目实现

开源方案搭建可离线的精美矢量切片地图服务-6.Mapbox之.pbf字体库

开源方案搭建可离线的精美矢量切片地图服务-7.Arcgis Pro企业级应用

开源方案搭建可离线的精美矢量切片地图服务-8.mapbox 之sprite大图图标文件生成(附源码)

项目成果展示(所有项目文件都在阿里云的共享云虚拟主机上,访问地图可以会有点慢,请多多包涵)。

01:中国地图:http://test.sharegis.cn/mapbox/html/3china.html

02:德国-德累斯顿市:http://test.sharegis.cn/mapbox/html/6germany.html

1.中国地图离线实例

      将所有的在线资源替换为本地资源,这里主要关注一下三种矢量切片的获取方式,

1.通过tms服务http://localhost:8080/geoserver/gwc/service/tms/1.0.0/china:china_map@EPSG:900913@pbf/{z}/{x}/{y}.pbf的方式获取矢量切片,

2.示例中还有wmts服务http://127.0.0.1:8080/geoserver/gwc/service/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&LAYER=china:china_map&STYLE=&TILEMATRIX=EPSG:900913:{z}&TILEMATRIXSET=EPSG:900913&FORMAT=application/x-protobuf;type=mapbox-vector&TILECOL={x}&TILEROW={y}的方式获取矢量切片。

3.以及通过XYZ:http://test.sharegis.cn/mapbox/maptile/{z}/{x}/{y}.pbf直接访问切片虚拟目录获取切片,我们提供的在线例子就是通过这种方式,因为我只有虚拟云主机不能安装Geoserver,我把切好的切片放到网站根目录,通过XYZ直接请求切片文件。

这里mapbox样式代码省略,具体Mapbox样式请下载源码,或者参考上一篇文章-Mapbox样式设计进行设计。源码中maptile文件下包含所有中国地图离线矢量切片。

image

<!DOCTYPE html>
<html>
<head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     <title>中国地图</title>
     <meta charset="utf-8" />
     <!--<script src='https://api.mapbox.com/mapbox-gl-js/v0.44.2/mapbox-gl.js'></script>-->
     <script src="../js/mapbox-gl.js"></script>
     <link href="../css/mapbox-gl.css" rel="stylesheet" />
     <style>
         html, body {
             padding: 0;
             margin: 0;
             height: 100%;
             overflow: hidden;
         }

        #map {
             height: 100%;
             z-index: 0;
         }
     </style>
</head>
<body>
     <div id='map'></div>
     <script>
         var map = new mapboxgl.Map({
             container: 'map',
             center: [105.7350860781, 34.3459367715],
             zoom: 3,
             style: {
                 "version": 8,
                 //我使用的这个版本sprite要写全路径
                 "sprite": "http://localhost:63336/sprites/sprite",
                 //字体.pbf文件获取
                 "glyphs": "../fonts/{fontstack}/{range}.pbf",
                 "sources": {
                     "china": {
                         //矢量类型
                         "type": "vector",
                          //服务类型 tms,要使用wmts服务请换成wmts
                         "scheme": "tms",
                         "tiles": [
                             //获取GeoServer 矢量切片服务,可以是一下几种方式
                            //"http://localhost:8080/geoserver/gwc/service/tms/1.0.0/china:china_map@EPSG:900913@pbf/{z}/{x}/{y}.pbf",
                           "http://localhost:61477/maptile/{z}/{x}/{y}.pbf"
                            //"http://127.0.0.1:8080/geoserver/gwc/service/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&LAYER=china:china_map&STYLE=&TILEMATRIX=EPSG:900913:{z}&TILEMATRIXSET=EPSG:900913&FORMAT=application/x-protobuf;type=mapbox-vector&TILECOL={x}&TILEROW={y}"
                         ]
                     }
                 },
                 "layers": [{
                     "id": "background",
                     //地图背景
                     "type": "background",
                     "layout": {},
                     "paint": {
                         "background-color": {
                             "base": 1,
                             "stops": [
                                 [
                                     11,
                                     "hsl(35, 32%, 91%)"
                                 ],
                                 [
                                     13,
                                     "hsl(35, 12%, 89%)"
                                 ]
                             ]
                         }
                     },
                     "interactive": true
                 }, {
                     "id": "river",
                     "type": "line",
                     "source": "china",
                     "source-layer": "river",
                     "minzoom": 5,
                     "maxzoom": 15,
                     "paint": {
                         "line-color": "#a0cfdf",
                         "line-width": {
                             "base": 1.4,
                             "stops": [
                                 [
                                     8,
                                     0.5
                                 ],
                                 [
                                     20,
                                     15
                                 ]
                             ]
                         }
                     }
                 }
                //篇幅限制,其他样式这里不做展示了,详细的请看代码…….
                 ],
                 "_ssl": true
             }
         });

        //添加缩放控件
         map.addControl(new mapboxgl.NavigationControl());
     </script>
</body>
</html>

 

2.德国-德累斯顿市实例

image

<!DOCTYPE html>
<html>
<head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     <title>德国-dresden</title>
     <meta charset="utf-8" />
     <!--<script src='https://api.mapbox.com/mapbox-gl-js/v0.44.2/mapbox-gl.js'></script>-->
     <script src="../js/mapbox-gl.js"></script>
     <link href="../css/mapbox-gl.css" rel="stylesheet" />
     <style>
         html, body {
             padding: 0;
             margin: 0;
             height: 100%;
             overflow: hidden;
         }

        #map {
             height: 100%;
             z-index: 0;
         }
     </style>
</head>
<body>
     <div id='map'></div>
     <script>
         var map = new mapboxgl.Map({
             container: 'map',
             center: [13.741891, 51.054211],
             zoom: 10,
             style: {
                 "version": 8,
                 //我使用的这个版本sprite要写全路径
                 "sprite": "http://localhost:61477/sprites/sprite",
                 //字体.pbf文件获取
                 "glyphs": "../fonts/{fontstack}/{range}.pbf",
                 "sources": {
                     "germany": {
                         //矢量类型
                         "type": "vector",
                         //服务类型 tms,要使用wmts请换成wmts
                         "scheme": "tms",
                         "tiles": [
                             //获取GeoServer 矢量切片服务,可以是一下几种方式
                             "http://localhost:8080/geoserver/gwc/service/tms/1.0.0/germany:germany_map@EPSG:900913@pbf/{z}/{x}/{y}.pbf",
                           //虚拟目录
                           //"http://test.sharegis.cn/mapbox/maptile1/{z}/{x}/{y}.pbf"
                           //"http://localhost:8080/geoserver/gwc/service/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&LAYER=germany:germany_map&STYLE=&TILEMATRIX=EPSG:900913:{z}&TILEMATRIXSET=EPSG:900913&FORMAT=application/x-protobuf;type=mapbox-vector&TILECOL={x}&TILEROW={y}"
                         ]
                     }
                 },
                 "layers": [
                             {
                                 "id": "background",
                                 "type": "background",
                                 "layout": {},
                                 "paint": {
                                     "background-color": {
                                         "base": 1,
                                         "stops": [
                                             [
                                                 11,
                                                 "hsl(35, 32%, 91%)"
                                             ],
                                             [
                                                 13,
                                                 "hsl(35, 12%, 89%)"
                                             ]
                                         ]
                                     }
                                 },
                                 "interactive": true
                             },
                     {
                         //水面
                         "id": "water",
                         "type": "fill",
                         "source": "germany",
                         "source-layer": "gis_osm_water_a_07_1",
                         "layout": {},
                         "paint": {
                             "fill-color": "hsl(196, 80%, 70%)"
                         },
                         "interactive": true
                     },
                     {
                         //墓地
                         "id": "cemetery",
                         "type": "fill",
                         "source": "germany",
                         "source-layer": "gis_osm_pofw_a_07_1",
                         "layout": {},
                         "paint": {
                             "fill-color": "hsl(75, 37%, 81%)"
                         },
                         "interactive": true
                     },
                     {
                         //建筑物
                         "id": "building",
                         "type": "fill",
                         "source": "germany",
                         "source-layer": "gis_osm_buildings_a_07_1",
                         "minzoom": 15,
                         "layout": {},
                         "paint": {
                             "fill-color": {
                                 "base": 1,
                                 "stops": [
                                     [
                                         15,
                                         "hsl(35, 11%, 88%)"
                                     ],
                                     [
                                         16,
                                         "hsl(35, 8%, 85%)"
                                     ]
                                 ]
                             },
                             "fill-opacity": {
                                 "base": 1,
                                 "stops": [
                                     [
                                         15.5,
                                         0
                                     ],
                                     [
                                         16,
                                         1
                                     ]
                                 ]
                             },
                             "fill-outline-color": "hsl(35, 6%, 79%)"
                         },
                         "interactive": true
                     }
                 ],
                 "_ssl": true
             }
         });
         map.addControl(new mapboxgl.NavigationControl());
     </script>
</body>
</html>

 

3小结

       这篇主要讲了一下Mapbox离线项目的两个例子,将我们提供的两个在线项目例子的源码分享给大家,相信大家通过这几篇文章会对Mapbox js离线项目部署有了清晰的认识,下篇我主要分享一下常用的Mapbox .pbf字体库。

源码链接:https://pan.baidu.com/s/16a48D7Qodf4xX-3YZOX7ZQ 密码:po5s

github地址:https://github.com/HuHongYong/Mapbox-js-offline

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

作者:ATtuing

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

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。


转载于:https://www.cnblogs.com/ATtuing/p/9216782.html

相关文章:

  • (搬运以学习)flask 上下文的实现
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • h2db新手入门篇——概念及初步使用
  • Android 布局巧用之include、merge、ViewStub
  • HTML(form标签)、CSS选择器一
  • 初始 Mybatis(一) —— 基本配置及用法
  • OpenStack Newton部署官方指南
  • 小前端眼里的大前端:GMTC 2018 参会小结
  • Rails哲学三原则
  • TCPDF 如何实现首行缩进
  • https请求过程
  • 一个JS多个数组取交集算法
  • JS对象的克隆
  • 作为面试官如何从深度和广度上考察面试者
  • 沃森想通过社交网络筛出最想要优惠券的人
  • 收藏网友的 源程序下载网
  • Android框架之Volley
  • CentOS7 安装JDK
  • JavaScript新鲜事·第5期
  • linux安装openssl、swoole等扩展的具体步骤
  • python 装饰器(一)
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • 基于axios的vue插件,让http请求更简单
  • 爬虫模拟登陆 SegmentFault
  • 漂亮刷新控件-iOS
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 新版博客前端前瞻
  • 一份游戏开发学习路线
  • 用mpvue开发微信小程序
  • 在weex里面使用chart图表
  • 找一份好的前端工作,起点很重要
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 数据库巡检项
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (4)(4.6) Triducer
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (八)Flask之app.route装饰器函数的参数
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (二十三)Flask之高频面试点
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (利用IDEA+Maven)定制属于自己的jar包
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)Linux下编译安装log4cxx
  • (转)可以带来幸福的一本书
  • .apk 成为历史!
  • .htaccess配置常用技巧
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .net core 依赖注入的基本用发
  • .NET 设计模式初探
  • .NET实现之(自动更新)