Python PostGIS ST_Contains查询失败

3 投票
2 回答
981 浏览
提问于 2025-04-17 08:26

我一直在尝试以下方法,但总是失败,

roomTypeSQL = "SELECT spftype FROM cameron_toll_spatialfeatures WHERE ST_Contains(ST_GeomFromText(%s), ST_geomFromWKB(geometry)) = 'True';"
roomTypeData = (pointTested) # "POINT(-3.164005 55.926378)"
.execute(roomTypeSQL, roomTypeData)

我想从我的表中获取包含特定点的多边形。我也试过 ST_Within,但也不行。我觉得我的问题可能和点和多边形的格式有关,但我几乎尝试了所有组合,还是没有成功。我尝试定义我的多边形,那个是可以的,但我必须用数据库中的多边形。我的postgresql日志文件也没有提供什么有用的信息……
有没有人能看出哪里出问题了?
提前谢谢大家!

2 个回答

0

这个问题可能有个简单的答案……st_contains 返回的是 't' 而不是 'true'。Postgres 对大小写是敏感的,所以要确保用的是小写的 t,而不是大写的 T。

0

这段话是关于Python中的运算符的。我用Python的%运算符正确地输入了所有的SQL参数,结果一切正常。就像这样,

roomTypeSQL = "SELECT spftype FROM cameron_toll_spatialfeatures WHERE ST_Contains(ST_GeomFromText(%s),ST_geomFromWKB(geometry))=%s;"

roomTypeData = (pointTested,'t') # "POINT(-3.164005 55.926378)"

.execute(roomTypeSQL, roomTypeData)

不过,Python的运算符有时候会让人感到很烦恼。它并不总是按预期那样工作。我有一些SQL命令的例子,在这些例子中,我不得不把参数直接放在SQL命令里。虽然这种方法有效,但在Python的文档中并不推荐这样做。

撰写回答