Azure Stream Analytics의 지리공간 기능은 라이드셰어링, 차량 관리, 자산 추적, 지리 펜싱, 휴대폰 추적 등 다양한 상황에서 실시간 지리 정보 분석을 가능하게 합니다. 몇 줄의 쿼리 코드만으로도 스트림 애널리틱스 쿼리 언어의 7개 내장 함수(CreateLineString, ST_OVERLAPSST_WITHINCreatePointCreatePolygonST_DISTANCEST_INTERSECTS)를 사용할 수 있으며, 이 함수들은 모든 WKT 유형과 GeoJSON 포인트, 폴리곤, 라인스트링을 지원합니다. 이 글에서는 각 함수를 설명하고 예제 쿼리를 제공하여 여러분이 자신의 스트리밍 데이터에 적용할 수 있도록 합니다.
기하학 유형과 좌표 순서
지리공간 함수는 세 가지 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", "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 합니다.
다음 예시는 스트리밍 입력 데이터에서 위도와 경도 값에서 점을 생성하여 이 동작을 보여줍니다.
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 다각형을 반환하는 생성자 함수입니다. 다각형은 지도에서 건물 면적, 창고 경계, 지오 펜스와 같은 밀폐된 영역을 나타냅니다. 점들의 순서는 오른쪽 링 방향, 즉 반시계 방향을 따릅니다: 선언한 순서대로 한 점에서 다음 점으로 걸어가는 것을 상상하면, 다각형의 중심은 내내 왼쪽에 머무릅니다.
다음 예시는 세 점으로 다각형을 생성함으로써 이 동작을 보여줍니다. 처음 두 포인트는 수동으로 정의하고, 마지막 포인트는 입력 데이터에서 나옵니다.
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 는 두 기하학 간 거리를 미터 단위로 반환하는 관계 함수입니다. 이 기능은 두 위치가 얼마나 가까운지 멀리 떨어져 있는지 이해하는 데 도움을 주어, 근처 차량 경고나 서비스 지역 계산과 같은 근접 상황에 유용합니다.
다음 예시는 주유소가 자동차에서 10km 미만일 때 이 기능을 식별하는 방법을 보여줍니다.
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
입력 예제
| 포장도로 | 비포장도로 |
|---|---|
| {"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을 반환하는데, 이는 지오 펜싱 및 배달 구역 검사와 같은 격리 시나리오의 기초가 됩니다.
다음 예시는 배송 목적지 지점이 주어진 창고 다각형 내에 있는지 여부를 결정함으로써 이 동작을 보여줍니다.
SELECT
ST_WITHIN(input.deliveryDestination, input.warehouse)
FROM input
입력 예제
| 배송목적지 | warehouse |
|---|---|
| {"type":"Point", "좌표": [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", "좌표": [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 참조를 참조하세요.