ST_ASMVTGEOM低缩放返回null:小型复杂多边形适配求助
低缩放级别下ST_ASMVTGEOM返回null的解决办法
问题根源
你的150平方英尺小多边形在低缩放级别的大范围bounds下,投影到MVT瓦片坐标系后的尺寸太小,低于默认可见阈值,导致ST_ASMVTGEOM返回null。另外,多边形的大量顶点在低分辨率瓦片的简化过程中,也可能被直接消解为空几何。
可行解决方案
先简化几何再生成MVT
用ST_SimplifyPreserveTopology精简多边形顶点数,保留拓扑结构的同时避免低分辨率下几何被过滤,结合keep_empty=true强制保留小几何:SELECT ST_ASMVTGEOM( ST_SimplifyPreserveTopology(your_polygon, 0.1), -- 容差根据坐标系单位调整,低缩放级别可设更大值 your_large_bounds, 4096, 256, true ) FROM your_table;转换为点或最小面元
低缩放级别下小多边形无法以面的形式被清晰识别,直接转为中心点或生成最小缓冲面,确保在瓦片内有可见尺寸:-- 用中心点替代多边形 SELECT ST_ASMVTGEOM( ST_Centroid(your_polygon), your_large_bounds, 4096, 256, true ) FROM your_table; -- 生成最小缓冲面,保证占至少1像素 SELECT ST_ASMVTGEOM( ST_Buffer(your_polygon, 1), -- 缓冲距离设为瓦片坐标系的1单位 your_large_bounds, 4096, 256, true ) FROM your_table;按缩放级别动态处理
根据请求的缩放层级分逻辑处理,兼顾显示效果和性能:SELECT CASE WHEN zoom_level < 12 THEN ST_ASMVTGEOM(ST_Centroid(your_polygon), your_bounds, 4096, 256, true) ELSE ST_ASMVTGEOM(your_polygon, your_bounds, 4096, 256, true) END AS mvt_geom FROM your_table;
内容的提问来源于stack exchange,提问作者Francis Ducharme
相关产品推荐
相关产品推荐

