Поделиться через


Сведения о геопространственных функциях 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.

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