Introducción a las funciones geoespaciales de Stream Analytics
Las funciones geoespaciales en Azure Stream Analytics permiten el análisis en tiempo real de datos geoespaciales de streaming. Con sólo unas pocas líneas de código, puede desarrollar una solución de calidad de producción para escenarios complejos. Estas funciones admiten todos los tipos de WKT y las geometrías Point, Polygon y LineString de GeoJSON.
Algunos ejemplos de escenarios que pueden beneficiarse de las funciones geoespaciales incluyen:
- Viajes con vehículo compartido
- Administración de flotas
- Seguimiento de activos
- Geovalla
- Seguimiento de teléfonos a través de sitios celulares
Lenguaje de consulta de Stream Analytics tiene siete funciones geoespaciales integradas: CreateLineString, CreatePoint, CreatePolygon, ST_DISTANCE, ST_OVERLAPS, ST_INTERSECTS y ST_WITHIN.
CreateLineString
La función CreateLineString
acepta puntos y devuelve un LineString de GeoJSON, que se puede representar como una línea en un mapa. Debe tener al menos dos puntos para crear un LineString. Los puntos de LineString se conectan en orden.
La siguiente consulta usa CreateLineString
para crear un elemento LineString con tres puntos. Se crea el primer punto de transmisión a partir de datos de entrada de streaming, mientras que los otros dos se crean manualmente.
SELECT
CreateLineString(CreatePoint(input.latitude, input.longitude), CreatePoint(10.0, 10.0), CreatePoint(10.5, 10.5))
FROM input
Ejemplo de entrada
latitude | longitude |
---|---|
3.0 | -10.2 |
-87.33 | 20.2321 |
Ejemplo de salida
{"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] ]}
Para obtener más información, consulte la referencia sobre CreateLineString.
CreatePoint
La función CreatePoint
acepta una latitud y una longitud y devuelve un punto de GeoJSON que se puede trazar en un mapa. Las latitudes y longitudes deben ser del tipo de datos float.
La siguiente consulta de ejemplo usa CreatePoint
para crear un punto mediante latitudes y longitudes a partir de datos de entrada de streaming.
SELECT
CreatePoint(input.latitude, input.longitude)
FROM input
Ejemplo de entrada
latitude | longitude |
---|---|
3.0 | -10.2 |
-87.33 | 20.2321 |
Ejemplo de salida
{"type" : "Point", "coordinates" : [-10.2, 3.0]}
{"type" : "Point", "coordinates" : [20.2321, -87.33]}
Para obtener más información, consulte la referencia sobre CreatePoint.
CreatePolygon
La función CreatePolygon
acepta puntos y devuelve un registro de polígono de GeoJSON. El orden de los puntos debe seguir una orientación de anillo hacia la derecha o estar en sentido antihorario. Imagine que camina de un punto a otro en el orden en que se declaran. El centro del polígono estaría a su izquierda todo el tiempo.
La siguiente consulta de ejemplo usa CreatePolygon
para crear un polígono de tres puntos. Los primeros dos puntos se crean manualmente, y el último se crea a partir de datos de entrada.
SELECT
CreatePolygon(CreatePoint(input.latitude, input.longitude), CreatePoint(10.0, 10.0), CreatePoint(10.5, 10.5), CreatePoint(input.latitude, input.longitude))
FROM input
Ejemplo de entrada
latitude | longitude |
---|---|
3.0 | -10.2 |
-87.33 | 20.2321 |
Ejemplo de salida
{"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] ]]}
Para obtener más información, consulte la referencia sobre CreatePolygon.
ST_DISTANCE
La función ST_DISTANCE
devuelve la distancia en metros entre dos geometrías.
La siguiente consulta usa ST_DISTANCE
para generar un evento cuando una gasolinera está a menos de 10 km del automóvil.
SELECT Cars.Location, Station.Location
FROM Cars c
JOIN Station s ON ST_DISTANCE(c.Location, s.Location) < 10 * 1000
Para obtener más información, consulte la referencia sobre ST_DISTANCE.
ST_OVERLAPS
La función ST_OVERLAPS
compara dos geometrías. Si las geometrías se superponen, la función devuelve 1. La función devuelve 0 si las geometrías no se superponen.
La siguiente consulta usa ST_OVERLAPS
para generar un evento cuando un edificio está dentro de una posible zona de inundación.
SELECT Building.Polygon, Building.Polygon
FROM Building b
JOIN Flooding f ON ST_OVERLAPS(b.Polygon, b.Polygon)
La siguiente consulta de ejemplo genera un evento cuando una tormenta se dirige hacia un automóvil.
SELECT Cars.Location, Storm.Course
FROM Cars c, Storm s
JOIN Storm s ON ST_OVERLAPS(c.Location, s.Course)
Para obtener más información, consulte la referencia sobre ST_OVERLAPS.
ST_INTERSECTS
La función ST_INTERSECTS
compara dos geometrías. Si las geometrías forman intersección, la función devuelve 1. La función devuelve 0 si las geometrías no forman intersección.
La siguiente consulta de ejemplo usa ST_INTERSECTS
para determinar si un camino pavimentado forma una intersección con un camino de tierra.
SELECT
ST_INTERSECTS(input.pavedRoad, input.dirtRoad)
FROM input
Ejemplo de entrada
areaCentroDeDatos | areaTormenta |
---|---|
{"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] ]} |
Ejemplo de salida
1
0
Para obtener más información, consulte la referencia sobre ST_INTERSECTS.
ST_WITHIN
La función ST_WITHIN
determina si una geometría está dentro de otra. Si la primera está incluida en la última, la función devuelve 1. La función devuelve 0 si la primera geometría no se encuentra dentro de la última.
La siguiente consulta de ejemplo usa ST_WITHIN
para determinar si el punto de destino de entrega está dentro del polígono del almacén especificado.
SELECT
ST_WITHIN(input.deliveryDestination, input.warehouse)
FROM input
Ejemplo de entrada
destinoDeEntrega | almacén |
---|---|
{"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] ]} |
Ejemplo de salida
0
1
Para obtener más información, consulte la referencia sobre ST_WITHIN.