ระบุแอตทริบิวต์ที่ซ้ำกันในสนามโดยใช้ QGIS?


27

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

มีวิธีการอื่นในการทำเช่นนี้โดยใช้ตัวสร้างคำค้นหาหรือไม่


5
หากคุณต้องการบังคับใช้ความเป็นเอกลักษณ์ฉันจะแนะนำให้ใช้ฐานข้อมูลเช่น Postgres / PostGIS, Spatailite
Nathan W

ฉันมีปัญหาที่คล้ายกัน ฉันมีหนึ่งไฟล์รูปร่างขนาดใหญ่ที่มี UTM กำลังสองซึ่งบางสปีชีส์เกิดขึ้น อย่างไรก็ตามฉันมีปัญหาในการแสดงภาพพวกมันทั้งหมดบนแผนที่เนื่องจากมันซ้อนทับกันอย่างแน่นอน ตัวเลือกการผสมดูน่ากลัว วิธีแก้ปัญหาของฉันคือการแยกรูปหลายเหลี่ยมในส่วนเท่า ๆ กันโดยขึ้นอยู่กับปริมาณของสายพันธุ์ในตาราง UTM: ก่อนหน้า: ตารางแสดง 1 สี แต่ควรแสดงสองสีเนื่องจากสองชนิดเกิดขึ้น! [ก่อนหน้า: ตารางแสดง 1 สี แต่ควรแสดงสอง ] ( i.stack.imgur.com/6WqKn.jpg ) หลัง: แยกช่องสี่เหลี่ยมออกมา
Hannes Ledegen

ฉันคิดว่าคุณควรเปิดคำถามใหม่แทนที่จะโพสต์คำถามของคุณที่นี่ในตอนท้าย
Jens

คำตอบ:


7

หาก ID นั้นต่อเนื่องกันฉันจะเพิ่มคอลัมน์ชั่วคราวใหม่ที่มีค่าไม่ซ้ำกันเช่น @ Ship.shp แนะนำแล้วใช้ตัวสร้างแบบสอบถามเพื่อค้นหา ID! = uniqueID

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


18

อีกกราฟิกแบบไดนามิกและที่สำคัญที่สุดที่เรียบง่ายวิธีการตรวจสอบคุณลักษณะที่ซ้ำกัน: สร้างนิพจน์ใช้ QGIS ของ

ไฮไลต์รายการซ้ำในตารางแอตทริบิวต์ :

เปิดใช้งานการจัดรูปแบบตามเงื่อนไข (ดูลูกศรสีแดงด้านล่าง) โดยมีเงื่อนไขดังต่อไปนี้:

count("FieldWithDuplicates","FieldWithDuplicates") > 1

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

แอตทริบิวต์ที่ซ้ำกันที่ไฮไลต์ในตารางแอตทริบิวต์ QGIS

เน้นคุณสมบัติที่มีคุณลักษณะที่ซ้ำกันบนผืนผ้าใบ :

คุณสามารถเพิ่มสัญลักษณ์หรือป้ายกำกับใหม่โดยใช้ชุดตัวกรองตามเงื่อนไขด้านบน

และแน่นอนคุณสามารถเปิดใช้งานการแทนที่ข้อมูลที่ได้รับจากสิ่งเดียวกัน

ตัวอย่างเช่นหากคุณต้องการเน้นป้ายกำกับสำหรับคุณลักษณะที่มีแอตทริบิวต์ซ้ำกันคุณสามารถกำหนดให้วาดพื้นหลังป้ายกำกับ (= 1) ด้วยการแทนที่ต่อไปนี้:

CASE WHEN
count("FieldWithDuplicates","FieldWithDuplicates") > 1
THEN 1
ELSE 0
END

เพื่อให้บรรลุสิ่งดังต่อไปนี้

ป้ายกำกับแอตทริบิวต์ที่ซ้ำกันถูกเน้นด้วยผ้าใบ QGIS

แน่นอนว่าในทั้งสองสถานการณ์เมื่อคุณลบหรือเปลี่ยนแอตทริบิวต์ที่ซ้ำกันการจัดรูปแบบ / การอัปเดตการจัดรูปแบบทันที


1
นี่คือคำตอบที่ถูกต้องที่สุดที่นี่ ฉันแค่อยากจะเพิ่มว่าการแสดงออกสามารถนำมาใช้โดยตรงกับเครื่องมือแบบสอบถามมาตรฐานเช่นกัน
สูงสุด

@maxwhere คุณหมายถึงใน Query Builder ที่ใช้สำหรับการกรองเลเยอร์หรือไม่ ฉันดูเหมือนจะไม่สามารถกรองผลลัพธ์ใน Q 3.4 หรือ 3.8 ได้แม้ว่าฉันจะประหลาดใจที่ไม่ได้เกิดข้อผิดพลาดเหมือนที่เคยทำใน Q 2.x
she_weeds

14

ใช้ปลั๊กอินสถิติกลุ่มและตั้งค่า ID เป็นการจำแนกฟิลด์ คุณสามารถดูได้ว่าป้อนค่าแต่ละค่ากี่ครั้งในคอลัมน์ 'นับ'


13

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


11

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

ฉันแนะนำให้ใช้ DB Manager และ SQL สำหรับงานประเภทนี้ DB Manager เป็นส่วนหนึ่งของ QGIS คุณต้องส่งออกข้อมูลของคุณไปยังชุดข้อมูล PostGIS หรือ SpatiaLite SpatiaLite ควรเป็นรูปแบบข้อมูลที่เป็นตัวเลือกของไฟล์อย่างไรก็ตาม

ตอนนี้คุณสามารถใช้ count () จัดกลุ่มตามและจัดเรียงตามที่คุณต้องการและควรจะสามารถแก้ไขปัญหานี้และปัญหาอื่น ๆ ได้อย่างรวดเร็ว

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


1
การใช้ปลั๊กอิน SQL เป็นวิธีที่ดีที่สุด!
Devdatta Tengshe

มันใช้งานได้ดี จะเลือกคุณลักษณะ (จากรายการซ้ำ) ด้วยค่าต่ำสุด / สูงสุดในคอลัมน์แอตทริบิวต์อื่นได้อย่างไร ฉันคิดไม่ออก ได้โปรดช่วยฉันที
christian.gobel

ไม่แน่ใจว่าฉันเข้าใจ ช่วง (ระหว่างขั้นต่ำสุด / ค่าสูงสุด) กำหนดว่าเรคคอร์ดซ้ำกันหรือไม่
Dennis Bauszus

4

ใช่ฉันกระแทกหัวของฉันกับผนังสำหรับปัญหาที่คล้ายกัน

นี่คือสคริปต์ของฉันสำหรับการลบสถานที่ที่มี ID เดียวกัน ใช้คุณลักษณะแรกที่มีแอตทริบิวต์ดัชนีมากกว่าหนึ่งและเขียนลงในคลาสคุณลักษณะใหม่

#Definition of inputs and outputs
# Written by: Gregor Skrt 
#==================================
##[Example scripts]=group
##input=vector
##unique_field=field input
##output=output vector

#Algorithm body
#==================================
from qgis.core import *
from PyQt4.QtCore import *
from processing.core.VectorWriter import VectorWriter

# "input" contains the location of the selected layer.
# We get the actual object, so we can get its bounds
layer = processing.getobject(input)
provider = layer.dataProvider()
fields = provider.fields()
writer = VectorWriter(output, None, fields, provider.geometryType(), layer.crs() )

inFeat = QgsFeature()
outFeat = QgsFeature()
inGeom = QgsGeometry()
nElement = 0
values = {}

value_field_index = layer.fieldNameIndex(unique_field)

feats = processing.getfeatures(layer)
nFeat = len(feats)

for inFeat in feats:
    progress.setPercentage(int((100 * nElement)/nFeat))
    nElement += 1
    inGeom = inFeat.geometry()
    attrs = inFeat.attributes()
    value = attrs[value_field_index]

    if value not in values:
    #to ne vem ce bo drzalo ???
        values[value]=[]
    outFeat.setGeometry(inGeom)
    outFeat.setAttributes(attrs)
    writer.addFeature(outFeat)
del writer

2

นอกจากนี้คุณสามารถใช้การแยกตามคุณลักษณะและท้ายด้วยตารางแยกสำหรับแต่ละค่า

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

statst
ข้อเสนอแนะของฉันสำหรับเลเยอร์แยกตามคุณลักษณะอยู่ในเครื่องมือการจัดการเวกเตอร์
การจัดการเช่นกัน

แยก
แบ่งข้อมูลของคุณใน 1 ช่องใด ๆ และคุณจะมีจำนวนของคุณ
วิธีที่ไม่เหมาะสมมากไปกว่าวิธีการแก้ปัญหาของ ship.ship


2
โปรดพิจารณาการตอบคำถามที่คุณชอบ!
whuber

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