根据 PostGIS 中的缩放级别合并和重新分段道路

问题描述 投票:0回答:1

我想在 openStreet 地图上画出好的/坏的道路。

我将所有道路分成小段,并根据道路损坏情况对其进行着色。当我缩小地图时,我会得到巨大的段列表,这会使地图变慢。

解决这个问题的想法是有 S M L XL XXL 段并根据放大/缩小来显示它。

目前我在数据库中有一个路段表:

id 几何
1 线串(lg,lt)
2 线串(lg,lt)
3 线串(lg,lt)

问题是:有没有好的方法来拆分和合并这个?

这个想法是编写一个递归 C# 脚本来合并小段,形成 M L XL 段。 有更好的方法吗?

c# .net postgresql postgis openstreetmap
1个回答
0
投票

您可以将线条融合在一起,并根据为每个缩放级别定义的目标长度重新分段。以下是一堆 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)
© www.soinside.com 2019 - 2024. All rights reserved.