Я столкнулся с проблемой, я знаю, как найти все geo_points в определенном радиусе, но мне нужно найти, в скольких регионах или geo_shape находится конкретная точка. Чтобы решить эту проблему, я сделал следующий индекс:
PUT /users
И это отображение:
PUT /users/_mapping/_doc
{
"properties": {
"radius": {
"type": "geo_shape",
"tree": "quadtree",
"precision": "100m"
},
"point":{
"type":"geo_point"
}
}
}
Также ниже представлен образец документа:
POST /users/_doc
{
"radius":{
"type" : "circle",
"coordinates" : [28.363157, 77.287550],
"radius" : "100km"
},
"point":{
"lat" : 28.363157,
"lon": 77.287550
}
}
Я делаю следующий запрос:
POST /users/_search
{
"query":{
"bool": {
"must": {
"match_all": {}
},
"filter": {
"geo_shape": {
"radius": {
"shape": {
"type": "point",
"coordinates" : [29.363157, 77.28755]
},
"relation": "contains"
}
}
}
}
}
}
Теперь расстояние между широтами в запросе и документом составляет почти 110-112 км / с, поэтому указанный выше запрос возвращает точный результат, но когда я запрашиваю [30.363157, 77.28755]
, он по-прежнему возвращает документ, даже если расстояние превышает 220 км / с.
Что я делаю неправильно?
Я думаю, ваша карта неправильная, 30.363157, 77.28755 лежит где-то в Индии! Можете ли вы рассказать мне, как вы делаете эту карту?
Думаю, я обнаружил свою глупость, координаты в формате [lon, lat], я ожидал их как [lat, lon].
Карта правильная, поверьте. GeoJSON требует lon, lat ;-) Но действительно, если вы перевернете долготу на долгий <-> шир, то ваша точка окажется вне круга вокруг Нью-Дели.
да я тебе верю !!!! ответьте на вопрос, отмечу как принято: D
Я нанес на карту круг и вторую точку (30.363157, 77.28755), и последняя хорошо вписывается в круг. Вы можете увидеть это здесь: gist.github.com/consulthys/5ec4c720faa69462cbee5f3e16dfd418