查找具有重叠地理点的半径的地理点

Posted

技术标签:

【中文标题】查找具有重叠地理点的半径的地理点【英文标题】:Find Geopoint with radius which are overlapping geopoint 【发布时间】:2020-05-04 11:29:55 【问题描述】:

正如你在下面看到的,我有

具有一定半径的 3 个地理点 A、B、C 1 个地理点 K,

我想找到所有半径重叠K Geo的GeoPoint

所以答案应该是 B、C。

那么如何才能做到这一点呢?

目前我正在使用 Mongodb。但任何其他数据库也可以。

【问题讨论】:

我认为你需要一个第三方库,例如Turf.js。您应该为几乎所有语言找到类似的开源包。一个好的起点可能是GEOS 【参考方案1】:

这个问题是基于意见的,就像“任何其他数据库都可以”的陈述一样。 但是为了记录,在ES中的实现方式如下:

PUT circles

  "mappings": 
    "properties": 
      "location": 
        "type": "geo_shape",
        "strategy": "recursive"
      
    
  


PUT circles/_doc/A

  "location": 
    "type": "circle",
    "coordinates": [
      16.34817123413086,
      48.20968893477074
    ],
    "radius": "2km"
  


PUT circles/_doc/B

  "location": 
    "type": "circle",
    "coordinates": [
      16.374435424804688,
      48.20122291334052
    ],
    "radius": "3km"
  


PUT circles/_doc/C

  "location": 
    "type": "circle",
    "coordinates": [
      16.386451721191406,
      48.21586595914765
    ],
    "radius": "4km"
  


GET circles/_search

  "query": 
    "geo_shape": 
      "location": 
        "shape": 
          "type": "point",
          "coordinates": [
            16.386795043945312,
            48.208773756674425
          ]
        ,
        "relation": "intersects"
      
    
  

屈服

[
  
    "_index":"circles",
    "_type":"_doc",
    "_id":"B",
    "_score":1.0,
    "_source":

    
  ,
  
    "_index":"circles",
    "_type":"_doc",
    "_id":"C",
    "_score":1.0,
    "_source":

    
  
]

【讨论】:

你知道在 MongoDB 中是怎么做的吗? 不。这可能会帮助***.com/a/25416354/8160318

以上是关于查找具有重叠地理点的半径的地理点的主要内容,如果未能解决你的问题,请参考以下文章

地理围栏算法

如何让地理字段填充半径值

在 mongodb 地理位置查询中使用对象属性作为 $maxDistance 参数

地理位置 - 如何检查 2 个圆圈是不是重叠

在Spark SQL作业中使用地理空间函数

查找地理点的聚类(距离聚类中心 y 距离内的最小 x 点)的算法