mapbox-gl.js本地化

mapbox-gl官网地址:https://www.mapbox.com/mapbox-gl-js/api/

介绍

mapbox-gl.js是mapbox用于web端地图可视化的api。 使用的时候首先要注册个账户,然后获得一个  accessToken。

之后在官网例子里可以发现,地图和图标、字体等等的显示都需要这个accessToken,那势必联网。

因为项目环境不允许上网,所以需要将其本地化,即把需要accessToken的请求全部本地化到自己的服务上来。

本地化

首先根据大神猿基地的文章:Mapbox GL JS本地化实践  来一步步进行本地化。下面重点讲一下我在本地化出现的问题与解决办法~~

 

第一步,先贴全部代码~~

[html] view plain copy

  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4.     <meta charset='utf-8' />  
  5.     <title></title>  
  6.     <meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' />  
  7.    <script src='https://api.tiles.mapbox.com/mapbox-gl-js/v0.38.0/mapbox-gl.js'></script>  
  8.     <link href='https://api.tiles.mapbox.com/mapbox-gl-js/v0.38.0/mapbox-gl.css' rel='stylesheet' />  
  9.     <style>  
  10.         body { margin:0; padding:0; }  
  11.         #map { position:absolute; top:0; bottom:0; width:100%; }  
  12.     </style>  
  13. </head>  
  14. <body>  
  15.   
  16. <div id='map'></div>  
  17. <script>  
  18.      var map = new mapboxgl.Map({  
  19.         container: 'map', // container id  
  20.         style: {  
  21.             "version": 8,        
  22.             "sprite": "http://localhost:8080/mapboxTest/sprite",  
  23.             "glyphs": "http://localhost:8080/mapboxTest/mapbox本地化/font/{fontstack}/{range}.pbf",  
  24.             "sources": {  
  25.                 "osm-tiles": {  
  26.                     "type": "raster",  
  27.                     'tiles': [  
  28.                        "http://c.tile.openstreetmap.org/{z}/{x}/{y}.png"  
  29.                     ],  
  30.                     'tileSize': 256  
  31.                 }  
  32.             },  
  33.             "layers": [{  
  34.                 "id": "simple-tiles",  
  35.                 "type": "raster",  
  36.                 "source": "osm-tiles",  
  37.                 "minzoom": 0,  
  38.                 "maxzoom": 22  
  39.             }]  
  40.         },  
  41.         center: [114.28321838378906,30.54302215576172],  
  42.         zoom: 12  
  43.     });  
  44.     //添加要素  
  45.     map.on('load', function () {  
  46.         map.addSource("points", {  
  47.             "type": "geojson",  
  48.             "data": {  
  49.                 "type": "FeatureCollection",  
  50.                 "features": [{  
  51.                     "type": "Feature",  
  52.                     "geometry": {  
  53.                         "type": "Point",  
  54.                         "coordinates": [114.28321838378906,30.54302215576172]  
  55.                     },  
  56.                     "properties": {  
  57.                         "title": "test1",  
  58.                         "icon": "monument"  
  59.                     }  
  60.                 }]  
  61.             }  
  62.         });  
  63.         map.addLayer({  
  64.             "id": "points",  
  65.             "type": "symbol",  
  66.             "source": "points",  
  67.             "layout": {  
  68.                 "icon-image": "{icon}-15",  
  69.                "text-field": "{title}",  
  70.                 "text-font": ["YaHei"],  
  71.               "text-offset": [0, 0.6],  
  72.                "text-anchor": "top"  
  73.             }  
  74.         });  
  75.     });  
  76. </script>  
  77. </body>  
  78. </html>  

第二步,本地化图标。

大神已经说得很清楚了,在此不赘述。就是把请求到的sprite.png     sprite.png      sprite2x.png 放到tomcat的sprite文件夹下。然后把代码里的请求地址改为:[html] view plain copy

  1. http://localhost:8080/mapboxTest/sprite  

第三步,本地化字体。

用的是   https://github.com/mapbox/node-fontnik

首先,安装ubuntu虚拟机,之后安装python2.7与node.js v6.x,然后在node-fontnik文件夹下运行

npm install

之后在文件夹里加上你要转换的字体,如微软雅黑的tff文件

 

然后写一个testYH.js文件在文件夹fontnik里,

内容如下(来自猿基地):

[javascript] view plain copy

  1. <span style="font-size:14px;">var fontnik = require('.');  
  2.   
  3.   
  4. var fs = require('fs');  
  5.   
  6.   
  7. var path = require('path');  
  8.   
  9.   
  10.   
  11.   
  12.   
  13.   
  14. var convert = function(fileName, outputDir) {  
  15.   
  16.   
  17.     var font = fs.readFileSync(path.resolve(__dirname + "/" + fileName));  
  18.   
  19.   
  20.     output2pbf(font, 0, 255, outputDir);  
  21.   
  22.   
  23. }  
  24.   
  25.   
  26.   
  27.   
  28.   
  29.   
  30. function output2pbf(font, start, end, outputDir) {  
  31.   
  32.   
  33.     if (start > 65535) {  
  34.   
  35.   
  36.         console.log("done!");  
  37.   
  38.   
  39.         return;  
  40.   
  41.   
  42.     }  
  43.   
  44.   
  45.     fontnik.range({font: font, start: start, end: end}, function(err, res) {  
  46.   
  47.   
  48.         var outputFilePath = path.resolve(__dirname + "/" + outputDir + start + "-" + end + ".pbf");  
  49.   
  50.   
  51.         fs.writeFile(outputFilePath, res, function(err){  
  52.   
  53.   
  54.             if(err) {  
  55.   
  56.   
  57.                 console.error(err);  
  58.   
  59.   
  60.             } else {  
  61.   
  62.   
  63.                 output2pbf(font, end+1, end+1+255, outputDir);  
  64.   
  65.   
  66.             }  
  67.   
  68.   
  69.         });  
  70.   
  71.   
  72.     });  
  73.   
  74.   
  75. }  
  76.   
  77.   
  78. convert("./fonts/YaHei/MSYaHei.ttf", "./Microsoft YaHei/");  
  79.   
  80. 作者:猿基地  
  81. 链接:http://www.jianshu.com/p/23634e54487e  
  82. 來源:简书  
  83. 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处</span><span style="font-size: 16px;">。</span>  

之后运行: node mutest.js

就可以得到转换后的一堆pdf文件,把它们放在tomcat里的文件夹“YaHei”下面

之后,在html里加上:

[html] view plain copy

  1. "glyphs": "http://localhost:8080/mapboxTest/mapbox本地化/font/{fontstack}/{range}.pbf",  


[html] view plain copy

  1. <span style="font-size:14px;"> "text-font": ["YaHei"],</span>  

就可以啦!!!

 

转载于:https://my.oschina.net/u/1266171/blog/1545994

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值