2017-03-20 2 views
-1

J'ai essayé de comprendre comment modifier l'ordre de tri d'une géodatabase fichier pour ArcGIS. J'ai utilisé Python et Arcpy pour convertir de nombreux fichiers CAO dans un jeu de données d'entités de géodatabase de fichiers. J'ai réussi à le faire, mais les résultats sont rapportés dans l'ordre lexicographique, je le comprends correctement. C'est il est trié en tant que tel:Tri des jeux de données dans la géodatabase fichier

1, 10, 12, 2, 20, 200, 3, 33, 34, etc.

Bien que ce soit un style de lecture sensible, je ont cherché à l'obtenir dans un ordre «naturel/humain». J'ai fait beaucoup de recherches sur ce concept, et j'ai trouvé le code qui permet cela.

How to sort alpha numeric set in python

Sorting alphanumeric strings in Python

Alors maintenant, la question est ReOrdering tous mes jeux de données fonctionnalité dans 'ordre naturel'.

Ceci est le code qui me permet d'imprimer les jeux de données dans l'ordre, mais qui ne modifie pas réellement la géodatabase.

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) 

Ce morceau de code, dont le script de tri difficile a été utilisé à partir des sources ci-dessus, trie et imprime le résultat souhaité dans mon IDE, mais il ne fait pas quoi que ce soit à mon géodatabase fichier.

Je voudrais faire cela sans utiliser de modules qui ne sont pas pré-installés car cela m'obligerait à obtenir des autorisations pour d'autres téléchargements (c'est-à-dire une complication supplémentaire).

Merci!

+0

Je ne pense pas que vous serez en mesure d'affecter l'ordre de tri utilisé dans ArcMap ou ArcCatalog, car il s'agit juste d'un tri _display_, non stocké dans la géodatabase . Êtes-vous prêt à renommer vos ensembles de données pour inclure des zéros de tête? – Erica

+0

Merci d'avoir laissé une réponse. Je pourrais peut-être faire cela, mais je devrais trouver un moyen de remplir un espace spécifique entre le nom de fichier avec deux ou un chiffre, et exclure certains noms de fichiers. Je vais essayer de le regarder. – heinrich1223

Répondre

0

Je ne suis pas au courant d'un moyen d'affecter l'ordre de tri - ArcMap ou ArcCatalog utilisent leur tri à des fins d'affichage uniquement, et non par aucun paramètre dans la géodatabase.

Si vous souhaitez renommer les jeux de classes d'entités, ce post GIS.SE a un aperçu utile de son fonctionnement: Batch renaming of feature datasets, and feature classes based on new dataset name? Vous devez également prendre en compte la variabilité de la longueur du nombre pour savoir comment ajouter zéros, mais cela pourrait être un nouveau bon question to ask :)

+0

Ça vaut le coup. En mettant des zéros en tête, il devrait au moins être trié selon cette norme. – heinrich1223