QGIS kullanarak alandaki yinelenen özniteliklerin belirlenmesi?


27

Binlerce puanlık bir nokta şeklinde dosyam var. Benzersiz olması gereken bir kimlik kodu alanına sahiptir. Her şimdi ve sonra veri girişi görevlisi yanlışlıkla kopyaları oluşturan kimliği yazın. Şu anda, kopyayı bulmak için alanı el ile kaydırıyorum.

Arama Sorgu Oluşturucusu'nu kullanarak bunu yapmanın başka bir yolu var mı?


5
Özgünlüğü uygulamanız gerekirse, bir veritabanı kullanmanızı öneririm, örneğin Postgres / PostGIS, Spatailite
Nathan W

Benim de benzer bir problemim var. Belirli türlerin meydana geldiği UTM kareleri içeren bir büyük şekil dosyam var (bir kare içinde 5'e kadar, çoğunlukla 2). Bununla birlikte, hepsini çakıştığından, hepsini haritada görselleştirmekte sorun yaşıyorum. Karışım seçenekleri korkunç görünüyor. Geçici çözümüm, UTM karesinde türlerin miktarına bağlı olarak çokgenleri eşit parçalara bölmek olacaktır: Önce: kare 1 renk gösterir, ancak iki tür oluştuğundan iki tane göstermelidir ! [Önce: kare 1 renk gösterir ancak iki tane göstermelidir ] ( i.stack.imgur.com/6WqKn.jpg ) Sonrasında : kare s'yi
böldü

Sanırım sonunda kendinizinkini göndermek yerine yeni bir soru açmalısınız.
Jens

Yanıtlar:


7

Kimlikler ardışıksa, @ Ship.shp önerilen gibi benzersiz değerlere sahip yeni bir geçici sütun ekler ve ardından ID! = UniqueID aramak için sorgu oluşturucuyu kullanırdım.

Bu kopyaları doğrudan iade ederdi. Orijinal kimlikleri düzelttikten sonra, fazladan sütunu kaldırın veya tüm işlemi gerektiği gibi tekrarlayın - kimliğinizin ne tür bir şablonla eşleşmesi gerektiği belli değildir. Sadece benzersiz olmaları gerekiyorsa, önce en son değeri not alın, sonra kötü kimlikleri tek bir yinelemede düzenleyebilirsiniz, ilerledikçe numarayı çarpıtın.


18

Yinelenen öznitelikleri tespit etmenin başka bir grafiksel, dinamik ve en önemlisi basit yolu: QGIS'in ifade oluşturucusunu kullanın.

Özellik tablosundaki çiftleri vurgula :

Koşullu Biçimlendirmeyi aşağıdaki koşulla etkinleştirin (aşağıdaki kırmızı oka bakın):

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

Tüm kopyaları üstte gruplamak için, sütuna sağ tıklayın, Sırala'yı seçin
Yukarıdaki ifadeyi girmeden girin >1ve Artan Sırala seçimini kaldırın.

QGIS özellik tablosunda vurgulanan yinelenen özellikler

Tuval üzerinde yinelenen özniteliklere sahip özellikleri vurgulayın :

Yukarıdaki duruma ayarlanmış filtre ile yeni bir sembol veya etiket ekleyebilirsiniz.

Ve elbette, aynı temel alınarak elde edilen verilerin geçersiz kılınmasını sağlayabilirsiniz.

Örneğin, yinelenen özniteliğe sahip özelliklerin etiketlerini vurgulamak istiyorsanız, etiketini aşağıdaki geçersiz kılma ile bir etiket arka planı (= 1) çizecek şekilde ayarlayabilirsiniz:

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

aşağıdaki gibi bir şey elde etmek

QGIS tuvalinde vurgulanan yinelenen öznitelik etiketleri

Elbette, her iki durumda da, yinelenen öznitelikleri sildiğinizde veya değiştirdiğinizde, biçimlendirme / şekillendirme anında güncellenir.


1
Bu, şu ana kadarki en yasal cevap. Sadece ifadenin doğrudan standart sorgu aracıyla da kullanılabileceğini eklemek istedim.
maksimum

@ maxwhere, katmanları filtrelemek için kullanılan Query Builder'ı mı kastediyorsunuz? Aslında sonuçları Q 3.4 veya 3.8 olarak filtrelemeyi başaramıyor gibiyim, ancak Q 2.x'de olduğu gibi bir hata atmadığına şaşırdım.
she_weeds

14

Grup İstatistikleri eklentisini kullanın ve kimliği alan sınıflandırması olarak ayarlayın. Sayım sütununa her bir değerin kaç defa girildiğini görebilirsiniz.


13

Bunu yapmanın hızlı (inelegant olmasına rağmen) yolu, Katman özelliklerine girmektir, İlgilendiğiniz sütunu kullanarak Stil - Sınıflandırılmış'ı seçin. Bunu uygulayın, ardından katmanlar penceresinde katmanı sağ tıklayın ve Özellik Sayısını Göster'i işaretleyin. Onay kutusu. Ardından katmanlar penceresindeki katmanı genişletin ve her bir değerin kaç kez girildiğini hemen görebilirsiniz.


11

Bu sadece kendime rastladığım iyi bir soru. Şimdiye kadar verilen cevapların hiçbirini beğenmedim. Sıralı olmayan ve tamsayı olmayan benzersiz kimlikleri olan geçerli bir veri kümem var. Sorun, veri kümesinin tekli geometriler içermesi ancak bazı sınırların doğada çok sayıda geometri olması. Benim görevim bu geometrileri tanımlamak ve birleştirmek.

Bu tür işler için DB Manager ve SQL kullanmanızı tavsiye ederim. DB Manager şimdi QGIS'in bir parçası. Verilerinizi PostGIS veya SpatiaLite veri kümesine aktarmanız gerekir. SpatiaLite yine de seçilen dosya tabanlı veri formatı olmalıdır.

Artık count (), group by ve order komutlarını istediğiniz gibi kullanabilirsiniz ve bu ve diğer sorunları oldukça hızlı bir şekilde çözebilmelisiniz.

görüntü tanımını buraya girin


1
Bir SQL eklentisi kullanmak gitmek için en iyi yoldur!
Devdatta Tengshe

Güzel çalışıyor. Özelliği (kopyalardan) başka bir özellik sütununda minimum / maksimum değerle seçmek nasıl olur? Çözemedim. Bana yardım edebilir misiniz, lütfen?
christian.gobel

Anladığımdan emin değilim. Aralık (minimum / maksimum arasında) bir kaydın kopya olup olmadığını tanımlar mı?
Dennis Bauszus

4

Evet benzer problem için kafamı duvara çarptım.

İşte aynı kimlikleri olan özellikleri kaldırmak için benim komut dosyası. İlk özelliği birden fazla indeks özelliği ile alır ve yeni özellik sınıfına yazar.

#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

Ayrıca split özelliğini özniteliğe göre kullanabilir ve her değer için ayrı bir tablo oluşturabilirsiniz.

Yine de Rayo'nun önerisini beğendim. Ancak devletçi, düşündüğüm gibi işe yaramadı.
Bir dizi benzersiz değer verir, ancak bu değerlerin ne olduğuna yardımcı olmaz.
Başka bir yazılım bir sayım alanı ekleyebilir ve onu csv veya başka bir elektronik tablo biçiminde vermenize izin verebilir.

statst
Özniteliğe göre bölünmüş katman için önerim, vektör yönetim araçlarında
yönetim de

Bölünmüş
Verilerinizi herhangi bir 1 alana bölerek saymanız yeterli olacaktır.
geminin çözümünden çok daha tuhaf


2
Lütfen sevdiğiniz cevapları yükseltmeyi düşünün!
whuber

3
kişisel oylamaya izin verilmiyor!
Brad Nesom
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.