分享方式:


適用於 NoSQL 的 Azure Cosmos DB 中的地理空間和 GeoJSON 位置數據

適用於:NoSQL

適用於 NoSQL 的 Azure Cosmos DB 具有內建地理空間功能,可代表地圖上的幾何圖形或實際位置/多邊形。

地理空間數據通常牽涉到鄰近查詢。 例如,使用多個地理空間數據對象的鄰近查詢來回答「尋找目前位置附近的所有零售位置」問題。

常見的地理空間使用案例包括,但不限於:

  • 地理位置分析,推動特定位置型營銷計劃。
  • 以位置為基礎的個人化,適用於零售和醫療保健等產業,以改善用戶體驗。
  • 物流增強,適用於運輸業,其中優化至關重要。
  • 風險分析,適用於保險和金融等產業,以補充其他元數據。
  • 以 Proxmiity 為基礎的警示和通知的情況感知*。

空間資料簡介

空間資料可描述空間中物件的位置和形狀。 在大部分的應用程式中,這些點和圖形會對應到地球上的物件和地理空間數據。 空間資料可以用來代表人、感興趣的地方、城市邊界或湖泊。

適用於 NoSQL 的 Azure Cosmos DB 支援兩種空間數據類型:geometry 數據類型和 geography 數據類型。

  • geometry 類型代表 Euclidean (平面) 座標系統中的資料。 此類型適用於常見的幾何工作,例如測量線條、交集多邊形,以及測量點之間的距離。
  • geography 類型代表圓形表面座標系統中的資料。 此類型適用於常見的地理工作,例如判斷某個位置是否在特定範圍內,以及測量位置之間的距離。

支援的資料類型

適用於 NoSQL 的 Azure Cosmos DB 支援使用 GeoJSON 規格表示的地理空間點數據的索引編製和查詢。 GeoJSON 資料結構一律為有效的 JSON 物件,因此可透過 Azure Cosmos DB 來儲存及查詢,無須使用任何特殊的工具或程式庫。

Azure Cosmos DB 支援以下的空間資料類型:

  • LineString
  • Polygon
  • MultiPolygon

代表空間中的單一位置。 在地理空間資料中,某個點所代表的確切位置可能是雜貨店的街道地址、電話亭、汽車或城市。 以 GeoJSON (和適用於 NOSQL 的 Azure Cosmos DB) 中的座標組 (經度緯度) 表示點。

請考慮此範例 GeoJSON 點。 經度為 -122.12826822304672 ,而緯度為 47.63980239335718

{
  "type": "Point",
  "coordinates": [
    -122.12826822304672,
    47.63980239335718
  ]
}

提示

針對地理資料類型,GeoJSON 規格會先指定經度,再指定緯度。 如同其他的地圖應用程式,經度和緯度為角度,並以度為表示單位。 經度值是從 Prime Meridian 測量,介於度和度之間-180,而緯度值是從赤道測量,且介於度和90.0度之間-90.0180.0

針對幾何資料類型,GeoJSON 規格會先指定水平軸,再指定垂直軸。

空間數據類型可以內嵌在專案中,如這個包含 GeoJSON 數據的設施專案範例所示。

{
  "name": "Headquarters",
  "location": {
    "type": "Point",
    "coordinates": [
      -122.12826822304672,
      47.63980239335718
    ]
  },
  "category": "business-offices"
}

適用於 NoSQL 的 Azure Cosmos DB 會根據 WGS-84 參考系統來解譯座標。 如需詳細資訊,請參閱 座標參考系統

LineStrings

Linestring 表示空間中一連串的點 (兩個以上),以及連接這些點的線段。 在地理空間資料中,LineStrings 通常用來代表高速公路或河流。

在此範例中,線條字串用來代表在兩個點之間繪製的線條。

{
  "type": "LineString",
  "coordinates": [
    [ 31.8, -5 ],
    [ 31.8, -4.7 ]
  ]
}

多邊形

多邊形是由連接的點組成邊界,並形成封閉的 LineString。 多邊形常用來代表自然構成物,例如湖泊,或代表政治管轄權,例如城市和州省。

多邊形內的點必須以逆時針順序指定。 以順時針順序指定的多邊形,代表區域內的反轉。

在此範例中,會藉由連接多個點來建立多邊形。

{
    "type":"Polygon",
    "coordinates":[ [
        [ 31.8, -5 ],
        [ 32, -5 ],
        [ 32, -4.7 ],
        [ 31.8, -4.7 ],
        [ 31.8, -5 ]
    ] ]
}

提示

GeoJSON 規格需要此資料才能形成有效的多邊形;若要建立一個封閉的形狀,最後一個座標組應該與第一個座標組相同。

MultiPolygons

MultiPolygon (多多邊形) 是由零或更多的多邊形所組成的陣列。 MultiPolygons 無法重疊側邊或具有任何通用區域。 但可以有單點或多個點的接觸。

以下是 MultiPolygon 的範例。

{
    "type":"MultiPolygon",
    "coordinates":[[[
            [52.0, 12.0],
            [53.0, 12.0],
            [53.0, 13.0],
            [52.0, 13.0],
            [52.0, 12.0]
        ]],
        [[
            [50.0, 0.0],
            [51.0, 0.0],
            [51.0, 5.0],
            [50.0, 5.0],
            [50.0, 0.0]
        ]]]
}

座標參考系統

由於地球的形狀不規則,地理空間數據的座標會以許多座標參考系統 (CRS) 表示。 每個 CRS 都有自己的參考框架和度量單位。 例如「英國國家格網參考系統」對英國而言是精確的參考系統,但對其他地區則不是。

現今最常使用的 CRS 是全球大地座標系統 WGS-84。 GPS 裝置和許多地圖服務,包括 Google 地圖與 Bing Maps API 均是使用 WGS-84。 適用於 NoSQL 的 Azure Cosmos DB 僅支援使用 WGS-84 CRS 來編制地理空間資料的索引和查詢。

使用空間數據建立專案

當您建立包含 GeoJSON 值的專案時,會自動使用空間索引編製索引。 此預設索引會根據容器的索引編製原則進行。 如果未指定,預設索引編製原則會準確地編製 GeoJSON 數據的索引。 如果您使用 Python 或 Node.js 等動態類型語言的 SDK,您必須建立有效的 GeoJSON。

var userProfileitem = {
    "id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
    "location":{
        "type":"Point",
        "coordinates":[ -122.12, 47.66 ]
    }
};

client.createitem(`dbs/${databaseName}/colls/${collectionName}`, userProfileitem, (err, created) => {
    // additional code within the callback
});

如果您沒有緯度和經度資訊,但具有實體位址或位置名稱,請使用在線服務查閱實際座標。 Bing 地圖服務等服務可協助從已知的位置名稱尋找實際的地理數據。 如需 Bing 地圖服務地理編碼的詳細資訊,請參閱 Bing 地圖服務 REST 服務