MapBox GL本地化开发部署

最近项目中需要使用MapBox GL进行地图渲染,用户需求是在局域网中运行,所以需要将MapBox GL进行本地化开发及部署。下面记录下本地开发部署的流程和方法。

官方给定的资料

1.官方示例中初始化一个简单地图的代码如下:

<script>
	mapboxgl.accessToken = '<your access token here>';
        var map = new mapboxgl.Map({
            container: 'map', // container id
            style: 'mapbox://styles/mapbox/streets-v11', // stylesheet location
            center: [-74.5, 40], // starting position [lng, lat]
            zoom: 9 // starting zoom
});
</script>

从代码中看出,本地化开发,只需将style本地化即可。
2.在官方style讲解中,style包含以下内容。https://docs.mapbox.com/mapbox-gl-js/style-spec/

{
    "version": 8,
    "name": "Mapbox Streets",
    "sprite": "mapbox://sprites/mapbox/streets-v8",
    "glyphs": "mapbox://fonts/mapbox/{fontstack}/{range}.pbf",
    "sources": {...},
    "layers": [...]
}

参数说明:

  • version:样式版本,当前必须必须设置8。
  • name:样式名称,设置一个可读的名称描述即可。
  • sprite:mapbox地图使用的图标。
  • glyphs:mapbox地图使用的标注字体。
  • sources: mapbox地图使用的地图服务资源定义。
  • layers: mapbox地图使用的图层定义。

所以本地化开发部署,只需对sprite、glyphs、sources、layers进行本地部署即可。

sources本地化

官网说明中,sources支持vector、raster、raster-dem、geojson、image、video格式数据。下面以raster为例加载geoserver的wms服务。

{
        'type': 'raster',
        'tiles': [
          url + '&version=1.1.0&request=GetMap&layers=' + layers + '&styles=&bbox={bbox-epsg-3857}&width=256&height=256&srs=EPSG:3857&format=image/png&TRANSPARENT=TRUE'
        ],
        'tileSize': 256
}

其中,url为wms服务的地址,layers为wms图层名称。

layers本地化

官方介绍layers如下:
A style’s layers property lists all of the layers available in that style. The type of layer is specified by the “type” property, and must be one of background, fill, line, symbol, raster, circle, fill-extrusion, heatmap, hillshade.
此处可以背景为例:

 'layers': [{
        'id': 'background',
        'type': 'background',
        'paint': {
          'background-color': '#FFFFFF'
        },
        'interactive': true
 }]

sprite本地化

mapbox提供了一个spritezero工具,用于自定义生成mapbox的sprite,其GitHub地址如下:https://github.com/mapbox/spritezero-cli
如若不想编译GitHub上的程序,可关注下方公众号,回复“sprite”,发您我百度网盘上编译好的程序。

glyphs本地化

mapbox中使用的字体,也是pbf格式而不是tff格式,需要使用工具转换,查询资料发现,genfontgl这个node库可以执行将tff文件转成mapbox可用的pbf字体。
若不想自己转化,关注下方公众号,回复“glyphs”,发您我转化好的字体库连接。

至此所有本地化准备工作已完成,下面开始使用这些本地库

本地开发示例

<!DOCTYPE html>
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title>hello world</title>
		<meta charset="utf-8" />
		<script src='./libs/mapbox-gl.js'></script>
		<link href='./libs/mapbox-gl.css' rel='stylesheet' />
		<style>
			body {
				margin: 0;
				padding: 0;
			}

			#map {
				position: absolute;
				top: 0;
				bottom: 0;
				width: 100%;
			}
		</style>
	</head>
	<body>
		<div id='map'></div>
		<script>
			var map = new mapboxgl.Map({
				container: 'map',
				style: {
					"version": 8,
					"name": "Mapbox Streets",
					"sprite": "http://localhost:8080/mapbox_build/sprite/sprite",
					"glyphs": "http://localhost:8080/mapbox_build/fonts/{fontstack}/{range}.pbf",
					"sources": {
						"world-map": {
							"type": "raster",
							'tiles': [
								 "http://localhost:8080/geoserver/smartcity/wms?service=WMS&version=1.1.0&request=GetMap&layers=world-map&styles=&bbox={bbox-epsg-3857}&width=256&height=256&srs=EPSG:3857&format=image/png&TRANSPARENT=TRUE'
							],
							'tileSize': 256
						}
					},
					"layers": [{
						"id": "XXXXXXXXX",
						"type": "raster",
						"source": "world-map",
						"source-layer": "world-map"
					}]
				},
				center: [-96, 37.8],
				zoom: 3
			});			
		</script>
	</body>
</html>

至此,所有资源均已本地化,可以进行本地化开发部署了。但,MapBox线上服务我们使用不了,所有的资源都需要自己定制开发。

扫描下方二维码,关注微信公众号,精彩内容同步更新,有问题可随时交流
微信公众号

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
对于mapboxgl最新版本的本地化部署,你可以按照以下步骤完成: 1. 下载最新版本的mapboxgl:你可以从mapbox官方网站下载最新版本的mapboxgl的JavaScript库。 2. 生成本地字体:你可以使用Mapbox Studio或者tileserver-gl来生成本地字体。以下是使用Mapbox Studio的步骤: - 在Mapbox Studio中创建一个地图风格。 - 在"Style"选项卡中,点击"Customize"按钮。 - 在左侧面板中,选择"Fonts"选项卡。 - 在右侧面板中,选择"Upload a new font"并上传你的字体文件。 - 点击"Publish"按钮来发布你的地图风格。 如果你选择使用tileserver-gl来生成本地字体,请参考tileserver-gl的文档进行操作。 3. 加载本地字体并设置:在你的mapboxgl应用程序中,你可以通过以下步骤加载和设置本地字体: - 在HTML文件中,将你生成的本地字体文件(通常是一个`.ttf`或`.otf`文件)放置在与HTML文件相同的目录下。 - 在JavaScript文件中,使用`mapboxgl.setRTLTextPlugin()`方法来设置本地字体。例如: ```javascript mapboxgl.setRTLTextPlugin('path/to/your/font.ttf', null, true); ``` 这个方法接受三个参数:字体文件的路径、字体对应的语言代码(可选)和一个布尔值,用于指定是否启用本地字体的自动检测(`true`表示启用)。 注意:确保在调用`mapboxgl.setRTLTextPlugin()`方法之前,已经加载了mapboxgl。 通过以上步骤,你可以完成mapboxgl最新版本的本地化部署,并且加载和设置本地字体。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值