如何在Grails中实现空间(地理位置)搜索?

如何在Grails中实现空间(地理位置)搜索?,grails,geospatial,spatial-query,spatial-index,Grails,Geospatial,Spatial Query,Spatial Index,我正在使用MySql开发Grails1.3.2。我需要在数据库中存储某些位置的纬度和经度,然后根据用户的当前位置,返回该位置特定半径内的项目。 因此,我们基本上有以下要求: 搜索用户当前坐标给定半径内的位置 提供全文搜索。我们目前正在为此使用searchable 在用户当前坐标的给定半径内进行全文搜索 我一直在研究我们这里的各种选择,并想知道您对实施这一点有什么看法/建议。我们在这里有各种选择: Lucene Spatial Search()并研究如何将其与searchable一起使用 grai

我正在使用MySql开发Grails1.3.2。我需要在数据库中存储某些位置的纬度和经度,然后根据用户的当前位置,返回该位置特定半径内的项目。 因此,我们基本上有以下要求:

  • 搜索用户当前坐标给定半径内的位置
  • 提供全文搜索。我们目前正在为此使用searchable
  • 在用户当前坐标的给定半径内进行全文搜索
  • 我一直在研究我们这里的各种选择,并想知道您对实施这一点有什么看法/建议。我们在这里有各种选择:

  • Lucene Spatial Search()并研究如何将其与searchable一起使用

  • grailssolr插件()。但这不会返回域对象

  • Grails缝合插件()。除了作者的网站()之外,没有太多的文档

  • MySql空间扩展以及域类所有字段的全文索引。如果我们走这条路,那么我们将根本不会使用searchable

  • Postgres/PostGIS与hibernate spatial()的集成
  • 我相信这是任何与地图集成的应用程序的基本要求

    因此,我很想知道实现此功能的最合适方法

    谢谢(我制作了一个原型,使用Long/Lat查找半径范围内的行,但现在放弃了这个原型,转而使用英国可用的GridRef系统)

    第一步,不要使用基于计算字段的WHERE条件(例如,基于给定坐标和行坐标的实际距离)

    相反,请尝试以下方法:

  • 想象一下半径=最大距离的圆
  • 使用弯曲的经线在其周围绘制一个框
  • 在该框中查找项目
  • 实际上,这意味着:

  • 计算出多少度经度代表你在给定纬度上的最大距离
  • 计算出在给定经度下,纬度代表最大距离的度数(使用球形地球模型时,此乘数将是固定的)
  • 从long>$westside和long<$Eastsside和lat<$northside和lat>$southside的位置选择*
  • 这意味着您需要进行非常简单的计算,以得到一个模糊的子集,该子集覆盖的区域比实际圆大30%左右。如果您还想添加文本搜索,请选择FROM(子查询)或在上面简单的比较之后添加您的文本子句,因为文本搜索的计算成本很高。

    存在一个问题。看起来它的一些子插件确实支持搜索,比如