Stream Analytics 地理空間関数の概要Introduction to Stream Analytics geospatial functions

Azure Stream Analytics の地理空間関数は、地理空間データのストリーミングにおけるリアルタイム分析を可能にします。Geospatial functions in Azure Stream Analytics enable real-time analytics on streaming geospatial data. 数行のコードを使用するだけで、複雑なシナリオに対応した運用環境グレードのソリューションを開発できます。With just a few lines of code, you can develop a production grade solution for complex scenarios.

地理空間関数のメリットが得られるシナリオの例は次のとおりです。Examples of scenarios that can benefit from geospatial functions include:

  • ライドシェアRide-sharing
  • フリート管理Fleet management
  • 資産の追跡Asset tracking
  • ジオフェンスGeo-fencing
  • セル サイト間での電話の追跡Phone tracking across cell sites

Stream Analytics クエリ言語には、組み込みの地理空間関数が 7 つあります(CreateLineStringCreatePointCreatePolygonST_DISTANCEST_OVERLAPSST_INTERSECTSST_WITHIN)。Stream Analytics Query Language has seven built-in geospatial functions: CreateLineString, CreatePoint, CreatePolygon, ST_DISTANCE, ST_OVERLAPS, ST_INTERSECTS, and ST_WITHIN.

CreateLineStringCreateLineString

CreateLineString 関数は、複数のポイントを受け入れて GeoJSON LineString を返します。LineString はマップ上の線として描画できます。The CreateLineString function accepts points and returns a GeoJSON LineString, which can be plotted as a line on a map. LineString を作成するには、少なくとも 2 つのポイントが必要です。You must have at least two points to create a LineString. LineString ポイントは順番に連結されます。The LineString points will be connected in order.

次のクエリでは、CreateLineString を使用し、3 つのポイントを使用して LineString を作成します。The following query uses CreateLineString to create a LineString using three points. 最初のポイントはストリーミング入力データから作成され、他の 2 つのポイントは手動で作成されます。The first point is created from streaming input data, while the other two are created manually.

SELECT  
     CreateLineString(CreatePoint(input.latitude, input.longitude), CreatePoint(10.0, 10.0), CreatePoint(10.5, 10.5))  
FROM input  

入力例Input example

緯度 (latitude)latitude 経度 (longitude)longitude
3.03.0 -10.2-10.2
-87.33-87.33 20.232120.2321

出力例Output example

{"type" :"LineString", "coordinates" : [ [-10.2, 3.0], [10.0, 10.0], [10.5, 10.5] ]}{"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] ]}{"type" : "LineString", "coordinates" : [ [20.2321, -87.33], [10.0, 10.0], [10.5, 10.5] ]}

詳しくは、CreateLineString のリファレンスをご覧ください。To learn more, visit the CreateLineString reference.

CreatePointCreatePoint

CreatePoint 関数は、緯度と経度を受け入れて GeoJSON ポイントを返します。ポイントはマップ上に描画できます。The CreatePoint function accepts a latitude and longitude and returns a GeoJSON point, which can be plotted on a map. 緯度と経度は float データ型である必要があります。Your latitudes and longitudes must be a float datatype.

次の例のクエリでは、CreatePoint を使用し、ストリーミング入力データからの緯度と経度を使用してポイントを作成します。The following example query uses CreatePoint to create a point using latitudes and longitudes from streaming input data.

SELECT  
     CreatePoint(input.latitude, input.longitude)  
FROM input 

入力例Input example

緯度 (latitude)latitude 経度 (longitude)longitude
3.03.0 -10.2-10.2
-87.33-87.33 20.232120.2321

出力例Output example

{"type" :"Point", "coordinates" : [-10.2, 3.0]}{"type" : "Point", "coordinates" : [-10.2, 3.0]}

{"type" :"Point", "coordinates" : [20.2321, -87.33]}{"type" : "Point", "coordinates" : [20.2321, -87.33]}

詳しくは、CreatePoint のリファレンスをご覧ください。To learn more, visit the CreatePoint reference.

CreatePolygonCreatePolygon

CreatePolygon 関数は、複数のポイントを受け入れて GeoJSON ポリゴン レコードを返します。The CreatePolygon function accepts points and returns a GeoJSON polygon record. ポイントの順序は右手の指輪の向き (反時計回り) に従う必要があります。The order of points must follow right-hand ring orientation, or counter-clockwise. 宣言された順序で、あるポイントから別のポイントに歩くと想像してください。Imagine walking from one point to another in the order they were declared. 左側全体がポリゴンの中心になります。The center of the polygon would be to your left the entire time.

次の例のクエリでは、CreatePolygon を使用して 3 つのポイントからポリゴンを作成します。The following example query uses CreatePolygon to create a polygon from three points. 最初の 2 つのポイントは手動で作成され、最後のポイントは入力データから作成されます。The first two points are created manually, and the last point is created from input data.

SELECT  
     CreatePolygon(CreatePoint(input.latitude, input.longitude), CreatePoint(10.0, 10.0), CreatePoint(10.5, 10.5), CreatePoint(input.latitude, input.longitude))  
FROM input  

入力例Input example

緯度 (latitude)latitude 経度 (longitude)longitude
3.03.0 -10.2-10.2
-87.33-87.33 20.232120.2321

出力例Output example

{"type" :"Polygon", "coordinates" : [[ [-10.2, 3.0], [10.0, 10.0], [10.5, 10.5], [-10.2, 3.0] ]]}{"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] ]]}{"type" : "Polygon", "coordinates" : [[ [20.2321, -87.33], [10.0, 10.0], [10.5, 10.5], [20.2321, -87.33] ]]}

詳しくは、CreatePolygon のリファレンスをご覧ください。To learn more, visit the CreatePolygon reference.

ST_DISTANCEST_DISTANCE

ST_DISTANCE 関数は、2 つのポイント間の距離をメートル単位で返します。The ST_DISTANCE function returns the distance between two points in meters.

次のクエリでは、ST_DISTANCE を使用して、自動車からガソリン スタンドまでの距離が 10 km 未満になったときにイベントを生成します。The following query uses ST_DISTANCE to generate an event when a gas station is less than 10 km from the car.

SELECT Cars.Location, Station.Location 
FROM Cars c  
JOIN Station s ON ST_DISTANCE(c.Location, s.Location) < 10 * 1000

詳しくは、ST_DISTANCE のリファレンスをご覧ください。To learn more, visit the ST_DISTANCE reference.

ST_OVERLAPSST_OVERLAPS

ST_OVERLAPS 関数は、2 つのポリゴンを比較します。The ST_OVERLAPS function compares two polygons. ポリゴンが重なっている場合、この関数は 1 を返します。If the polygons overlap, the function returns a 1. ポリゴンが重なっていない場合、この関数は 0 を返します。The function returns 0 if the polygons don't overlap.

次のクエリでは、ST_OVERLAPS を使用して、洪水の危険性がある地域にビルがある場合にイベントを生成します。The following query uses ST_OVERLAPS to generate an event when a building is within a possible flooding zone.

SELECT Building.Polygon, Building.Polygon 
FROM Building b 
JOIN Flooding f ON ST_OVERLAPS(b.Polygon, b.Polygon) 

次の例のクエリでは、自動車の進行方向の天気が荒天である場合にイベントを生成します。The following example query generates an event when a storm is heading towards a car.

SELECT Cars.Location, Storm.Course
FROM Cars c, Storm s
JOIN Storm s ON ST_OVERLAPS(c.Location, s.Course)

詳しくは、ST_OVERLAPS のリファレンスをご覧ください。To learn more, visit the ST_OVERLAPS reference.

ST_INTERSECTSST_INTERSECTS

ST_INTERSECTS 関数は、2 つの LineString を比較します。The ST_INTERSECTS function compares two LineString. LineString が交差する場合、この関数は 1 を返します。If the LineString intersect, then the function returns 1. LineString が交差しない場合、この関数は 0 を返します。The function returns 0 if the LineString don't intersect.

次の例のクエリでは、ST_INTERSECTS を使用して、舗装道路が未舗装の道路と交差しているかどうかを判断します。The following example query uses ST_INTERSECTS to determine if a paved road intersects a dirt road.

SELECT  
     ST_INTERSECTS(input.pavedRoad, input.dirtRoad)  
FROM input  

入力例Input example

datacenterAreadatacenterArea stormAreastormArea
{"type":"LineString", "coordinates": [ [-10.0, 0.0], [0.0, 0.0], [10.0, 0.0] ]}{"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": [ [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, 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] ]}{"type":"LineString", "coordinates": [ [-10.0, 10.0], [0.0, 10.0], [10.0, 10.0] ]}

出力例Output example

11

00

詳しくは、ST_INTERSECTS のリファレンスをご覧ください。To learn more, visit the ST_INTERSECTS reference.

ST_WITHINST_WITHIN

ST_WITHIN 関数は、ポイントまたはポリゴンが特定のポリゴン内にあるかどうかを判断します。The ST_WITHIN function determines whether a point or polygon is within a polygon. ポイントまたはポリゴンが特定のポリゴンに含まれている場合、この関数は 1 を返します。If the polygon contains the point or polygon, the function will return 1. ポイントまたはポリゴンが宣言されたポリゴン内にない場合、この関数は 0 を返します。The function will return 0 if the point or polygon isn't located within the declared polygon.

次の例のクエリでは、ST_WITHIN を使用して、配達先のポイントが指定された倉庫ポリゴン内にあるかどうかを判断します。The following example query uses ST_WITHIN to determine whether the delivery destination point is within the given warehouse polygon.

SELECT  
     ST_WITHIN(input.deliveryDestination, input.warehouse)  
FROM input 

入力例Input example

deliveryDestinationdeliveryDestination warehousewarehouse
{"type":"Point", "coordinates": [76.6, 10.1]}{"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":"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":"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] ]}{"type":"Polygon", "coordinates": [ [10.0, 10.0], [20.0, 10.0], [20.0, 20.0], [10.0, 20.0], [10.0, 10.0] ]}

出力例Output example

00

11

詳しくは、ST_WITHIN のリファレンスをご覧ください。To learn more, visit the ST_WITHIN reference.

次のステップNext steps