Wprowadzenie do funkcji geoprzestrzennych usługi Stream Analytics

Funkcje geoprzestrzenne w Azure Stream Analytics umożliwiają analizę strumieniowych danych geoprzestrzennych w czasie rzeczywistym w scenariuszach takich jak wspólne przejazdy, zarządzanie flotą, śledzenie zasobów, geofencing oraz śledzenie telefonów w obrębie stacji bazowych sieci komórkowej. Dysponując zaledwie kilkoma linijkami kodu zapytań, możesz zbudować rozwiązania wykorzystujące siedem wbudowanych funkcji w Stream Analytics Query Language (CreateLineString, , CreatePolygonCreatePoint, ST_DISTANCE, ST_OVERLAPS, ST_INTERSECTS, i ST_WITHIN), które obsługują wszystkie typy WKT oraz GeoJSON point, polygon, and LineString. Ten artykuł opisuje każdą funkcję i pokazuje przykładowe zapytania, abyś mógł je zastosować do własnych danych streamingowych.

Typy geometrii i kolejność współrzędnych

Funkcje geoprzestrzenne działają z trzema typami geometrii GeoJSON. Punkt to pojedyncza lokalizacja zdefiniowana przez długość i szerokość geograficzną. LineString to uporządkowany zbiór dwóch lub więcej punktów, które tworzą spójną linię, taką jak trasa lub droga. Wielokąt to zamknięty kształt, którego granica wraca do punktu początkowego, taki jak zarys budynku lub geo-ogrodzenie.

Funkcje dzielą się na dwie grupy. Funkcje konstruktora (CreatePoint, CreateLineString, i CreatePolygon) budują geometrie na podstawie wartości współrzędnych w danych zdarzeń. Funkcje relacji (ST_DISTANCE, ST_OVERLAPS, ST_INTERSECTS, i ST_WITHIN) porównują dwie geometrie i opisują, jak się ze sobą odnoszą w przestrzeni.

W formacie GeoJSON współrzędne są zapisywane najpierw jako długość geograficzna, a następnie szerokość geograficzna, więc wprowadzone wartości szerokości i długości geograficznej występują w wynikowej geometrii w odwrotnej kolejności. Zrozumienie tej kolejności, wraz z orientacją pierścienia przeciwnie do ruchu wskazówek zegara, wymaganą przez wielokąty, pomaga przewidzieć wynik działania każdej funkcji.

CreateLineString

CreateLineString jest funkcją konstruktora zwracającą GeoJSON LineString, czyli geometrię reprezentującą spójną serię punktów jako linię na mapie. Akceptuje dwa lub więcej punktów i łączy je w kolejności, w jakiej je wymieniasz, co sprawia, że jest naturalnym sposobem modelowania tras, ścieżek i odcinków dróg na podstawie danych strumieniowych.

Poniższy przykład ilustruje to zachowanie, łącząc trzy punkty w LineString. Pierwszy punkt wynika ze strumieniowania danych wejściowych, a pozostałe dwa definiujesz ręcznie.

SELECT  
     CreateLineString(CreatePoint(input.latitude, input.longitude), CreatePoint(10.0, 10.0), CreatePoint(10.5, 10.5))  
FROM input  

Przykład danych wejściowych

szerokość geograficzna długość geograficzna
3.0 -10.2
-87.33 20.2321

Przykład danych wyjściowych

{"type" : "LineString", "coordinates" : [ [-10.2, 3.0], [10.0, 10.0], [10.5, 10.5] ]}

{"type" : "LineString", "współrzędne": [ [20.2321, -87.33], [10.0, 10.0], [10.5, 10.5] ]}

Aby dowiedzieć się więcej, zobacz informacje o CreateLineString.

CreatePoint

CreatePoint jest funkcją konstruktora, która zwraca punkt GeoJSON z szerokości geograficznej i długości. Punkt to najbardziej podstawowa geometria i reprezentuje pojedynczą lokalizację na mapie, taką jak aktualna pozycja pojazdu lub zasobu. Wartości szerokości i długości muszą być typem float danych.

Poniższy przykład ilustruje to zachowanie, tworząc punkt na podstawie wartości szerokości i długości geograficznej w przesyłanych danych wejściowych.

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

Przykład danych wejściowych

szerokość geograficzna długość geograficzna
3.0 -10.2
-87.33 20.2321

Przykład danych wyjściowych

{"type" : "Punkt", "współrzędne" : [-10.2, 3.0]}

{"type" : "Point", "coordinates" : [20.2321, -87.33]}

Aby dowiedzieć się więcej, zobacz dokumentację referencyjną CreatePoint.

CreatePolygon

CreatePolygon jest funkcją konstruktora, która zwraca wielokąt GeoJSON z zestawu punktów. Wielokąt reprezentuje na mapie zamknięty obszar, taki jak zarys budynku, granica magazynu lub geo-ogrodzenie. Kolejność punktów podąża za prawą orientacją pierścienia, czyli przeciwnie do ruchu wskazówek zegara: jeśli wyobrazisz sobie przejście z jednego punktu do drugiego w kolejności, w jakiej je deklarujesz, środek wielokąta pozostaje cały czas po twojej lewej stronie.

Poniższy przykład ilustruje to zachowanie, tworząc wielokąt z trzech punktów. Pierwsze dwa punkty definiujesz ręcznie, a ostatni punkt pochodzi z danych wejściowych.

SELECT  
     CreatePolygon(CreatePoint(input.latitude, input.longitude), CreatePoint(10.0, 10.0), CreatePoint(10.5, 10.5), CreatePoint(input.latitude, input.longitude))  
FROM input  

Przykład danych wejściowych

szerokość geograficzna długość geograficzna
3.0 -10.2
-87.33 20.2321

Przykład danych wyjściowych

{"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] ]]}

Aby dowiedzieć się więcej, przejdź do dokumentacji CreatePolygon.

ST_DISTANCE

ST_DISTANCE jest funkcją relacji zwracającą odległość między dwiema geometriami w metrach. Pomaga zrozumieć, jak blisko lub jak daleko znajdują się dwie lokalizacje, co jest przydatne w sytuacjach bliskości, takich jak powiadomienia o pobliskich pojazdach czy obliczenia obszaru obsługiwanego.

Poniższy przykład pokazuje, jak użyć tej funkcji do rozpoznania, kiedy stacja benzynowa znajduje się mniej niż 10 km od samochodu.

SELECT Cars.Location, Station.Location 
FROM Cars c  
JOIN Station s ON ST_DISTANCE(c.Location, s.Location) < 10 * 1000

Aby dowiedzieć się więcej, zobacz dokumentację ST_DISTANCE.

ST_OVERLAPS

ST_OVERLAPS jest funkcją relacji porównującą dwie geometrie i informującą, czy dzielą one wspólny obszar. Zwraca 1, gdy geometrie się nakładają, i 0, gdy się nie pokrywają. Funkcja ta jest przydatna do wykrywania konfliktów przestrzennych, takich jak strefa zagrożenia dotykająca obszaru zainteresowania.

Poniższy przykład pokazuje, jak użyć tej funkcji do identyfikacji, kiedy budynek znajduje się w strefie potencjalnej zalania.

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

Kolejny przykład również używa ST_OVERLAPS do wykrywania, kiedy burza zmierza w kierunku samochodu.

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

Aby dowiedzieć się więcej, zobacz informacje o elemencie ST_OVERLAPS.

ST_INTERSECTS

ST_INTERSECTS jest funkcją relacji porównującą dwie geometrie i informującą, czy się przecinają, czy stykają. Zwraca 1, gdy geometrie się przecinają, i 0, gdy się nie przecinają. Ta funkcja pomaga wykryć, gdzie spotykają się ścieżki lub regiony.

Poniższy przykład pokazuje, jak użyć tej funkcji do określenia, czy droga asfaltowa przecina drogę gruntową.

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

Przykład danych wejściowych

pavedRoad Droga gruntowa
{"type":"LineString", "współrzędne": [ [-10.0, 0.0], [0.0, 0.0], [10.0, 0.0] ]} {"type":"LineString", "współrzędne": [ [0.0, 10.0], [0.0, 0.0], [0.0, -10.0] ]}
{"type":"LineString", "współrzędne": [ [-10.0, 0.0], [0.0, 0.0], [10.0, 0.0] ]} {"type":"LineString", "współrzędne": [ [-10.0, 10.0], [0.0, 10.0], [10.0, 10.0] ]}

Przykład danych wyjściowych

1

0

Aby dowiedzieć się więcej, odwiedź dokumentację ST_INTERSECTS .

ST_WITHIN

ST_WITHIN jest funkcją relacji raportującą, czy jedna geometria jest w pełni zawarta w innej. Zwraca 1, gdy pierwsza geometria leży wewnątrz drugiej, i 0, gdy nie, co stanowi podstawę scenariuszy ograniczania, takich jak geo-fencing i kontrole stref dostaw.

Poniższy przykład ilustruje to zachowanie, określając, czy punkt docelowy dostawy znajduje się w obrębie danego wielokąta magazynowego.

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

Przykład danych wejściowych

miejsce dostawy warehouse
{"type":"Point", "współrzędne": [76.6, 10.1]} {"type":"Polygon", "współrzędne": [ [0.0, 0.0], [10.0, 0.0], [10.0, 10.0], [0.0, 10.0], [0.0, 0.0] ]}
{"type":"Point", "współrzędne": [15.0, 15.0]} {"type":"Polygon", "współrzędne": [ [10.0, 10.0], [20.0, 10.0], [20.0, 20.0], [10.0, 20.0], [10.0, 10.0] ]}

Przykład danych wyjściowych

0

1

Aby dowiedzieć się więcej, odwiedź referencję ST_WITHIN.