通过


你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

流分析地理空间函数简介

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

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

  • 共享乘车
  • 车队管理
  • 资产跟踪
  • 地理隔离
  • 跨基站的电话监测

流分析查询语言具有七个内置地理空间函数:CreateLineStringCreatePoint、CreatePolygonST_DISTANCEST_OVERLAPSST_INTERSECTSST_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  

输入示例

纬度 经度
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 多边形记录。 点的顺序必须遵循右手环方向或逆时针方向。 想象一下,按照声明的顺序从一个点走到另一个点。 在整个时间段内,此多边形的中心将偏向左侧。

以下示例查询使用 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  

输入示例

纬度 经度
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  

输入示例

数据中心区域 风暴区域
{“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 文档。

后续步骤