串流分析的地理空間功能導論

Azure 串流分析 的地理空間功能能即時分析串流地理空間資料,適用於共乘、車隊管理、資產追蹤、地理圍欄及跨基地台電話追蹤等情境。 只需幾行查詢程式碼,你就能建立使用串流分析查詢語言中七個內建函式(CreateLineString、 ST_OVERLAPSST_WITHINCreatePointCreatePolygonST_DISTANCEST_INTERSECTS和 )的解決方案,這些函式支援所有 WKT 類型以及 GeoJSON 點、多邊形和線條字串。 本文說明每個函式,並展示範例查詢,方便你將其應用於自己的串流資料。

幾何類型與座標順序

地理空間函式可支援三種 GeoJSON 幾何類型。 點是由經度和緯度定義的單一地點。 線條串是一組有序的兩個或多個點組成的連接線,例如一條路線或一條道路。 多邊形是一種封閉形狀,其邊界會回到起點,例如建築物的基層或地理圍欄。

這些功能分為兩大類。 建構函式(CreatePoint、 CreateLineString和 CreatePolygon)會根據事件資料中的座標值建構幾何體。 關係函數(ST_DISTANCE、 ST_OVERLAPS、 ST_INTERSECTS和 ST_WITHIN)比較兩個幾何並描述它們在空間中的關係。

在 GeoJSON 中,座標是先按經度排序,緯度在後,因此輸入的緯度和經度會在結果幾何中以相反順序出現。 了解這種排序,加上多邊形所需的逆時針環方向,有助於你預測每個函數的輸出。

CreateLineString

CreateLineString 是一個建構函式,會回傳 GeoJSON 線條,這是一個將連通點列表示為地圖上的一條線的幾何體。 它接受兩個或以上的點,並依照你列出的順序連接它們,這使得它成為從串流資料中建模路線、路徑和道路段的自然方式。

以下範例透過將三個點組合成 LineString 來說明此行為。 第一點來自串流輸入資料,另外兩點則是手動定義的。

SELECT  
     CreateLineString(CreatePoint(input.latitude, input.longitude), CreatePoint(10.0, 10.0), CreatePoint(10.5, 10.5))  
FROM input  

輸入範例

緯度 經度
3.0 -10.2
-87.33 20.2321

輸出範例

{“類型” : “LineString”, “座標” : [ [-10.2, 3.0], [10.0, 10.0], [10.5, 10.5] ]}

{“type” : “LineString”, “coordinates” : [ [20.2321, -87.33], [10.0, 10.0], [10.5, 10.5] ]}

欲了解更多,請參閱 CreateLineString 參考文獻。

CreatePoint

CreatePoint 是一個建構函式,可回傳來自緯度與經度的 GeoJSON 點。 點是最基本的幾何形狀,代表地圖上的單一位置,例如車輛或資產的當前位置。 緯度與經度值必須是 float 資料型態。

以下範例透過從串流輸入資料中的緯度與經度值建立一個點來說明此行為。

SELECT  
     CreatePoint(input.latitude, input.longitude)  
FROM input 

輸入範例

緯度 經度
3.0 -10.2
-87.33 20.2321

輸出範例

{“類型” : “點”, “座標” : [-10.2, 3.0]}

{“type” : “點”, “座標” : [20.2321, -87.33]}

欲了解更多,請參閱 CreatePoint 參考文獻。

CreatePolygon

CreatePolygon 是一個建構函式,從一組點回傳 GeoJSON 多邊形。 多邊形代表地圖上的封閉區域,例如建築物基址、倉庫邊界或地理圍欄。 點的順序遵循右手環方向,或逆時針方向:如果你想像從一個點走到下一個點,則多邊形的中心會一直保持在你左側。

以下範例說明此行為,方法是從三個點建立一個多邊形。 前兩點是手動定義的,最後一點則來自輸入資料。

SELECT  
     CreatePolygon(CreatePoint(input.latitude, input.longitude), CreatePoint(10.0, 10.0), CreatePoint(10.5, 10.5), CreatePoint(input.latitude, input.longitude))  
FROM input  

輸入範例

緯度 經度
3.0 -10.2
-87.33 20.2321

輸出範例

{“類型” : “多邊形”, “座標” : [[ [ [-10.2, 3.0], [10.0, 10.0], [10.5, 10.5], [-10.2, 3.0] ]}

{“類型” : “多邊形”, “座標” : [ [ [20.2321, -87.33], [10.0, 10.0], [10.5, 10.5], [20.2321, -87.33] ]}

欲了解更多,請造訪 CreatePolygon 參考資料。

ST_DISTANCE

ST_DISTANCE 是一個關係函數,回傳兩個幾何形狀之間的距離(以公尺為單位)。 它幫助你了解兩個地點的距離,對於接近情境(如附近車輛警報和服務區計算)非常有用。

以下範例說明如何使用此函數來辨識加油站距離汽車不到10公里。

SELECT Cars.Location, Station.Location 
FROM Cars c  
JOIN Station s ON ST_DISTANCE(c.Location, s.Location) < 10 * 1000

欲了解更多,請參閱 ST_DISTANCE 參考資料。

ST_OVERLAPS

ST_OVERLAPS 是一個關係函數,能比較兩個幾何形狀並報告它們是否共享一個共同區域。 當幾何圖形重疊時會傳回 1,若沒有重疊則傳回 0。 此功能用於偵測空間衝突,例如危險區域與關注區域相觸。

以下範例說明如何利用此功能識別建築物何時處於可能的淹水區內。

SELECT Building.Polygon, Flooding.Polygon
FROM Building b 
JOIN Flooding f ON ST_OVERLAPS(b.Polygon, f.Polygon)

下一個例子也用 ST_OVERLAPS 來偵測風暴何時朝汽車方向移動。

SELECT Cars.Location, Storm.Course
FROM Cars c
JOIN Storm s ON ST_OVERLAPS(c.Location, s.Course)

欲了解更多,請參閱 ST_OVERLAPS 參考資料。

ST_INTERSECTS

ST_INTERSECTS 是一個關係函數,用來比較兩個幾何體並報告它們是交叉還是接觸。 當幾何體相交時回傳 1,不相交時回傳 0。 這個功能幫助你偵測路徑或區域的交會點。

以下範例說明如何利用此函數判斷鋪裝道路是否與土路相交。

SELECT  
     ST_INTERSECTS(input.pavedRoad, input.dirtRoad)  
FROM input  

輸入範例

鋪裝道路 泥土路
{“type”:“LineString”, “coordinates”: [ [-10.0, 0.0], [0.0, 0.0], [10.0, 0.0] ]} {“type”:“LineString”, “coordinates”: [ [0.0, 10.0], [0.0, 0.0], [0.0, -10.0] ]}
{“type”:“LineString”, “coordinates”: [ [-10.0, 0.0], [0.0, 0.0], [10.0, 0.0] ]} {“type”:“LineString”, “coordinates”: [ [-10.0, 10.0], [0.0, 10.0], [10.0, 10.0] ]}

輸出範例

1

0

欲了解更多,請造訪 ST_INTERSECTS 參考資料。

ST_WITHIN

ST_WITHIN 是一個關係函數,用來報告一個幾何體是否完全包含在另一個幾何體中。 當第一個幾何體位於第二個幾何體內時,回傳 1;當不在時回傳 0,這也是像地理圍欄和配送區檢查等封閉情境的基礎。

以下範例說明此行為,透過判斷配送目的地點是否位於特定倉庫多邊形內。

SELECT  
     ST_WITHIN(input.deliveryDestination, input.warehouse)  
FROM input 

輸入範例

配送目的地 warehouse
{“type”:“Point”, “coordinates”: [76.6, 10.1]} {"type":"Polygon", "coordinates": [ [0.0, 0.0], [10.0, 0.0], [10.0, 10.0], [0.0, 10.0], [0.0, 0.0] ]}
{“type”:“Point”, “coordinates”: [15.0, 15.0]} {“type”:“Polygon”, “coordinates”: [ [10.0, 10.0], [20.0, 10.0], [20.0, 20.0], [10.0, 20.0], [10.0, 10.0] ]}

輸出範例

0

1

欲了解更多,請造訪 ST_WITHIN 參考資料。