elasticsearch - Elasticsearch 是否支持 postgis 中的 ST_DWithin 等地理查询
解决方案
据我所知,这并没有在 Elastic 中实现。但是您仍然可以通过离线计算多边形然后在geo_polygon
查询中使用它来实现您想要的。geo_shape
也可以使用查询,但您需要一个字段geo_shape
而不是一个字段geo_point
。
因此,例如,使用草皮buffer
,您可以使用该功能预先计算线周围的多边形。下面,我在圣何塞(加利福尼亚州)某处的某处道路上定义一条线,并在该线/道路周围定义一个 50 米的缓冲区:
const line = turf.lineString([[-121.862282,37.315430], [-121.851553,37.305532]], {name: 'line 1'});
const bufferPoly = turf.buffer(line, 50, {units: 'meters'});
您将得到以下多边形(缩写)
{
"type": "Feature",
"properties": {
"name": "line 1"
},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
-121.85121372045873,
37.305765606399724
],
[
-121.85116304254947,
37.30570833334188
],
[
-121.85112738572346,
37.30564429665501
],
[
-121.85110812025259,
37.30557595721911
],
...
[
-121.85121372045873,
37.305765606399724
]
]
]
}
}
看起来像这样:
然后您可以geo_polygon
像这样利用查询:
GET /_search
{
"query": {
"bool": {
"must": {
"match_all": {}
},
"filter": {
"geo_polygon": {
"your_geo_point": {
"points": [
[
-121.85121372045873,
37.305765606399724
],
[
-121.85116304254947,
37.30570833334188
],
[
-121.85112738572346,
37.30564429665501
],
[
-121.85110812025259,
37.30557595721911
],
...
[
-121.85121372045873,
37.305765606399724
]
]
}
}
}
}
}
}
推荐阅读
- prestashop - Prestashop 1.6 - 来自订单详细信息仪表板中编辑产品选项卡的附件
- filter - 为什么我的 python Butterworth 滤波器平滑信号频谱(在频率空间中)?
- angular - 将模拟 DOM 事件传递给 Angular 中的组件方法以进行单元测试
- kotlin - 如何在链内的 RXJava2 中使用 .delay() 和 .timer()?
- c# - 如何使用 ExcelReader 将数据导入数据库
- python - 从基于自定义类的视图继承的基于类的视图在父级中看不到上下文变量
- tsql - 用 TSQL 中的 Newid() 值替换 Dense_Rank() 值?
- c# - 调试 C# 时为什么不能更改字典键值对的计数?
- apache - 无法在 ubuntu 中启动 phpmyadmin
- sql - 日期时间的 Floor() 函数 - SQL Server