你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
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
输入示例
| 纬度 | 经度 |
|---|---|
| 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 文档。