одна мітка для двосмугових доріг (osm, qgis, postgis)


9

Я позначив свій шар осм-ліній (PostGIS) символами для первинних доріг та автомобільних доріг. Хоча символи для первинних доріг добре розміщені - з достатньою відстані між ними - двосмугова автомагістраль позначена однією міткою на смугу руху (як ви бачите на зображенні).

Чи можливо встановити щось на зразок радіуса від кожної мітки, не можна розміщувати жодну іншу мітку того ж типу? Або я можу просто сказати: позначте одну смугу дороги з двома смугами?

Я використовую qgis. Дані OSM імпортуються в PostGIS з osm2pgsql.

введіть тут опис зображення

EDIT: Цей новий знімок екрана показує більше деталей:

введіть тут опис зображення

Відповіді:


5

Для позначення лише однієї смуги дороги з двома смугами я використовую вираз:

 angle_at_vertex($geometry,1) <= 180

і використовувати його як фільтр. Це працює, тому що в OSM кожна смуга намальована в їх напрямку.

У наведеному нижче прикладі я використовую вираз angle_at_vertex($geometry,1)як мітка, а на другому малюнку вираз angle_at_vertex($geometry,1) <= 180як фільтр.

Перед:

введіть тут опис зображення

Після:

введіть тут опис зображення

Налаштування :

введіть тут опис зображення


Тепер це одна хитра хитрість. +1 також для файлу QML.
геозелот

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
    )
)

Це може працювати, але було б краще, якщо у вас є ідентифікатор для однієї і тієї ж мітки для різних напрямків, і тоді цей запит працював би на 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" тощо? У моїй таблиці є ідентифікатор (стовпець osm_id) та стовпець (ref) для мітки (наприклад, "A70").
КАРТА

Я називав таблицю міток як "a" і "b", а label_id стовпець (osm_id) як label_id_1 і label_id_2 з висловом "AS", мені довелося, тому що в найглибшому підзапиті у нас є два стовпці (label_id) і дві таблиці (етикетки) з такою ж назвою.
Франциско Вальдес
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.