Руководство по созданию геопространственных визуализаций
Это руководство предназначено для тех, кто хочет использовать язык запросов Kusto (KQL) для геопространственной визуализации. Геопространственные кластеризация — это способ упорядочивания и анализа данных на основе географического расположения. KQL предлагает несколько методов для выполнения геопространственных кластеризация и инструментов для геопространственных визуализаций.
Из этого руководства вы узнаете, как выполнять следующие задачи:
- Создание точек на карте
- График нескольких рядов точек
- Использование значений GeoJSON для построения точек на карте
- Представление точек данных с пузырьками переменного размера
- Отображение точек в определенной области
- Отображение ближайших точек на LineString
- Отображение близлежащих точек в многоугольнике
- Поиск аномалий на основе геопространственных данных
Создание точек на карте
Чтобы визуализировать точки на карте, используйте проект , чтобы выбрать столбец, содержащий долготу, а затем столбец, содержащий широту. Затем используйте отрисовку , чтобы просмотреть результаты на точечной диаграмме с 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)
Представление точек данных с пузырьками переменного размера
Визуализируйте распределение точек данных, выполнив агрегирование в каждом кластере, а затем настроив на графике центральную точку кластера.
Например, следующий запрос фильтрует все события storm типа "Tornado". Затем он группирует события в кластеры на основе их долготы и широты, подсчитывает количество событий в каждом кластере, проецирует центральную точку кластера и визуализирует карту для визуализации результата. Регионы с наибольшим числом торнадо четко обнаруживаются на основе их большого размера пузырьков.
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)
Отображение точек в определенной области
Используйте многоугольник для определения области и функцию 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)
Отображение ближайших точек на LineString
Следующий запрос находит близлежащие события шторма, которые происходят вдоль указанной линии LineString, представляющей определенный путь. В этом случае LineString — это путь к Ки-Уэст. Функция geo_distance_point_to_line() используется для фильтрации событий storm на основе их близости к определенному 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)
Отображение близлежащих точек в многоугольнике
Следующий запрос находит близлежащие события шторма, происходящие в пределах указанного многоугольника. В этом случае многоугольник является дорогой в Ки-Уэст. Функция 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)
Поиск аномалий на основе геопространственных данных
Следующий запрос выполняет анализ событий шторма, происходящих в определенном состоянии. В запросе используются ячейки 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)
См. также
- См. вариант использования геопространственных кластеризация: Аналитика данных для автопарков испытаний
- Сведения об архитектуре Azure для обработки и аналитики геопространственных данных
- Получите полное представление об Azure Data Explorer, прочитав технический документ
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по