2車線道路用の1つのラベル(osm、qgis、postgis)


9

私はosm-lines-layer(PostGIS)に一次道路と高速道路の記号を付けました。主要道路のシンボルは適切に配置されていますが(それぞれの間に十分な距離があります)、2車線の高速道路には車線ごとに1つのラベルが付けられています(画像で確認できます)。

同じタイプの他のラベルを配置できない範囲内で、各ラベルから半径のようなものを設定することは可能ですか?または、私は言うことができます:2車線の道路の1車線にラベルを付けますか?

私はqgisを使用しています。OSM-Dataは、osm2pgsqlを使用してPostGISにインポートされます。

ここに画像の説明を入力してください

編集:この新しいスクリーンショットは詳細を示しています:

ここに画像の説明を入力してください

回答:


5

2車線の道路の1車線のみにラベルを付けるには、次の式を使用します。

 angle_at_vertex($geometry,1) <= 180

フィルターとして使用します。これは、OSMでは各レーンがそれぞれの方向に描画されるため機能します。

以下の例では、式angle_at_vertex($geometry,1)をラベルとして使用し、2番目の図では式angle_at_vertex($geometry,1) <= 180をフィルターとして使用しています。

前:

ここに画像の説明を入力してください

後:

ここに画像の説明を入力してください

設定

ここに画像の説明を入力してください


これが賢い小さなトリックの1つです。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;
    )
)

見た目はいいが、ImはSQLプログラミングに精通していない。では、「a.label_id」、「a.label_id_1」などが何を表すのか説明していただけますか?私のテーブルには、ラベル(たとえば「A70」)のID(列osm_id)と列(ref)があります。
MAP

「AS」ステートメントを使用して、labelsテーブルに「a」と「b」というニックネームを付け、label_id column(osm_id)をlabel_id_1とlabel_id_2としました。最も深いサブクエリには2つの列(label_id)と2つのテーブルがあるためです。 (ラベル)同名。
フランシスコバルデス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.