Skenario agregasi pembatasan wilayah dan geospasial dengan Azure Stream Analytics
Dengan fungsi geospasial bawaan, Anda dapat menggunakan Azure Stream Analytics untuk membangun aplikasi untuk berbagai skenario seperti manajemen armada, berbagi kendaraan, mobil yang tersambung, dan pelacakan aset.
Pembatasan Wilayah
Azure Stream Analytics mendukung komputasi pembatasan wilayah real time dengan latensi rendah yang ada di cloud dan pada runtime IoT Edge.
Skenario pembatasan wilayah
Perusahaan manufaktur perlu melacak aset pada bangunannya. Mereka melengkapi setiap perangkat dengan GPS supaya dapat menerima pemberitahuan jika suatu perangkat area tertentu berhenti.
Data referensi yang digunakan dalam contoh ini berisi informasi batas wilayah dari bangunan dan juga perangkat yang boleh digunakan di setiap bangunan. Perlu diingat bahwa data referensi dapat bersifat statik atau lambat perubahannya. Data referensi statik digunakan dalam skenario ini. Sebuah aliran data terus memancarkan ID perangkat dan posisinya saat ini.
Menentukan batas wilayah dalam data referensi
Sebuah batas wilayah dapat ditentukan menggunakan objek GeoJSON. Untuk pekerjaan dengan kompatibilitas versi 1.2 dan lebih, batas wilayah juga dapat ditentukan menggunakan Well Known Text (WKT) seperti NVARCHAR(MAX)
. WKT adalah suatu standar Open Geospatial Consortium (OGC) yang berguna untuk menunjukkan data spasial dalam format tekstual.
Fungsi geospasial bawaan dapat menggunakan batas wilayah yang ditentukan untuk mengetahui adanya elemen yang masuk atau keluar dari poligon batas wilayah tertentu.
Tabel berikut adalah contoh data referensi batas wilayah yang dapat disimpan di penyimpanan blob Azure atau tabel Azure SQL. Setiap situs diwakili oleh satu poligon geospasial dan tiap perangkat dihubungkan dengan ID dari situs yang diperbolehkan.
SiteID | SiteName | Batas wilayah | AllowedDeviceID |
---|---|---|---|
1 | "Bangunan Redmond 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 | "Bangunan Redmond 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 | "Bangunan Redmond 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" |
Membuat pemberitahuan dengan batas wilayah
Perangkat dapat memancarkan ID dan lokasinya setiap menit melalui aliran yang disebut DeviceStreamInput
. Tabel berikut menunjukkan aliran input.
DeviceID | GeoPosition |
---|---|
"A" | "POINT(-122.13292341559497 47.636318374032726)" |
"B" | "POINT(-122.13338475554553 47.63743531308874)" |
"C" | "POINT(-122.13354001095752 47.63627622505007)" |
Anda dapat menulis kueri yang menghubungkan aliran perangkat dengan data referensi batas wilayah yang mengirim pemberitahuan setiap kali perangkat berada di luar bangunan yang diperbolehkan.
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
Gambar berikut menunjukkan batas wilayah. Anda dapat melihat letak perangkat sesuai dengan input data aliran.
Perangkat "C" terletak di dalam gedung ID 2 yang seharusnya tidak diperbolehkan menurut data referensi. Perangkat C harusnya diletakkan di dalam gedung ID 3. Menjalankan pekerjaan ini akan menghasilkan pemberitahuan terkait pelanggaran khusus semacam ini.
Situs dengan beberapa perangkat yang diperbolehkan
Jika situs memperbolehkan pemakaian banyak perangkat, array ID perangkat dapat ditentukan di AllowedDeviceID
dan Fungsi yang Ditentukan Pengguna dapat digunakan pada klausul WHERE
untuk memeriksa apakah ID perangkat aliran sesuai dengan salah satu ID perangkat yang ada dalam daftar itu. Untuk informasi lebih lanjut, lihat tutorial Javascript UDF untuk pekerjaan cloud dan tutorial C # UDF untuk pekerjaan tepi.
Agregasi geospasial
Azure Stream Analytics mendukung agregasi geospasial real time dengan latensi rendah di cloud dan pada runtime IoT Edge.
Skenario agregasi geospasial
Sebuah perusahaan taksi ingin membangun aplikasi real time untuk memandu pengemudi taksi mereka dalam mencari tumpangan di area kota yang saat ini sedang tinggi tingkat permintaannya.
Perusahaan tersebut menyimpan wilayah logis dari kota yang dimaksud sebagai data referensi. Setiap wilayah ditentukan oleh RegionID, RegionName, dan Batas Wilayah.
Menentukan batas wilayah
Tabel berikut adalah contoh data referensi batas wilayah yang dapat disimpan di penyimpanan blob Azure atau tabel Azure SQL. Setiap wilayah diwakili oleh poligon geospasial, yang digunakan untuk menghubungkan permintaan yang berasal dari data aliran.
Poligon ini hanya digunakan sebagai referensi dan tidak menunjukkan pemisahan logis atau fisik yang sebenarnya dari kota tersebut.
RegionID | RegionName | Batas wilayah |
---|---|---|
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))" |
Mengagregregasi data melalui rentang waktu
Tabel berikut berisi data aliran "tumpangan."
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" |
Kueri berikut menggabungkan aliran perangkat dengan data referensi batas wilayah dan menghitung jumlah permintaan per wilayah setiap menit dalam rentang waktu 15 menit.
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)
Kueri ini menghasilkan jumlah permintaan per menit dalam 15 menit terakhir dari setiap wilayah di dalam kota. Informasi ini dapat dengan mudah disajikan oleh dasbor Power BI atau dapat disiarkan ke semua pengemudi sebagai pesan teks SMS terintegrasi dengan layanan seperti fungsi Azure.
Gambar di bawah menggambarkan output kueri ke dasbor Power BI.