Tôi đang cố gắng thực hiện một phép toán không gian bằng cách sử dụng sqlalchemy
và geoalchemy2
trên Python 3.5. Tôi có một bảng có các điểm là thuộc tính geom
. Tôi đã đọc bảng và làm theo hướng dẫn tài liệu:Lỗi về không gian và cơ sở dữ liệu PostGIS
metadata = MetaData()
table = Table('table',
metadata, autoload=True,
schema = "schema",
autoload_with=engine)
print(table.columns)
Điều này trả về chính xác tên của các cột trong bảng của tôi. Bây giờ, tôi muốn tạo một tập hợp con không gian của dữ liệu chỉ chọn các điểm bên trong một đối tượng POLYGON. Tôi đã thử với ST_Contains
và 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 là một hình học WKT với một định nghĩa SRID=4326
. Tôi đã thử với các hình thức khác nhau của cùng một đa giác đó, nhưng không ai có thể làm việc được. Khi thực hiện truy vấn, lỗi sau đây trả về:
(psycopg2.InternalError) geometry contains non-closed rings
HINT: "...140.965576171875 -11.11288507032144))" <-- parse error at position 166 within geometry
Tôi thất bại ở đâu?
đặt WKT đa giác của bạn. Như lỗi nói, một vòng có lẽ không được đóng (ví dụ điểm 1 và điểm cuối cùng của mỗi vòng phải giống nhau) – JGH
'wkt_string =" POLYGON ((141.0205078125 -9.166331387642987, 143.602294921875 -9.155485188844034, 143.67919921875 -11.112885070321443, 140.965576171875 -11.11288507032144)) "' Là đối tượng POLYGON. Như bạn đã nói, POLYGON thực sự không hợp lệ. Tuy nhiên, tôi đã cố gắng sử dụng 'sqlalchemy.sql.func.ST_MakeValid' và vấn đề vẫn tồn tại. Bất kỳ ý tưởng? –