Elasticsearch地理空间之geo_shape

本文介绍了如何在Elasticsearch中使用geo_shape数据类型存储和检索各种形状,如点、圆形、矩形和多边形,并提供了Java示例,展示了如何构建和执行包含多边形搜索的查询,以定位特定区域内的数据。
该文章已生成可运行项目,
参考文章:

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支持GeoJsonWKT(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)

存储示例

  1. 定义geo_shape类型映射
PUT /example
{
   
   
    "mappings": {
   
   
        "properties": {
   
   
            "location": {
   
   
                "type": "geo_shape" // 定义location字段类型为geo_shape
            }
        }
    }
}
  1. 存储一个点
POST /example/_doc
{
   
   
    "location" : {
   
   
        "type" : "point", // 存储的图形类型为:point,表示存储一个坐标点
        "coordinates" : [-77.03653, 38.897676] // 坐标点格式: [经度, 纬度]
    }
}

POST /example/_doc
{
   
   
    "location" : "POINT (-77.03653 38.897676)"
}

  1. 存储一个多边形
POST /example/_doc
{
   
   
  "location": {
   
   
    "type": "polygon", // 存储的图形类型为: polygon,表示一个多边形
    "coordinates": [ // 支持多个多边形
      [ // 第一个多边形,多边形由下面的坐标数组组成。
本文章已经生成可运行项目
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值