Python 错误空间子集和PostGIS数据库

Python 错误空间子集和PostGIS数据库,python,postgresql,postgis,geoalchemy2,Python,Postgresql,Postgis,Geoalchemy2,我试图在Python3.5上使用sqlalchemy和geoalchemy2进行空间操作。我有一个表,其中点是geom属性。我已经阅读了表格并按照文档说明进行操作: metadata = MetaData() table = Table('table', metadata, autoload=True, schema = "schema", autoload_with=engine) prin

我试图在Python3.5上使用
sqlalchemy
geoalchemy2
进行空间操作。我有一个表,其中点是
geom
属性。我已经阅读了表格并按照文档说明进行操作:

metadata = MetaData()
table = Table('table', 
                 metadata, autoload=True,
                 schema = "schema",
                 autoload_with=engine)
print(table.columns)
这将正确地返回表中列的名称。现在,我想创建数据的空间子集,只选择多边形对象内部的点。我尝试了
ST\u Contains
ST\u crossion

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

我在哪里失败了

您正在使用的多边形未闭合。第一个和最后一个坐标必须相同。将其更改为:

wkt_string = "POLYGON((141.0205078125 -9.166331387642987, 
                       143.602294921875 -9.155485188844034, 
                       143.67919921875 -11.112885070321443, 
                       140.965576171875 -11.11288507032144, 
                       141.0205078125 -9.166331387642987))"
或者,您可以从一条直线开始自动添加缺失的点

SELECT ST_MakePolygon(
         ST_AddPoint(foo.open_line, ST_StartPoint(foo.open_line)))
FROM (
  SELECT ST_GeomFromText(
            'LINESTRING(141.0205078125 -9.166331387642987, 
                        143.602294921875 -9.155485188844034,
                        143.67919921875 -11.112885070321443, 
                        140.965576171875 -11.11288507032144)')
              As open_line) 
   As foo;

把你的多边形放在桌子上。正如错误所说,一个环可能没有闭合(例如,每个环的第一个点和最后一个点必须相同)
wkt_string=“POLYGON((141.020578125-9.166331387642987143.602294921875-9.155485188844034、143.67919921875-11.112885070321443、140.965576171875-11.11288507032144))“
是多边形对象。正如你所说,多边形实际上是无效的。尽管如此,我还是尝试使用了
sqlalchemy.sql.func.ST_MakeValid
,问题依然存在。有什么想法吗?
SELECT ST_MakePolygon(
         ST_AddPoint(foo.open_line, ST_StartPoint(foo.open_line)))
FROM (
  SELECT ST_GeomFromText(
            'LINESTRING(141.0205078125 -9.166331387642987, 
                        143.602294921875 -9.155485188844034,
                        143.67919921875 -11.112885070321443, 
                        140.965576171875 -11.11288507032144)')
              As open_line) 
   As foo;