Oracle
 sql >> Datenbank >  >> RDS >> Oracle

So konvertieren Sie SDO_GEOMTRY in GeoJSON

Dies verwendet die (noch unveröffentlichte) Version von cx_Oracle, die das Binden von Objekten und andere fortgeschrittenere Verwendungen von Objekten unterstützt. Anhand des mit cx_Oracle bereitgestellten Beispiels zur Demonstration des Einfügens von Geometrie transformiert der folgende Code das so erstellte Objekt in JSON. Die unten enthaltene Funktion ObjectRepr() sollte für jedes von Oracle zurückgegebene Objekt funktionieren. Es liest einfach die Metadaten des Objekts und verwandelt das Objekt in ein Wörterbuch mit Attributen oder eine Liste mit Werten.

import cx_Oracle
import json

connection = cx_Oracle.Connection("user/[email protected]")
typeObj = connection.gettype("SDO_GEOMETRY")
cursor = connection.cursor()
cursor.execute("""
        select Geometry
        from TestGeometry
        where IntCol = 1""")
obj, = cursor.fetchone()

def ObjectRepr(obj):
    if obj.type.iscollection:
        returnValue = []
        for value in obj.aslist():
            if isinstance(value, cx_Oracle.Object):
                value = ObjectRepr(value)
            returnValue.append(value)
    else:
        returnValue = {}
        for attr in obj.type.attributes:
            value = getattr(obj, attr.name)
            if value is None:
                continue
            elif isinstance(value, cx_Oracle.Object):
                value = ObjectRepr(value)
            returnValue[attr.name] = value
    return returnValue

print("JSON:", json.dumps(ObjectRepr(obj)))