ฉันมีไฟล์รูปร่างจุดที่มีหลายพันจุด มีฟิลด์รหัสรหัสที่ควรจะไม่ซ้ำกัน พนักงานเก็บข้อมูลทุกขณะนี้พิมพ์ ID ที่สร้างซ้ำกันอย่างไม่ถูกต้อง ตอนนี้ฉันกำลังเลื่อนฟิลด์เพื่อค้นหารายการที่ซ้ำกันด้วยตนเอง
มีวิธีการอื่นในการทำเช่นนี้โดยใช้ตัวสร้างคำค้นหาหรือไม่
ฉันมีไฟล์รูปร่างจุดที่มีหลายพันจุด มีฟิลด์รหัสรหัสที่ควรจะไม่ซ้ำกัน พนักงานเก็บข้อมูลทุกขณะนี้พิมพ์ ID ที่สร้างซ้ำกันอย่างไม่ถูกต้อง ตอนนี้ฉันกำลังเลื่อนฟิลด์เพื่อค้นหารายการที่ซ้ำกันด้วยตนเอง
มีวิธีการอื่นในการทำเช่นนี้โดยใช้ตัวสร้างคำค้นหาหรือไม่
คำตอบ:
หาก ID นั้นต่อเนื่องกันฉันจะเพิ่มคอลัมน์ชั่วคราวใหม่ที่มีค่าไม่ซ้ำกันเช่น @ Ship.shp แนะนำแล้วใช้ตัวสร้างแบบสอบถามเพื่อค้นหา ID! = uniqueID
นั่นจะคืนค่าที่ซ้ำกันโดยตรง หลังจากแก้ไข ID ดั้งเดิมให้ลบคอลัมน์พิเศษหรือทำซ้ำกระบวนการทั้งหมดตามที่ต้องการ - มันไม่ชัดเจนว่ารูปแบบใดที่ ID ของคุณต้องตรงกัน หากพวกเขาต้องการที่จะไม่ซ้ำกันให้จดบันทึกค่าสุดท้ายก่อนจากนั้นคุณสามารถแก้ไข ID ที่ไม่ดีในการวนซ้ำเพียงแค่กดหมายเลขขณะที่คุณไป
อีกกราฟิกแบบไดนามิกและที่สำคัญที่สุดที่เรียบง่ายวิธีการตรวจสอบคุณลักษณะที่ซ้ำกัน: สร้างนิพจน์ใช้ QGIS ของ
ไฮไลต์รายการซ้ำในตารางแอตทริบิวต์ :
เปิดใช้งานการจัดรูปแบบตามเงื่อนไข (ดูลูกศรสีแดงด้านล่าง) โดยมีเงื่อนไขดังต่อไปนี้:
count("FieldWithDuplicates","FieldWithDuplicates") > 1
หากต้องการจัดกลุ่มรายการที่ซ้ำกันทั้งหมดที่ด้านบนให้คลิกขวาที่คอลัมน์เลือกเรียงลำดับ
ป้อนนิพจน์ด้านบนโดยไม่มี>1
และยกเลิกการเลือกเรียงจากน้อยไปมาก
เน้นคุณสมบัติที่มีคุณลักษณะที่ซ้ำกันบนผืนผ้าใบ :
คุณสามารถเพิ่มสัญลักษณ์หรือป้ายกำกับใหม่โดยใช้ชุดตัวกรองตามเงื่อนไขด้านบน
และแน่นอนคุณสามารถเปิดใช้งานการแทนที่ข้อมูลที่ได้รับจากสิ่งเดียวกัน
ตัวอย่างเช่นหากคุณต้องการเน้นป้ายกำกับสำหรับคุณลักษณะที่มีแอตทริบิวต์ซ้ำกันคุณสามารถกำหนดให้วาดพื้นหลังป้ายกำกับ (= 1) ด้วยการแทนที่ต่อไปนี้:
CASE WHEN
count("FieldWithDuplicates","FieldWithDuplicates") > 1
THEN 1
ELSE 0
END
เพื่อให้บรรลุสิ่งดังต่อไปนี้
แน่นอนว่าในทั้งสองสถานการณ์เมื่อคุณลบหรือเปลี่ยนแอตทริบิวต์ที่ซ้ำกันการจัดรูปแบบ / การอัปเดตการจัดรูปแบบทันที
ใช้ปลั๊กอินสถิติกลุ่มและตั้งค่า ID เป็นการจำแนกฟิลด์ คุณสามารถดูได้ว่าป้อนค่าแต่ละค่ากี่ครั้งในคอลัมน์ 'นับ'
วิธีที่รวดเร็ว (แม้ว่าจะไม่เหมาะสม) ในการทำเช่นนี้คือไปที่คุณสมบัติของเลเยอร์เลือกสไตล์ - จัดหมวดหมู่โดยใช้คอลัมน์ที่คุณสนใจใช้สิ่งนี้จากนั้นคลิกขวาที่ชั้นในหน้าต่างเลเยอร์และตรวจสอบจำนวนคุณลักษณะที่แสดง ช่องทำเครื่องหมาย จากนั้นขยายเลเยอร์ในหน้าต่างเลเยอร์และคุณสามารถดูได้ทันทีว่าป้อนค่าแต่ละครั้งกี่ครั้ง
นี่เป็นคำถามที่ดีที่ฉันเพิ่งสะดุดตัวเอง ฉันไม่ชอบคำตอบใด ๆ ที่ได้รับจนถึงขณะนี้ ฉันมีชุดข้อมูลที่ถูกต้องพร้อมรหัสเฉพาะที่ไม่ใช่แบบลำดับและไม่ใช่จำนวนเต็ม ปัญหาคือชุดข้อมูลมีรูปทรงเรขาคณิตเดียว แต่ขอบเขตบางอย่างเป็นรูปทรงเรขาคณิตที่หลากหลายในธรรมชาติ งานของฉันคือการระบุและรวมรูปทรงเรขาคณิตเหล่านี้
ฉันแนะนำให้ใช้ DB Manager และ SQL สำหรับงานประเภทนี้ DB Manager เป็นส่วนหนึ่งของ QGIS คุณต้องส่งออกข้อมูลของคุณไปยังชุดข้อมูล PostGIS หรือ SpatiaLite SpatiaLite ควรเป็นรูปแบบข้อมูลที่เป็นตัวเลือกของไฟล์อย่างไรก็ตาม
ตอนนี้คุณสามารถใช้ count () จัดกลุ่มตามและจัดเรียงตามที่คุณต้องการและควรจะสามารถแก้ไขปัญหานี้และปัญหาอื่น ๆ ได้อย่างรวดเร็ว
ใช่ฉันกระแทกหัวของฉันกับผนังสำหรับปัญหาที่คล้ายกัน
นี่คือสคริปต์ของฉันสำหรับการลบสถานที่ที่มี 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
นอกจากนี้คุณสามารถใช้การแยกตามคุณลักษณะและท้ายด้วยตารางแยกสำหรับแต่ละค่า
ฉันชอบคำแนะนำของ Rayo ยกเว้นนักสถิติก็ไม่ได้ผลเหมือนที่ฉันคิด
มันให้ค่าที่ไม่ซ้ำกันนับ แต่ไม่ได้ช่วยอะไรค่าเหล่านั้น
ซอฟต์แวร์อื่นอาจเพิ่มเขตข้อมูลการนับและอนุญาตให้คุณส่งออกเป็น csv หรือรูปแบบสเปรดชีตอื่น ๆ
ข้อเสนอแนะของฉันสำหรับเลเยอร์แยกตามคุณลักษณะอยู่ในเครื่องมือการจัดการเวกเตอร์
แบ่งข้อมูลของคุณใน 1 ช่องใด ๆ และคุณจะมีจำนวนของคุณ
วิธีที่ไม่เหมาะสมมากไปกว่าวิธีการแก้ปัญหาของ ship.ship