两个车道的一个标签(osm,qgis,postgis)


9

我用主要道路和高速公路的符号标记了osm-lines-layer(PostGIS)。虽然主要道路的符号放置适当-彼此之间有足够的距离-但两车道的高速公路上每个车道都标有一个标签(如图中所示)。

是否可以在每个标签中都设置半径之类的东西,而不能放置其他相同类型的标签?还是我只能说:在两条车道的一条车道上贴上标签?

我正在使用qgis。OSM数据通过osm2pgsql导入到PostGIS。

在此处输入图片说明

编辑:此新屏幕截图显示了更多详细信息:

在此处输入图片说明

Answers:


5

为了仅标记两条车道的一条车道,我使用了以下表达式:

 angle_at_vertex($geometry,1) <= 180

并将其用作过滤器。之所以可行,是因为在OSM中,每个车道都是朝着自己的方向绘制的。

在下面的示例中,我将表达式angle_at_vertex($geometry,1)用作标签,在第二张图片中将表达式angle_at_vertex($geometry,1) <= 180用作过滤器。

之前:

在此处输入图片说明

后:

在此处输入图片说明

设置

在此处输入图片说明


现在,这是一个聪明的小把戏。也为QML文件+1。
geozelot

2

我不知道OSM表的架构,但是您要求这样的查询:

DELETE FROM labels WHERE label_id  IN (
    SELECT label_id_2 FROM (
        SELECT a.label_id AS label_id_1, b.label_id AS label_id_2 
        FROM labels AS a, labels AS b WHERE STDWithin(a.the_geom,b.the_geom, 0.001) and a.street = b.street and a.label_id != b.label_id
    )
)

这可能有效,但最好是为不同方向的同一标签设置一个ID,然后此查询可以100%起作用:

DELETE FROM labels WHERE label_id  IN (
    SELECT label_id_2 FROM (
        SELECT a.label_id AS label_id_1, b.label_id AS label_id_2 
        FROM labels AS a, labels AS b WHERE a.same_road_label_id = b.same_road_label_id;
    )
)

看起来不错,但是我对sql编程不熟悉。因此,您能否解释一下“ a.label_id”,“ a.label_id_1”等代表什么?我的表有一个ID(列osm_id)和该标签的列(ref)(例如“ A70”)。
MAP

我使用“ AS”语句将标签表昵称为“ a”和“ b”,将label_id列(osm_id)分别命名为label_id_1和label_id_2,因为在最深的子查询中,我们有两个列(label_id)和两个表(标签)具有相同的名称。
弗朗西斯科·瓦尔迪兹
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.