【mapboxgl】mapboxgl本地化字体打包部署问题

1.涉及部分代码

        开发了一个点位展示的系统,大概2000+点位,symbol样式代码如下:

	import circleImage from '@/assets/icons/controlImg/circle.png'
            //添加数据源中的各个图层
			map.value.loadImage(
				circleImage,
				function (error, image) {
					if (error) throw error;
					map.value.addImage('circle', image);

					map.value.addLayer({
						'id': "点",
						'type': 'symbol',
						'source': 'control',
                        // source-layer和mvt服务中的图层名对应
						"source-layer": "点图层",
						'layout': {
							'icon-image': 'circle',
							'text-field': ['get', 'pointname'],
							'text-font': ['Arial'],
							'icon-size': 0.09, // 图标大小设置为0.1倍
							"text-size": 14,
							'text-offset': [0, 0.5],
							'text-anchor': 'top'
						},
						"paint": {
							"text-color": "#1059ad",
							"text-halo-color": "white",
							"text-halo-width": 0.2,
						}
					});
				}
			);

2.问题

        在源码启动项目时没有遇到问题:但是打包用nginx发布出来后访问时,symbol图片只有部分显示,报错如下:

3.问题探索

        在技术群咨询群友及百度查了一下,可能是由于图片资源路径问题

        (1)尝试nginx静态服务的方式:

                直接接入图片路径"http:localhost:1117/icon/circle.png"

        (2)采用图片转base64的方式:

                直接加载:

        

(3)以上方式均未解决问题。

4.进一步排除

        将点位采用基础样式进行展示,去除字体label相关样式,打包部署后可以正常显示图片,那么就是text字体相关存在问题

            //添加数据源中的各个图层
			map.value.loadImage(
				circleImage,
				function (error, image) {
					if (error) throw error;
					map.value.addImage('circle', image);

					map.value.addLayer({
						'id': "点",
						'type': 'symbol',
						'source': 'control',
                        // source-layer和mvt服务中的图层名对应
						"source-layer": "点图层",
						'layout': {
							'icon-image': 'circle',
							// 'text-field': ['get', 'pointname'],
							// 'text-font': ['Arial'],
							'icon-size': 0.09, // 图标大小设置为0.1倍
							// "text-size": 14,
							// 'text-offset': [0, 0.5],
							// 'text-anchor': 'top'
						},
						// "paint": {
						// 	"text-color": "#1059ad",
						// 	"text-halo-color": "white",
						// 	"text-halo-width": 0.2,
						// }
					});
				}
			);

5.问题解决

        经过以上排查发现问题是由初始化地图时style中的glyphs路径有问题:

    map.value = new mapboxgl.Map({
		container: 'map',
		//为map构造一个空的style
		style: {
			version: 8,
			sources: {},
			layers: [],
			glyphs: "/public/mapbox-gl/fonts/{fontstack}/{range}.pbf"
		},
		center: [116.405419, 39.923568],
		zoom: 11,
		renderWorldCopies: false,
	})

        将路径修改为经nginx发布后的本地字体文件地址相关的链接,问题解决。

    map.value = new mapboxgl.Map({
		container: 'map',
		//为map构造一个空的style
		style: {
			version: 8,
			sources: {},
			layers: [],
			glyphs: "http://localhost:1117/mapbox-gl/fonts/{fontstack}/{range}.pbf"
		},
		center: [116.405419, 39.923568],
		zoom: 11,
		renderWorldCopies: false,
	})

  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
对于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最新版本的本地化部署,并且加载和设置本地字体
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值