串流分析地理空間函式簡介

Azure 串流分析中的地理空間函式可即時分析串流地理空間資料。 只要撰寫幾行程式碼,就能開發適用於複雜案例的生產等級解決方案。 這些函式支援所有 WKT 類型和 GeoJSON Point、Polygon 和 LineString。

可受益於地理空間函式的案例範例包括:

  • 汽車共乘
  • 車隊管理
  • 資產追蹤
  • 異地隔離
  • 跨基地台進行電話追蹤

串流分析查詢語言具有七個內建的地理空間函式:CreateLineStringCreatepointCreatePolygonST_DISTANCEST_OVERLAPSST_INTERSECTSST_WITHIN

CreateLineString

CreateLineString 函式會接受點,並傳回 GeoJSON LineString,以在地圖上繪製為線條。 您必須有至少兩個點才能建立 LineString。 LineString 點會依序連接。

下列查詢使用 CreateLineString 來建立使用三個點的 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

輸出範例

{"type" : "LineString", "coordinates" : [ [-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 點,以繪製在地圖上。 經緯度必須是浮點數資料類型。

下列查詢範例使用 CreatePoint 來建立點,這個點所使用的經緯度來自串流輸入資料。

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

輸入範例

緯度 經度
3.0 -10.2
-87.33 20.2321

輸出範例

{"type" : "Point", "coordinates" : [-10.2, 3.0]}

{"type" : "Point", "coordinates" : [20.2321, -87.33]}

若要深入了解,請瀏覽 CreatePoint 參考。

CreatePolygon

CreatePolygon 函式會接受點,並傳回 GeoJSON 多邊形記錄。 點的順序必須依照右手定則方向,也就是逆時針方向。 想像一下以這些點所宣告的順序從一個點走到另一個點。 在整個過程中,此多邊形的中心會在您的左側。

下列查詢範例使用 CreatePolygon 從三個點建立多邊形。 前兩個點以手動方式建立,最後一個點則從輸入資料建立。

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

輸出範例

{"type" : "Polygon", "coordinates" : [[ [-10.2, 3.0], [10.0, 10.0], [10.5, 10.5], [-10.2, 3.0] ]]}

{"type" : "Polygon", "coordinates" : [[ [20.2321, -87.33], [10.0, 10.0], [10.5, 10.5], [20.2321, -87.33] ]]}

若要深入了解,請瀏覽 CreatePolygon 參考。

ST_DISTANCE

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。

下列查詢使用 ST_OVERLAPS 以在大樓位於可能淹水的區域內時產生事件。

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

下列查詢範例會在暴風雨朝車輛方向行進時產生事件。

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

若要深入了解,請瀏覽 ST_OVERLAPS 參考。

ST_INTERSECTS

ST_INTERSECTS函式會比較兩個幾何。 如果幾何有交集,則函式會傳回 1。 如果幾何未交集,則函式會傳回 0。

下列查詢範例使用 ST_INTERSECTS 來判斷柏油路是否與泥土路相交。

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

輸入範例

datacenterArea stormArea
{"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。

下列查詢範例使用 ST_WITHIN 來判斷交貨目的地所在點是否位於指定的倉儲多邊形內。

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

輸入範例

deliveryDestination 倉儲
{“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 參考。

下一步