Suite

Outil pour générer une classe d'entités incluant les noms/type de champ

Outil pour générer une classe d'entités incluant les noms/type de champ


J'essaie de créer un outil qui générera une classe d'entités, puis remplira les champs avec le nom et le format de colonne corrects en fonction d'un fichier CSV.

Quelqu'un a-t-il déjà eu la chance de le faire?

Je recherche des exemples de modèle ou de code si quelqu'un a quelque chose de similaire.

Quelqu'un a-t-il vu des documents de tutoriel en ligne qui font ce type de demande?

J'utilise Arc 10.2. ESRI : Arcpy


'Bonjour, ^Nebula93^,

Pour les outils Créer une classe d'entités et Ajouter un champ, vous devez trier quelques paramètres dans votre fichier CSV ou dans le script afin de rendre l'outil abstrait et généralisable comme vous le souhaitez.

Par exemple, pour votre classe d'entités, vous avez besoin d'une variable pour le type de géométrie (Indiquer, Polygone?) et dans quel système de coordonnées se trouve-t-il (WGS84, NAD83 USA contigu?).

Pour votre table CSV, chaque colonne devra également représenter un paramètre pour les champs que vous souhaitez créer, par exemple le Nom de domaine, Alias ​​de champ, Longueur du champ, etc.

Une fois que vous avez construit l'échafaudage/la structure pour la façon dont les paramètres seront lus, la mise en œuvre réelle n'est pas trop difficile.

Voici un exemple de script qui fait l'affaire. Il faut construire un squelette d'outil dans la boite à outils qui prend comme paramètres :

  1. La table CSV (Type : Fichier, Direction : Entrée, Filtre : "csv")
  2. Classe d'objets en sortie (Type : Classe d'objets, Direction : Sortie)
  3. Type de géométrie (type : chaîne, direction : entrée, filtre : liste de valeurs [POINT, MULTIPOINT, POLYLINE, POLYGON]
  4. Système de coordonnées (Type : référence spatiale)

Ensuite, construisez le code décrit ci-dessus. On dirait quelque chose comme ça. Le déballage du dictionnaire **kwarg (merci @dmahr) et les commentaires sont superflus, mais cela démontre la logique du script et comment une personne moins expérimentée en Python peut facilement modifier un paramètre.

__author__ = "John K. Tran" __contact__ = "[email protected]" __credits__ = "http://gis.stackexchange.com/questions/155497/tool-for-generating-feature-class-include-field- names-type" import arcpy import csv import os arcpy.SetProgressor("default", "Starting script… ") csvtable = arcpy.GetParameterAsText(0) # Votre modèle CSV. fc = arcpy.GetParameterAsText(1) # La classe d'entités en sortie. geometrytype = arcpy.GetParameterAsText(2) # Le type de géométrie de la classe d'entités en sortie. spatialref = arcpy.GetParameter(3) # Le système de coordonnées de la classe d'entités en sortie. # Créez la classe d'entités. arcpy.SetProgressorLabel("Création d'une classe d'entités") # Vous pouvez modifier ces paramètres CreateFeatureclass_management avant d'appeler la fonction. CreateFeatureClassParameters = {"out_path" : os.path.dirname(fc), "out_name" : os.path.basename(fc), "geometry_type" : geometrytype, "template" : None, "has_m" : "DISABLED", " has_z" : "DISABLED", "spatial_reference" : spatialref, "config_keyword" : None, "spatial_grid_1" : None, "spatial_grid_2" : None, "spatial_grid_3" : None} arcpy.CreateFeatureclass_management(**CreateFeatureClassParameters) # Lire la table CSV et stocker des informations d'en-tête dans un dictionnaire. arcpy.SetProgressorLabel("Lecture de la table CSV") csv.register_dialect("xls", delimiter=",", lineterminator="
") f = open(csvtable, "r") reader = csv.reader(f, " xls") header = reader.next() headerdict = dict() pour index, valeur dans enumerate(header): headerdict[value] = index # Crée un champ pour chaque ligne dans le CSV, basé sur les informations d'en-tête obtenues précédemment. pour la ligne dans le lecteur : arcpy.SetProgressorLabel("Ajout d'un champ {0}".format(row[headerdict["Field Name"]])) # Vous pouvez modifier ces paramètres AddField_management avant d'appeler la fonction. AddFieldParameters = {"in_table" : fc, "field_name" : row[headerdict["Field Name"]], "field_type" : row[headerdict["Field Type"]], "field_precision" : None, "field_scale" : None , "field_length" : row[headerdict["Field Length (If Type=TEXT)"]], "field_alias" : row[headerdict["Field Alias"]], "field_is_nullable" : "NULLABLE", "field_is_required" : " NON_REQUIRED", "field_domain" : None} arcpy.AddField_management(**AddFieldParameters) # Terminez le script. f.close() arcpy.ResetProgressor()

Enfin, étant donné que l'outil lit un CSV pour transmettre des entrées dans AddField_management, le CSV pourrait ressembler à ceci :

Nom du champ,Type de champ,Longueur du champ (si le type = TEXTE),Alias ​​de champ Le,TEXTE,50,John Great,FLOAT,,Paul Seafarer,SHORT,,Jones

Pour info, les pages d'informations sur l'outil ESRI sont indispensables. Faites-moi savoir si vous avez besoin d'aide.


Voir la vidéo: Fabricam Sheet Metal CAM CAD Software Design, Nesting, Cutting Tool Path Generating Feature Demonstr