Självstudie: Skapa geospatiala visualiseringar
Den här självstudien är avsedd för dem som vill använda Kusto-frågespråk (KQL) för geospatial visualisering. Geospatial klustring är ett sätt att organisera och analysera data baserat på geografisk plats. KQL erbjuder flera metoder för att utföra geospatiala kluster och verktyg för geospatiala visualiseringar.
I den här självstudien får du lära dig att:
- Rita punkter på en karta
- Rita flera poängserier
- Använd GeoJSON-värden för att rita punkter på en karta
- Representera datapunkter med bubblor med variabel storlek
- Visningspunkter inom ett visst område
- Visa närliggande punkter på en LineString
- Visa närliggande punkter i en polygon
- Hitta avvikelser baserat på geospatiala data
Rita punkter på en karta
Om du vill visualisera punkter på en karta använder du projektet för att välja kolumnen som innehåller longitud och sedan kolumnen som innehåller latitud. Använd sedan återgivning för att se dina resultat i ett punktdiagram med kind
värdet map
.
StormEvents
| take 100
| project BeginLon, BeginLat
| render scatterchart with (kind = map)
Rita flera poängserier
Om du vill visualisera flera poängserier använder du projektet för att välja longitud och latitud tillsammans med en tredje kolumn, som definierar serien.
I följande fråga är EventType
serien . Punkterna färgas på olika sätt beroende på deras EventType
, och när de väljs visas innehållet i EventType
kolumnen.
StormEvents
| take 100
| project BeginLon, BeginLat, EventType
| render scatterchart with (kind = map)
Du kan också uttryckligen xcolumn
ange (Longitud), ycolumn
(Latitud) och series
när du render
utför . Den här specifikationen är nödvändig när det finns fler kolumner i resultatet än bara kolumnerna longitud, latitud och serie.
StormEvents
| take 100
| render scatterchart with (kind = map, xcolumn = BeginLon, ycolumns = BeginLat, series = EventType)
Använd GeoJSON-värden för att rita punkter på en karta
Ett dynamiskt GeoJSON-värde kan ändras eller uppdateras och används ofta för program för realtidsmappning. Mappningspunkter med dynamiska GeoJSON-värden ger större flexibilitet och kontroll över representationen av data på kartan som kanske inte är möjliga med enkla latitud- och longitudvärden.
Följande fråga använder geo_point_to_s2cell och geo_s2cell_to_central_point för att mappa stormhändelser i ett punktdiagram.
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)
Representera datapunkter med bubblor med variabel storlek
Visualisera fördelningen av datapunkter genom att utföra en aggregering i varje kluster och sedan rita klustrets centrala punkt.
Följande fråga filtrerar till exempel för alla stormhändelser av händelsetypen "Tornado". Den grupperar sedan händelserna i kluster baserat på deras longitud och latitud, räknar antalet händelser i varje kluster och projicerar klustrets centrala punkt och återger en karta för att visualisera resultatet. De regioner som har flest tornados blir tydligt upptäckta baserat på deras stora bubbelstorlek.
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)
Visningspunkter inom ett visst område
Använd en polygon för att definiera regionen och funktionen geo_point_in_polygon för att filtrera efter händelser som inträffar i den regionen.
Följande fråga definierar en polygon som representerar regionen södra Kalifornien och filter för stormhändelser i den här regionen. Den grupperar sedan händelserna i kluster, räknar antalet händelser i varje kluster, projicerar klustrets centrala punkt och återger en karta för att visualisera klustren.
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)
Visa närliggande punkter på en LineString
Följande fråga hittar närliggande stormhändelser som inträffar längs en angiven LineString, som representerar en definierad sökväg. I det här fallet är LineString en väg till Key West. Funktionen geo_distance_point_to_line() används för att filtrera stormhändelserna baserat på deras närhet till den definierade LineString. Om en händelse ligger inom 500 meter från LineString återges händelsen på en karta.
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)
Visa närliggande punkter i en polygon
Följande fråga hittar stormhändelser i närheten som inträffar inom en angiven polygon. I det här fallet är polygonen en väg till Key West. Funktionen geo_distance_point_to_polygon() används för att filtrera stormhändelserna baserat på deras närhet till den definierade polygonen. Om en händelse ligger inom 500 meter från polygonen återges händelsen på en karta.
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)
Hitta avvikelser baserat på geospatiala data
Följande fråga utför en analys av stormhändelser som inträffar i ett visst tillstånd. Frågan använder S2-celler och temporal aggregering för att undersöka skademönster. Resultatet är ett visuellt avvikelsediagram som visar eventuella oegentligheter eller avvikelser i storminducerad förstörelse över tid, vilket ger ett detaljerat perspektiv på effekten av stormar inom de angivna tillståndsgränserna.
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)
Relaterat innehåll
- Se ett användningsfall för geospatial klustring: Dataanalys för fordonstestflottor
- Lär dig mer om Azure-arkitektur för geospatial databearbetning och analys
- Få en omfattande förståelse för Azure Data Explorer genom att läsa faktabladet
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för