satu label untuk jalan dua lajur (osm, qgis, postgis)

9

Saya memberi label osm-lines-layer (PostGIS) dengan simbol untuk jalan utama dan jalan raya. Sementara simbol untuk jalan utama ditempatkan dengan baik - dengan jarak yang cukup di antara masing-masing - jalan raya dua lajur dilabeli dengan satu label per lajur (seperti yang Anda lihat pada gambar).

Apakah mungkin, untuk mengatur sesuatu seperti jari-jari dari masing-masing label, tidak ada label lain dari jenis yang sama dapat ditempatkan? Atau bisakah saya mengatakan: beri label satu lajur dari jalan dua lajur?

Saya menggunakan qgis. OSM-Data diimpor ke PostGIS dengan osm2pgsql.

masukkan deskripsi gambar di sini

EDIT: Screenshot baru ini menunjukkan lebih detail:

masukkan deskripsi gambar di sini

PETA
sumber

Jawaban:

5

Untuk memberi label hanya satu lajur dari jalan dua lajur, saya menggunakan ungkapan:

 angle_at_vertex($geometry,1) <= 180

dan gunakan sebagai filter. Ini berfungsi karena dalam OSM setiap jalur ditarik ke arahnya.

Pada contoh di bawah ini saya menggunakan ekspresi angle_at_vertex($geometry,1)sebagai label dan pada gambar kedua ekspresi angle_at_vertex($geometry,1) <= 180sebagai filter.

Sebelum:

masukkan deskripsi gambar di sini

Setelah:

masukkan deskripsi gambar di sini

Pengaturan :

masukkan deskripsi gambar di sini

MrXsquared
sumber
Nah, itu satu trik kecil yang pintar. +1 juga untuk file QML.
geozelot
2

Saya tidak tahu skema tabel OSM, tetapi Anda meminta pertanyaan seperti ini:

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

Ini mungkin berhasil tetapi Akan lebih baik jika Anda memiliki id untuk label yang sama untuk arah yang berbeda, dan kemudian kueri ini akan bekerja 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;
    )
)
Francisco Valdez
sumber
Terlihat baik-baik saja, tetapi saya tidak terbiasa dengan pemrograman sql. Jadi, bisakah Anda menjelaskan apa "a.label_id", "a.label_id_1" dan seterusnya? Tabel saya memiliki ID (kolom osm_id) dan kolom (ref) untuk label (misalnya "A70").
PETA
Saya telah menjuluki tabel label sebagai "a" dan "b", dan kolom label_id (osm_id) sebagai label_id_1 dan label_id_2 dengan pernyataan "AS", saya harus karena dalam subquery terdalam kita memiliki dua kolom (label_id) dan dua tabel (label) dengan nama yang sama.
Francisco Valdez