Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Геопространственные функции в 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.