gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:28:51 25 4
gpt4 key购买 nike

使用的工具及其版本:

我正在使用:

  • 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/

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