Freigeben über


Lernprogramm: Erstellen von geospatialen Visualisierungen

Wechseln Sie Dienste mit der Dropdownliste "Version". Weitere Informationen zur Navigation.
Gilt für: ✅ Microsoft Fabric ✅ Azure Data Explorer ✅ Azure Monitor ✅ Microsoft Sentinel

Verwenden Sie die Kusto Query Language (KQL), um geospatiale Visualisierungen zu erstellen. Geospatialclustering organisiert Daten nach Standort. KQL bietet mehrere Geospatialclustering-Methoden und Geospatialvisualisierungstools .

In diesem Tutorial erfahren Sie, wie:

Voraussetzungen

Zum Ausführen der Abfragen benötigen Sie eine Abfrageumgebung, die Zugriff auf die Beispieldaten hat. Verwenden Sie eine der folgenden Optionen:

  • Microsoft-Konto oder Microsoft Entra-Benutzeridentität, um sich beim Hilfecluster anzumelden
  • Microsoft-Konto oder Microsoft Entra-Benutzeridentität, um sich beim Hilfecluster anzumelden

Verwenden Sie das Projekt , um die Längengradspalte und dann die Breitengradspalte auszuwählen. Verwenden Sie Render, um Punkte auf einer Karte anzuzeigen (Streudiagramm mit kind auf map gesetzt).

Zeichnen von Punkten auf einer Karte

Verwenden Sie das Projekt , um die Längengradspalte und dann die Breitengradspalte auszuwählen. Verwenden Sie Render, um Punkte auf einer Karte anzuzeigen (Streudiagramm mit kind auf map gesetzt).

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

Screenshot von Beispiel-Sturmereignissen auf einer Karte.

Zeichnen mehrerer Punktreihen

Um mehrere Punktreihen zu visualisieren, verwenden Sie das Projekt , um längengrad, breitengrad und eine dritte Spalte auszuwählen, die die Datenreihe definiert.

In der folgenden Abfrage ist EventTypedie Datenreihe . Die Punkte verwenden je nach EventType unterschiedliche Farben und zeigen bei Auswahl den Wert von EventType an.

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

Screenshot von Beispielsturmereignissen auf einer Karte nach Typ.

Wenn das Ergebnis mehr Spalten als Längengrad, Breitengrad und Reihenspalten aufweist, können Sie auch explizit die xcolumn Spalten (Längengrad), ycolumn (Breitengrad) und series im render Operator angeben.

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

Verwenden von GeoJSON-Werten zum Zeichnen von Punkten auf einer Karte

Dynamische GeoJSON-Werte werden häufig aktualisiert und in Echtzeitzuordnung verwendet. Das Abbilden von Punkten mit dynamischen GeoJSON-Werten gibt Ihnen eine Flexibilität und Kontrolle, die einfache Breiten- und Längengrade nicht bieten können.

Die folgende Abfrage verwendet die Funktionen geo_point_to_s2cell und geo_s2cell_to_central_point , um Sturmereignisse in einem Punktdiagramm zuzuordnen.

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)

Screenshot von Beispielsturmereignissen, die mithilfe von GeoJSON angezeigt werden.

Darstellung von Datenpunkten mit Blasen variabler Größe

Visualisieren Sie die Datenverteilung, indem Sie jeden Cluster aggregieren und seinen zentralen Punkt darstellen.

Die folgende Abfrage filtert z. B. Sturmereignisse, bei denen EventType ist Tornado. Es gruppiert Ereignisse in Längengrad- und Breitengruppen, zählt Ereignisse in jedem Cluster, projiziert den zentralen Punkt jedes Clusters und rendert eine Karte. Regionen mit den meisten Tornados heben sich durch ihre größere Blasengröße hervor.

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)

Screenshot des Azure-Daten-Explorers mit einer geospatialen Karte von Tornado-Ereignissen.

Anzeigen von Punkten innerhalb eines bestimmten Bereichs

Verwenden Sie ein Polygon, um den Bereich und die geo_point_in_polygon-Funktion zu definieren, um nach Ereignissen zu filtern, die innerhalb dieses Bereichs auftreten.

Die folgende Abfrage definiert ein Polygon, das die Region Südkalifornien darstellt, und filtert nach Sturmereignissen innerhalb dieser Region. Anschließend werden die Ereignisse in Cluster gruppiert, die Anzahl der Ereignisse in jedem Cluster gezählt, der zentrale Punkt des Clusters projiziert und eine Karte gerendert, um die Cluster zu visualisieren.

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)

Screenshot der Azure Data Explorer-Webbenutzeroberfläche mit einer geospatialen Karte von Südkalifornien-Stürmen.

Anzeigen von in der Nähe befindlichen Punkten in einem LineString

Die folgende Abfrage findet nahe gelegene Sturmereignisse, die entlang eines angegebenen LineString-Objekts auftreten, das einen definierten Pfad darstellt. In diesem Fall ist lineString eine Straße nach Key West. Die funktion geo_distance_point_to_line() wird verwendet, um die Sturmereignisse basierend auf ihrer Nähe zum definierten LineString zu filtern. Wenn ein Ereignis innerhalb von 500 Metern von LineString entfernt ist, wird das Ereignis auf einer Karte gerendert.

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)

Screenshot des Ergebnisses der vorherigen KQL-Abfrage zum Berechnen von Ereignissen entlang eines LineString-Objekts.

Anzeigen von in der Nähe befindlichen Punkten in einem Polygon

Die folgende Abfrage findet In der Nähe befindliche Sturmereignisse, die innerhalb eines angegebenen Polygons auftreten. In diesem Fall ist das Polygon eine Straße nach Key West. Die funktion geo_distance_point_to_polygon() wird verwendet, um die Sturmereignisse basierend auf ihrer Nähe zum definierten Polygon zu filtern. Wenn ein Ereignis innerhalb von 500 Metern des Polygons liegt, wird das Ereignis auf einer Karte gerendert.

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)

Screenshot des Ergebnisses der vorherigen KQL-Abfrage zum Berechnen von Ereignissen entlang eines Polygons.

Suchen von Anomalien basierend auf geospatialen Daten

Die folgende Abfrage führt eine Analyse von Sturmereignissen aus, die innerhalb eines bestimmten Zustands auftreten. Die Abfrage verwendet S2-Zellen und zeitliche Aggregation, um Schadensmuster zu untersuchen. Das Ergebnis ist ein visuelles Anomaliediagramm, das Unregelmäßigkeiten oder Abweichungen bei der sturminduzierten Zerstörung im Laufe der Zeit darstellt und eine detaillierte Perspektive auf die Wirkung von Stürmen innerhalb der angegebenen Zustandsgrenzen bietet.

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)

Screenshot des Anomaliediagramms, das von der vorherigen KQL-Abfrage gerendert wird.