我想在 openStreet 地图上画出好的/坏的道路。
我将所有道路分成小段,并根据道路损坏情况对其进行着色。当我缩小地图时,我会得到巨大的段列表,这会使地图变慢。
解决这个问题的想法是有 S M L XL XXL 段并根据放大/缩小来显示它。
目前我在数据库中有一个路段表:
id | 几何 |
---|---|
1 | 线串(lg,lt) |
2 | 线串(lg,lt) |
3 | 线串(lg,lt) |
问题是:有没有好的方法来拆分和合并这个?
这个想法是编写一个递归 C# 脚本来合并小段,形成 M L XL 段。 有更好的方法吗?
您可以将线条融合在一起,并根据为每个缩放级别定义的目标长度重新分段。以下是一堆 5 米长线的示例,其中
lt
位于 0
和 60
之间:demo
select zoom_level
,ST_AsText((
ST_DumpSegments(
ST_Segmentize(
ST_Simplify(ST_Linemerge(ST_Collect(geom),true),0)
,segment_length))).geom)
from your_table
cross join (values ('S',10) ,('M',15),('L',30),('XL',40),('XXL',60))
as zoom_levels(zoom_level, segment_length)
group by zoom_level,segment_length
order by zoom_level;
缩放级别 | st_astext |
---|---|
L | 线串(0 0,0 30) |
L | 线串(0 30,0 60) |
M | 线串(0 0,0 15) |
M | 线串(0 15,0 30) |
M | 线串(0 30,0 45) |
M | 线串(0 45,0 60) |
S | 线串(0 0,0 10) |
S | 线串(0 10,0 20) |
S | 线串(0 20,0 30) |
S | 线串(0 30,0 40) |
S | 线串(0 40,0 50) |
S | 线串(0 50,0 60) |
XL | 线串(0 0,0 30) |
XL | 线串(0 30,0 60) |
XXL | 线串(0 0,0 60) |