【问题标题】:python postgis ST_Contains failing querypython postgis ST_Contains 查询失败
【发布时间】:2011-12-15 13:05:01
【问题描述】:

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

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 日志文件也不是特别有用.. 有人能看出有什么问题吗? 提前致谢!

【问题讨论】:

    标签: python postgis


    【解决方案1】:

    可能是一个简单的答案...st_contains 返回 't' 而不是 'true'。 Postgres 对大小写敏感,请确保不是 T

    【讨论】:

      【解决方案2】:

      这与 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 文档中不建议使用此方法。

      【讨论】:

        猜你喜欢
        • 2018-06-09
        • 2015-01-08
        • 1970-01-01
        • 2015-05-24
        • 1970-01-01
        • 1970-01-01
        • 2012-12-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多