การติดฉลากอัตโนมัติเป็นปัญหาที่ยากมาก แต่รูปทรงของฟีเจอร์นั้นไม่ได้เลวร้ายนัก
แม้ว่าคุณจะได้รับตำแหน่งเพื่อทำงานอย่างเพียงพอเกือบตลอดเวลา แต่ก็มีข้อยกเว้น บางส่วนของสิ่งเหล่านี้คุณจะสังเกตเห็นและอาจสามารถระบุได้ คนอื่น ๆ ที่คุณจะไม่สังเกตเห็นเมื่อสร้างแผนที่ขนาดใหญ่หรือชุดภาพต่อเนื่องเพราะคุณไม่สามารถเทนิ้วของคุณลงบนแผนที่ทุกขนาดได้ เกือบทุกครั้งที่คุณต้องการย้ายป้ายกำกับที่วางโดยอัตโนมัติด้วยตนเองจากมุมมองของการทำแผนที่
ตามที่ฉันแนะนำในความคิดเห็นของฉันฉันจะทำให้ปัญหาง่ายขึ้นสำหรับโปรแกรมการติดฉลาก ในกรณีนี้ฉันจะทำสิ่งนี้โดยกำหนดแม่น้ำของฉันเป็นมุมมองตาราง * โดยมีรูปเรขาคณิตของแม่น้ำถูกตัดเพื่อเคารพขอบเขตของทะเลสาบ ด้วยวิธีนี้ไม่มีลักษณะแม่น้ำภายในทะเลสาบที่จะติดป้ายและไม่มีการชนกันของฉลาก
* ฉันถือว่าการใช้ RDBMS ที่นี่เช่น PostgreSQL / PostGIS เพื่อความสะดวกและความสามารถในการอัพเดทแหล่งข้อมูลที่เชื่อถือได้ของคุณเท่านั้น แต่คุณยังสามารถทำงานล่วงหน้าด้วยไฟล์คงที่เพื่อตัดและลบฟีเจอร์ แต่ฉันไม่แนะนำสิ่งนี้หากคุณวางแผนที่จะกลับมาใช้แผนที่อีกครั้ง
ตัวอย่าง:
เริ่มต้นด้วยสองไฟล์รูปร่าง (อาจเป็นตารางฐานข้อมูล) ของแม่น้ำและทะเลสาบโดยแม่น้ำที่ตัดกับทะเลสาบและทำให้เกิดปัญหาการติดฉลากที่ยากต่อการแก้ไขอย่างสมบูรณ์และมั่นใจ:
นำสิ่งเหล่านี้มาไว้ใน Postgres หากคุณต้องการใช้shp2pgsql :
shp2pgsql -s 4326 /data/lake public.lakes | psql -d mydb
shp2pgsql -s 4326 /data/river public.rivers | psql -d mydb
จากนั้นกำหนดมุมมองด้วยST_Difference :
CREATE OR REPLACE VIEW rivers_clipped AS
SELECT r.id, ST_Difference(r.geom, l.geom) AS geom, r.name
FROM public.rivers AS r, public.lakes AS l;
เพิ่มมุมมองในเค้าโครงของคุณ:
แม้ว่าปัญหาในตัวอย่างของฉันจะถูกสร้างขึ้นโดยเจตนา แต่รูปแบบในเลเยอร์แม่น้ำสองสาย (ต้นฉบับและมุมมอง) จะเหมือนกันและวางไว้ที่ด้านบนสุดของทะเลสาบตามลำดับการวาด เมื่อคุณอัปเดตรูปทรงทะเลสาบหรือแม่น้ำคุณไม่จำเป็นต้องทำอะไรมากไปกว่ารีเฟรชการเรนเดอร์