Spatial querydsl-GeometryExpressions。查找包含给定“点”的范围的实体]] <<

问题描述 投票:2回答:1

二手工具及其版本:

我正在使用:

    弹簧靴2.2.6
  • 休眠/休眠空间5.3.10,方言设置为:org.hibernate.spatial.dialect.mysql.MySQL56SpatialDialect
  • querydsl-spatial 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-locationradius计算出的圆。它代表该诊所的手术区域。这意味着它将仅治疗其住所地址位于该圈子内的患者。假设上面的圆圈是正确的。

我的目标(问题):

我在患者位置有一个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 ?

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

但是我有两个问题:

    [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
  1. 在上面的行中使用调试器和intellij的“求值”(创建表达式),我可以看到一条错误消息:“ unknown operation with operator CONTAINS and args [clinic.range, POINT(45.7602322 4.8444941)]
  • [使用的工具及其版本:我正在使用:spring boot 2.2.6 hibernate / hibernate-spatial 5.3.10,方言设置为:org.hibernate.spatial.dialect.mysql.MySQL56SpatialDialect querydsl-spatial 4.2.1 ...
  • spatial querydsl
    1个回答
    1
    投票
    您可以忽略第二个警告。特定于空间的操作根本没有在用于该操作的toString的序列化器中注册。它们驻留在自己的模块中。
    © www.soinside.com 2019 - 2024. All rights reserved.