流分析地理空间函数的简介

Azure 流分析中的地理空间函数支持对流式处理的地理空间数据进行实时分析。 只需几行代码,即可为复杂的方案开发出生产级解决方案。 这些函数支持所有 WKT 类型和 GeoJSON 点、多边形和 LineString。

可从地理空间函数中受益的示例方案包括:

  • 拼车
  • 车队管理
  • 资产跟踪
  • 地域隔离
  • 蜂窝站点之间的电话跟踪

流分析查询语言具有七个内置的地理空间函数:CreateLineString、CreatePoint、CreatePolygon、ST_DISTANCE、ST_OVERLAPS、ST_INTERSECTS 和 ST_WITHIN

CreateLineString

CreateLineString 函数接受点并返回 GeoJSON LineString,这可在地图上被标绘成一个线条。 必须至少具有两个点才能创建 LineString。 LineString 点将按顺序相连。

下面的查询使用 CreateLineString 创建使用三个点的 LineString。 第一个点创建自流式处理输入数据,而另外两个点则是手动创建的。

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

输入示例

latitude longitude
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 

输入示例

latitude longitude
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 多边形记录。 这些点的顺序必须遵循向右侧的环方向,否则为逆时针方向。 假设以声明的顺序从一个点走到另一个点。 在整个时间段内,此多边形的中心将偏向左侧。

下面的示例查询使用 CreatePolygon 通过三个点来创建多边形。 前两个点是手动创建的,最后一个点是通过输入数据创建的。

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

输入示例

latitude longitude
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 函数返回两个几何图形之间的距离(以米为单位)。

下面的查询使用 ST_DISTANCE 在加油站距离汽车不足 10 千米时生成事件。

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 函数比较两个几何图形。 如果这两个几何图形重叠,则函数返回 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 函数比较两个几何图形。 如果这两个几何图形相交,则函数返回 1。 如果这两个几何图形不彼此相交,则函数返回 0。

下面的示例查询使用 ST_INTERSECTS 来确定柏油路是否与泥路相交。

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

输入示例

datacenterArea stormArea
{"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 

输入示例

deliveryDestination 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 引用。

后续步骤