关于矢量数据分层控制的随笔
虽是旧文,但每读都有所感触!
其实GeoServer缺少的就是数据分层(应该是提前确定好的分层策略,逻辑),技术实现上可以将其理解为属性分级(即属性过滤)。当然,此处所述的属性分级并不是唯一方案。
GeoServer尝试通过解析SLD来获取属性层面的Filter,以助于在数据检索层面就将bbox范围内的数据限制在一个尽可能小的范围内。同时还提供了一个将Mapbox Style转换为SLD的组件,用以兼容目前Mapbox技术体系
但是遗憾的是,目前网络上并没有相关的技术资料描述,若不是我从GeoServer源码中发现这一点,或许也还是会认为GeoServer只是结合影像金字塔技术与矢量瓦片技术的混合体。
其实在去年(2023年),我也曾提出,通过解析Mapbox Style文件以获取其分级策略,进一步在数据获取的时候进行数据过滤。但当时我自己都认为这条路线虽通但只能是临时手段,且在与相关人沟通后反响并不是很好。因为他还会涉及到Style更新后对应瓦片缓存的更新,即使是可以实现动态矢量瓦片技术的今天,缓存想必也是绝大多数场景下必不可少的组件之一吧。同时,他还引入了另一个问题,即与矢量瓦片的初衷不符。矢量瓦片之所以能够大行其道,其因有二:
- 其内容是矢量结构,能够很好的满足客户端交互的要求,同时大小相对更小(更高的性能,更好的交互)
- 可以实现一套瓦片,N种渲染,且渲染性能和效果极好。由此产生的也是造成了瓦片渲染的前移
那么,不管是基于SLD还是Mapbox Style等样式解析以求获取其分层策略的,怎么看都像是在拖着伟大的历史重担下缝缝补补,且造成了在矢量瓦片技术背景下,渲染和数据纠缠不清的耦合局面。私以为,在矢量瓦片的背景下,数据和渲染应该是清清白白的,边界分明的,数据就是数据,他需要且应该有自己的规则和行为(我觉得阿里或超图的数据库动态矢量瓦片构造金字塔时可指定的规则就是数据的规则和实现,也是分层的补充表达,即属性分级+自定义分层)。渲染同样如此,只不过其可操作空间将受限于给定的数据规则范围。
也就是需要将数据分层控制权限从目前前端配图中剥离出来,他可以不代表一定是最好,也不代表是正确的。或者说:目前这样的做法就是服务端不负责任的表现,客户端无可奈何的接受而已。以至于后来的我们贯认为,不就应该是这样吗?