Поделиться через


Руководство. Создание геопространственных визуализаций

Переключайте службы с помощью раскрывающегося списка Версия. Дополнительные сведения о навигации.
Область применения: ✅ Microsoft Fabric ✅ Azure Data Explorer ✅ Azure Monitor ✅ Microsoft Sentinel

Используйте язык запросов Kusto (KQL) для создания геопространственных визуализаций. Геопространственная кластеризация организует данные по местоположению. KQL предоставляет несколько геопространственных методов кластеризации и геопространственных средств визуализации .

В этом руководстве вы узнаете, как:

Необходимые компоненты

Чтобы выполнить запросы, вам потребуется среда запроса с доступом к примеру данных. Используйте один из следующих вариантов:

  • Учетная запись Майкрософт или удостоверение пользователя Microsoft Entra для входа в кластер справки
  • Учетная запись Майкрософт или удостоверение пользователя Microsoft Entra для входа в кластер справки

Используйте проект для выбора столбца долготы, а затем столбца широты. Используйте визуализацию для отображения точек на карте (точечная диаграмма, если kind установлено в map).

Диаграмма точек на карте

Используйте проект для выбора столбца долготы, а затем столбца широты. Используйте визуализацию для отображения точек на карте (точечная диаграмма, если kind установлено в map).

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

Снимок экрана: пример событий шторма на карте.

График нескольких рядов точек

Чтобы визуализировать несколько рядов точек, используйте проект для выбора долготы, широты и третьего столбца, определяющего ряд.

В следующем запросе ряд имеет значение EventType. В точках используются различные цвета согласно EventType, и при выборе отображается значение EventType.

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

Снимок экрана: пример штормовых событий на карте по типу.

Если результат содержит больше столбцов, чем столбцы долготы, широты и ряда, можно также явно указать xcolumn (долготу), ycolumn (широта) и series в операторе render .

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

Использование значений GeoJSON для построения точек на карте

Динамические значения GeoJSON часто обновляются и используются в сопоставлении в режиме реального времени. Сопоставление точек с динамическими значениями GeoJSON обеспечивает гибкость и контроль, чего обычные координаты широты и долготы не могут предложить.

Следующий запрос использует функции geo_point_to_s2cell и geo_s2cell_to_central_point для сопоставления событий шторма на точечной диаграмме.

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)

Снимок экрана: пример событий шторма, отображаемых с помощью GeoJSON.

Представлять точки данных в виде пузырьков разного размера

Визуализация распределения данных путем агрегирования каждого кластера и построения ее центральной точки.

Например, следующий запрос фильтрует события шторма, в которых имеется TornadoEventType. Он группирует события в кластеры долготы и широты, учитывает события в каждом кластере, проектирует центральную точку каждого кластера и отрисовывает карту. Регионы с большинством торнадо выделяются их большим размером пузырьков.

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)

Снимок экрана: Azure Data Explorer с геопространственной картой событий торнадо.

Отображение точек в определенной области

Используйте многоугольник для определения региона и функции geo_point_in_polygon для фильтрации событий, происходящих в этом регионе.

Следующий запрос определяет многоугольник, представляющий южный регион Калифорнии и фильтры для событий шторма в этом регионе. Затем он группирует события в кластеры, подсчитывает количество событий в каждом кластере, проектирует центральную точку кластера и отрисовывает карту для визуализации кластеров.

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)

Снимок экрана: веб-интерфейс Azure Data Explorer с геопространственной картой южных калифорнийских штормов.

Отображение близлежащих точек на LineString

Следующий запрос находит близлежащие события шторма, происходящие вдоль указанного lineString, который представляет определенный путь. В этом случае LineString — это дорога к Key West. Функция geo_distance_point_to_line() используется для фильтрации событий шторма на основе их близости к определенной LineString. Если событие находится в пределах 500 метров от LineString, событие отображается на карте.

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)

Снимок экрана: результат предыдущего запроса KQL для вычисления событий вдоль LineString.

Показать близлежащие точки в многоугольнике

Следующий запрос находит близлежащие события шторма, происходящие в пределах указанного многоугольника. В этом случае многоугольник является дорогой к Key West. Функция geo_distance_point_to_polygon() используется для фильтрации событий шторма на основе их близости к определенному многоугольнику. Если событие находится в пределах 500 метров многоугольника, событие отображается на карте.

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)

Снимок экрана: результат предыдущего запроса KQL для вычисления событий по многоугольнику.

Поиск аномалий на основе геопространственных данных

Следующий запрос выполняет анализ событий шторма, происходящих в определенном состоянии. Запрос использует ячейки S2 и темпоральную агрегирование для исследования шаблонов повреждения. Результатом является визуальная диаграмма аномалий, которая изображает любые нарушения или отклонения в штормовом индуцированном разрушении с течением времени, предлагая подробную перспективу на влияние штормов в пределах указанных границ состояния.

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)

Снимок экрана: диаграмма аномалий, отображаемая предыдущим запросом KQL.