ไม่ใช่วิธีการแก้ปัญหาที่สมบูรณ์แบบ แต่คุณสามารถใช้ประโยชน์จากเครื่องสร้างรูปทรงเรขาคณิตซึ่งเพิ่มเส้นที่มองเห็นได้เพื่อเป็นตัวแทนจุดตัด จากนั้นคุณสามารถตั้งค่านี้ให้เหลื่อมคุณลักษณะบรรทัดเดิมได้
เพิ่มเลเยอร์สัญลักษณ์ใหม่โดยคลิกที่เครื่องหมายบวกและเลือกGeometry generator
ประเภทเลเยอร์สัญลักษณ์ ตั้งค่าประเภท geoemtry เป็นLineString / MultiLineString
และใช้นิพจน์ต่อไปนี้:
intersection($geometry, geometry(get_feature( 'polygonLayer','fieldName','value')))
คุณจะต้องเพิ่มรายละเอียดเกี่ยวกับรูปหลายเหลี่ยมเฉพาะที่:
polygonLayer
เป็นชื่อของเลเยอร์รูปหลายเหลี่ยมของคุณ
fieldName
เป็นชื่อของฟิลด์
value
คือค่าคุณสมบัติของรูปหลายเหลี่ยมเฉพาะของคุณ
โปรดทราบว่าหากต้องการระบายสีเส้นภาพคุณอาจต้องทำจากคุณสมบัติเอฟเฟ็กต์วาด :
นี่เป็นผลลัพธ์ (โปรดสังเกตว่าเส้นภาพไม่ทับเส้นเดิมอย่างสมบูรณ์ดังนั้นฉันจึงปรับค่าออฟเซ็ตเล็กน้อย):
และไม่มีรูปหลายเหลี่ยม:
แก้ไข:
หากคุณต้องการใช้สิ่งนี้สำหรับคุณลักษณะแต่ละบรรทัดที่ตัดกันคุณลักษณะรูปหลายเหลี่ยมให้ไปที่ตัวแก้ไขฟังก์ชั่นและใช้ฟังก์ชั่นต่อไปนี้ (เปลี่ยนชื่อของpolygon example_2
เพื่อให้ตรงกับชื่อของชั้นรูปหลายเหลี่ยมของคุณ):
from qgis.core import *
from qgis.gui import *
@qgsfunction(args='auto', group='Custom')
def func(feature, parent):
polygon_layer = QgsMapLayerRegistry.instance().mapLayersByName( "polygon example_2" )[0]
feat_list = []
geoms = QgsGeometry.fromWkt('GEOMETRYCOLLECTION()')
for polygon_feat in polygon_layer.getFeatures():
if feature.geometry().intersects(polygon_feat.geometry()):
intersection = feature.geometry().intersection(polygon_feat.geometry())
feat_list.append(intersection)
for x in feat_list:
geoms = geoms.combine(x)
return geoms
คลิกโหลดแล้วไปที่การแสดงออกfunc()
แท็บและพิมพ์ หวังว่าผลลัพธ์ควรมีลักษณะดังต่อไปนี้ (ใช้คุณสมบัติของสไตล์เดียวกันที่กล่าวถึงข้างต้น):