Azure Stream Analytics를 사용한 지오펜싱 및 지리 공간 집계 시나리오

기본 제공 지리 공간 기능을 통해 Azure Stream Analytics를 사용하여 차량 관리, 차량 공유, 연결된 자동차 및 자산 추적과 같은 시나리오에 대한 애플리케이션을 빌드할 수 있습니다.

지오펜스

Azure Stream Analytics는 클라우드 및 IoT Edge 런타임에서 대기 시간이 짧은 실시간 지오펜싱 컴퓨팅을 지원합니다.

지오펜싱 시나리오

제조 회사는 건물의 자산을 추적해야 합니다. 모든 디바이스에 GPS를 장착하고 디바이스가 특정 지역을 떠날 경우 알림을 받기를 원합니다.

이 예제에서 사용된 참조 데이터에는 건물에 대한 지오펜스 정보와 각 건물에서 허용되는 디바이스가 있습니다. 참조 데이터는 정적이거나 느리게 변경될 수 있음을 기억합니다. 이 시나리오에는 정적 참조 데이터가 사용됩니다. 데이터 스트림은 디바이스 ID와 현재 위치를 지속적으로 내보냅니다.

참조 데이터에서 지오펜스 정의

GeoJSON 개체를 사용하여 지오펜스를 정의할 수 있습니다. 호환성 버전 1.2 이상을 사용하는 작업의 경우 WKT(잘 알려진 텍스트)를 NVARCHAR(MAX)로 사용하여 지오펜스를 정의할 수도 있습니다. WKT는 공간 데이터를 텍스트 형식으로 나타내는 데 사용되는 OGC(Open Geospatial Consortium) 표준입니다.

기본 제공된 지리 공간 기능은 정의된 지오펜스를 사용하여 요소가 특정 지오펜스 다각형 내부 또는 외부에 있는지 확인할 수 있습니다.

다음 표는 Azure Blob Storage 또는 Azure SQL 테이블에 저장할 수 있는 지오펜스 참조 데이터의 예입니다. 모든 사이트는 지리 공간 다각형으로 표시되며 모든 디바이스는 허용된 사이트 ID와 연결됩니다.

SiteID SiteName 지오펜스 AllowedDeviceID
1 "레드몬드 빌딩 41" "POLYGON((-122.1337357922017 47.63782998329432,-122.13373042778369 47.637634793257305,-122.13346757130023 47.637642022530954,-122.13348902897235 47.637508280806806,-122.13361777500506 47.637508280806806,-122.13361241058703 47.63732393354484,-122.13265754417773 47.63730947490855,-122.13266290859576 47.637519124743164,-122.13302232460376 47.637515510097955,-122.13301696018573 47.63764925180358,-122.13272728161212 47.63764925180358,-122.13274873928424 47.63784082716388,-122.13373579220172 47.63782998329432))" “B”
2 "레드몬드 빌딩 40" "POLYGON((-122.1336154507967 47.6366745947009,-122.13361008637867 47.636483015064535,-122.13349206918201 47.636479400347675,-122.13349743360004 47.63636372927573,-122.13372810357532 47.63636372927573,-122.13373346799335 47.63617576323771,-122.13263912671528 47.63616491902258,-122.13264985555134 47.63635649982525,-122.13304682248554 47.636367344000604,-122.13305218690357 47.63650831807564,-122.13276250832996 47.636497473929516,-122.13277323716602 47.63668543881025,-122.1336154507967 47.6366745947009))" "A"
3 "레드몬드 빌딩 22" "POLYGON((-122.13611660248233 47.63758544698554,-122.13635263687564 47.6374083293018,-122.13622389084293 47.63733603619712,-122.13622389084293 47.63717699101473,-122.13581619507266 47.63692757827657,-122.13559625393344 47.637046862778135,-122.13569281345798 47.637144458985965,-122.13570890671207 47.637314348246214,-122.13611660248233 47.63758544698554))" "C"

지오펜싱으로 경고 생성

디바이스는 DeviceStreamInput이라는 스트림을 통해 1분마다 ID와 위치를 내보낼 수 있습니다. 다음 표는 입력 스트림입니다.

DeviceID GeoPosition
"A" "POINT(-122.13292341559497 47.636318374032726)"
“B” "POINT(-122.13338475554553 47.63743531308874)"
"C" "POINT(-122.13354001095752 47.63627622505007)"

디바이스 스트림을 지오펜스 참조 데이터와 결합하고 디바이스가 허용된 건물 밖에 있을 때마다 경고를 생성하는 쿼리를 빌드할 수 있습니다.

SELECT DeviceStreamInput.DeviceID, SiteReferenceInput.SiteID, SiteReferenceInput.SiteName 
INTO Output
FROM DeviceStreamInput 
JOIN SiteReferenceInput
ON st_within(DeviceStreamInput.GeoPosition, SiteReferenceInput.Geofence) = 0
WHERE DeviceStreamInput.DeviceID = SiteReferenceInput.AllowedDeviceID

다음 이미지는 지오펜스를 나타냅니다. 스트림 데이터 입력에 따른 디바이스의 위치를 확인할 수 있습니다.

Building geofences

디바이스 "C"는 참조 데이터에 따라 허용되지 않는 건물 ID 2 내부에 있습니다. 이 디바이스는 건물 ID 3 안에 있어야 합니다. 이 작업을 실행하면 이 특정 위반에 대한 경고가 생성됩니다.

여러 허용 디바이스가 있는 사이트

사이트에서 여러 디바이스를 허용하는 경우 AllowedDeviceID에 디바이스 ID 배열을 정의할 수 있고 WHERE 절에서 사용자 정의 함수를 사용하여 스트림 디바이스 ID가 해당 목록의 디바이스 ID와 일치하는지 확인할 수 있습니다. 자세한 내용은 클라우드 작업에 대한 JavaScript UDF 자습서와 에지 작업에 대한 C# UDF 자습서를 참조하세요.

지리 공간 집계

Azure Stream Analytics는 클라우드 및 IoT Edge 런타임에서 대기 시간이 짧은 실시간 지리 공간 집계를 지원합니다.

지리 공간 집계 시나리오

택시 회사는 현재 수요가 더 많은 도시 지역으로 차량을 찾는 택시 기사를 안내하는 실시간 애플리케이션을 빌드하려고 합니다.

회사는 도시의 논리적 지역을 참조 데이터로 저장합니다. 각 지역은 RegionID, RegionName 및 Geofence로 정의됩니다.

지오펜스 정의

다음 표는 Azure Blob Storage 또는 Azure SQL 테이블에 저장할 수 있는 지오펜스 참조 데이터의 예입니다. 모든 지역은 스트리밍 데이터에서 오는 요청과 상관 관계를 지정하는 데 사용되는 지리 공간 다각형으로 표시됩니다.

이 다각형은 참조용일 뿐이며 실제 도시의 논리적 또는 실제 분리를 나타내지 않습니다.

RegionID RegionName 지오펜스
1 "소호" "POLYGON((-74.00279525078275 40.72833625216264,-74.00547745979765 40.721929158663244,-74.00125029839018 40.71893680218994,-73.9957785919998 40.72521409075776,-73.9972377137039 40.72557184584898,-74.00279525078275 40.72833625216264))"
2 "차이나타운" "POLYGON((-73.99712367114876 40.71281582267133,-73.9901070123658 40.71336881907936,-73.99023575839851 40.71452359088633,-73.98976368961189 40.71554823078944,-73.99551434573982 40.717337246783735,-73.99480624255989 40.718491949759304,-73.99652285632942 40.719109951574,-73.99776740131233 40.7168005470334,-73.99903340396736 40.71727219249899,-74.00193018970344 40.71938642421256,-74.00409741458748 40.71688186545551,-74.00051398334358 40.71517415773184,-74.0004281526551 40.714377212470005,-73.99849696216438 40.713450141693166,-73.99748845157478 40.71405192594819,-73.99712367114876 40.71281582267133))"
3 "트라이베카" "POLYGON((-74.01091641815208 40.72583120006787,-74.01338405044578 40.71436586362705,-74.01370591552757 40.713617702123415,-74.00862044723533 40.711308107057235,-74.00194711120628 40.7194238654018,-74.01091641815208 40.72583120006787))"

일정 기간 동안 데이터 집계

다음 표는 "라이드"의 스트리밍 데이터를 포함합니다.

UserID FromLocation ToLocation TripRequestedTime
"A" "POINT(-74.00726861389182 40.71610611981975)" "POINT(-73.98615095917779 40.703107386025835)" "2019-03-12T07:00:00Z"
“B” "POINT(-74.00249841021645 40.723827238895666)" "POINT(-74.01160699942085 40.71378884930115)" "2019-03-12T07:01:00Z"
"C" "POINT(-73.99680120565864 40.716439898624024)" "POINT(-73.98289663412544 40.72582343969828)" "2019-03-12T07:02:00Z"
"D" "POINT(-74.00741090068288 40.71615626755086)" "POINT(-73.97999843120539 40.73477895807408)" "2019-03-12T07:03:00Z"

다음 쿼리는 디바이스 스트림을 지오펜스 참조 데이터와 결합하고 1분마다 15분 동안의 지역별 요청 수를 계산합니다.

SELECT count(*) as NumberOfRequests, RegionsRefDataInput.RegionName 
FROM UserRequestStreamDataInput
JOIN RegionsRefDataInput 
ON st_within(UserRequestStreamDataInput.FromLocation, RegionsRefDataInput.Geofence) = 1
GROUP BY RegionsRefDataInput.RegionName, hoppingwindow(minute, 15, 1)

이 쿼리는 도시 내 각 지역별로 지난 15분 동안 분당 요청 수를 출력합니다. 이 정보는 Power BI 대시보드에 쉽게 표시되거나 Azure Functions와 같은 서비스와의 통합을 통해 SMS 문자 메시지로 모든 운전자에게 브로드캐스트될 수 있습니다.

아래 이미지는 Power BI 대시보드에 대한 쿼리 출력을 보여 줍니다.

Result output on Power BI dashboard

다음 단계