Sdílet prostřednictvím


Kurz: Vytváření geoprostorových vizualizací

Platí pro: ✅Microsoft FabricAzure Data Explorer✅Azure MonitorMicrosoft Sentinel

Tento kurz je určený pro ty, kteří chtějí použít dotazovací jazyk Kusto (KQL) pro geoprostorovou vizualizaci. Geoprostorové shlukování je způsob, jak uspořádat a analyzovat data na základě zeměpisného umístění. KQL nabízí několik metod pro provádění geoprostorových clusteringů a nástrojů pro geoprostorové vizualizace.

V tomto kurzu se naučíte:

Požadavky

Pokud chcete spustit následující dotazy, potřebujete prostředí dotazu s přístupem k ukázkovým datům. Můžete použít jednu z těchto možností:

  • Účet Microsoft nebo identita uživatele Microsoft Entra pro přihlášení ke clusteru nápovědy

Vykreslení bodů na mapě

Pokud chcete vizualizovat body na mapě, vyberte pomocí projektu sloupec obsahující zeměpisnou délku a potom sloupec obsahující zeměpisnou šířku. Potom pomocí vykreslení zobrazte výsledky v bodovém grafu s nastaveným kind na map.

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

Snímek obrazovky s ukázkovými událostmi storm na mapě

Vykreslení více řad bodů

Pokud chcete vizualizovat více řad bodů, pomocí projektu vyberte zeměpisnou délku a zeměpisnou šířku spolu s třetím sloupcem, který definuje řadu.

V následujícím dotazu je EventTypeřada . Body se barevně liší podle jejich EventTypea při výběru se zobrazí obsah EventType sloupce.

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

Snímek obrazovky s ukázkovými událostmi stormu na mapě podle typu

Můžete také explicitně zadat xcolumn (Zeměpisná délka), ycolumn (Zeměpisná šířka) a series při provádění render. Tato specifikace je nezbytná v případě, že výsledek obsahuje více sloupců než jen sloupce zeměpisné délky, zeměpisné šířky a řady.

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

Použití hodnot GeoJSON k vykreslení bodů na mapě

Dynamická hodnota GeoJSON se může změnit nebo aktualizovat a často se používá pro aplikace mapování v reálném čase. Mapování bodů pomocí dynamických hodnot GeoJSON umožňuje větší flexibilitu a kontrolu nad reprezentací dat na mapě, které nemusí být možné s hodnotami prosté zeměpisné šířky a délky.

Následující dotaz používá geo_point_to_s2cell a geo_s2cell_to_central_point k mapování událostí bouře v bodovém grafu.

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)

Snímek obrazovky s ukázkovými událostmi stormu zobrazenými pomocí geojsonu

Znázornění datových bodů s bublinami s proměnlivou velikostí

Vizualizujte distribuci datových bodů provedením agregace v každém clusteru a následným vykreslením centrálního bodu clusteru.

Například následující dotaz filtruje všechny události storm typu "Tornado". Potom seskupí události do clusterů podle jejich délky a zeměpisné šířky, spočítá počet událostí v každém clusteru a vykreslí centrální bod clusteru a vykreslí mapu pro vizualizaci výsledku. Oblasti s největším tornádem se jasně rozpoznají na základě jejich velké velikosti bublin.

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)

Snímek obrazovky s webovým uživatelským rozhraním Azure Data Exploreru zobrazující geoprostorovou mapu bouří tornáda

Zobrazení bodů v určité oblasti

Pomocí mnohoúhelníku definujte oblast a funkci geo_point_in_polygon k filtrování událostí, ke kterým dochází v dané oblasti.

Následující dotaz definuje mnohoúhelník představující oblast jižní Kalifornie a filtry pro události bouře v této oblasti. Potom seskupí události do clusterů, spočítá počet událostí v každém clusteru, projektuje centrální bod clusteru a vykreslí mapu pro vizualizaci clusterů.

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)

Snímek obrazovky webového uživatelského rozhraní Azure Data Exploreru zobrazující geoprostorovou mapu bouří jižní Kalifornie

Zobrazení blízkých bodů na linestringu

Následující dotaz vyhledá okolní události stormu, ke kterým dochází podél zadaného řetězce LineString, který představuje definovanou cestu. V tomto případě je LineString cesta k Key West. Funkce geo_distance_point_to_line() slouží k filtrování událostí stormu na základě jejich blízkosti definovaného linestringu. Pokud je událost v dosahu 500 metrů od linestringu, událost se vykreslí na mapě.

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)

Snímek obrazovky s výsledkem předchozího dotazu KQL k výpočtu událostí podél linestringu

Zobrazení blízkých bodů v mnohoúhelníku

Následující dotaz najde okolní události stormu, ke kterým dochází v zadaném mnohoúhelníku. V tomto případě je mnohoúhelník silnicí na Key West. Funkce geo_distance_point_to_polygon() slouží k filtrování událostí stormu na základě jejich blízkosti definovaného mnohoúhelníku. Pokud je událost v rozsahu 500 metrů od mnohoúhelníku, událost se vykreslí na mapě.

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)

Snímek obrazovky s výsledkem předchozího dotazu KQL pro výpočet událostí pomocí mnohoúhelníku

Vyhledání anomálií na základě geoprostorových dat

Následující dotaz provede analýzu událostí stormu, ke kterým dochází v určitém stavu. Dotaz používá buňky S2 a časovou agregaci ke zkoumání vzorů poškození. Výsledkem je vizuální graf anomálií, který znázorňuje případné nesrovnalosti nebo odchylky zničení vyvolané bouřemi v průběhu času a nabízí podrobný pohled na účinek bouře v rámci zadaných hranic státu.

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)

Snímek obrazovky s grafem anomálií vykresleným předchozím dotazem KQL