Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten samouczek dotyczy osób, które chcą używać język zapytań Kusto (KQL) na potrzeby wizualizacji geoprzestrzennych. Klastrowanie geoprzestrzenne to sposób organizowania i analizowania danych na podstawie lokalizacji geograficznej. Język KQL oferuje wiele metod wykonywania klastrów geoprzestrzennych i narzędzi do wizualizacji geoprzestrzennych.
Z tego samouczka dowiesz się, jak wykonywać następujące czynności:
- Kreślenie punktów na mapie
- Wykreśl wiele serii punktów
- Używanie wartości GeoJSON do kreślenia punktów na mapie
- Reprezentacja punktów danych za pomocą bąbelków o zmiennym rozmiarze
- Wyświetlanie punktów w określonym obszarze
- Pokazywanie pobliskich punktów na lineString
- Pokaż pobliskie punkty w wielokącie
- Znajdowanie anomalii na podstawie danych geoprzestrzennych
Wymagania wstępne
Aby uruchomić następujące zapytania, potrzebujesz środowiska zapytań z dostępem do przykładowych danych. Możesz użyć jednej z następujących opcji:
- Konto Microsoft lub tożsamość użytkownika Microsoft Entra w celu zalogowania się do klastra pomocy
- Konto Microsoft lub tożsamość użytkownika Entra firmy Microsoft
- Obszar roboczy sieci szkieletowej z pojemnością z włączoną usługą Microsoft Fabric
Kreślenie punktów na mapie
Aby wizualizować punkty na mapie, użyj projektu , aby wybrać kolumnę zawierającą długość geograficzną, a następnie kolumnę zawierającą szerokość geograficzną. Następnie użyj renderowania , aby wyświetlić wyniki na wykresie punktowym z ustawioną wartością kind
map
.
StormEvents
| take 100
| project BeginLon, BeginLat
| render scatterchart with (kind = map)
Wykreśl wiele serii punktów
Aby zwizualizować wiele serii punktów, użyj projektu , aby wybrać długość geograficzną i szerokość geograficzną wraz z trzecią kolumną, która definiuje serię.
W poniższym zapytaniu seria to EventType
. Punkty są kolorowane inaczej zgodnie z wartościami EventType
i po wybraniu wyświetlania EventType
zawartości kolumny.
StormEvents
| take 100
| project BeginLon, BeginLat, EventType
| render scatterchart with (kind = map)
Można również jawnie określić xcolumn
(Długość geograficzna), ycolumn
(Szerokość geograficzna) i series
podczas wykonywania .render
Ta specyfikacja jest niezbędna, gdy w wyniku znajduje się więcej kolumn niż tylko długość geograficzna, szerokość geograficzna i kolumny serii.
StormEvents
| take 100
| render scatterchart with (kind = map, xcolumn = BeginLon, ycolumns = BeginLat, series = EventType)
Używanie wartości GeoJSON do kreślenia punktów na mapie
Dynamiczna wartość GeoJSON może ulec zmianie lub zaktualizować i jest często używana dla aplikacji mapowania w czasie rzeczywistym. Punkty mapowania używające dynamicznych wartości GeoJSON umożliwiają większą elastyczność i kontrolę nad reprezentacją danych na mapie, które mogą nie być możliwe przy użyciu zwykłych wartości szerokości geograficznej i długości geograficznej.
Poniższe zapytanie używa geo_point_to_s2cell i geo_s2cell_to_central_point do mapowania zdarzeń burzy na wykresie punktowym.
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)
Reprezentacja punktów danych za pomocą bąbelków o zmiennym rozmiarze
Wizualizuj rozkład punktów danych, wykonując agregację w każdym klastrze, a następnie kreśląc centralny punkt klastra.
Na przykład następujące zapytanie filtruje wszystkie zdarzenia burzy typu zdarzenia "Tornado". Następnie grupuje zdarzenia w klastrach na podstawie ich długości geograficznej i szerokości geograficznej, zlicza liczbę zdarzeń w każdym klastrze oraz projektuje centralny punkt klastra i renderuje mapę w celu wizualizacji wyniku. Regiony z największą ilością tornad stają się wyraźnie wykrywane na podstawie ich dużego rozmiaru bąbelka.
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)
Wyświetlanie punktów w określonym obszarze
Użyj wielokąta, aby zdefiniować region i funkcję geo_point_in_polygon w celu filtrowania zdarzeń występujących w tym regionie.
Poniższe zapytanie definiuje wielokąt reprezentujący region południowej Kalifornii i filtry dla zdarzeń burzy w tym regionie. Następnie grupuje zdarzenia w klastry, zlicza liczbę zdarzeń w każdym klastrze, projektuje centralny punkt klastra i renderuje mapę w celu wizualizacji klastrów.
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)
Pokazywanie pobliskich punktów na lineString
Poniższe zapytanie znajduje pobliskie zdarzenia burzy, które występują wzdłuż określonego ciągu LineString, który reprezentuje zdefiniowaną ścieżkę. W tym przypadku LineString jest drogą do Key West. Funkcja geo_distance_point_to_line() służy do filtrowania zdarzeń burzy w oparciu o ich bliskość do zdefiniowanego ciągu LineString. Jeśli zdarzenie znajduje się w odległości 500 metrów od lineString, zdarzenie jest renderowane na mapie.
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)
Pokaż pobliskie punkty w wielokącie
Poniższe zapytanie znajduje pobliskie zdarzenia burzy, które występują w określonym wielokącie. W tym przypadku wielokąt jest drogą do Key West. Funkcja geo_distance_point_to_polygon() służy do filtrowania zdarzeń burzy w oparciu o ich bliskość do zdefiniowanego wielokąta. Jeśli zdarzenie znajduje się w odległości 500 metrów od wielokąta, zdarzenie jest renderowane na mapie.
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)
Znajdowanie anomalii na podstawie danych geoprzestrzennych
Poniższe zapytanie wykonuje analizę zdarzeń burzy występujących w określonym stanie. Zapytanie używa komórek S2 i agregacji czasowej do zbadania wzorców uszkodzeń. Wynik jest wizualnym wykresem anomalii, który przedstawia wszelkie nieprawidłowości lub odchylenia w niszczeniu wywołanym przez burzę w czasie, oferując szczegółową perspektywę wpływu burz w określonych granicach stanu.
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)
Powiązana zawartość
- Zobacz przypadek użycia klastrowania geoprzestrzennego: analiza danych dla flot testów samochodowych
- Dowiedz się więcej o architekturze platformy Azure na potrzeby przetwarzania i analizy danych geoprzestrzennych
- Uzyskaj kompleksową wiedzę na temat usługi Azure Data Explorer, czytając oficjalny dokument