Kochizufan wurde zum ersten Mal nach einem Jobwechsel mit ArcGIS gesegnet, nachdem er nur Open Source GIS verwendet hatte. Es scheint scheiße teuer zu sein, aber wenn Sie die gleiche Verarbeitung durchführen möchten, ist Arc viel schneller! Nun, ich denke, es ist natürlich, weil jeder es gewählt hätte, wenn es nur teuer gewesen wäre und sich nicht damit befasst hätte ...
Daher müssen Daten aus dem Vektorkartenformat (Beispiel: Formdatei) gelesen, jedes Attribut auf verschiedene Arten verarbeitet und in andere Formate (Beispiel: FGDB) und arcpy (ArcGIS-Python-Umgebung) ausgespuckt werden. ), Ich habe herausgefunden, wie es geht, also werde ich etwas Know-how schreiben.
Um ehrlich zu sein, hatte ich große Probleme, es herauszufinden. Aus irgendeinem Grund zuerst die meisten bogenförmigen Artikel
import arcpy
# Set the workspace environment to local file geodatabase
arcpy.env.workspace = "C:/data/base.gdb"
Es heißt, und Sie können die folgenden Schemas von hier aus auflisten, aber ich habe den Prozess der Angabe des DB-Ordners in diesem Arbeitsbereichsattribut als "den Prozess des Öffnens der DB" missverstanden. Ich war also verwirrt, als ich dachte: "Geben Sie die Datenbank an, die geöffnet werden soll, ohne eine Instanz zu erstellen? Was passiert, wenn Sie mehrere Seiten öffnen, lesen und einstecken möchten?" Tatsächlich wird die Anzahl der Artikel drastisch reduziert, aber es gab auch eine Schnittstelle, die normalerweise eine Instanz der Cursor-Klasse erstellt. Vielleicht bin ich der einzige, aber einige Leute können im selben Sumpf stecken bleiben, also teilen Sie die Sucht im Voraus.
Ein Beispielcode, der tatsächlich geöffnet, verarbeitet und eingetaucht wird.
bogenförmige Probe
import arcpy
from arcpy import env
import datetime
#Originalformdatei
sFClass = "D:/Data/SampleShape/SampleScheme.shp"
#Lesen Sie das Definitionsobjekt der Originaldatei
sDesc = arcpy.Describe(sFClass)
#Lesen Sie die Felddefinitionsliste
sFields = sDesc.fields
#Erstellen Sie eine Feldnamenliste aus einer Felddefinitionsliste
sKeys = [field.name for field in sFields]
#Das automatisch nummerierte System-ID-Feld wurde entfernt(Für die Form)
sKey.remove('FID')
#Formfeld entfernt, das ein Geometriefeld ist
#(Da das Standardfeld Form nur Punktinformationen zu repräsentativen Punkten enthält)
#Ein Feld zum Extrahieren von Geometrie mit WKB wurde hinzugefügt
sKey.remove('Shape')
sKey.append('Shape@WKB')
#FGDB-Datei zum Schreiben
fFClass = "D:/Data/Sample_FGDB.gdb/SAMPLE_SCHEME"
#Lesen Sie das Definitionsobjekt der Zieldatei
fDesc = arcpy.Describe(fFClass)
#Lesen Sie die Felddefinitionsliste
fFields = fDesc.fields
#Erstellen Sie eine Feldnamenliste aus einer Felddefinitionsliste
fKeys = [field.name for field in fFields]
#Das automatisch nummerierte System-ID-Feld wurde entfernt(Für FGDB)
fKey.remove('OBJECTID')
#Formfeld entfernt, das ein Geometriefeld ist
#(Da das Standardfeld Form nur Punktinformationen von repräsentativen Punkten schreiben kann)
#Feld zum Schreiben von Geometrie in WKB hinzugefügt
fKey.remove('Shape')
fKey.append('Shape@WKB')
#Lesen Sie die Originaldatei und öffnen Sie den Cursor (Suchergebnisse werden in der Reihenfolge sKeys angezeigt)
#Darüber hinaus arcpy.da ist ArcGIS 10.Es scheint von 1 oder später zu sein, also scheint es, dass es vorher nicht funktionieren wird...
#Der PC des Kollegen ist 10.Es hat nicht funktioniert, weil es 0 war
sCur = arcpy.da.SearchCursor(sFClass, sKeys)
#Öffnen Sie den Cursor, indem Sie die Zieldatei hinzufügen(Schreiben Sie in eine Liste von fKeys)
fCur = arcpy.da.InsertCursor(fFClass, fKeys)
#Zeile für Zeile lesen
for sRow in sCur:
#Da sRow als Liste von sKeys geliefert wird, komprimieren Sie es in ein Wörterbuchobjekt.
sDic = dict(zip(sKeys,sRow))
#Erstellen Sie Schreibdaten im Wörterbuch (die folgende Zuordnung ist angemessen)
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
}
#Erweitern Sie das Schreibdatenwörterbuch auf eine Liste in der Reihenfolge von fKeys (Hinweis: Fehler, wenn in dieser Schreibmethode kein Wert für alle fKeys vorhanden ist)
fRow = [fDic[key] for key in fKey]
#Wert in FGDB einfügen
fCur.insertRow(fRow)
del fCur
del sCur
Mit dieser Art von Gefühl können Sie mit arcpy ganz einfach eine Vektorkartendatei mit einem anderen Schema und Format als die ursprüngliche Vektorkartendatei erstellen.
FOSS 4G Version jemand schreiben
Recommended Posts