Общие сведения о геопространственных функциях 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", "координаты" : [-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.

В следующем примере запроса используется CreatePoint для создания точки с использованием широт и долгот из потоковых входных данных.

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. Порядок точек должен соответствовать правой кольцевой ориентации или по часовой стрелке. Представьте себе ходьбу от одной точки к другой в порядке, в котором они были объявлены. Центр многоугольника будет слева от вас всё время.

В следующем примере запроса используется 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", "координаты": [[ [-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 возвращает расстояние между двумя геометриями в метрах.

Следующий запрос используется 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", "координаты": [[-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, если первая геометрия не находится в последней.

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

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.

Дальнейшие действия