搭配 Azure 串流分析的地理柵欄和地理空間彙總情節
使用內建的地理空間函數,您可使用 Azure 串流分析,來建置車隊管理、共駕、連線汽車和資產追蹤等情節的應用程式。
地理柵欄功能
Azure 串流分析支援雲端和 IoT Edge 執行階段上的低延遲即時地理柵欄計算。
地理柵欄情節
製造公司必須追蹤其建築物上的資產。 他們為每個裝置配備 GPS,並想要在裝置離開特定區域時收到通知。
此範例中使用的參考資料具有建築物的地理柵欄資訊,以及每個建築物中允許的裝置。 請記住,參考資料可能是靜態或緩慢變更。 靜態參考資料用於此情節。 資料流會持續發出裝置識別碼及其目前位置。
在參考資料中定義地理柵欄
您可以使用 GeoJSON 物件來定義地理柵欄。 對於相容性版本 1.2 和更新版本的作業,也可以使用已知文字 (WKT) 定義地理柵欄做為 NVARCHAR(MAX)
。 WKT 是開放地理空間協會 (OGC) 標準,用來以文字格式表示空間資料。
內建地理空間函數可以使用定義的地理柵欄,來找出元素是否位於特定地理柵欄多邊形內部或外部。
下表是地理柵欄參考資料的範例,可儲存在 Azure Blob 儲存體或 Azure SQL 資料表中。 每個網站都會以地理空間多邊形表示,而每個裝置都會與允許的網站識別碼相關聯。
SiteID | SiteName | 地理柵欄 | AllowedDeviceID |
---|---|---|---|
1 | "Redmond Building 41" | "POLYGON((-122.1337357922017 47.63782998329432,-122.13373042778369 47.637634793257305,-122.13346757130023 47.637642022530954,-122.13348902897235 47.637508280806806,-122.13361777500506 47.637508280806806,-122.13361241058703 47.63732393354484,-122.13265754417773 47.63730947490855,-122.13266290859576 47.637519124743164,-122.13302232460376 47.637515510097955,-122.13301696018573 47.63764925180358,-122.13272728161212 47.63764925180358,-122.13274873928424 47.63784082716388,-122.13373579220172 47.63782998329432))" | "B" |
2 | "Redmond Building 40" | "POLYGON((-122.1336154507967 47.6366745947009,-122.13361008637867 47.636483015064535,-122.13349206918201 47.636479400347675,-122.13349743360004 47.63636372927573,-122.13372810357532 47.63636372927573,-122.13373346799335 47.63617576323771,-122.13263912671528 47.63616491902258,-122.13264985555134 47.63635649982525,-122.13304682248554 47.636367344000604,-122.13305218690357 47.63650831807564,-122.13276250832996 47.636497473929516,-122.13277323716602 47.63668543881025,-122.1336154507967 47.6366745947009))" | "A" |
3 | "Redmond Building 22" | "POLYGON((-122.13611660248233 47.63758544698554,-122.13635263687564 47.6374083293018,-122.13622389084293 47.63733603619712,-122.13622389084293 47.63717699101473,-122.13581619507266 47.63692757827657,-122.13559625393344 47.637046862778135,-122.13569281345798 47.637144458985965,-122.13570890671207 47.637314348246214,-122.13611660248233 47.63758544698554))" | "C" |
使用地理柵欄產生警示
裝置可以透過名為 DeviceStreamInput
的資料流,每分鐘發出其識別碼和位置。 下表是輸入的資料流。
DeviceID | GeoPosition |
---|---|
"A" | "POINT(-122.13292341559497 47.636318374032726)" |
"B" | "POINT(-122.13338475554553 47.63743531308874)" |
"C" | "POINT(-122.13354001095752 47.63627622505007)" |
您可以撰寫查詢,將裝置資料流與地理柵欄參考資料聯結,並在每次裝置位於允許的建築物之外時產生警示。
SELECT DeviceStreamInput.DeviceID, SiteReferenceInput.SiteID, SiteReferenceInput.SiteName
INTO Output
FROM DeviceStreamInput
JOIN SiteReferenceInput
ON st_within(DeviceStreamInput.GeoPosition, SiteReferenceInput.Geofence) = 0
WHERE DeviceStreamInput.DeviceID = SiteReferenceInput.AllowedDeviceID
下圖代表地理柵欄。 您可以看到裝置與資料流資料輸入是一致的。
裝置「C」位於建築物識別碼 2 內,根據參考資料,這是不允許的。 此裝置應該位於建築物識別碼 3 內。 執行此作業會產生此特定違規的警示。
具有多個允許裝置的網站
如果網站允許多個裝置,則可以在 AllowedDeviceID
中定義裝置識別碼陣列,而且可以在 WHERE
子句上使用使用者定義函數,來驗證串流裝置識別碼是否符合該清單中的任何裝置識別碼。 如需詳細資訊,請檢視雲端作業的 JavaScript UDF 教學課程和邊緣作業的 C# UDF 教學課程。
地理空間彙總
Azure 串流分析支援雲端和 IoT Edge 執行階段上的低延遲即時地理空間彙總。
地理空間彙總情節
計程車公司想要建置即時應用程式,以引導其計程車駕駛尋找朝目前需求較高的城市區域的車程。
公司會將城市邏輯區域儲存為參考資料。 每個區域都是由 RegionID、RegionName 和 Geofence 所定義。
定義地理柵欄
下表是地理柵欄參考資料的範例,可儲存在 Azure Blob 儲存體或 Azure SQL 資料表中。 每個區域都以地理空間多邊形表示,用來與來自串流資料的要求相互關聯。
這些多邊形僅供參考,且不代表實際的城市邏輯或實體分隔。
RegionID | RegionName | 地理柵欄 |
---|---|---|
1 | "SoHo" | "POLYGON((-74.00279525078275 40.72833625216264,-74.00547745979765 40.721929158663244,-74.00125029839018 40.71893680218994,-73.9957785919998 40.72521409075776,-73.9972377137039 40.72557184584898,-74.00279525078275 40.72833625216264))" |
2 | "Chinatown" | "POLYGON((-73.99712367114876 40.71281582267133,-73.9901070123658 40.71336881907936,-73.99023575839851 40.71452359088633,-73.98976368961189 40.71554823078944,-73.99551434573982 40.717337246783735,-73.99480624255989 40.718491949759304,-73.99652285632942 40.719109951574,-73.99776740131233 40.7168005470334,-73.99903340396736 40.71727219249899,-74.00193018970344 40.71938642421256,-74.00409741458748 40.71688186545551,-74.00051398334358 40.71517415773184,-74.0004281526551 40.714377212470005,-73.99849696216438 40.713450141693166,-73.99748845157478 40.71405192594819,-73.99712367114876 40.71281582267133))" |
3 | "Tribeca" | "POLYGON((-74.01091641815208 40.72583120006787,-74.01338405044578 40.71436586362705,-74.01370591552757 40.713617702123415,-74.00862044723533 40.711308107057235,-74.00194711120628 40.7194238654018,-74.01091641815208 40.72583120006787))" |
彙總時間範圍的資料
下表包含「車程」的串流資料。
UserID | FromLocation | ToLocation | TripRequestedTime |
---|---|---|---|
"A" | "POINT(-74.00726861389182 40.71610611981975)" | "POINT(-73.98615095917779 40.703107386025835)" | "2019-03-12T07:00:00Z" |
"B" | "POINT(-74.00249841021645 40.723827238895666)" | "POINT(-74.01160699942085 40.71378884930115)" | "2019-03-12T07:01:00Z" |
"C" | "POINT(-73.99680120565864 40.716439898624024)" | "POINT(-73.98289663412544 40.72582343969828)" | "2019-03-12T07:02:00Z" |
"D" | "POINT(-74.00741090068288 40.71615626755086)" | "POINT(-73.97999843120539 40.73477895807408)" | "2019-03-12T07:03:00Z" |
下列查詢會將裝置資料流與地理柵欄參考資料聯結,並在每分鐘 15 分鐘的時間範圍計算每個區域的要求數目。
SELECT count(*) as NumberOfRequests, RegionsRefDataInput.RegionName
FROM UserRequestStreamDataInput
JOIN RegionsRefDataInput
ON st_within(UserRequestStreamDataInput.FromLocation, RegionsRefDataInput.Geofence) = 1
GROUP BY RegionsRefDataInput.RegionName, hoppingwindow(minute, 15, 1)
此查詢會依城市內的每個區域,過去 15 分鐘內每分鐘輸出一次要求計數。 此資訊可透過 Power BI 儀表板輕鬆顯示,或透過與 Azure 函數等服務整合,以簡訊的形式向所有驅動程式廣播。
下圖說明向 Power BI 儀表板的查詢輸出。