Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Tutorial ini ditujukan bagi mereka yang ingin menggunakan Bahasa Kueri Kusto (KQL) untuk visualisasi geospasial. Pengklusteran geospasial adalah cara untuk mengatur dan menganalisis data berdasarkan lokasi geografis. KQL menawarkan beberapa metode untuk melakukan pengklusteran geospasial dan alat untuk visualisasi geospasial.
Dalam tutorial ini, Anda akan mempelajari cara:
- Titik plot pada peta
- Plot beberapa seri titik
- Menggunakan nilai GeoJSON untuk memplot titik pada peta
- Mewakili titik data dengan gelembung berukuran variabel
- Menampilkan titik dalam area tertentu
- Tampilkan titik terdekat pada LineString
- Tampilkan titik terdekat dalam poligon
- Menemukan anomali berdasarkan data geospasial
Prasyarat
Untuk menjalankan kueri berikut, Anda memerlukan lingkungan kueri dengan akses ke data sampel. Anda bisa menggunakan salah satu hal berikut ini:
- Akun Microsoft atau identitas pengguna Microsoft Entra untuk masuk ke kluster bantuan
- Akun Microsoft atau identitas pengguna Microsoft Entra
- Ruang kerja Fabric dengan kapasitas yang diaktifkan Microsoft Fabric
Titik plot pada peta
Untuk memvisualisasikan titik pada peta, gunakan proyek untuk memilih kolom yang berisi bujur lalu kolom yang berisi garis lintang. Kemudian, gunakan render untuk melihat hasil Anda dalam bagan sebar dengan kind diatur ke map.
StormEvents
| take 100
| project BeginLon, BeginLat
| render scatterchart with (kind = map)
Plot beberapa seri titik
Untuk memvisualisasikan beberapa seri titik, gunakan proyek untuk memilih garis bujur dan lintang bersama dengan kolom ketiga, yang menentukan seri.
Dalam kueri berikut, serinya adalah EventType. Titik diwarnai secara berbeda sesuai dengan EventType, dan ketika dipilih menampilkan konten EventType kolom.
StormEvents
| take 100
| project BeginLon, BeginLat, EventType
| render scatterchart with (kind = map)
Anda juga dapat secara eksplisit menentukan xcolumn (Bujur), ycolumn (Lintang), dan series saat melakukan render. Spesifikasi ini diperlukan ketika ada lebih banyak kolom dalam hasil daripada hanya kolom bujur, garis lintang, dan seri.
StormEvents
| take 100
| render scatterchart with (kind = map, xcolumn = BeginLon, ycolumns = BeginLat, series = EventType)
Menggunakan nilai GeoJSON untuk memplot titik pada peta
Nilai GeoJSON dinamis dapat berubah atau diperbarui dan sering digunakan untuk aplikasi pemetaan real time. Titik pemetaan menggunakan nilai GeoJSON dinamis memungkinkan lebih banyak fleksibilitas dan kontrol atas representasi data pada peta yang mungkin tidak dimungkinkan dengan nilai garis lintang dan bujur biasa.
Kueri berikut menggunakan geo_point_to_s2cell dan geo_s2cell_to_central_point untuk memetakan peristiwa badai dalam bagan sebar.
StormEvents
| project BeginLon, BeginLat
| summarize by hash=geo_point_to_s2cell(BeginLon, BeginLat, 5)
| project point = geo_s2cell_to_central_point(hash)
| project lng = toreal(point.coordinates[0]), lat = toreal(point.coordinates[1])
| render scatterchart with (kind = map)
Mewakili titik data dengan gelembung berukuran variabel
Visualisasikan distribusi titik data dengan melakukan agregasi di setiap kluster lalu merencanakan titik pusat kluster.
Misalnya, kueri berikut memfilter semua peristiwa badai dari jenis peristiwa "Tornado". Kemudian mengelompokkan peristiwa ke dalam kluster berdasarkan garis bujur dan lintangnya, menghitung jumlah peristiwa di setiap kluster, dan memproyeksikan titik pusat kluster, dan merender peta untuk memvisualisasikan hasilnya. Wilayah dengan tornado terbanyak menjadi terdeteksi dengan jelas berdasarkan ukuran gelembungnya yang besar.
StormEvents
| where EventType == "Tornado"
| project BeginLon, BeginLat
| where isnotnull(BeginLat) and isnotnull(BeginLon)
| summarize count_summary=count() by hash = geo_point_to_s2cell(BeginLon, BeginLat, 4)
| project geo_s2cell_to_central_point(hash), count_summary
| extend Events = "count"
| render piechart with (kind = map)
Menampilkan titik dalam area tertentu
Gunakan poligon untuk menentukan wilayah dan fungsi geo_point_in_polygon untuk memfilter peristiwa yang terjadi dalam wilayah tersebut.
Kueri berikut mendefinisikan poligon yang mewakili wilayah California selatan dan filter untuk peristiwa badai dalam wilayah ini. Kemudian mengelompokkan peristiwa ke dalam kluster, menghitung jumlah peristiwa di setiap kluster, memproyeksikan titik pusat kluster, dan merender peta untuk memvisualisasikan kluster.
let southern_california = dynamic({
"type": "Polygon",
"coordinates": [[[-119.5, 34.5], [-115.5, 34.5], [-115.5, 32.5], [-119.5, 32.5], [-119.5, 34.5]]
]});
StormEvents
| where geo_point_in_polygon(BeginLon, BeginLat, southern_california)
| project BeginLon, BeginLat
| summarize count_summary = count() by hash = geo_point_to_s2cell(BeginLon, BeginLat, 8)
| project geo_s2cell_to_central_point(hash), count_summary
| extend Events = "count"
| render piechart with (kind = map)
Tampilkan titik terdekat pada LineString
Kueri berikut menemukan peristiwa badai terdekat yang terjadi di sepanjang LineString tertentu, yang mewakili jalur yang ditentukan. Dalam hal ini, LineString adalah jalan ke Key West. Fungsi geo_distance_point_to_line() digunakan untuk memfilter peristiwa badai berdasarkan kedekatannya dengan LineString yang ditentukan. Jika peristiwa berada dalam jarak 500 meter dari LineString, peristiwa akan dirender di peta.
let roadToKeyWest = dynamic({
"type":"linestring",
"coordinates":[
[
-81.79595947265625,
24.56461038017685
],
[
-81.595458984375,
24.627044746156027
],
[
-81.52130126953125,
24.666986385216273
],
[
-81.35650634765625,
24.66449040712424
],
[
-81.32354736328125,
24.647017162630366
],
[
-80.8099365234375,
24.821639356846607
],
[
-80.62042236328125,
24.93127614538456
],
[
-80.37872314453125,
25.175116531621764
],
[
-80.42266845703124,
25.19251511519153
],
[
-80.4803466796875,
25.46063471847754
]
]});
StormEvents
| where isnotempty(BeginLat) and isnotempty(BeginLon)
| project BeginLon, BeginLat, EventType
| where geo_distance_point_to_line(BeginLon, BeginLat, roadToKeyWest) < 500
| render scatterchart with (kind=map)
Tampilkan titik terdekat dalam poligon
Kueri berikut menemukan peristiwa badai terdekat yang terjadi dalam poligon tertentu. Dalam hal ini, poligon adalah jalan ke Key West. Fungsi geo_distance_point_to_polygon() digunakan untuk memfilter peristiwa badai berdasarkan kedekatannya dengan poligon yang ditentukan. Jika peristiwa berada dalam jarak 500 meter dari poligon, peristiwa akan dirender di peta.
let roadToKeyWest = dynamic({
"type":"polygon",
"coordinates":[
[
[
-80.08209228515625,
25.39117928167583
],
[
-80.4913330078125,
25.517657429994035
],
[
-80.57922363281249,
25.477992320574817
],
[
-82.188720703125,
24.632038149596895
],
[
-82.1942138671875,
24.53712939907993
],
[
-82.13104248046875,
24.412140070651528
],
[
-81.81243896484375,
24.43714786161562
],
[
-80.58746337890625,
24.794214972389486
],
[
-80.08209228515625,
25.39117928167583
]
]
]});
StormEvents
| where isnotempty(BeginLat) and isnotempty(BeginLon)
| project BeginLon, BeginLat, EventType
| where geo_distance_point_to_polygon(BeginLon, BeginLat, roadToKeyWest) < 500
| render scatterchart with (kind=map)
Menemukan anomali berdasarkan data geospasial
Kueri berikut melakukan analisis peristiwa badai yang terjadi dalam keadaan tertentu. Kueri menggunakan sel S2 dan agregasi temporal untuk menyelidiki pola kerusakan. Hasilnya adalah bagan anomali visual yang menggambarkan penyimpangan atau penyimpangan dalam penghancuran yang diinduksi badai dari waktu ke waktu, menawarkan perspektif terperinci tentang efek badai dalam batas status yang ditentukan.
let stateOfInterest = "Texas";
let statePolygon = materialize(
US_States
| extend name = tostring(features.properties.NAME)
| where name == stateOfInterest
| project geometry=features.geometry);
let stateCoveringS2cells = statePolygon
| project s2Cells = geo_polygon_to_s2cells(geometry, 9);
StormEvents
| extend s2Cell = geo_point_to_s2cell(BeginLon, BeginLat, 9)
| where s2Cell in (stateCoveringS2cells)
| where geo_point_in_polygon(BeginLon, BeginLat, toscalar(statePolygon))
| make-series damage = avg(DamageProperty + DamageCrops) default = double(0.0) on StartTime step 7d
| extend anomalies=series_decompose_anomalies(damage)
| render anomalychart with (anomalycolumns=anomalies)
Konten terkait
- Lihat kasus penggunaan untuk pengklusteran geospasial: Analitik data untuk armada pengujian otomotif
- Pelajari tentang arsitektur Azure untuk pemrosesan dan analitik data geospasial
- Dapatkan pemahaman komprehensif tentang Azure Data Explorer dengan membaca laporan resmi