หนึ่งป้ายสำหรับถนนสองเลน (osm, qgis, postgis)


9

ฉันติดป้ายชื่อ osm-lines-layer (PostGIS) ของฉันพร้อมสัญลักษณ์สำหรับถนนสายหลักและมอเตอร์เวย์ ในขณะที่สัญลักษณ์สำหรับถนนสายหลักนั้นถูกวางไว้อย่างดีโดยมีระยะห่างระหว่างกันพอสมควรมอเตอร์เวย์สองเลนจะมีป้ายกำกับหนึ่งป้ายต่อหนึ่งเลน (ดังที่คุณเห็นในภาพ)

เป็นไปได้ไหมที่จะตั้งค่าบางอย่างเช่นรัศมีจากป้ายกำกับแต่ละป้ายจะไม่สามารถวางป้ายประเภทเดียวกันอื่น ๆ ได้ หรือฉันจะพูดได้ว่าติดป้ายถนนเลนเดียวของถนนสองเลน?

ฉันกำลังใช้ qgis OSM-Data ถูกนำเข้าไปยัง PostGIS ด้วย osm2pgsql

ป้อนคำอธิบายรูปภาพที่นี่

แก้ไข: ภาพหน้าจอใหม่นี้แสดงรายละเอียดเพิ่มเติม:

ป้อนคำอธิบายรูปภาพที่นี่

คำตอบ:


5

หากต้องการระบุป้ายกำกับเพียงถนนเดียวของถนนสองเลนที่ฉันกำลังใช้นิพจน์:

 angle_at_vertex($geometry,1) <= 180

และใช้เป็นตัวกรอง สิ่งนี้ใช้งานได้เพราะใน OSM แต่ละเลนถูกวาดในทิศทางของพวกเขา

ในตัวอย่างด้านล่างฉันใช้นิพจน์angle_at_vertex($geometry,1)เป็นป้ายกำกับและในภาพที่สองนิพจน์angle_at_vertex($geometry,1) <= 180เป็นตัวกรอง

ก่อน:

ป้อนคำอธิบายรูปภาพที่นี่

หลังจาก:

ป้อนคำอธิบายรูปภาพที่นี่

การตั้งค่า :

ป้อนคำอธิบายรูปภาพที่นี่


ตอนนี้เป็นเคล็ดลับเล็ก ๆ ที่ฉลาด +1 ด้วยสำหรับไฟล์ QML
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
    )
)

สิ่งนี้อาจใช้งานได้ แต่จะดีกว่าถ้าคุณมีรหัสสำหรับป้ายกำกับเดียวกันสำหรับทิศทางที่ต่างกันและจากนั้นข้อความค้นหานี้จะใช้งานได้ 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) และคอลัมน์ (อ้างอิง) สำหรับป้ายกำกับ (ตัวอย่างเช่น "A70")
แผนที่

ฉันตั้งชื่อตารางว่า "a" และ "b" และ label_id (osm_id) เป็น label_id_1 และ label_id_2 ด้วยคำสั่ง "AS" ฉันต้องเพราะในแบบสอบถามย่อยที่ลึกที่สุดเรามีสองคอลัมน์ (label_id) และสองตาราง (ป้ายกำกับ) ที่มีชื่อเดียวกัน
Francisco Valdez
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.