วิธีขัดจังหวะเส้นชั้นความสูงใต้ป้ายกำกับระดับความสูง (แทนที่จะใช้บัฟเฟอร์ป้ายกำกับ)


32

มีวิธีการขัดจังหวะเส้นชั้นความสูงใต้ป้ายชื่อระดับความสูงหรือไม่?

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


ArcGIS? QGIS? กำหนดเอง?
Ragi Yaser Burhum

1
ฉันใช้ qgis สำหรับการติดฉลากรูปร่าง
MAP

คุณจะยอมรับคำตอบที่ต้องใช้ PostGIS หรือไม่
Scro

3
น่าเสียดายที่: ไม่ใช่ :) แต่มีวิธีแก้ไขปัญหาของ PostGIS หรือไม่
แผนที่

คำตอบ:


22

ใช่ทำได้ โดยปกติฉันจะแนะนำบัฟเฟอร์แบบโปร่งใสบางส่วน แต่ฉันเห็นว่าทำไมคุณถึงต้องการทำแผนที่แบบนี้

สิ่งนี้อาจช้าและคุณต้องตัดสินใจด้วยตนเองว่าต้องการให้ป้ายกำกับไปที่ใด - แต่พูดตามระบบการพิมพ์ตามลำดับนั่นไม่ใช่เรื่องเลวร้าย!

นี่คือภาพหน้าจอ ...

อย่างที่คุณเห็นไม่มีบัฟเฟอร์ แรสเตอร์ด้านล่างไม่ได้รับผลกระทบ ฉันได้รวมเส้นชั้นความสูงระดับกลางเรียวลงและจัดรูปแบบพวกเขาดังนั้นพวกเขาจึงแสดงเฉพาะเมื่อELEV% 50 <> 0

ตัวอย่างของเส้นชั้นความสูงที่ถูกขัดจังหวะ

ฉันเคยทำสิ่งนี้ใน QGIS 2.12 ... ระยะทางของคุณอาจแตกต่างกันไปตามรุ่นก่อนหน้า

ฉันถือว่าที่นี่คุณมีฟิลด์ "ELEV" ในแต่ละเส้นชั้นความสูง

แบ่งส่วนของเส้นชั้นความสูง

  1. ใช้การประมวลผลและอัลกอริทึม GRASS v.split.lengthเพื่อแบ่งรูปทรงของคุณออกเป็นส่วน ๆ ที่มีความยาวเท่ากัน คุณต้องเลือกความยาวซึ่งจะใกล้เคียงกับขนาดของฉลากในหน่วยแผนที่โดยสมมติว่าคุณใช้เมตร ที่นี่ฉันใช้ 200m

    ระวังด้วยสิ่งนี้เพราะมันจะทำให้ไฟล์ของคุณมีขนาดใหญ่ขึ้นมาก (โปรดทราบว่าคุณสมบัติจะนับในภาพหน้าจอ)

    ในการหลีกเลี่ยงปัญหานี้คุณอาจต้องการสร้างเฉพาะเส้นชั้นความสูงที่คุณต้องการจัดรูปแบบ (เช่นทุก 50 หรือ 100 เมตร) เพื่อหลีกเลี่ยงการประมวลผลเส้นชั้นความสูงระดับกลางทั้งหมด

  2. ชั้นนี้เพิ่มเขตข้อมูลจำนวนเต็ม 1 บาทเรียกว่าshowLabel เริ่มต้นที่ 0 หรือ NULL

  3. เปลี่ยนป้ายกำกับเพื่อแสดงเฉพาะในส่วนที่ฟิลด์นี้ตั้งค่าเป็น 1 ใช้สิ่งนี้สำหรับการแสดงออกของข้อความฉลาก ...

    if ( "showlabel" is not null, "ELEV", "")
    

    ฉันคิดว่าถ้า (การแสดงออกค่าจริงมูลค่าเท็จ)ค่อนข้างใหม่ หากใช้รุ่นเก่ากว่าคุณสามารถใช้CASE-ELSE

  4. เปลี่ยนสไตล์ของเส้นเพื่อให้มีการลากส่วนที่มีความยาวคงที่ทั้งหมดยกเว้นส่วนที่มีการแสดงฉลาก ดังนั้นให้ใช้การแสดงผลแบบอิงกฎกับกฎสองข้อ

    Rule 1: "showLabel" is null
    Black, 0% transparent
    
    Rule 2: "showLabel" is not null
    Any colour, 100% transparent
    

    ตอนนี้รูปทรงทั้งหมดจะแสดงตามค่าเริ่มต้น แต่ไม่มีป้ายกำกับ

    แก้ไขกลุ่มที่คุณต้องการแสดงป้ายกำกับด้วยตนเอง

    เข้าสู่โหมดแก้ไขและเลือกกลุ่มที่คุณต้องการให้แสดงค่า contour และตั้งค่าshowLabelเป็น 1 สำหรับคุณสมบัติที่เลือก คุณสามารถใช้Ctrl+ select (บน Ubuntu / Win, Cmd+ Ctrl+ คลิก / บน Mac?) เพื่อเลือกหลายส่วนเพื่อเพิ่มความเร็ว

    ตอนนี้ควร 'ตัด' รูปทรงที่คุณต้องการให้ป้ายชื่อแสดงและป้ายกำกับจะปรากฏในช่องว่าง

ในกรณีนี้การตั้งค่าป้ายกำกับของฉันคือ:

CRS: EPSG 27700 (Local UTM for UK, in meters)
Text size: 50 map units
Placement: Parallel, On Line

หวังว่าจะช่วย!


5
นี่เป็นทางออกเดียวที่ฉันสามารถจินตนาการได้ เจ็บปวดมากแม้ว่าจะมีป้ายกำกับมากมายฉันไม่สามารถจินตนาการทำแผนที่หัวน้ำใต้ดินของฉันทั้งหมด (หลายพันต่อปี) ด้วยวิธีนี้ คงจะดีถ้าในอนาคตสามารถทำได้ผ่านรูปแบบ - ส่วนที่ดีที่สุดคือรูปแบบเส้นที่กำหนดเองและการทำซ้ำป้าย + ออฟเซ็ต
Miro

2
แนวคิดบางอย่างที่ช่วยให้งานง่ายขึ้น: ในการเลือกหลายส่วนเพื่อวาดป้ายกำกับเลือกตามรูปหลายเหลี่ยมหรือเลือกด้วยมือเปล่าอาจเป็นประโยชน์ นอกจากนี้ aproach อื่นจะสร้างเลเยอร์เส้นรอยขีดข่วนเพื่อวาดเส้นที่ตัดรูปทรงแล้วทำการเลือกตามตำแหน่ง
Alexandre Neto

7

ฉันใช้ตัวเลือก "บัฟเฟอร์" บนแท็บ "การตั้งค่าป้ายกำกับ" (การใช้ปุ่มป้ายกำกับไม่ใช่ตัวเลือกป้ายกำกับเก่าบนกล่องโต้ตอบคุณสมบัติเลเยอร์) สิ่งนี้ไม่ได้ลบล้างเส้นชั้นความสูงตามที่ฉันจินตนาการว่าคุณต้องการจะทำ แต่มันทำให้ป้ายข้อความชัดเจน


4
ฉันไม่เคยคิดมาก่อน แต่มันจะสะดวกถ้าแทนที่จะกำหนดสีให้กับบัฟเฟอร์คุณสามารถเลือกที่จะใช้มันเป็น 'สิ่งที่น่าพิศวง' กับเลเยอร์ที่เลือก
Scro

4
รุ่นล่าสุดของ QGIS มีบัฟเฟอร์โปร่งใสดังนั้นคุณสามารถลดผลกระทบในส่วนอื่น ๆ ของแผนที่
นาธาน W

1
@MAP สิ่งที่น่าพิศวงจะลบพิกเซลด้านล่าง หากเป็นตัวเลือกในกรณีนี้คุณจะเลือกที่จะทำให้เลเยอร์ความสูงต่ำ
Scro

1
สิ่งที่น่าพิศวง - ระยะ ESRI คือ "การหลอกลวง" resources.arcgis.com/en/help/main/10.1/index.html#//...
ไมค์

1
@MAP - สปอนเซอร์ผู้พัฒนาหรือส่งคำขอคุณสมบัติแล้วรอรับความเมตตากรุณาจากผู้อื่น :)
Scro

5

ฉันคิดว่าสิ่งที่ใกล้เคียงที่สุดที่จะได้รับจากความสามารถของ QGIS ในปัจจุบันคือการใช้เอฟเฟกต์halo (หรือพื้นหลัง) ด้วยสีที่มาจากตารางซึ่งจะขึ้นอยู่กับค่าระดับความสูงและโทนสีที่เหมือนกับตารางพื้นฐาน แน่นอนว่าสิ่งนี้จะไม่นำมาพิจารณาที่เนินเขาและทุกอย่างอื่นจะต่ำกว่ารัศมีในแผนที่ ตัวอย่างสีแบบสุ่ม: สีแบบสุ่มสำหรับผลรัศมีของฉลาก ด้วยโค้ดบางส่วนสามารถเขียนใหม่เป็นฟังก์ชันเพื่อสะท้อนสีของกริด

ในทางทฤษฎีมันควรจะเป็นไปได้ที่จะใช้รูปแบบเส้นที่กำหนดเองและป้ายซ้ำ + ชดเชย น่าเสียดายที่ไม่มีการตั้งค่าการชดเชยฉลาก

  • หลังจากการทดสอบบางอย่างเป็นไปไม่ได้ที่จะบังคับให้ QGIS เข้มงวดกับการวางฉลากในช่วงเวลาที่แน่นอนและไม่มีที่อื่น (ไม่มีการชดเชยออฟเซ็ตเริ่มต้น)
  • มันเป็นไปไม่ได้ที่จะสร้างรูปแบบเส้นที่กำหนดเองโดยมีศูนย์เป็นมม. เพื่อให้พื้นที่เริ่มต้นออฟเซ็ตเช่น 20 บรรทัด - 10 ช่องว่าง - 70 บรรทัด - 0 ช่องว่าง - ดังนั้นฉลากจะถูกวางไว้ทุก ๆ 100 มม. ตรงกลางของทุก ๆ 10 มม. ของหลุม

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


2

หลังจากพบปัญหาเดียวกันเมื่อเร็ว ๆ นี้ฉันได้รวบรวมสคริปต์ QGIS Python เพื่อยกระดับอย่างหนัก สคริปต์รวมถึงข้อมูลการทดสอบ (สหราชอาณาจักร), Readme (คำแนะนำ) และสไตล์ชีตที่ใช้สามารถดูได้ที่https://github.com/pjgeng/Contour-Labels

ในระยะสั้นสคริปต์จะใช้สองเวกเตอร์เลเยอร์เป็นอินพุต - ชั้นรูปร่างที่มีคำอธิบายประกอบและเลเยอร์ "เส้นบอกแนว" หลังประกอบด้วย polylines ตัดกันรูปทรงที่ตำแหน่งฉลากที่ต้องการ

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

โคลสอัพของผลสุดท้าย

วิธีการใช้งานได้ดีโดยเฉพาะอย่างยิ่งหากผู้ใช้จำเป็นต้องจัดทำแผนที่รูปร่างในช่วงเวลาที่แตกต่างกันในพื้นที่เดียวกัน (เช่นคำแนะนำไม่เปลี่ยนแปลง) ข้อเสียเปรียบคือไม่สามารถเปลี่ยนตำแหน่งของฉลากได้เมื่อสคริปต์เสร็จสิ้น สำหรับเรื่องนี้ผู้ใช้จะต้องปรับเส้นไกด์และรันสคริปต์อีกครั้งกับอินพุตต้นฉบับ ก่อนหน้านี้ฉันเคยทำงานกับบัฟเฟอร์รอบ ๆ ฉลากเพื่อสร้างเอฟเฟกต์ที่ถูกขัดจังหวะ แต่สิ่งนี้กลับกลายเป็นสิ่งที่ไม่พึงประสงค์ในแผนที่เวกเตอร์ที่ขับเคลื่อนด้วยข้อมูล

น่าเสียดายที่ฉันไม่สามารถเพิ่มรูปภาพได้อีกในเวลานี้เพื่อจัดทำเอกสารหรือแสดงขั้นตอนเพิ่มเติม

PS: หากใช้เลเยอร์สไตล์ที่ให้ไว้ในที่เก็บผู้ใช้อาจต้อง "เปิดใช้งาน" ฟิลด์ที่กำหนดเองสำหรับ "การหมุน", "แสดงฉลาก" และ "แสดงเสมอ" ในเมนูการติดฉลาก ในการติดตั้ง QGIS สิ่งเหล่านี้จะถูกนำไปใช้โดยอัตโนมัติจากสไตล์ชีท - ฉันยังไม่พบสาเหตุที่เป็นสาเหตุ


1

คุณจำหัวข้อนี้ได้ไหม วิธีเดียวที่ฉันสามารถนึกถึงการแก้ไขปัญหาของคุณคือการวางเลเยอร์ contour ของคุณด้วยเลเยอร์ contour clipped ใช้สิ่งนี้เพื่อทำเลเบลและเปลี่ยนสีของเส้นให้เป็นสิ่งที่เป็นกลางที่จะปกปิด contours ภายใต้เลเบล หนึ่งความหวังโดยไม่ล่วงล้ำเกินไป N.

เพิ่มในภายหลัง: มันอาจจะคุ้มค่าที่จะอ่านกระทู้นี้เช่นกันคำตอบที่สอง บางทีการแบ่งเส้นชั้นความสูงอาจเป็นคำตอบบางทีการใช้เลเยอร์บัฟเฟอร์ที่ใช้เพื่อตัดรูปทรง?


0

รายการบล็อก ESRI: http://blogs.esri.com/esri/arcgis/2011/11/28/variable-depth-masking-contour-label-example/ ตัวอย่าง

การปิดบังเชิงลึกแบบแปรผันสำหรับป้ายกำกับรูปร่างมีสามขั้นตอน:

1 การสร้างคำอธิบายประกอบจากป้ายกำกับ 2 การใช้เครื่องมือมาส์กคุณสมบัติโครงร่างเพื่อสร้างมาสก์และ 3 ใช้ตัวเลือกการวาดขั้นสูง> การตั้งค่าการปิดบังเพื่อระบุเลเยอร์มาสก์ที่จะปิดบัง


สิ่งนี้แสดงให้เห็นว่าสามารถนำไปใช้ได้อย่างไร แต่ไม่ได้ตอบคำถาม
อันเดอร์พาร์ก
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.