適用於 NoSQL 的 Azure Cosmos DB 中的地理空間和 GeoJSON 位置數據
適用於:NoSQL
適用於 NoSQL 的 Azure Cosmos DB 具有內建地理空間功能,可代表地圖上的幾何圖形或實際位置/多邊形。
地理空間數據通常牽涉到鄰近查詢。 例如,使用多個地理空間數據對象的鄰近查詢來回答「尋找目前位置附近的所有零售位置」問題。
常見的地理空間使用案例包括,但不限於:
- 地理位置分析,推動特定位置型營銷計劃。
- 以位置為基礎的個人化,適用於零售和醫療保健等產業,以改善用戶體驗。
- 物流增強,適用於運輸業,其中優化至關重要。
- 風險分析,適用於保險和金融等產業,以補充其他元數據。
- 以鄰近為基礎的警示和通知的情況感知*。
空間資料簡介
空間資料可描述空間中物件的位置和形狀。 在大部分的應用程式中,這些點和圖形會對應到地球上的物件和地理空間數據。 空間資料可以用來代表人、感興趣的地方、城市邊界或湖泊。
適用於 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.0
。180.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 服務。