Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment convertir SDO_GEOMTRY en GeoJSON

Cela utilise la version (encore inédite) de cx_Oracle qui prend en charge la liaison d'objets et d'autres utilisations plus avancées d'objets. En utilisant l'exemple fourni avec cx_Oracle pour démontrer l'insertion de la géométrie, le code suivant transformera l'objet ainsi créé en JSON. La fonction ObjectRepr() incluse ci-dessous devrait fonctionner pour tout objet renvoyé par Oracle. Il lit simplement les métadonnées sur l'objet et transforme l'objet en un dictionnaire d'attributs ou une liste de valeurs.

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