Zelfstudie: Georuimtelijke visualisaties maken
Deze zelfstudie is bedoeld voor degenen die Kusto-querytaal (KQL) willen gebruiken voor georuimtelijke visualisatie. Georuimtelijke clustering is een manier om gegevens te organiseren en te analyseren op basis van geografische locatie. KQL biedt meerdere methoden voor het uitvoeren van georuimtelijke clustering en hulpprogramma's voor georuimtelijke visualisaties.
In deze zelfstudie leert u het volgende:
- Punten tekenen op een kaart
- Meerdere reeks punten tekenen
- GeoJSON-waarden gebruiken om punten op een kaart uit te zetten
- Gegevenspunten weergeven met bellen met variabele grootte
- Punten binnen een specifiek gebied weergeven
- Nabijgelegen punten weergeven op een lijntekenreeks
- Nabijgelegen punten in een veelhoek weergeven
- Afwijkingen zoeken op basis van georuimtelijke gegevens
Punten tekenen op een kaart
Als u punten op een kaart wilt visualiseren, gebruikt u project om de kolom met de lengtegraad en vervolgens de kolom met de breedtegraad te selecteren. Gebruik vervolgens render om uw resultaten te bekijken in een spreidingsdiagram met kind
ingesteld op map
.
StormEvents
| take 100
| project BeginLon, BeginLat
| render scatterchart with (kind = map)
Meerdere reeks punten tekenen
Als u meerdere reeksen punten wilt visualiseren, gebruikt u project om de lengtegraad en breedtegraad te selecteren, samen met een derde kolom, die de reeks definieert.
In de volgende query is EventType
de reeks . De punten worden verschillend gekleurd op basis van hun EventType
, en wanneer deze optie is geselecteerd, wordt de inhoud van de EventType
kolom weergegeven.
StormEvents
| take 100
| project BeginLon, BeginLat, EventType
| render scatterchart with (kind = map)
U kunt ook expliciet de xcolumn
(Lengtegraad), ycolumn
(Breedtegraad) en series
opgeven bij het uitvoeren van de render
. Deze specificatie is nodig wanneer het resultaat meer kolommen bevat dan alleen de lengtegraad, breedtegraad en reekskolommen.
StormEvents
| take 100
| render scatterchart with (kind = map, xcolumn = BeginLon, ycolumns = BeginLat, series = EventType)
GeoJSON-waarden gebruiken om punten op een kaart uit te zetten
Een dynamische GeoJSON-waarde kan worden gewijzigd of bijgewerkt en wordt vaak gebruikt voor realtime toewijzingstoepassingen. Het toewijzen van punten met behulp van dynamische GeoJSON-waarden zorgt voor meer flexibiliteit en controle over de weergave van de gegevens op de kaart, wat mogelijk niet mogelijk is met normale breedte- en lengtegraadwaarden.
De volgende query gebruikt de geo_point_to_s2cell en geo_s2cell_to_central_point om stormgebeurtenissen in een spreidingsdiagram toe te wijzen.
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)
Gegevenspunten weergeven met bellen met variabele grootte
Visualiseer de distributie van gegevenspunten door een aggregatie uit te voeren in elk cluster en vervolgens het centrale punt van het cluster uit te tekenen.
De volgende query filtert bijvoorbeeld op alle storm-gebeurtenissen van het gebeurtenistype Tornado. Vervolgens worden de gebeurtenissen gegroepeerd in clusters op basis van hun lengtegraad en breedtegraad, wordt het aantal gebeurtenissen in elk cluster geteld en wordt het centrale punt van het cluster geprojectaliseerd en wordt een kaart weergegeven om het resultaat te visualiseren. De regio's met de meeste tornado's worden duidelijk gedetecteerd op basis van hun grote belgrootte.
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)
Punten binnen een specifiek gebied weergeven
Gebruik een veelhoek om de regio en de functie geo_point_in_polygon te definiëren om te filteren op gebeurtenissen die zich binnen die regio voordoen.
De volgende query definieert een veelhoek die de regio Zuid-Californië vertegenwoordigt en filtert op stormen binnen deze regio. Vervolgens worden de gebeurtenissen gegroepeerd in clusters, wordt het aantal gebeurtenissen in elk cluster geteld, wordt het centrale punt van het cluster geprojectaliseerd en wordt een kaart weergegeven om de clusters te visualiseren.
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)
Nabijgelegen punten weergeven op een lijntekenreeks
Met de volgende query worden gebeurtenissen in de buurt gevonden die optreden langs een opgegeven LineString, die een gedefinieerd pad vertegenwoordigt. In dit geval is de LineString een weg naar Key West. De functie geo_distance_point_to_line() wordt gebruikt om de stormgebeurtenissen te filteren op basis van hun nabijheid tot de gedefinieerde LineString. Als een gebeurtenis zich binnen 500 meter van LineString bevindt, wordt de gebeurtenis weergegeven op een kaart.
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)
Nabijgelegen punten in een veelhoek weergeven
Met de volgende query worden gebeurtenissen in de buurt van stormen gevonden die plaatsvinden binnen een opgegeven veelhoek. In dit geval is de veelhoek een weg naar Key West. De functie geo_distance_point_to_polygon() wordt gebruikt om de stormgebeurtenissen te filteren op basis van hun nabijheid tot de gedefinieerde veelhoek. Als een gebeurtenis zich binnen 500 meter van de veelhoek bevindt, wordt de gebeurtenis weergegeven op een kaart.
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)
Afwijkingen zoeken op basis van georuimtelijke gegevens
Met de volgende query wordt een analyse uitgevoerd van stormgebeurtenissen die zich binnen een bepaalde status voordoen. De query maakt gebruik van S2-cellen en tijdelijke aggregatie om patronen van schade te onderzoeken. Het resultaat is een visueel anomaliediagram dat eventuele onregelmatigheden of afwijkingen in door storm veroorzaakte vernietiging in de loop van de tijd weergeeft, en een gedetailleerd perspectief biedt op het effect van stormen binnen de opgegeven staatsgrenzen.
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)
Gerelateerde inhoud
- Zie een gebruiksvoorbeeld voor georuimtelijke clustering: Gegevensanalyse voor autotestvloten
- Meer informatie over Azure-architectuur voor georuimtelijke gegevensverwerking en -analyse
- Krijg een uitgebreid inzicht in Azure Data Explorer door het technische document te lezen
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor