Ich schreibe ein Shapefile mit OGR in Python und erstelle Felder im laufenden Betrieb aus einer Python-Datenquelle. Für die Erstellung eines neuen Felds ist ein OGR-Datentyp erforderlich. Gibt es eine Zuordnung zwischen OGR- und Python-Datentypen?
Dies wäre beispielsweise die Norm:
new_field = ogr.FieldDefn('MYFLD', ogr.OFTInteger)
Im Idealfall:
ogr_datatype = get_ogr_data_type(python_data)
new_field = ogr.FieldDefn('MYFLD', ogr_datatype)
Derzeit sind meine Konvertierungen fest codiert (z. B. int = ogr.OFTInteger), aber dies ist ein bisschen mühsam und hängt davon ab, dass ich alle möglichen Datentypen codiere.
Antworten:
Sie müssen ein Wörterbuch mit Python-Typen für OGR- "Typen" erstellen, da diese nur Ints sind. Ich gebe Ihnen zu, dass es ein bisschen schmerzhaft ist, aber OGR (und die von SWIG generierten Bindungen) haben keine Ahnung von den Typen einer Sprache, egal ob in C oder Python.
So etwas sollte funktionieren:
quelle
Für das, was es wert ist, habe ich ein Python-Paket, das eine solche Zuordnung enthält. Siehe https://github.com/Toblerity/Fiona/blob/master/src/fiona/ogrext.pyx#L18 . Hier kopiert:
Meine Zuordnung ist unvollständig, da ich in freier Wildbahn nicht auf viele OFT * -Listenfelder stoße. Sie möchten diese wahrscheinlich Python-Arrays zuordnen (OFTIntegerList -> Array ('i') zum Beispiel), da Pythons Listen nicht typisiert sind. OFTDate / Time-Felder sind der Teufel, und die Zuordnung zu Python DateTime verbessert die Situation nicht, da die Datetime-Modul-API schrecklich ist. In meinem Projekt werde ich Datums- und Uhrzeitangaben ISO 8601-Zeichenfolgen wie "2012-01-02T20: 59: 38Z" zuordnen. Rohe Binärdaten würden einer Nicht-Unicode-Python-Zeichenfolge zugeordnet (die in Python 3 zum Bytetyp wird).
quelle
Wenn Ihr Ziel einfach die Bearbeitung von Shapefiles in Python ist, schauen Sie sich PyShp an:
http://code.google.com/p/pyshp/
Es ist reines Python, daher verwenden Sie nur Python-Datentypen. Ich habe auch Beispiele für allgemeine Geometrie- und Attributoperationen auf GeospatialPython.com
quelle