[ バージョン ] ドロップダウン リストを使用してサービスを切り替えます。 ナビゲーションの詳細を確認します。
適用対象: ✅ Microsoft Fabric ✅ Azure Data Explorer ✅ Azure Monitor ✅ Microsoft Sentinel
Kusto クエリ言語 (KQL) を使用して地理空間の視覚化を作成します。 地理空間クラスタリングは、データを場所別に整理します。 KQL には、複数 の地理空間クラスタリング 方法と 地理空間視覚化ツールが 用意されています。
このチュートリアルでは、以下の内容を学習します。
前提条件
クエリを実行するには、サンプル データにアクセスできるクエリ環境が必要です。 次のいずれかを使用します。
- Microsoft Fabric 対応容量を持つFabric ワークスペース
- Microsoft アカウントまたは Microsoft Entra ユーザー ID
- Microsoft Fabric 対応容量を持つFabric ワークスペース
プロジェクトを使用して経度列、緯度列を選択します。
レンダーを使用してマップ上のポイントを表示します (kindが map に設定された散布図)。
マップ上にポイントをプロットする
プロジェクトを使用して経度列、緯度列を選択します。
レンダーを使用してマップ上のポイントを表示します (kindが map に設定された散布図)。
StormEvents
| take 100
| project BeginLon, BeginLat
| render scatterchart with (kind = map)
複数の一連のポイントをプロットする
複数のポイント系列を視覚化するには、 プロジェクト を使用して、経度、緯度、および系列を定義する 3 番目の列を選択します。
次のクエリでは、系列は 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 関数を使用して、散布図に Storm イベントをマップします。
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)
可変サイズのバブルを使用してデータ ポイントを表す
各クラスターを集計し、その中心点をプロットすることで、データ分布を視覚化します。
たとえば、次のクエリでは、EventType が Tornadoされている Storm イベントをフィルター処理します。 経度と緯度のクラスターにイベントをグループ化し、各クラスター内のイベントをカウントし、各クラスターの中心点を投影し、マップをレンダリングします。 最も竜巻が多い地域は、バブルサイズが大きいことが目立ちます。
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 関数を使用して、その領域内で発生するイベントをフィルター処理します。
次のクエリでは、南カリフォルニアリージョンを表す多角形と、このリージョン内の Storm イベントのフィルターを定義します。 次に、イベントをクラスターにグループ化し、各クラスター内のイベントの数をカウントし、クラスターの中心点を投影して、クラスターを視覚化するためのマップをレンダリングします。
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 に沿って発生する近くの Storm イベントを検索します。 この場合、LineString はキーウエストへの道です。 geo_distance_point_to_line()関数は、定義済みの LineString との近接性に基づいて Storm イベントをフィルター処理するために使用されます。 イベントが LineString から 500 メートル以内にある場合、イベントはマップ上にレンダリングされます。
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)
ポリゴン内の近くのポイントを表示する
次のクエリでは、指定した多角形内で発生する近くの Storm イベントを検索します。 この場合、多角形はキーウェストへの道です。 geo_distance_point_to_polygon()関数は、定義されたポリゴンへの近接性に基づいて Storm イベントをフィルター処理するために使用されます。 イベントが多角形の 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)
地理空間データに基づいて異常を見つける
次のクエリは、特定の状態内で発生する Storm イベントの分析を実行します。 このクエリでは、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)
関連するコンテンツ
- 地理空間クラスタリングのユース ケースを参照する: 自動車テスト車両の Data 分析
- 地理空間データの処理と分析のための Azure アーキテクチャについて説明します
- ホワイト ペーパーを読んで、Azure Data Explorer の包括的な理解を得る