QGIS का उपयोग करके क्षेत्र में डुप्लिकेट विशेषताओं की पहचान करना?


27

मेरे पास हजारों अंकों के साथ एक बिंदु आकृति है। इसमें एक आईडी कोड फ़ील्ड है जो अद्वितीय माना जाता है। हर अब और फिर डेटा एंट्री क्लर्क गलत तरीके से आईडी बनाते हुए डुप्लिकेट बनाते हैं। अभी मैं डुप्लिकेट खोजने के लिए फ़ील्ड को मैन्युअल रूप से स्क्रॉल कर रहा हूं।

क्या खोज क्वेरी बिल्डर का उपयोग करने का एक और तरीका है?


5
यदि आपको विशिष्टता को लागू करने की आवश्यकता है, तो मैं एक डेटाबेस का उपयोग करने की सिफारिश करूंगा जैसे Postgres / PostGIS, Spatailite
Nathan W

मुझे एक ऐसी ही समस्या है। मेरे पास एक बड़ी आकृति है जिसमें UTM वर्ग हैं जिसमें कुछ प्रजातियाँ होती हैं (एक वर्ग में 5 तक, अधिकतर 2)। हालाँकि, मुझे एक नक्शे पर उन सभी को देखने में समस्या है क्योंकि वे वास्तव में ओवरलैप करते हैं। सम्मिश्रण विकल्प भयानक लगते हैं। मेरा काम यूटीएम वर्ग में प्रजातियों की मात्रा के आधार पर बहुभुज को समान भागों में विभाजित करना होगा: इससे पहले: वर्ग 1 रंग दिखाता है, लेकिन दो को दिखाना चाहिए क्योंकि दो प्रजातियां होती हैं ! [इससे पहले: वर्ग 1 रंग दिखाता है लेकिन दो दिखाना चाहिए ] ( i.stack.imgur.com/6WqKn.jpg ) के बाद: वर्ग s
हनीस लेडगेन

मुझे लगता है कि आपको अपना पोस्ट यहाँ अंत में पोस्ट करने के बजाय एक नया प्रश्न खोलना चाहिए।
जेन्स

जवाबों:


7

यदि आईडी लगातार हैं, तो मैं अनूठे मानों के साथ एक नया अस्थायी कॉलम जोड़ूंगा, जैसे @ Ship.shp ने सुझाव दिया और फिर आईडी बनाने के लिए क्वेरी बिल्डर का उपयोग करें! = UniqueID।

वह डुप्लिकेट को सीधे लौटा देगा। मूल आईडी को ठीक करने के बाद, अतिरिक्त कॉलम को हटा दें या पूरी प्रक्रिया को आवश्यकतानुसार दोहराएं - यह स्पष्ट नहीं है कि आपकी आईडी किस तरह के पैटर्न से मेल खाना चाहिए। यदि उन्हें केवल विशिष्ट होने की आवश्यकता है, तो पहले अंतिम मूल्य पर ध्यान दें और फिर आप खराब आईडी को एक पुनरावृत्ति में संपादित कर सकते हैं, जैसे ही आप जाते हैं, संख्या को टकराते हुए।


18

डुप्लिकेट विशेषताओं का पता लगाने के लिए एक और चित्रमय, गतिशील और सबसे महत्वपूर्ण सरल तरीका: QGIS के अभिव्यक्ति बिल्डर का उपयोग करें।

विशेषता तालिका में डुप्लिकेट हाइलाइट करें :

निम्नलिखित स्थिति के साथ सशर्त स्वरूपण सक्षम करें (नीचे लाल तीर देखें):

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

शीर्ष पर सभी डुप्लिकेट को समूहीकृत करने के लिए, स्तंभ पर राइट क्लिक करें, सॉर्ट
करें का चयन करें , इसके बिना उपरोक्त अभिव्यक्ति दर्ज करें >1और आरोही क्रमबद्ध करें को हटा दें।

QGIS विशेषता तालिका में हाइलाइट की गई डुप्लिकेट विशेषताएँ

कैनवास पर डुप्लिकेट विशेषताओं के साथ हाइलाइट करें :

आप उपरोक्त शर्त पर फ़िल्टर सेट के साथ एक नया प्रतीक या लेबल जोड़ सकते हैं।

और निश्चित रूप से आप उसी के आधार पर प्राप्त डेटा को ओवरराइड कर सकते हैं।

उदाहरण के लिए, यदि आप डुप्लिकेट विशेषता वाली विशेषताओं के लिए लेबल हाइलाइट करना चाहते हैं, तो आप निम्न ओवरराइड के साथ एक लेबल पृष्ठभूमि (= 1) आकर्षित करने के लिए इसे सेट कर सकते हैं:

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

निम्नलिखित की तरह कुछ हासिल करने के लिए

QGIS कैनवास में डुप्लिकेट विशेषता लेबल हाइलाइट किए गए हैं

दोनों स्थितियों में, एक बार जब आप या तो डुप्लिकेट विशेषताओं को हटा देते हैं या बदल देते हैं, तो स्वरूपण / स्टाइलिंग अपडेट तुरंत।


1
यह अब तक का सबसे कानूनी जवाब है। मैं बस यह जोड़ना चाहता था कि अभिव्यक्ति का उपयोग सीधे मानक क्वेरी टूल के साथ भी किया जा सकता है।
अधिकतम

@maxwhere, क्या आपका मतलब फ़िल्टरिंग लेयर्स के लिए उपयोग किए जाने वाले क्वेरी बिल्डर में है? मैं वास्तव में क्यू 3.4 या 3.8 में परिणामों को फ़िल्टर करने के लिए इसे प्राप्त करने के लिए प्रतीत नहीं कर सकता, हालांकि मुझे आश्चर्य है कि यह एक त्रुटि नहीं फेंकता है जैसे कि यह क्यू 2.x में इस्तेमाल किया गया था।
she_weeds

14

समूह आँकड़े प्लगइन का उपयोग करें और आईडी को क्षेत्र वर्गीकरण के रूप में सेट करें। आप देख सकते हैं कि 'गणना' कॉलम में कितनी बार प्रत्येक मूल्य दर्ज किया गया है।


13

ऐसा करने का एक त्वरित (यद्यपि अयोग्य) तरीका परत गुणों में जाना है, शैली का चयन करें - आपके द्वारा रुचि रखने वाले कॉलम का उपयोग करके वर्गीकृत किया गया है। इसे लागू करें, फिर परतों विंडो में परत पर राइट क्लिक करें और शो फ़ीचर गणना जांचें चेकबॉक्स। फिर परतों की खिड़की में परत का विस्तार करें और आप तुरंत देख सकते हैं कि प्रत्येक मूल्य कितनी बार दर्ज किया गया है।


11

यह एक अच्छा सवाल है जिस पर मैंने अभी खुद को ठोकर मारी है। मुझे कोई भी जवाब पसंद नहीं है जो अब तक दिया गया है। मेरे पास विशिष्ट आईडी के साथ एक वैध डेटासेट है जो गैर अनुक्रमिक और गैर पूर्णांक हैं। समस्या यह है कि डेटासेट में एकल ज्यामितीय होते हैं लेकिन कुछ सीमाएँ प्रकृति में बहु ज्यामितीय होती हैं। मेरा काम इन ज्यामितीयों की पहचान करना और उनका संघ बनाना है।

मैं इस तरह के काम के लिए डीबी मैनेजर और एसक्यूएल का उपयोग करने की सलाह देता हूं। DB प्रबंधक अब QGIS का हिस्सा है। आपको अपने डेटा को PostGIS या एक स्पैटलाइट लाइटसेट में निर्यात करने की आवश्यकता है। SpatiaLite को वैसे भी पसंद के फाइल आधारित डेटा प्रारूप होना चाहिए।

अब आप गणना (), ग्रुप बाय, और ऑर्डर का उपयोग अपने अनुसार कर सकते हैं और इसे और अन्य मुद्दों को जल्दी से हल करने में सक्षम होना चाहिए।

यहाँ छवि विवरण दर्ज करें


1
SQL प्लग-इन का उपयोग करना सबसे अच्छा तरीका है!
देवदत्त तेंग्शे

अच्छा यह काम करता है। किसी अन्य विशेषता कॉलम में न्यूनतम / अधिकतम मान के साथ सुविधा (डुप्लिकेट से) का चयन कैसे किया जाएगा? मैं इसका पता नहीं लगा सका। क्या आप कृपया मेरी मदद कर सकते हैं?
क्रिश्चियन.गोबेल

पक्का नहीं मै समझ गया। क्या सीमा (न्यूनतम / अधिकतम के बीच) परिभाषित करती है कि कोई रिकॉर्ड डुप्लिकेट है?
डेनिस बाऊज़स

4

हाँ, मैंने इसी तरह की समस्या के लिए दीवार के खिलाफ अपना सिर पीटा।

यहाँ एक ही आईडी के साथ सुविधाओं को हटाने के लिए मेरी स्क्रिप्ट है। यह पहली विशेषता को एक से अधिक सूचकांक विशेषता के साथ लेता है और इसे नए फीचर वर्ग में लिखता है।

#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

इसके अलावा आप विशेषता द्वारा विभाजन का उपयोग कर सकते हैं और प्रत्येक मूल्य के लिए एक अलग तालिका के साथ समाप्त कर सकते हैं।

मुझे रेओ का सुझाव पसंद है। सिवाय सांख्यिकीविद् के काफी काम नहीं है जैसा मैंने सोचा था कि यह किया था।
यह अद्वितीय मानों की गिनती देता है, लेकिन उन मूल्यों के साथ मदद नहीं करता है।
एक अन्य सॉफ्टवेयर एक गिनती क्षेत्र जोड़ सकता है और आपको इसे सीएसवी या अन्य स्प्रेडशीट प्रारूप में निर्यात करने की अनुमति दे सकता है।

statst
विशेषता द्वारा विभाजित परत के लिए मेरा सुझाव वेक्टर प्रबंधन टूल में है
प्रबंधन भी

विभाजित करें
अपने डेटा को किसी भी 1 फ़ील्ड पर विभाजित करें एक रंगो में आपकी गिनती होगी।
जहाज की तुलना में अधिक अशुभ तरीका है


2
कृपया अपने पसंद के उत्तरों पर विचार करें!
whuber

3
स्व उत्थान की अनुमति नहीं है!
ब्रैड नेसोम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.