Elasticsearch geo_shape地理形狀 --- 2022-04-03

通常情況,我們使用一個(gè)經(jīng)緯度坐標(biāo)表示一個(gè)店鋪的位置、一個(gè)用戶的位置,經(jīng)緯度在地圖上僅僅表示一個(gè)點(diǎn),有時(shí)候需要表示一個(gè)區(qū)域,例如:停車場(chǎng)、商場(chǎng)、學(xué)校等等,這些區(qū)域擁有各種各樣的形狀,包括:圓形、多邊形等等。

ES中存儲(chǔ)地理形狀的數(shù)據(jù)類型為: geo_shape

geo_shape支持存儲(chǔ)的常用形狀數(shù)據(jù)如下:

  • 點(diǎn)(point)
  • 圓形(circle)
  • 矩形(envelope)
  • 多邊形 (polygon)

提示: 在geo_shape中,點(diǎn)作為一種特殊的形狀,geo_shape可以存儲(chǔ)一個(gè)點(diǎn)。

1.定義geo_shape類型映射

只要將字段類型定義為geo_shape即可。

PUT /example
{
    "mappings": {
        "properties": {
            "location": {
                "type": "geo_shape" // 定義location字段類型為geo_shape
            }
        }
    }
}

2.存儲(chǔ)一個(gè)點(diǎn)

例子:

POST /example/_doc
{
    "location" : {
        "type" : "point", // 存儲(chǔ)的圖形類型為:point,表示存儲(chǔ)一個(gè)坐標(biāo)點(diǎn)
        "coordinates" : [-77.03653, 38.897676] // 坐標(biāo)點(diǎn)格式: [經(jīng)度, 緯度]
    }
}

3.存儲(chǔ)一個(gè)圓形

POST /example/_doc
{
    "location" : {
        "type" : "circle", // 存儲(chǔ)的圖形類型為: circle, 表示一個(gè)圓形
        "coordinates" : [101.0, 1.0], // 圓心坐標(biāo),格式: [經(jīng)度, 緯度]
        "radius" : "100m" // 圓的半徑,常用單位: m (米), km (千米)
    }
}

4.存儲(chǔ)一個(gè)矩形

POST /example/_doc
{
    "location" : {
        "type" : "envelope", // 存儲(chǔ)的圖形類型為: envelope, 表示一個(gè)矩形
        "coordinates" : [ 
             [100.0, 1.0], // 矩形左上角坐標(biāo), 坐標(biāo)格式: [經(jīng)度, 緯度]
             [101.0, 0.0]  // 矩形右下角坐標(biāo)
        ]
    }
}

5.存儲(chǔ)一個(gè)多邊形

POST /example/_doc
{
  "location": {
    "type": "polygon", // 存儲(chǔ)的圖形類型為: polygon,表示一個(gè)多邊形
    "coordinates": [ // 支持多個(gè)多邊形
      [ // 第一個(gè)多邊形,多邊形由下面的坐標(biāo)數(shù)組組成。
        [100, 0], // 第一個(gè)坐標(biāo)點(diǎn),坐標(biāo)格式: [經(jīng)度, 緯度]
        [101, 0],
        [101, 1],
        [100, 1],
        [100, 0] // 最后一個(gè)坐標(biāo)點(diǎn),要跟第一個(gè)坐標(biāo)點(diǎn)相同,這樣多邊形才能形成閉合
      ]
    ]
  }
}

例子中提到,支持存儲(chǔ)多個(gè)多邊形數(shù)據(jù),如果保存多個(gè)多邊形,則第一個(gè)多邊形表示外輪廓,第二個(gè)多邊形表示內(nèi)輪廓,這樣內(nèi)外多邊形輪廓就組成一個(gè)空洞的圖形,相當(dāng)于,在多邊形中間挖了個(gè)坑。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容