Pengantar fungsi geospasial dalam Azure Stream Analytics

Fungsi geospasial di Azure Stream Analytics memungkinkan analitik waktu nyata untuk streaming data geospasial untuk skenario seperti ride-sharing, manajemen armada, pelacakan aset, geo-fencing, dan pelacakan telepon di seluruh situs seluler. Dengan hanya beberapa baris kode query, Anda dapat membangun solusi yang menggunakan tujuh fungsi bawaan dalam Stream Analytics Query Language (CreateLineString, CreatePoint, CreatePolygon, ST_DISTANCE, ST_OVERLAPSST_INTERSECTSdan ST_WITHIN), yang mendukung semua tipe WKT serta titik GeoJSON, poligon, dan LineString. Artikel ini menjelaskan setiap fungsi dan menampilkan contoh kueri agar Anda dapat menerapkannya pada data streaming Anda sendiri.

Jenis geometri dan urutan koordinat

Fungsi geospasial bekerja dengan tiga tipe geometri GeoJSON. Titik adalah satu lokasi yang didefinisikan oleh bujur dan lintang. LineString adalah himpunan terurut yang terdiri dari dua atau lebih titik yang membentuk garis terhubung, seperti rute atau jalan. Poligon adalah bentuk tertutup yang batasnya kembali ke titik awalnya, seperti jejak bangunan atau geo-fence.

Fungsi-fungsi tersebut terbagi menjadi dua kelompok. Fungsi konstruktor (CreatePoint, CreateLineString, dan CreatePolygon) membangun geometri dari nilai koordinat dalam data event Anda. Fungsi hubungan (ST_DISTANCE, ST_OVERLAPS, ST_INTERSECTS, dan ST_WITHIN) membandingkan dua geometri dan menggambarkan bagaimana mereka berhubungan dalam ruang.

Dalam GeoJSON, koordinat diurutkan bujur terlebih dahulu dan lintang kedua, sehingga lintang input dan bujur muncul secara terbalik dalam geometri yang dihasilkan. Memahami urutan ini, bersama dengan orientasi cincin berlawanan arah jarum jam yang dibutuhkan poligon, membantu Anda memprediksi keluaran dari setiap fungsi.

CreateLineString

CreateLineString adalah fungsi konstruktor yang mengembalikan GeoJSON LineString, sebuah geometri yang mewakili rangkaian titik yang terhubung sebagai garis pada peta. Perangkat ini menerima dua atau lebih titik dan menghubungkannya sesuai urutan Anda mencantumkannya, yang menjadikannya cara alami untuk memodelkan rute, jalur, dan segmen jalan dari data streaming.

Contoh berikut mengilustrasikan perilaku ini dengan menggabungkan tiga titik menjadi LineString. Poin pertama berasal dari streaming data input, dan Anda mendefinisikan dua lainnya secara manual.

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

Contoh input

garis lintang garis bujur
3.0 -10.2
-87.33 20.2321

Contoh output

{"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] ]}

Untuk mempelajari lebih lanjut, lihat referensi CreateLineString .

CreatePoint

CreatePoint adalah fungsi konstruktor yang mengembalikan titik GeoJSON dari lintang dan bujur. Titik adalah geometri paling dasar dan mewakili satu lokasi pada peta, seperti posisi kendaraan atau aset saat ini. Nilai lintang dan bujur harus berupa float tipe data.

Contoh berikut mengilustrasikan perilaku ini dengan membuat titik dari nilai lintang dan bujur dalam data input streaming.

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

Contoh input

garis lintang garis bujur
3.0 -10.2
-87.33 20.2321

Contoh output

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

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

Untuk mempelajari lebih lanjut, lihat referensi CreatePoint .

CreatePolygon

CreatePolygon adalah fungsi konstruktor yang mengembalikan poligon GeoJSON dari sekumpulan titik. Poligon mewakili area tertutup pada peta, seperti jejak bangunan, batas gudang, atau geo-fence. Urutan titik mengikuti orientasi cincin kanan, atau berlawanan arah jarum jam: jika Anda membayangkan berjalan dari satu titik ke titik berikutnya sesuai urutan Anda mendeklarasikan titik-titik tersebut, pusat poligon tetap berada di kiri Anda sepanjang waktu.

Contoh berikut mengilustrasikan perilaku ini dengan membuat poligon dari tiga titik. Anda mendefinisikan dua titik pertama secara manual, dan titik terakhir berasal dari data input.

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

Contoh input

garis lintang garis bujur
3.0 -10.2
-87.33 20.2321

Contoh output

{"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] ]]}

Untuk mempelajari lebih lanjut, kunjungi referensi CreatePolygon .

ST_DISTANCE

ST_DISTANCE adalah fungsi relasi yang mengembalikan jarak antara dua geometri dalam meter. Ini membantu Anda memahami seberapa dekat atau seberapa jauh dua lokasi, yang berguna untuk skenario kedekatan seperti peringatan kendaraan di sekitar dan perhitungan area layanan.

Contoh berikut menunjukkan cara menggunakan fungsi ini untuk mengidentifikasi ketika pom bensin berjarak kurang dari 10 km dari mobil.

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

Untuk mempelajari lebih lanjut, lihat referensi ST_DISTANCE .

ST_OVERLAPS

ST_OVERLAPS adalah fungsi hubungan yang membandingkan dua geometri dan melaporkan apakah mereka berbagi wilayah yang sama. Ia mengembalikan 1 saat geometri tumpang tindih dan 0 saat tidak. Fungsi ini berguna untuk mendeteksi konflik spasial seperti zona bahaya yang menyentuh area yang diminati.

Contoh berikut menunjukkan cara menggunakan fungsi ini untuk mengidentifikasi kapan sebuah bangunan berada dalam zona banjir yang mungkin.

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

Contoh berikutnya juga menggunakan ST_OVERLAPS untuk mendeteksi ketika badai bergerak ke arah mobil.

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

Untuk mempelajari lebih lanjut, lihat referensi ST_OVERLAPS .

ST_INTERSECTS

ST_INTERSECTS adalah fungsi hubungan yang membandingkan dua geometri dan melaporkan apakah mereka saling bersilangan atau bersentuhan. Mengembalikan 1 saat geometri berpotongan dan 0 saat tidak. Fungsi ini membantu Anda mendeteksi di mana jalur atau wilayah bertemu.

Contoh berikut menunjukkan cara menggunakan fungsi ini untuk menentukan apakah jalan beraspal berpotongan dengan jalan tanah.

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

Contoh input

jalan beraspal dirtRoad
{"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] ]}

Contoh output

1

0

Untuk mempelajari lebih lanjut, kunjungi referensi ST_INTERSECTS .

ST_WITHIN

ST_WITHIN adalah fungsi hubungan yang melaporkan apakah satu geometri sepenuhnya terkandung dalam geometri lain. Ia mengembalikan 1 saat geometri pertama berada di dalam geometri kedua dan 0 saat tidak, yang menjadi dasar skenario penahanan seperti geo-fencing dan pemeriksaan zona pengiriman.

Contoh berikut mengilustrasikan perilaku ini dengan menentukan apakah titik tujuan pengiriman berada di dalam poligon gudang tertentu.

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

Contoh input

tujuanPengiriman 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] ]}

Contoh output

0

1

Untuk mempelajari lebih lanjut, kunjungi referensi ST_WITHIN .