Azure Stream Analytics の地理空間関数を使用すると、ストリーミング地理空間データに対するリアルタイム分析が可能になります。 わずか数行のコードで、複雑なシナリオに対応した運用グレードのソリューションを開発できます。 これらの関数は、すべての WKT 型と GeoJSON Point、Polygon、LineString をサポートします。
地理空間関数を利用できるシナリオの例を次に示します。
- ライドシェア
- フリート管理
- 資産の追跡
- ジオフェンス
- セル サイト間での電話の追跡
Stream Analytics クエリ言語には、CreateLineString、CreatePoint、CreatePolygon、ST_DISTANCE、ST_OVERLAPS、ST_INTERSECTS、ST_WITHINの 7 つの組み込み地理空間関数があります。
CreateLineString
CreateLineString関数はポイントを受け取り、GeoJSON LineString を返します。これはマップ上に線としてプロットできます。 LineString を作成するには、少なくとも 2 つのポイントが必要です。 LineString ポイントは順番に接続されます。
次のクエリでは、 CreateLineString を使用して、3 つのポイントを使用して LineString を作成します。 最初のポイントはストリーミング入力データから作成され、他の 2 つは手動で作成されます。
SELECT
CreateLineString(CreatePoint(input.latitude, input.longitude), CreatePoint(10.0, 10.0), CreatePoint(10.5, 10.5))
FROM input
入力例
| 緯度 | 経度 |
|---|---|
| 3.0 | -10.2 |
| -87.33 | 20.2321 |
出力の例
{"type" : "LineString", "coordinates" : [ [-10.2, 3.0], [10.0, 10.0], [10.5, 10.5] ]}
{"type" : "LineString", "coordinates" : [ [20.2321, -87.33], [10.0, 10.0], [10.5, 10.5] ]}
詳細については、 CreateLineString リファレンスを参照してください。
CreatePoint
CreatePoint関数は緯度と経度を受け取り、地図上にプロットできる GeoJSON ポイントを返します。 緯度と経度は float データ型である必要があります。
次のクエリ例では、 CreatePoint を使用して、ストリーミング入力データから緯度と経度を使用してポイントを作成します。
SELECT
CreatePoint(input.latitude, input.longitude)
FROM input
入力例
| 緯度 | 経度 |
|---|---|
| 3.0 | -10.2 |
| -87.33 | 20.2321 |
出力の例
{"type" : "Point", "coordinates" : [-10.2, 3.0]}
{"type" : "Point", "coordinates" : [20.2321, -87.33]}
詳細については、 CreatePoint リファレンスを参照してください。
CreatePolygon
CreatePolygon関数はポイントを受け取り、GeoJSON 多角形レコードを返します。 ポイントの順序は、右のリングの向きに従うか、反時計回りに従う必要があります。 宣言された順序で 1 つのポイントから別のポイントに歩くとします。 多角形の中心は、常にあなたの左側にあります。
次のクエリ例では、 CreatePolygon を使用して 3 つのポイントから多角形を作成します。 最初の 2 つのポイントは手動で作成され、最後のポイントは入力データから作成されます。
SELECT
CreatePolygon(CreatePoint(input.latitude, input.longitude), CreatePoint(10.0, 10.0), CreatePoint(10.5, 10.5), CreatePoint(input.latitude, input.longitude))
FROM input
入力例
| 緯度 | 経度 |
|---|---|
| 3.0 | -10.2 |
| -87.33 | 20.2321 |
出力の例
{"type" : "Polygon", "coordinates" : [[ [-10.2, 3.0], [10.0, 10.0], [10.5, 10.5], [-10.2, 3.0] ]] }
{"type" : "Polygon", "coordinates" : [[ [20.2321, -87.33], [10.0, 10.0], [10.5, 10.5], [20.2321, -87.33] ]] }
詳細については、 CreatePolygon リファレンスを参照してください。
ST_DISTANCE
ST_DISTANCE関数は、2 つのジオメトリ間の距離をメートル単位で返します。
次のクエリでは、 ST_DISTANCE を使用して、ガソリン スタンドが車から 10 km 未満の場合にイベントを生成します。
SELECT Cars.Location, Station.Location
FROM Cars c
JOIN Station s ON ST_DISTANCE(c.Location, s.Location) < 10 * 1000
詳細については、 ST_DISTANCE リファレンスを参照してください。
ST_OVERLAPS
ST_OVERLAPS関数は、2 つのジオメトリを比較します。 ジオメトリが重なる場合、関数は 1 を返します。 ジオメトリが重なっていない場合、この関数は 0 を返します。
次のクエリでは、 ST_OVERLAPS を使用して、建物が洪水の可能性があるゾーン内にある場合にイベントを生成します。
SELECT Building.Polygon, Building.Polygon
FROM Building b
JOIN Flooding f ON ST_OVERLAPS(b.Polygon, b.Polygon)
次のクエリ例では、嵐が自動車に向かっているときにイベントを生成します。
SELECT Cars.Location, Storm.Course
FROM Cars c, Storm s
JOIN Storm s ON ST_OVERLAPS(c.Location, s.Course)
詳細については、 ST_OVERLAPS リファレンスを参照してください。
ST_INTERSECTS
ST_INTERSECTS関数は、2 つのジオメトリを比較します。 ジオメトリが交差する場合、関数は 1 を返します。 ジオメトリが互いに交差しない場合、この関数は 0 を返します。
次のクエリ例では、 ST_INTERSECTS を使用して、舗装された道路が未舗装道路と交差しているかどうかを判断します。
SELECT
ST_INTERSECTS(input.pavedRoad, input.dirtRoad)
FROM input
入力例
| データセンター領域 | ストームエリア |
|---|---|
| {"type":"LineString", "coordinates": [ [-10.0, 0.0], [0.0, 0.0], [10.0, 0.0] ]} | {"type":"LineString", "coordinates": [ [0.0, 10.0], [0.0, 0.0], [0.0, -10.0] ]} |
| {"type":"LineString", "coordinates": [ [-10.0, 0.0], [0.0, 0.0], [10.0, 0.0] ]} | {"type":"LineString", "coordinates": [ [-10.0, 10.0], [0.0, 10.0], [10.0, 10.0] ]} |
出力の例
1
0
詳細については、 ST_INTERSECTS リファレンスを参照してください。
ST_WITHIN
ST_WITHIN関数は、ジオメトリが別のジオメトリ内にあるかどうかを決定します。 最初の値が最後の値に含まれている場合、関数は 1 を返します。 最初のジオメトリが最後のジオメトリ内にない場合、関数は 0 を返します。
次のクエリ例では、 ST_WITHIN を使用して、配信先ポイントが指定された倉庫ポリゴン内にあるかどうかを判断します。
SELECT
ST_WITHIN(input.deliveryDestination, input.warehouse)
FROM input
入力例
| 配送先 | warehouse |
|---|---|
| {"type":"Point", "coordinates": [76.6, 10.1]} | {"type":"Polygon", "coordinates": [ [0.0, 0.0], [10.0, 0.0], [10.0, 10.0], [0.0, 10.0], [0.0, 0.0] ]} |
| {"type":"Point", "coordinates": [15.0, 15.0]} | {"type":"Polygon", "coordinates": [ [10.0, 10.0], [20.0, 10.0], [20.0, 20.0], [10.0, 20.0], [10.0, 10.0] ]} |
出力の例
0
1
詳細については、 ST_WITHIN リファレンスを参照してください。