Azure Stream Analytics を使用したジオフェンシングおよび地理空間集計のシナリオ

組み込みの地理空間関数により、Azure Stream Analytics を使用して、フリート管理、ライドシェア、コネクテッド カー、および資産追跡などのシナリオ向けにアプリケーションをビルドできます。

ジオフェンシング

Azure Stream Analytics は、クラウドおよび IoT Edge ランタイムでの低待機時間のリアルタイムなジオフェンシング計算をサポートします。

ジオフェンシングのシナリオ

ある製造会社ではビル内の資産を追跡する必要があります。 すべてのデバイスに GPS を装備し、デバイスが特定の領域から離れた場合には、通知を受けることを求めています。

この例で使用される参照データには、ビルおよび各ビルで許可されるデバイスのジオフェンス情報が含まれています。 参照データは、静的または変更の少ないデータのいずれかであることに注意してください。 このシナリオでは、静的な参照データが使用されます。 データのストリームは、継続的にデバイス ID とその現在の位置を出力します。

参照データのジオフェンスを定義する

ジオフェンスは GeoJSON オブジェクトを使用して定義できます。 互換性バージョン 1.2 以降のジョブでは、NVARCHAR(MAX) として Well Known Text (WKT) を使用してジオフェンスを定義できます。 WKT は、空間データをテキスト形式で表すために使用される Open Geospatial Consortium (OGC) 標準です。

組み込みの地理空間関数では、定義済みのジオフェンスを使用して、要素が特定のジオフェンス ポリゴンの内部または外部にあることを特定します。

次の表に、Azure BLOB ストレージまたは Azure SQL テーブルに保存できるジオフェンス参照データの例を示します。 すべてのサイトは地理空間ポリゴンによって表され、すべてのデバイスは許可されるサイト ID と関連付けられています。

SiteID SiteName Geofence 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 と呼ばれるストリームを介して1 分ごとに ID と場所を出力します。 次の表に入力のストリームを示します。

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" はビル ID 2 内にありますが、参照データによるとこれは許可されていません。 このデバイスはビル ID 3 内になければなりません。 このジョブを実行すると、この特定の違反に対するアラートが生成されます。

複数の許可デバイスを持つサイト

サイトに複数のデバイスが許可されている場合、デバイス ID の配列を AllowedDeviceID に定義でき、ストリーム デバイス ID がこの一覧のいずれかのデバイス ID と一致するかを確認するためにユーザー定義関数を WHERE 句で使用できます。 詳細については、クラウド ジョブに関する Javascript UDF チュートリアルと、エッジ ジョブに関する C# UDF チュートリアルを参照してください。

地理空間集計

Azure Stream Analytics は、クラウドおよび IoT Edge ランタイムでの低待機時間のリアルタイムな地理空間の計算をサポートします。

地理空間集計のシナリオ

あるタクシー会社では、乗客を求めているタクシーの運転手を現在需要の高い都市エリアにガイドするためのリアルタイム アプリケーションをビルドしたいと考えています。

タクシー会社は、その都市の論理的なリージョンを参照データとして保存します。 各リージョンは、RegionID、RegionName、Geofence によって定義されます。

ジオフェンスを定義する

次の表に、Azure BLOB ストレージまたは Azure SQL テーブルに保存できるジオフェンス参照データの例を示します。 すべてのリージョンは地理空間ポリゴンによって表されます。これは、ストリーミング データからの要求と関連付けるために使用されます。

これらのポリゴンは参照専用であり、実際の都市の論理的または物理的な分離を表すものではありません。

RegionID RegionName Geofence
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 分の時間枠でリージョンあたりの要求数を 1 分ごとに計算します。

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 分間の要求数を 1 分ごとに出力します。 この情報は、Power BI ダッシュボードで容易に表示できます。または、Azure 関数のようなサービスとの統合により、SMS テキスト メッセージとしてすべての運転手にブロードキャストすることもできます。

次の図は、Power BI ダッシュボードへのクエリの出力を 示しています。

Power BI ダッシュボードでの結果の出力

次のステップ