gpt4 book ai didi

python - 错误空间子集和 PostGIS 数据库

转载 作者:太空狗 更新时间:2023-10-30 01:26:33 24 4
gpt4 key购买 nike

我正在尝试在 Python 3.5 上使用 sqlalchemygeoalchemy2 进行空间操作。我有一个表,其中的点作为 geom 属性。我已经阅读了表格并按照文档说明进行操作:

metadata = MetaData()
table = Table('table',
metadata, autoload=True,
schema = "schema",
autoload_with=engine)
print(table.columns)

这正确地返回了我的表的列的名称。现在,我想创建一个数据的空间子集,只选择 POLYGON 对象内的点。我尝试使用 ST_ContainsST_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_string = "POLYGON((141.0205078125 -9.166331387642987, 
143.602294921875 -9.155485188844034,
143.67919921875 -11.112885070321443,
140.965576171875 -11.11288507032144,
141.0205078125 -9.166331387642987))"

或者,您可以 construct the polygon从一行中自动添加缺失的点

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;

关于python - 错误空间子集和 PostGIS 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44780352/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com