[英]Error spatially subsetting and PostGIS database
我试图让使用空间操作sqlalchemy
和geoalchemy2
关于Python 3.5。 我有一个表作为geom
属性的点。 我已阅读该表并按照文档说明操作:
metadata = MetaData()
table = Table('table',
metadata, autoload=True,
schema = "schema",
autoload_with=engine)
print(table.columns)
这正确地返回了我的表的列的名称。 现在,我想创建数据的空间子集,仅选择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是WKT几何,定义的SRID=4326
。 我已经尝试过使用相同多边形的不同形式,但没有一个有效。 执行查询时,以下错误返回:
(psycopg2.InternalError) geometry contains non-closed rings
HINT: "...140.965576171875 -11.11288507032144))" <-- parse error at position 166 within geometry
我失败的地方?
您正在使用的多边形未关闭。 第一个和最后一个坐标必须相同。 将其更改为:
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.