我有一个包含数千个点的shapefile文件。它具有一个应该唯一的ID码字段。数据输入服务员有时会错误地键入ID,从而创建重复项。现在,我正在手动滚动字段以查找重复项。
使用搜索查询生成器还有另一种方法吗?
我有一个包含数千个点的shapefile文件。它具有一个应该唯一的ID码字段。数据输入服务员有时会错误地键入ID,从而创建重复项。现在,我正在手动滚动字段以查找重复项。
使用搜索查询生成器还有另一种方法吗?
Answers:
检测重复属性的另一种图形,动态,最重要的简单方法是:使用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(),group by和order by,并且应该能够很快解决此问题和其他问题。
是的,我因类似问题而撞在墙上。
这是我的脚本,用于删除具有相同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