Delen via


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

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)

Schermopname van voorbeeld van storm-gebeurtenissen op een kaart.

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 EventTypede 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)

Schermopname van voorbeeld van storm-gebeurtenissen op een kaart per type.

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)

Schermopname van stormgebeurtenissen die worden weergegeven met behulp van geojson.

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)

Schermopname van de webinterface van Azure Data Explorer met een georuimtelijke kaart van tornadostormen.

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)

Schermopname van de webinterface van Azure Data Explorer met een georuimtelijke kaart van de stormen in Zuid-Californië.

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)

Schermopname van het resultaat van de vorige KQL-query voor het berekenen van gebeurtenissen langs een Lijntekenreeks.

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)

Schermopname van het resultaat van de vorige KQL-query om gebeurtenissen langs een veelhoek te berekenen.

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)

Schermopname van de anomaliegrafiek die door de vorige KQL-query is weergegeven.