Mapbox gl js插入标记文本偏移间距

Posted

技术标签:

【中文标题】Mapbox gl js插入标记文本偏移间距【英文标题】:Mapbox gl js interpolate marker text-offset pitch 【发布时间】:2021-10-22 14:27:53 【问题描述】:

如何根据音高插入标记的文本偏移量?

插值非常适合:

'text-size': ['interpolate', ['linear'], ['zoom'], 10, 10, 18, 20],

但是对于文本偏移它不起作用。

'text-offset': ['interpolate', ['linear'], ['pitch'], 10, [0.2, 0], 18, [2, 0]],

我做错了什么?

'layout': 
          'text-field': ['get', 'name'],
          'text-font': [
                        'Open Sans Semibold',
                        'Arial Unicode MS Bold'
                       ],
          'text-size': ['interpolate', ['linear'], ['zoom'], 10, 10, 18, 20],
          'text-rotate': -90,
        //'text-offset': [2, 0],
          'text-offset': ['interpolate', ['linear'], ['pitch'], 10, [0.2, 0], 18, [2, 0]],
          'text-anchor': 'left',
          'text-allow-overlap': true
          ,
   paint: 
          "text-color": "rgba(0, 100, 50, 0.9)",
          

【问题讨论】:

【参考方案1】:

唯一允许的camera expression is zoom,因此您需要在每次移动后设置此text-offset值,如下所示:


const map = new mapboxgl.Map();

map.on('pitch', () => 

  console.log('A pitch event occurred.');

  map.setLayoutProperty(layerId, 'text-offset', newValue)

  // More about setLayoutProperty https://docs.mapbox.com/mapbox-gl-js/api/map/#map#setlayoutproperty
);

如果您发现性能问题,您可能需要将map.on('pitch') 更改为map.on('moveend'),并将map.getPitch() 与之前的音高值进行比较,以评估是否应该更改text-offset 值。以下是有关每个 API 的更多信息:

Map.getPitch

Map.event:moveend

Map.event:pitch

【讨论】:

以上是关于Mapbox gl js插入标记文本偏移间距的主要内容,如果未能解决你的问题,请参考以下文章

通过 mapbox gl js 向 mapbox 中的地图添加一些基本标记

如何在 mapbox-gl-js 的标记上添加“点击”侦听器

Mapbox GL JS 从默认标记更改颜色

Mapbox GL JS:如果单击标记,则忽略地图单击事件

如何在 Mapbox GL JS 中将图标添加到没有 geojsonlayer 的标记

mapbox-gl-js:针对给定的间距,将可见区域和方位调整到给定的线