栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

休眠空间-在X公里半径内查询?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

休眠空间-在X公里半径内查询?

看到 这个资源
的“空间查询”教程,其中包含特殊的方言和JTS库(开放源代码)。

基本上,您可以执行以下操作(从引用的页面复制/粘贴):

import com.vividsolutions.jts.geom.Geometry;import com.vividsolutions.jts.geom.Point;import com.vividsolutions.jts.io.ParseException;import com.vividsolutions.jts.io.WKTReader;import util.JPAUtil;import javax.persistence.EntityManager;import javax.persistence.Query;import java.util.Date;import java.util.List;

.......

private List find(String wktFilter) {    Geometry filter = wktToGeometry(wktFilter);    EntityManager em = JPAUtil.createEntityManager();    em.getTransaction().begin();    Query query = em.createQuery("select e from Event e where within(e.location, :filter) = true", Event.class);    query.setParameter("filter", filter);    return query.getResultList();}private Geometry wktToGeometry(String wktPoint) {    WKTReader fromText = new WKTReader();    Geometry geom = null;    try {        geom = fromText.read(wktPoint);    } catch (ParseException e) {        throw new RuntimeException("Not a WKT string:" + wktPoint);    }    return geom;}

有关生成圆的信息,请参见此资源(搜索“弧,圆和曲线”)。再次从那里复制/粘贴:

//this method replaces the above wktToGeometry() methodprivate static Geometry createCircle(double x, double y, final double RADIUS) {  GeometricShapeFactory shapeFactory = new GeometricShapeFactory();  shapeFactory.setNumPoints(32);  shapeFactory.setCentre(new Coordinate(x, y));//there are your coordinates  shapeFactory.setSize(RADIUS * 2);//this is how you set the radius  return shapeFactory.createCircle();}

此外,您始终拥有一种解决方法,其中可以添加一些其他字段(使用映射

insertable=false,updatable=false
)以映射到所使用的相同列
org.hibernate.spatial.GeometryType
,然后在查询中使用它们。要计算距离,请检查欧几里德距离公式。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/447737.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号