所以我有一个城市索引,看起来像这样:
{
"location": "41.388587, 2.175888",
"name": "BARCELONA",
"radius": 20
}
我们有几十个。我需要能够使用单个lat / lng组合查询此索引,看看它是否属于我们的“城市”之一。
location
属性是城市的中心,radius
是以km为单位的城市半径(假设所有城市都是圆圈)。我们也可以假设没有城市重叠。
如果lat / lng组合是否属于某个城市,我该怎么办?
例如,给定点40.419691, -3.701254
,如何确定这是否属于巴塞罗那?
答案 0 :(得分:1)
你可以在Lucene,Solr或ES中轻松完成。
以Solr为例:
通过使用lat / long和radius,您可以为每个城市创建一个特定的圆,并在名为“shape”的字段中为该形状编制索引,例如:
{
"location": "41.388587, 2.175888",
"name": "BARCELONA",
"shape": "CIRCLE (2.175888 41.388587, 20)"
}
然后您只需查询与您的点相交的任何文档(未经测试):
fq=shape:"Intersects(40.419691 -3.701254)"
请务必检查您正在使用的Lucene / Solr / ES特定版本的docs和javadocs,因为API已在此空间中进行更改