Answers:
您可以使用“ 排序和数字”插件。它允许您按最多3个字段对属性表进行排序,然后创建一个包含已排序要素顺序的附加字段。
免责声明:我是插件的作者。
sort()
功能,我想知道为什么它这么慢。我将尝试找到一些技巧,以在以后的版本中加快该过程。
如果可以永久保存结果,则可以使用GDAL对shapefile进行排序
ogr2ogr -f "ESRI Shapefile" -dialect sqlite -sql "SELECT *
FROM my_shapefile ORDER BY attr_1, attr_2, attr_3" sorted.shp my_shapefile.shp
包含一百万个多边形的shapefile用了不到3分钟的时间。
QGIS中的DB Manager插件现在具有“虚拟层”节点,该节点使您可以针对加载到QGIS项目中的shapefile编写SQL命令。
因此,既然您已经具备了这种能力,则可以使用asc(升序),desc(降序)在ORDER BY语句中进行按多个字段排序的SQL逻辑,并且可以将它们串在一起以按多个列进行排序:
另外一个好处是,您将学到更多的SQL,因此,当您厌倦了shapefile时,大多数人都对PostGIS而言,飞跃不会那么大!!!
至少对于3.2+版本,现在无需任何插件或特定于数据库的工作即可完成此操作。要按多列排序:
concat()
以正确的顺序(例如concat("column1", "column2")
)以及要排序的字段。输出预览应显示在代码下方。此功能是通过问题#1137添加的,并在用户手册的最新(开发)版本中进行了介绍。
concat("col1", right( ('000' || tostring( "col2" )), 4))
好吧,现在是2018年,所以我不敢相信这还没有得到答案。
打开属性表视图,右键单击任何列,然后选择“ 排序...”。
对话框窗口“ 配置属性表排序顺序”现在也通过完整表达式编辑器打开
将COALESCE函数与所需的列配合使用,例如,这将按3列对表格进行排序(首先按ID,然后按VERSION,然后按fid)
coalesce("ID","VERSION","fid" )
单击确定将对表进行排序
您不能(至少目前没有)。抱歉!
请参阅QGIS文档并向下滚动到最后一行。
讨厌的解决方法是将Shapefile的DBF导入Excel。在那里排序并保存结果。或者,将您的Shapefile导入PostGIS或SpatialLite中,这些地方具有更好的排序功能。基本上,您将必须绕过QGIS进行高级排序。