Найти Geopoint с радиусом, которые перекрывают геопункт - PullRequest
0 голосов
/ 04 мая 2020

Как вы можете видеть ниже, у меня есть

3 GeoPoint A, B, C с некоторым радиусом
1 GeoPoint K,

enter image description here

Я хочу найти все GeoPoint с перекрывающимся радиусом K Geo

Итак, ответ должен быть B, C.

Так как этого достичь?

В настоящее время я использую Mongodb. Но любая другая база данных тоже подойдет.

1 Ответ

1 голос
/ 04 мая 2020

Этот вопрос основывается на мнении, как и утверждение "любой другой БД в порядке". Но для справки, способ сделать это в 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":{

    }
  }
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...