Oracle
 sql >> Database >  >> RDS >> Oracle

Come convertire SDO_GEOMTRY in GeoJSON

Questo sta usando la versione (non ancora rilasciata) di cx_Oracle che supporta l'associazione di oggetti e altri usi più avanzati degli oggetti. Utilizzando l'esempio fornito con cx_Oracle per dimostrare l'inserimento della geometria, il codice seguente trasformerà l'oggetto creato in questo modo in JSON. La funzione ObjectRepr() inclusa di seguito dovrebbe funzionare per qualsiasi oggetto restituito da Oracle. Legge semplicemente i metadati sull'oggetto e trasforma l'oggetto in un dizionario di attributi o in un elenco di valori.

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)))