Сведения о геопространственных функциях Azure Stream Analytics
Геопространственные функции в Azure Stream Analytics позволяют анализировать в реальном времени потоковые геопространственные данные. Имея всего несколько строк кода, можно разработать решение для производственного уровня сложных сценариев. Эти функции поддерживают все типы WKT, а также формат географических объектов GeoJSON Point, Polygon и LineString.
Ниже приведены примеры сценариев, которые могут использовать преимущества геопространственных функций.
- Совместное использование в поездке
- Управление автотранспортным парком
- Отслеживание данных ресурсов
- Установка геозон
- Отслеживание телефона на сотовых веб-сайтах
Язык запросов Stream Analytics содержит семь встроенных геопространственных функций: 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
Пример входных данных
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 | Хранилище данных |
---|---|
{"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.