空间查询dsl - 几何表达式。查找范围包含给定 "Point"的实体

标签 spatial querydsl

使用的工具及其版本:

我正在使用:

  • Spring Boot 2.2.6
  • 休眠/休眠空间 5.3.10方言设置为:org.hibernate.spatial.dialect.mysql.MySQL56SpatialDialect
  • querydsl-空间 4.2.1
  • com.vividsolutions.jts 1.13
  • jscience 4.3.1

问题描述:

我有一个代表医疗诊所的实体:

import com.vividsolutions.jts.geom.Polygon;

@Entity
public class Clinic {

    @Column(name = "range", columnDefinition = "Polygon")
    private Polygon range;
}

range是之前根据诊所的gps-location计算出来的圆和 radius .它表示该诊所的操作区域。这意味着它只治疗家庭住址在该圈内的患者。让我们假设上面的圆圈是正确的。

我的目标(问题):

我有一个带有患者位置的 gps 点:45.7602322 4.8444941 .我想找到所有能够治疗该患者的诊所。这意味着,找到他们的所有诊所 range字段包含 45.7602322 4.8444941 .

我的解决方案(部分正确(我认为))

为了完成它,我创建了一个简单的“Predicate”/“BooleanExpression”:

GeometryExpressions.asGeometry(QClinic.clinic.range)
                .contains(Wkt.fromWkt("Point(45.7602322 4.8444941)"))

它确实有效,因为我可以在控制台中看到正确的 sql 查询:

select (...) where
    ST_Contains(clinic0_.range, ?)=1 limit ?

第一个绑定(bind)参数:POINT(45.7602322 4.8444941)

但是我有两个问题:

  1. QClinic.clinic.range在 intellij 中被标记为“警告”:“Unchecked assignment: 'com.querydsl.spatial.jts.JTSPolygonPath' to 'com.querydsl.core.types.Expression<org.geolatte.geom.Geometry' ”。是的,在 QClinic范围是 com.querydsl.spatial.jts.JTSPolygonPath
  2. 在上面的行(创建表达式)中使用调试器和 intellij 的“评估”,我可以看到有一条错误消息:“unknown operation with operator CONTAINS and args [clinic.range, POINT(45.7602322 4.8444941)]

最佳答案

您可以忽略第二个警告。空间特定操作根本没有在用于操作的 toString 的序列化程序中注册。它们驻留在自己的模块中。

第一个警告表明您混淆了 Geolatte 和 JTS 表达式。从您的映射看来您打算使用 JTS。在这种情况下,您需要使用 com.querydsl.spatial.jts.JTSGeometryExpressions 而不是 com.querydsl.spatial.jts.GeometryExpressions 才能消除该警告。

关于空间查询dsl - 几何表达式。查找范围包含给定 "Point"的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61703743/

相关文章:

postgresql - PostgreSQL 中的空间数据

python - 里普利的 K 函数(二阶强度函数)Python

mysql - Solr SpatialRecursivePrefixTreeFieldType 和 MySQL DIH

java - elasticsearch自定义相似度插件如何实现?

Spring 数据规范或 QueryDSL

MySQL GIS/空间扩展 - 融化我的大脑

python - 改进 Python 中点云空间感知中值滤波器的方法

java - QueryDSL 获取另一个实体集合中的任何实体

spring - QueryDSL 生成的类在 Spring Tool Suite 的 maven 项目中不断被删除

java - 在类路径中包含 Qclass