sql >> Databasteknik >  >> RDS >> Oracle

Hur man konverterar SDO_GEOMTRY i GeoJSON

Detta använder den (ännu ej släppta) versionen av cx_Oracle som stöder bindning av objekt och annan mer avancerad användning av objekt. Genom att använda exemplet som medföljer cx_Oracle för att demonstrera införandet av geometri, kommer följande kod att omvandla objektet som skapats på det sättet till JSON. Funktionen ObjectRepr() som ingår nedan bör fungera för alla objekt som returneras från Oracle. Den läser helt enkelt metadata på objektet och förvandlar objektet till en ordbok med attribut eller en värdelista.

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



  1. CDbConnection kunde inte öppna DB-anslutningen:kunde inte hitta drivrutinen i Yii

  2. Välj fråga men visa resultatet från post nummer 3

  3. Behöver mitt bord mer normalisering?

  4. Laddar klassen com.mysql.jdbc.Driver ... är föråldrat meddelande