参考文章:
Elasticsearch地理形状
Elasticsearch geo_shape地理形状
ES地理范围查询第二讲:地理位置信息之geo_shape
ES GEO地理空间查询java版
Elasticsearch geo_point/geo_shape
一、概述
通常情况,我们使用一个经纬度坐标表示一个店铺的位置、一个用户的位置,经纬度在地图上仅仅表示一个点,有时候需要表示一个区域,例如:停车场、商场、学校等等,这些区域拥有各种各样的形状,包括:圆形、多边形等等。
ES中存储地理形状的数据类型为: geo_shape
geo_shape支持存储的常用形状数据如下:
- 点(point)
- 圆形(circle)
- 矩形(envelope)
- 多边形 (polygon)
提示: 在geo_shape中,点作为一种特殊的形状,geo_shape可以存储一个点。
二、geo_shape数据格式
geo_shape支持GeoJson和WKT(Well-Known Text)格式存储空间形状数据。建议使用wkt。详细支持的格式描述如下面图片上描述。

格式说明
- GeoJson格式数据
GeoJson格式参考官方网站:https://geojson.org/
在es中则只需要存储其geometry的属性值即为geo_shape的值。
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [125.6, 10.1]
},
"properties": {
"name": "Dinagat Islands"
}
}
- wkt Well-Known Text (WKT)
POINT (-77.03653 38.897676)
LINESTRING (-77.03653 38.897676,-77.009051 38.889939)
POLYGON ((100.0 0.0, 101.0 0.0, 101.0 1.0, 100.0 1.0, 100.0 0.0))
MULTIPOINT (102.0 2.0, 103.0 2.0)
MULTILINESTRING ((102.0 2.0, 103.0 2.0, 103.0 3.0, 102.0 3.0),(100.2 0.2, 100.8 0.2, 100.8 0.8, 100.2 0.8))
MULTIPOLYGON (((102.0 2.0, 103.0 2.0, 103.0 3.0, 102.0 3.0, 102.0 2.0)), ((100.0 0.0, 101.0 0.0, 101.0 1.0, 100.0 1.0, 100.0 0.0), (100.2 0.2, 100.8 0.2, 100.8 0.8, 100.2 0.8, 100.2 0.2)))
GEOMETRYCOLLECTION (POINT (100.0 0.0), LINESTRING (101.0 0.0, 102.0 1.0))
BBOX (100.0, 102.0, 2.0, 0.0)
存储示例
- 定义geo_shape类型映射
PUT /example
{
"mappings": {
"properties": {
"location": {
"type": "geo_shape" // 定义location字段类型为geo_shape
}
}
}
}
- 存储一个点
POST /example/_doc
{
"location" : {
"type" : "point", // 存储的图形类型为:point,表示存储一个坐标点
"coordinates" : [-77.03653, 38.897676] // 坐标点格式: [经度, 纬度]
}
}
POST /example/_doc
{
"location" : "POINT (-77.03653 38.897676)"
}
- 存储一个多边形
POST /example/_doc
{
"location": {
"type": "polygon", // 存储的图形类型为: polygon,表示一个多边形
"coordinates": [ // 支持多个多边形
[ // 第一个多边形,多边形由下面的坐标数组组成。

本文介绍了如何在Elasticsearch中使用geo_shape数据类型存储和检索各种形状,如点、圆形、矩形和多边形,并提供了Java示例,展示了如何构建和执行包含多边形搜索的查询,以定位特定区域内的数据。
最低0.47元/天 解锁文章
3464






