首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在kotlin-exposed中编写withinOP postgis扩展?

如何在kotlin-exposed中编写withinOP postgis扩展?
EN

Stack Overflow用户
提问于 2020-12-25 02:50:23
回答 1查看 171关注 0票数 1

这是一段使我能够以几何作为输入运行postgis &&的代码

代码语言:javascript
复制
private class WithinOp(val expr1: Expression<*>, val geom: PGgeometry) : Op<Boolean>() {
    override fun toQueryBuilder(queryBuilder: QueryBuilder) {
        expr1.toQueryBuilder(queryBuilder)
        queryBuilder.args
        queryBuilder.append(" && \'${geom.value}\'")
    }

查询的外观:SELECT * FROM table WHERE table."location" && 'SRID=4326;POLYGON((1 2,2 2,2 3,1 3,1 2))

现在,这是一个问题,因为&&是通过minimum bounding rectangle搜索的。它对我的目标来说不够精确,所以我想用更精确的postgis方法来代替它,比如ST_Intersects

但是当我更新我的构建器时,它不工作了,因为exposed错误地构建了这个查询:

代码语言:javascript
复制
private class WithinOp(val expr1: Expression<*>, val geom: PGgeometry) : Op<Boolean>() {
    override fun toQueryBuilder(queryBuilder: QueryBuilder) {
        expr1.toQueryBuilder(queryBuilder)
        queryBuilder.args
        queryBuilder.append(" ST_Intersects($expr1, \'${geom.value}\'")

查询:SELECT * FROM table WHERE table."location" ST_Intersects(waycare.sql.Table.location, 'SRID=4326;POLYGON((1 2,2 2,2 3,1 3,1 2)) -不正确

正确的语法是:SELECT * FROM table WHERE ST_Intersects(table."location",'SRID=4326;POLYGON((1 2,2 2,2 3,1 3,1 2))

如何在exposed it中构建良好的扩展并没有很好的文档。但我得找个解决办法。任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-25 19:46:32

我认为你需要在这里使用CustomFunction。我没有测试下面的代码,但它应该足以理解这个想法:

代码语言:javascript
复制
class ST_IntersectsFunction(val expr1: Expression<*>, val geom: String) 
   : CustomFunction<Boolean>("ST_Intersects", BooleanColumnType(), expr1, stringParam(geom.value))

并使用:

代码语言:javascript
复制
 table.select { ST_IntersectsFunction(table.id, geom) eq true }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65442236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档