hongfaqiu / MVTImageryProvider

Mapbox vector tiles(pbf) visulization on cesium
https://mvt-provider.opendde.com/
MIT License
54 stars 16 forks source link

Text labels overlap #6

Open ytl1446109935 opened 1 year ago

ytl1446109935 commented 1 year ago

大佬,我发现矢量切片的文字标签有时候会有重叠的现象,这种情况有办法改进吗? cesium: image mapbox: image

hongfaqiu commented 1 year ago

在切成瓦片的时候,多边形会被切割成许多部分。symbol-placement默认为‘point’,mapbox会为每一个多边形的切片都绘制一个标签,即使它们是同一个多边形。 这里的一个issue提到了这个问题Duplicate text label placement with vector tiles。 另外由于MVTImageryProvider用到的渲染器是在固定层级渲染单张瓦片并拼接的,并不会统一计算标签碰撞,所以很难从程序上解决这个问题。 一个可行的方案是创建为每个多边形创建质心点,渲染标签时使用点,而不是多边形

ytl1446109935 commented 1 year ago

在切成瓦片的时候,多边形会被切割成许多部分。symbol-placement默认为‘point’,mapbox会为每一个多边形的切片都绘制一个标签,即使它们是同一个多边形。 这里的一个issue提到了这个问题Duplicate text label placement with vector tiles。 另外由于MVTImageryProvider用到的渲染器是在固定层级渲染单张瓦片并拼接的,并不会统一计算标签碰撞,所以很难从程序上解决这个问题。 一个可行的方案是创建为每个多边形创建质心点,渲染标签时使用点,而不是多边形

了解,感谢大佬

ytl1446109935 commented 1 year ago

我对比了当前版本的代码,发现标签碰撞处理在symbol_sdf.fragment.glsl中,由fade_opacity参数控制。fade_opacity是在symbol_sdf.vertex.glsl由a_fade_opacity计算得到的。我尝试将当前版本的着色器迁移到老版本中,遇到了一些问题,感觉就差临门一脚了。想再请教一下。 这是迁移之后的报警(a_fade_opacity无法参与计算): F{~)`$LLIA_BBT_R FH)NE3

xzg5101 commented 1 year ago

我对比了当前版本的代码,发现标签碰撞处理在symbol_sdf.fragment.glsl中,由fade_opacity参数控制。fade_opacity是在symbol_sdf.vertex.glsl由a_fade_opacity计算得到的。我尝试将当前版本的着色器迁移到老版本中,遇到了一些问题,感觉就差临门一脚了。想再请教一下。 这是迁移之后的报警(a_fade_opacity无法参与计算): F{~)`$LLIA_BBT_R FH)NE3

想请教一下您最后解决这个问题了吗?我现在遇到的情况非常类似。