在文件地理数据库中对数据集进行排序

时间:2017-03-20 17:08:37

标签: python sorting gis arcpy arcmap

我一直在试图找出如何更改ArcGIS文件地理数据库的排序顺序。我一直在使用Python和Arcpy将许多CAD文件转换为文件地理数据库要素数据集。我成功地做到了这一点,但结果以字典顺序报告,我理解正确。就是这样排序:

  

1,10,12,2,20,200,3,33,34等

虽然这是一种明智的阅读方式,但我一直在寻求将其纳入“自然/人类”秩序。我已经对这个概念做了大量研究,并找到了实现这一目标的代码。

How to sort alpha numeric set in python

Sorting alphanumeric strings in Python

所以现在问题是以'自然顺序'重新排序我的所有要素数据集。

这是允许我按顺序打印数据集的代码,但实际上并没有编辑地理数据库。

import re, arcpy

arcpy.env.workspace = r"<input geodatabase location>"
datasets = arcpy.ListDatasets()

# Natural sort through input
def sorted_nicely(l):
""" Sort the given iterable in the way that humans expect."""
convert = lambda text: int(text) if text.isdigit() else text
alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9]+)', key) ]
return sorted(l, key = alphanum_key)

# Iterate through listed datasets
for x in sorted_nicely(datasets):
    print(x)

这段代码,其中使用了上述来源的难以排序的脚本,在我的IDE中对所需的结果进行排序和打印,但它实际上并没有对我的文件地理数据库执行任何操作。

我想在不使用任何未预先安装的模块的情况下执行此操作,因为这需要我获得进一步下载的权限(即进一步的复杂性)。

谢谢!

1 个答案:

答案 0 :(得分:0)

我不知道影响排序顺序的方法 - ArcMap或ArcCatalog仅将其排序用于显示目的,而不是通过地理数据库中的任何设置。

如果您愿意重命名要素数据集,那么这篇GIS.SE文章对其工作原理有一个有用的概述:Batch renaming of feature datasets, and feature classes based on new dataset name?您还需要考虑数字长度的变化来弄清楚如何添加前导零,但这可能是一个新的好question to ask:)