5
sqlalchemy
とgeoalchemy2
をPython 3.5で使用して空間操作をしようとしています。私はgeom
属性としてポイントを持つテーブルを持っています。私はすでにテーブルを読んだ後、ドキュメントの指示に従っています:空間的サブセット化とPostGISデータベースのエラー
これは私のテーブルの列の名前を正しく返します。ここでは、POLYGONオブジェクトの内部にある点だけを選択して、データの空間サブセットを作成します。私はST_Contains
とST_Intersection
で試してみました:
# Create session for queries
Session = sessionmaker(bind=engine)
session = Session()
#SELECT * FROM table:
q = session.query(table).filter(table.c.geom.ST_Intersects(func.GeomFromEWKT(<POLYGON>)))
POLYGONが定義されSRID=4326
とWKTジオメトリです。私はすでに同じポリゴンの異なる形で試してみましたが、うまくいきませんでした。クエリを実行すると、次のエラーが返されます。
(psycopg2.InternalError) geometry contains non-closed rings
HINT: "...140.965576171875 -11.11288507032144))" <-- parse error at position 166 within geometry
どこが失敗していますか?
不足しているポイントを追加するには、ポリゴンのWKTを置きます。エラーが示すように、リングはおそらく閉じていません(例えば、各リングの最初と最後のポイントは同じでなければなりません) – JGH
'wkt_string =" POLYGON((141.0205078125 -9.166331387642987、143.602294921875 -9.155485188844034、143.67919921875 -11.112885070321443、140.965576171875 -11.11288507032144 )) "' POLYGONオブジェクトです。あなたが言ったように、ポリゴンは実際には有効ではありません。それにもかかわらず、私は 'sqlalchemy.sql.func.ST_MakeValid'を使用しようとしましたが、問題は持続します。何か案は? –