私はsqlalchemyとgeoalchemyを使用し、geojsonで結果を変換します。このような通常の方法で :cx_Oracle.Objets直列化可能ではないので、GeoJSONでSDO_GEOMTRYを変換する方法
print json.dumps([dict(r) for r in connection.execute(query)])
は、それは不可能です! 私はこの1つのように別々の属性を通じてアクセスすることができます。
ここresult = connection.execute(query)
result2 = result.fetchone()[0]
print result2.SDO_ORDINATES
である私のprogramm:
#!/usr/bin/env python
# coding: utf8
#from __future__ import absolute_import, division, print_function
from sqlalchemy import create_engine
from sqlalchemy import Table, MetaData
from sqlalchemy.sql import and_, select
from geoalchemy import Geometry, GeometryExtensionColumn
from geoalchemy import *
from geoalchemy.oracle import oracle_functions
from geoalchemy.oracle import OracleComparator
import cx_Oracle
import json
import sdo
#def main():
engine = create_engine('oracle+cx_oracle://TEST_3D:[email protected]:1521/sdetest')
metadata = MetaData(engine)
# Loading tables
building = Table(
'building',
metadata,
GeometryExtensionColumn('centroid_geom', Geometry(2, srid= 431467)),
autoload=True,
autoload_with=engine
)
GeometryDDL(building)
thematic_surface = Table('thematic_surface', metadata, autoload=True)
surface_geometry = Table('surface_geometry', metadata, autoload=True)
objectclass = Table('objectclass', metadata, autoload=True)
connection = engine.connect()
# define the query
query = select([(surface_geometry.c.geometry)] #building.c.id, surface_geometry.c.geometry, objectclass.c.classname
).where(
and_(
building.c.grid_id_400 == 4158,
building.c.id == thematic_surface.c.building_id,
thematic_surface.c.lod2_multi_surface_id == surface_geometry.c.root_id,
surface_geometry.c.geometry != None,
thematic_surface.c.objectclass_id == objectclass.c.id,
)
)
# Execute and print the result of the query
#print json.dumps([dict(r) for r in connection.execute(query)])
result = connection.execute(query)
私はにGeoJSONで私cx_Oracle.Objectsのすべてを変換しますが、どのように? インターネットでは、関数sdo2geojsonはSQLデベロッパーではうまく機能しますが、もちろんこの関数はPythonでは解読されていません...
誰かが私を助けてくれることを願っていますか?
このエラーメッセージが表示されます。** AttributeError: 'cx_Oracle.ObjectType'オブジェクトには 'iscollection'という属性はありません**。 SQL文の私の結果はcx_Oracle.OBJECTです。なにが問題ですか? typeObjを定義した理由は? ** AttributeError: 'cx_Oracle.Connection'オブジェクトに属性 'gettype'がありません。** – Moehre
関数に関して、最初の部分(if.obj.type.iscollection)が機能していません。 2番目の部分は正常に動作します。私はこのような構造を持っています:**(Number、cx_Oracle.OBJECT、String)、(...)、... ... **このような構造体をGeoJSONでどのように変換できますか?番号 ":12、 "幾何"[3500983.087、5394211.455、473.82800000000003、3500 978.97、5394211.04、469.069、3500979.85、5394201.47、468.482、3500984.777、53942 02.055、474.192、3500983.087、5394211.455、473.82800000000003]、 "タイプ":屋根} – Moehre
cx_Oracleの未リリース版を使用する必要があります。ソースをhttps://bitbucket.org/anthony_tuininga/cx_oracleから取得し、コンパイルします。その後、うまくいくはずです。 –