Общие сведения о геопространственных функциях Stream Analytics

Геопространственные функции в Azure Stream Analytics позволяют проводить аналитику в реальном времени потоковых геопространственных данных для таких сценариев, как совместное использование поездок, управление автопарком, отслеживание активов, геоограждения и отслеживание телефонов на сотовых станциях. Имея всего несколько строк кода запросов, вы можете создавать решения, использующие семь встроенных функций в Stream Analytics Query Language (CreateLineString, CreatePoint, CreatePolygonST_DISTANCE, ST_OVERLAPSST_INTERSECTS, , , и ST_WITHIN), которые поддерживают все типы WKT, а также GeoJSON point, polygon и LineString. В этой статье описывается каждая функция и приводятся примеры запросов, чтобы вы могли применить их к своим потоковым данным.

Типы геометрии и порядок координат

Геопространственные функции работают с тремя типами геометрии GeoJSON. Точка — это одно место, определяемое долготой и широтой. LineString — это упорядоченный набор из двух или более точек, образующий связную линию, например, маршрут или дорогу. Многоугольник — это замкнутая форма, граница которой возвращается к исходной точке, например, к отпечатку здания или геозабору.

Функции делятся на две группы. Функции конструкторов (CreatePoint, CreateLineString, и CreatePolygon) строят геометрии из координатных значений в данных событий. Функции отношений (ST_DISTANCE, ST_OVERLAPS, ST_INTERSECTS, и ST_WITHIN) сравнивают две геометрии и описывают, как они взаимодействуют в пространстве.

В GeoJSON координаты упорядочены сначала по долготе, а затем по второй широте, поэтому входная широта и долгота отображаются в обратном порядке в полученной геометрии. Понимание этого порядка, а также ориентации кольца против часовой стрелки, необходимой для полигонов, помогает предсказать результат каждой функции.

CreateLineString

CreateLineString — это функция-конструктор, которая возвращает GeoJSON LineString — геометрию, представляющую связную последовательность точек в виде прямой на карте. Он принимает две или более точек и соединяет их в порядке, в котором вы их перечисляете, что делает его естественным способом моделирования маршрутов, маршрутов и сегментов дорог на основе потоковых данных.

Следующий пример иллюстрирует это поведение, объединяя три точки в 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", "координаты" : [-10.2, 3.0], [10.0, 10.0], [10.5, 10.5] ]}

{"type" : "LineString", "координаты": [ [20.2321, -87.33], [10.0, 10.0], [10.5, 10.5] ]}

Чтобы узнать больше, см. справку по CreateLineString.

CreatePoint

CreatePoint — это функция-конструктор, которая возвращает точку GeoJSON из широты и долготы. Точка — это самая базовая геометрия, представляющая одну точку на карте, например, текущее положение транспортного средства или объекта. Значения широты и долготы должны быть float типом данных.

Следующий пример иллюстрирует это поведение, создавая точку из значений широты и долготы в потоковых входных данных.

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

Пример ввода

широта долгота
3.0 -10.2
-87.33 20.2321

Пример выходных данных

{"type" : "Point", "координаты": [-10.2, 3.0]}

{"type" : "Point", "координаты": [20.2321, -87.33]}

Чтобы узнать больше, смотрите ссылку на CreatePoint .

CreatePolygon

CreatePolygon — это конструкторная функция, которая возвращает многоугольник GeoJSON из множества точек. Многоугольник обозначает замкнутую территорию на карте, такую как след здания, границу склада или геозабор. Порядок точек соответствует ориентации контура по правилу правой руки, то есть против часовой стрелки: если представить, что вы переходите от одной точки к другой в том порядке, в котором вы их задаёте, центр многоугольника всё время остаётся слева от вас.

Следующий пример иллюстрирует это поведение, создавая многоугольник из трёх точек. Первые две точки определяются вручную, а последний — из входных данных.

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", "координаты": [[ [-10.2, 3.0], [10.0, 10.0], [10.5, 10.5], [-10.2, 3.0] ]]}

{"type" : "Polygon", "координаты": [[ [[ [20.2321, -87.33], [10.0, 10.0], [10.5, 10.5], [20.2321, -87.33] ]]}

Дополнительные сведения см. в справочнике CreatePolygon .

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, если нет. Эта функция полезна для обнаружения пространственных конфликтов, например, когда зона опасности касается интересующей зоны.

Следующий пример показывает, как использовать эту функцию для определения, когда здание находится в зоне возможного затопления.

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

Следующий пример также используется ST_OVERLAPS для обнаружения, когда шторм движется в сторону автомобиля.

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

Чтобы узнать больше, смотрите ссылку ST_OVERLAPS .

ST_INTERSECTS

ST_INTERSECTS — это функция отношений, которая сравнивает две геометрии и сообщает, пересекаются ли они или соприкасаются. Он возвращает 1, когда геометрии пересекаются, и 0, когда не пересекаются. Эта функция помогает определить, где сходятся пути или области.

Следующий пример показывает, как использовать эту функцию для определения, пересекает ли асфальтированная дорога с грунтовой.

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

Пример ввода

асфальтированная дорога dirtRoad
{"type":"LineString", "координаты": [[-10.0, 0.0], [0.0, 0.0], [10.0, 0.0] ]} {"type":"LineString", "координаты": [ [0.0, 10.0], [0.0, 0.0], [0.0, -10.0] ]}
{"type":"LineString", "координаты": [[-10.0, 0.0], [0.0, 0.0], [10.0, 0.0] ]} {"type":"LineString", "координаты": [-10.0, 10.0], [0.0, 10.0], [10.0, 10.0] ]}

Пример выходных данных

1

0

Дополнительную информацию смотрите в справочнике ST_INTERSECTS.

ST_WITHIN

ST_WITHIN — функция отношений, которая сообщает, полностью ли одна геометрия содержится внутри другой. Он возвращает 1, когда первая геометрия находится внутри второй, и 0, когда нет, что служит основой для сценариев сдерживания, таких как геоограждения и проверки зоны доставки.

Следующий пример иллюстрирует это поведение, определяя, находится ли точка назначения доставки в данном полигоне склада.

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

Пример ввода

место доставки warehouse
{"type":"Point", "координаты": [76.6, 10.1]} {"type":"Polygon", "координаты": [ [0.0, 0.0], [10.0, 0.0], [10.0, 10.0], [0.0, 10.0], [0.0, 0.0] ]}
{"type":"Point", "координаты": [15.0, 15.0]} {"type":"Polygon", "координаты": [ [10.0, 10.0], [20.0, 10.0], [20.0, 20.0], [10.0,0], [10.0], [10.0, 10.0] ]}

Пример выходных данных

0

1

Для получения дополнительной информации обратитесь к справочнику ST_WITHIN.