[PYTHON] Opération et conversion de format vectoriel avec arcpy

Kochizufan a eu la chance d'utiliser ArcGIS pour la première fois après avoir changé de travail car il n'avait utilisé que le SIG Open Source. Cela semble être de la merde cher, mais si vous voulez faire le même traitement, Arc est beaucoup plus rapide! Eh bien, je pense que c'est naturel parce que tout le monde l'aurait choisi si c'était juste cher et ne l'avait pas traité ...

Il est donc nécessaire de lire les données à partir du format de carte vectorielle (exemple: fichier Shape), de traiter chaque attribut de différentes manières et de le recracher dans d'autres formats (exemple: FGDB) et arcpy (environnement ArcGIS python) ), J'ai trouvé comment le faire, donc j'écrirai un peu de savoir-faire.

Pourquoi as-tu eu du mal

Pour être honnête, j'ai eu beaucoup de mal à le découvrir. Pour une raison quelconque, la plupart des articles ardus, d'abord

import arcpy

# Set the workspace environment to local file geodatabase
arcpy.env.workspace = "C:/data/base.gdb"

Il dit, et vous pouvez lister les schémas ci-dessous à partir d'ici, mais j'ai mal compris le processus de spécification du dossier DB dans cet attribut d'espace de travail comme "le processus d'ouverture de la DB". Donc, j'étais confus quand j'ai pensé: "Voulez-vous spécifier la base de données à ouvrir sans créer d'instance? Que se passe-t-il lorsque vous voulez ouvrir plusieurs pages, les lire et les insérer?" En fait, le nombre d'articles est considérablement réduit, mais il y avait aussi une interface qui crée normalement une instance de la classe Cursor. Peut-être que je suis le seul, mais certaines personnes peuvent rester coincées dans le même marais, alors partagez la dépendance à l'avance.

Traitement de l'échantillon pour ouvrir et plonger

Donc, un exemple de code qui s'ouvre, traite et plonge réellement.

échantillon arcpy


import arcpy
from arcpy import env
import datetime
 
#Fichier de forme d'origine
sFClass = "D:/Data/SampleShape/SampleScheme.shp"
#Lire l'objet de définition du fichier d'origine
sDesc   = arcpy.Describe(sFClass)
#Lire la liste des définitions de champ
sFields = sDesc.fields
#Créer une liste de noms de champs à partir d'une liste de définitions de champs
sKeys   = [field.name for field in sFields]
#Champ ID système à numérotation automatique supprimé(Pour la forme)
sKey.remove('FID')
#Champ de forme supprimé, qui est un champ de géométrie
#(Parce que le champ Forme par défaut ne donne que des informations sur les points représentatifs)
#Ajout d'un champ pour extraire la géométrie avec WKB
sKey.remove('Shape')
sKey.append('Shape@WKB')
 
#Fichier FGDB dans lequel écrire
fFClass = "D:/Data/Sample_FGDB.gdb/SAMPLE_SCHEME"
#Lire l'objet de définition du fichier de destination
fDesc   = arcpy.Describe(fFClass)
#Lire la liste des définitions de champ
fFields = fDesc.fields
#Créer une liste de noms de champs à partir d'une liste de définitions de champs
fKeys   = [field.name for field in fFields]
#Champ ID système à numérotation automatique supprimé(Pour FGDB)
fKey.remove('OBJECTID')
#Champ de forme supprimé, qui est un champ de géométrie
#(Parce que le champ Forme par défaut ne peut écrire que les informations de point des points représentatifs)
#Ajout d'un champ pour écrire la géométrie dans WKB
fKey.remove('Shape')
fKey.append('Shape@WKB')
 
#Lisez le fichier original et ouvrez le curseur (les résultats de la recherche apparaîtront dans l'ordre des sKeys)
#De plus, arcpy.da est ArcGIS 10.Cela semble être de 1 ou plus tard, il semble donc que cela ne fonctionnera pas avant cela...
#Le PC du collègue est de 10.Cela n'a pas fonctionné parce que c'était 0
sCur = arcpy.da.SearchCursor(sFClass, sKeys)
#Ouvrez le curseur en ajoutant le fichier de destination(Ecrire dans une liste de fKeys)
fCur = arcpy.da.InsertCursor(fFClass, fKeys)
#Lire ligne par ligne
for sRow in sCur:
    #Puisque sRow se présente sous la forme d'une liste de sKeys, compressez-la dans un objet dictionnaire.
    sDic = dict(zip(sKeys,sRow))
    #Créer des données d'écriture dans le dictionnaire (le mappage suivant est approprié)
    fDic = {
        "CODE"          : "ID_" + sDic["ID"],
        "Shape@WKB"     : sDic["Shape@WKB"],
        "CUSTOMER_NAME" : sDic["FIRST_NM"] + " " + sDic["LAST_NM"],
        "Importance"    : sDic["Priority"],
        "Even_Or_Odd"   : sDic["NUMBER"] % 2
    }
    #Développez le dictionnaire de données d'écriture dans une liste dans l'ordre des fKeys (Remarque: Erreur s'il n'y a pas de valeur correspondant à toutes les fKeys dans cette méthode d'écriture)
    fRow = [fDic[key] for key in fKey]
    #Insérer une valeur dans FGDB
    fCur.insertRow(fRow)

del fCur
del sCur

Avec ce genre de sensation, vous pouvez facilement créer un fichier de carte vectorielle avec un schéma et un format différents du fichier de carte vectorielle d'origine avec arcpy.

Yurubo

Version FOSS 4G écrire à quelqu'un

Recommended Posts

Opération et conversion de format vectoriel avec arcpy
[python] Opération vectorielle
Format SQL avec sqlparse
Essayez l'opération matricielle avec NumPy
Opération S3 avec python boto3
Formater la source du langage C avec pycparser
Formater json avec Vim (avec python)
Format de chaîne avec l'opérateur Python%