Réorganiser définitivement les champs dans les données (shp, gdb)


24

Si j'ai un fichier de formes ou une classe de caractéristiques de géodatabase contenant des champs que je souhaite réorganiser de manière permanente, existe-t-il un outil, un script ou un utilitaire qui m'aideront à accomplir rapidement cette tâche?

En général, je sais que vous devez créer un nouveau champ, puis le remplir avec les anciennes valeurs, puis supprimer l'ancien champ. J'espère qu'il y a déjà quelque chose de créé là-bas qui aidera à cela. En supposant que vous ne disposez pas de FME ou d'un autre outil ETL, quelle est la meilleure suggestion suivante?

Ce n'est PAS un changement de niveau de vue (c'est-à-dire glisser / déposer les champs dans l'ordre), mais plutôt écrire dans un nouveau fichier de formes ou classe de traits. Merci.


J'ai du mal à y croire, mais je ne trouve pas de moyen de le faire. Quel est votre cas d'utilisation pour réorganiser les champs? Réorganiser les champs dans l'onglet Champs des propriétés de la couche dans ArcMap n'est pas une solution?
Derek Swingley

2
La réorganisation des champs est due au fait que les données ne seront pas utilisées dans ArcMap, mais avec un logiciel de cartographie moins sophistiqué qui 1) utilise des fichiers de formes et 2) ne permet pas de réorganiser du côté client et 3) le client doit voir le les attributs clés apparaissent en haut de l'arborescence "identifier".
RyanDalton

Je viens de modifier ma réponse précédemment supprimée. J'espère que vous n'avez pas peur de la ligne de commande;).
Derek Swingley


2
@ SaultDon- ce n'est pas la même question. Vous avez référencé une question qui veut trier des RECORDS (lignes), mais je veux trier des CHAMPS (colonnes).
RyanDalton

Réponses:


13

Je suis sûr que vous pouvez le faire avec la classe d'entités en classe d' entités en réorganisant les champs dans la section de carte des champs de l'outil.

Edit: FC2FC ne fait pas cela mais ... ogr à la rescousse.

Je viens de confirmer que ogr2ogr peut le faire. Spécifiez l'ordre des noms de champ sur le commutateur -select. Par exemple, si j'ai un fichier de formes avec deux champs, "Name" et "FolderPath" (dans cet ordre), mais je veux d'abord un nouveau fichier de formes avec "FolderPath", je ferais ceci:

C:\Temp>ogr2ogr -f "ESRI Shapefile" re_order_ogr.shp re_order1.shp -select "FolderPath,Name"

2
Bien que ce ne soit pas une option aussi conviviale que je l'espérais, elle fait définitivement l'affaire. J'ai créé un script python ArcGIS qui aide à construire les entrées pour celui-ci, et l'utilisateur n'a qu'à inclure l'option -select "field1, field2, etc". Vous pouvez le télécharger sur resources.arcgis.com/Resources2010/gallery/file/geoprocessing/…
RyanDalton

J'ai une classe d'entités sur SDE avec des domaines. Cela tiendra-t-il les domaines associés?
MjonesGEO

@joebob no. AFAIK, ogr ne prend pas en charge les ensembles de données des SDE GDB et ne prend pas en charge les domaines non plus.
Derek Swingley

Merci, je viens d'utiliser XRay et il peut réorganiser ou remplacer les champs tout en conservant leurs domaines dans SDE.
MjonesGEO

7

L' outil ET GeoWizards fera cela, et il semble que la version gratuite le fera sans aucune limitation sur le nombre de fonctionnalités.


Il le fait mais ne conserve malheureusement pas d'alias.
Howeitzer

7

Le plugin QGIS "Table Manager" a désormais également la possibilité d'effectuer cette tâche facilement sans aucune ligne de commande nécessaire.


6

Dans QGIS, vous pouvez maintenant utiliser la boîte à outils de traitement (Ctl + Alt + T) et aller dans Géoalgorithmes QGIS> Outils de table vectorielle> Champs de refactorisation.

De là, vous aurez tous les outils pour modifier la structure de votre table.

entrez la description de l'image ici


4

X-Ray arcmap add in dispose d'un outil pour réorganiser les champs au format Geodatabesoutil de champs de réorganisation des rayons X ici


Cela fonctionne très bien. Il conservera même vos domaines dans des champs si vous réorganisez un SDE. Grande suggestion !!
MjonesGEO

3

Pour référence: MapInfo peut également le faire prêt à l'emploi. Ouvrez simplement le DBF et réorganisez les champs de façon permanente. http://www.dbf-editor.com le fait aussi (40 $). D'autres éditeurs DBF peuvent probablement le faire aussi.


dans cette ligne, infolib devrait probablement fonctionner aussi (convertir en ascii (csv), réorganiser pour convenir, reconvertir en info ou dbf), tant que vous êtes prêt à vivre avec les limitations du format de fichier .dbf.
matt wilkie

Vous voulez dire vivre avec les limites du format CSV? DBF est le point de départ de cette question ...
Uffe Kousgaard

Je voulais dire les limites de dbf, pensant spécifiquement que csv n'a pas de limites sur la longueur du nom de champ ou la longueur des valeurs d'enregistrement, et que le point de départ était le fichier gdb, mais relire le QI voir "shp" est mentionné dans le titre. Donc, limite tout autour ;-)
matt wilkie

3

J'ai rencontré un problème similaire et le moyen le plus rapide de réorganiser définitivement les champs de données, si vous avez déjà QGIS, est d'utiliser le plugin 'Table Manager' comme suggéré précédemment.

Il est simple d'installer des plugins et est convivial, comme décrit sur la page ci-dessous:

http://www.qgistutorials.com/en/docs/using_plugins.html

Il vous permet de déplacer les attributs dans un ordre spécifique, de renommer les champs, d'insérer de nouveaux champs et de les répliquer. Il vous permet également d'enregistrer le fichier d'origine ou de le renommer et de l'enregistrer différemment de l'original.

entrez la description de l'image ici

Il s'agissait d'une solution rapide et pratique à mon problème de gestion de table d'attributs, et elle est fortement recommandée, en particulier pour les fichiers avec un grand nombre d'attributs qui lui sont associés.


3

Exportez les classes d' entités vers une géodatabase personnelle vide (le glisser-déposer est le plus rapide), ouvrez le .mdb dans Access, réorganisez les champs en mode Création , enregistrez, puis avec ArcMap / Catalog copiez à nouveau pour façonner ou géodatabase fichier.

La même méthode fonctionne pour renommer les champs.

Attention cependant , ne travaillez que sur des copies, il est facile de tout gâcher. (Comme le note Karey Jack dans une autre réponse, Esri décourage l'accès direct .mdb ). Pour des raisons de sécurité, ignorez toutes les tables commençant par GDB_et également celles se terminant par _Shape_Index.


3

La meilleure façon de le faire est d'utiliser les mappages de champs. Je lutte avec cette fonctionnalité du logiciel ESRI depuis des années, mais je suis enfin satisfait de cette solution. Fondamentalement, vous pouvez simplement faire une copie de votre classe d' entités avec les champs réorganisés en permanence à l'aide d' arcpy.FieldMappings . Toutes les données sont également reportées. Une fois le script terminé, renommez simplement votre ancienne classe d'entités en myFeatureClass_old, et votre nouvelle en myFeatureClass!

Voici le script, c'est super simple:

import arcpy
'''
This is possible in python using FeatureClasstoFeatureClass with Fieldmappings. You can also rename fields at the same time.
So if you have a Feature Class with FIELD3, FIELD2, FIELD1 and you want the result to be FIELD1, FIELD2, FIELD3 then the following code should accomplish this.
'''
arcpy.env.workspace = r"C:\Users\myself\ArcData\my_geodatabase.gdb"
arcpy.env.overwriteOutput = True

input_fpath = "Lakes"

output_dpath = arcpy.env.workspace
output_fname = "Lakes_new"

fms = arcpy.FieldMappings()

fm = arcpy.FieldMap()
fm.addInputField(input_fpath,"FIELD1")
fms.addFieldMap(fm)

fm = arcpy.FieldMap()
fm.addInputField(input_fpath,"FIELD2")
fms.addFieldMap(fm)

fm = arcpy.FieldMap()
fm.addInputField(input_fpath,"FIELD3")
fms.addFieldMap(fm)

arcpy.conversion.FeatureClassToFeatureClass(input_fpath,output_dpath,output_fname,"",fms)

3

La classe d'entités en classe d'entités peut désormais effectuer cette opération dans la version 10.5 à l'aide de la section Mappage des champs de l'outil GP.

entrez la description de l'image ici


2

MakeQueryTable vous permettra de définir l'ordre de vos champs pour une table ou FC (Géodatabase uniquement). L'ordre dans lequel vous spécifiez les champs est l'ordre de la sortie. Je trouve cet outil difficile à utiliser. YMMV

Arctoolbox, outils de gestion des données, couches et vues de table, créer une table de requête


1

Essayez OGR2OGR. Vous pouvez transmettre une requête SQL et placer les champs dans l'ordre souhaité.

ogr2ogr outdataset indataset -sql "SELECT src_field1 AS dst_field1, src_field2 AS dst_field2 FROM sourcelayer"

Je viens de tester cela, et cela fonctionne très bien!

Pour info, la façon la plus simple d'installer OGR est via FWTools .


1

Ouvrez le fichier .mdb dans MS Access et réorganisez les champs à l'aide de la fonction glisser-déposer en «mode création»

Bien qu'ESRI décourage la modification d'une base de données dans le lien Access ESRI


2
Bienvenue sur notre site, Karey! N'est-ce pas la même réponse que Matt Wilkie a donnée dans ce fil il y a 18 mois ( gis.stackexchange.com/a/5879 )?
whuber

0

Je suis un peu en retard à la fête sur celui-ci, mais je suis surpris que personne n'ait mentionné ESRI Geodatabase Diagrammer .

Une ressource fournie par ESRI pour éditer la structure XML de votre géodatabase et de vos fichiers. En ce qui me concerne, c'est essentiel si vous travaillez sur quelque chose où le design doit être parfait (projet à long terme). Cela vous évitera d'avoir à recréer des fichiers en continu après avoir fait une simple erreur.


1
Avez-vous vu le commentaire (à la question elle-même) indiquant qu'il ne s'agissait pas d'une réorganisation de la base de données, mais plutôt nécessaire pour exporter les données?
whuber
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.