Tutorial: Membuat visualisasi geospasial

Beralih layanan menggunakan menu tarik-turun Versi. Pelajari selengkapnya tentang navigasi.
Berlaku untuk: ✅ Microsoft Fabric ✅ Azure Data Explorer ✅ Azure Monitor ✅ Microsoft Sentinel

Gunakan Bahasa Kueri Kusto (KQL) untuk membuat visualisasi geospasial. Pengklusteran geospasial mengatur data berdasarkan lokasi. KQL menyediakan beberapa metode pengklusteran geospasial dan alat visualisasi geospasial .

Dalam tutorial ini, Anda akan belajar cara:

Prasyarat

Untuk menjalankan kueri, Anda memerlukan lingkungan kueri yang memiliki akses ke data sampel. Gunakan salah satu hal berikut ini:

  • Akun Microsoft atau identitas pengguna Microsoft Entra untuk masuk ke kluster bantuan
  • Akun Microsoft atau identitas pengguna Microsoft Entra untuk masuk ke kluster bantuan

Gunakan proyek untuk memilih kolom bujur, lalu kolom lintang. Gunakan render untuk memperlihatkan titik pada peta (bagan sebar dengan kind diatur ke map).

Titik plot pada peta

Gunakan proyek untuk memilih kolom bujur, lalu kolom lintang. Gunakan render untuk memperlihatkan titik pada peta (bagan sebar dengan kind diatur ke map).

StormEvents
| take 100
| project BeginLon, BeginLat
| render scatterchart with (kind = map)

Cuplikan layar sampel peristiwa badai di peta.

Plot beberapa seri titik

Untuk memvisualisasikan beberapa seri titik, gunakan proyek untuk memilih garis bujur, lintang, dan kolom ketiga yang menentukan seri.

Dalam kueri berikut, serinya adalah EventType. Titik menggunakan warna yang berbeda menurut EventType dan, saat dipilih, menampilkan nilai EventType.

StormEvents
| take 100
| project BeginLon, BeginLat, EventType
| render scatterchart with (kind = map)

Cuplikan layar sampel peristiwa badai pada peta menurut jenis.

Ketika hasilnya memiliki lebih banyak kolom daripada kolom bujur, lintang, dan seri, Anda juga dapat secara eksplisit menentukan xcolumn (bujur), ycolumn (lintang), dan series di render operator.

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 sering diperbarui dan digunakan dalam pemetaan real-time. Titik pemetaan dengan nilai GeoJSON dinamis memberi Anda fleksibilitas dan kontrol yang tidak dapat disediakan oleh garis lintang dan bujur biasa.

Kueri berikut menggunakan fungsi geo_point_to_s2cell dan geo_s2cell_to_central_point untuk memetakan peristiwa badai pada 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)

Cuplikan layar sampel peristiwa badai yang ditampilkan menggunakan GeoJSON.

Mewakili titik data dengan gelembung berukuran variabel

Visualisasikan distribusi data dengan menggabungkan setiap kluster dan merencanakan titik pusatnya.

Misalnya, kueri berikut memfilter peristiwa badai di mana EventType adalah Tornado. Ini mengelompokkan peristiwa ke dalam kluster garis bujur dan lintang, menghitung peristiwa di setiap kluster, memproyeksikan setiap titik pusat kluster, dan merender peta. Wilayah dengan tornado paling menonjol karena ukuran gelembungnya yang lebih 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)

Cuplikan layar Azure Data Explorer memperlihatkan peta geospasial peristiwa tornado.

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)

Cuplikan layar UI web Azure Data Explorer memperlihatkan peta geospasial badai California selatan.

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)

Cuplikan layar hasil kueri KQL sebelumnya untuk menghitung peristiwa di sepanjang LineString.

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)

Cuplikan layar hasil kueri KQL sebelumnya untuk menghitung peristiwa di sepanjang poligon.

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)

Cuplikan layar bagan anomali yang dirender oleh kueri KQL sebelumnya.