Location Based Service Application
위치기반서비스 (LBS : Location based services) 이동통신망이나위성항법장치등을통해얻은위치정보를바탕으로이용자에게여러서비스를제공하는서비스들 위치정보 좌표체계 Geocoding Map API Android: Google map ios: MKMapkit, CoreLocation framework Location based services 수동적위치기반서비스 능동적위치기반서비스
좌표체계에따른위치정보 Bessel 경위도 1841 년 Bessel 이고안한타원체로유럽과유라시아지역에서가장잘맞는타원체기반경도, 위도 현재우리나라의 TM 좌표계에서사용 TM128 (Transverse Mercator: 횡메카토르 ) 지구표면을평면상에표현하는투영방법의하나 우리나라는구역을사등분 ( 서부, 중부, 동부, 동해 ) 하여각각에투영원점을둠 (mapx: 318634, mapy: 543967) WGS84 경위도 지구를편평한회전타원체라가정하고미국에서군사용으로 GPS 를이용하여만든좌표계. 1984 년제정되어 WGS84 라고함 (x: 127.079857281, y: 37.4915265371)
좌표체계사용을위한정의 위도 (latitude), 경도 (longitude)
Geocoding 일반주소를좌표로변환 ( 서울특별시중구태평로 1 가 31 309925, 552079) 역 - 지오코딩 : 좌표값을일반주소로변환 (37.566509, 126.978073 서울중구태평로 1 가 31) Geocoding 사용방법 Android : Geocoder 클래스의 getfromlocationname 사용 ios : CLLocation 객체의 CLGeocoder 클래스사용
Google map 안드로이드 API 의구성 Google Map : 구글맵 API 메인클래스객체를직접생성하지않으며, MapView 등에의해참조함 MapView : View 클래스의서브클래스 GoogleMap 객체가지도를그리는뷰캔버스제공 MapFragment : android.app.fragment 클래스의서브클래스안드로이드레이아웃의프래그먼트에지도가위치하게함 SupportMapFragment : android.support.v4.app.fragment 의서브클래스 MapFragment 와기능적으로거의동일 ( 하위버전지원 ) Marker : 지도가표현될위치를나타냄 addmarker() 메소드를사용하며, 제목, 텍스트, 아이콘등을지도에표시함 Shapes : Polyline, Polygon, Circle 클래스들을사용하여지도에도형들을그림 UiSettings : 지도축소, 확대, 현재위치와나침반등을나타나도록제어함 My Location Layer : 내위치가지도의버튼에나타나게함
프로젝트시작시 Google Maps Activity 선택 Google로부터개발자서명얻기 google_maps_api.xml (app/res/values) <string name="google_maps_key" translatable="false" templatemergestrategy="preserve">aizasya5zkab6dmdullvrix1locngki xcrbww9g</string> 위의내용까지만진행한후실행하면지도는나타남 app/res/layout 의 activity_map_demo.xml 에 supportmapfragment 가추가되어지도가화면에나타남 현재버전에서는지도가시뮬레이터에서는나타나지않음 사용자위치표시 사용자위치표시 : app/manifests 의 AndroidManifest.xml 파일 (6.0 이하 ) <uses-permission android:name="android.permission.access_fine_location" /> 퍼미션 (6.0 이상 ) 을위해 java 코드에퍼미션허가를위한메소드작성필요현재위치를보여주기위해 setmylocatgionenabled(true); 설정
지도타입변경 GoogleMap.MAP_TYPE_NONE : 격자선없이나타남 GoogleMap.MAP_TYPE_NORMAL : 전형적인도로지도 ( 표준뷰 ) GoogleMap.MAP_TYPE_SATELLITE : 인공위성사진 GoogleMap.MAP_TYPE_HYBRID : 도로지도가겹쳐진인공위성사진 GoogleMap.MAP_TYPE_TERRAIN : 등고선과색상등의지형을보여줌 맵컨트롤을사용자에게나타내기, 제스처처리 UiSettings 을사용함 mapsettings.setzoomcontrolsenabled(true); mapsettings.setzoomgesturesenabled(false); mapsettings.setscrollgesturesenabled(true); mapsettings.settiltgesturesenabled(true); mapsettings.setrotategesturesenabled(true);
Geocoder 클래스 getfromlocationname() 메소드사용
Geocoder 클래스 역지오코딩 : getfromlocation () 메소드사용
ios API 의구성 Google Map : ios 5 까지사용 TomTom Map : ios 6 부터사용 MKMapItem 클래스 : 지도와턴방식 (turn-by-turn) 길찾기를통합하도록설계된새로운클래스 MKMapItem 클래스는많은양의코딩없이애플리케이션들이지도를쉽게띄울수있도록하며, MKPlacemark 클래스와함께동작하여지도에표시되는위치를정의함
CLGeocoder 클래스 (geocodeaddressstring() 사용 )
역지오코딩 : (reversegeocodelocation() 사용 )
역지오코딩 : (reversegeocodelocation() 사용 )
ios API - MKMapItem 코딩을위해필요한 framework CoreLocation.framework AddressBook.framework Contacts.framework (ios 10 부터적용 ) MapKit.framework MKMapItem 으로위치를지정한후 openinmapswithlaunchoptions 을이용하여 Map App 실행함 애플리케이션내에직접맵을넣기위해서는 MapView 사용
ios API MKMapItem 옵션 MKLaunchOptionsDirectionsModeKey 턴방식길찾기를지도에제공할지설정 MKLaunchOptionsMapTypeKey 지도가위성이나, 하이브리드, 표준지도이미지를표시할지설정 MKLaunchOptionsMapCenterKey 지도중앙이되는위치에대한좌표를포함하여설정 MKLaunchOptionsMapSpanKey 지도에표시되어야하는영역을지정 (MKCoordinateSpan 구조체 ) MKLaunchOptionsShowsTrafficKey 교통정보를지도위에겹치도록할것인지설정
ios API MKMapItem 예제
ios API MKMapItem 예제 2
ios API MKMapItem 예제 2
ios API MKMapItem 예제 2
ios API Location 예제 CLLocation 클래스 CLLocationManager 클래스 - startupdatinglocation 실행 - didupdatetolocation fromlocation 메소드
ios API Location 예제
ios API Location 예제
ios MKMapView API 기존까지의방법은 MKMapItem 을사용하여, openinmapswithlaunchoptions 형태로열었음 (Map 앱실행 ) MapKit 프레임워크를이용하여애플리케이션내에서 Map 을보여줄경우사용 위치, 지도, 위성사진을표시할수있으며, 로컬검색, 길찾기기능을사용할수있음 MKMapView 클래스사용 사용자에게표시할위치지정을위해 Map Regions 설정필요
ios MKMapView API 사용자움직임에따른지도움직임설정
ios MKMapView API 화면에보여줄영역설정 Map 의 Type 변경
ios MKMapView API 검색에대한결과적용 (MKLocalSearchRequest 클래스 )
대표적인위치기반서비스 내비게이션 SKT Tmap, KT Olleh navi, 김기사등 단순길안내 사고다발지역, 속도측정기기위치안내 길주변에주유소정보및휴게소정보제공 초기 LBS 를이용한증강현실서비스 게임보다는정보및특정상점위치알리는것에중점을둠 수동적인정보 / 데이터제공방식 2010 년신한 TownMap - http://withkoogi.tistory.com/191 Ovjet - http://tvpot.daum.net/v/_2tz6jz0rdq%24
수동적위치기반서비스흐름
수동적위치기반서비스흐름 GPS information Location information User Service Provider GPS 정보를 http request (Post) 로전달애플리케이션을켜고있는경우에만상호전송이이루어짐 Location 정보는 XML, JSON 형식으로전송
수동적위치기반서비스흐름 서버에서의동작원리 DB 데이터가 TM128 좌표로되어있는경우스마트폰으로부터받은 WGS84 값을 TM128 로변환후, 허용범위안에있는데이터만을선택하여전송함 ( 변환주체를어디서하는지도중요한문제 ) SQL 검색명령어에자동계산되는부분이있는것이아니므로, 허용범위수치를정한후 ±100( 원하는수치값 ) 범위에있는값들을검색하여전송 정보가많은지역, 적은지역을적절히구분하여제공할수있는알고리즘필요
수동적위치기반서비스흐름 스마트기기에서의동작원리 전달받은데이터수가적당한경우바로지도 (AR 의경우화면 ) 에표시하며, 구체적인정보는핀 ( 아이콘 ) 을터치후, 세부페이지를통해볼수있도록함 데이터수가많은경우거리별로정렬하여필요한수량을제한하여가까운순으로표시하고나머지필요없는값은표시하지않음 가까운순으로정렬하기위해사용자위치와데이터간의직선거리계산이필요하며이는 CLLocationDistance 클래스의 distancefromlocation 메소드를이용하여구함
수동적위치기반서비스의단점 선별된데이터가아닌, 위치에맞는데이터를모두전송함 사용자가애플리케이션을켜지않는이상현재위치에서제공할수있는서비스를전달할방법이없음 GPS 수신신호에의존하기때문에실내등에서의서비스어려움 능동적위치기반서비스 사용자가직접참여하지않더라도특정신호에의해스마트폰이반응하여서버와통신후위치정보를제공 실내측위기술, ibeacon, Bluetooth Low Energy(BLE) 등과같이설치된장치의신호로부터위치정보제공
위치기반서비스를위한센서 GPS 수신모듈 나침반센서 Wi-Fi & network AR 표현을위한카메라 능동적위치기반서비스를위한센서 QR, NFC : 카메라또는 NFC 모듈 Microphone Bluetooth 4.0 BLE 조도센서 illuminance sensor
능동적위치기반서비스 QR 코드, NFC 를이용한서비스 QR 코드 : 코드모양이정사각형이라어느방향으로읽어도정확하게인식, 별도의모듈이필요하지않음 NFC : Android 에서만사용가능, 10cm 이내의가까운거리에서맞대면기기간에데이터양방향송수신가능 도서관입출입, 행사장입장등에오프라인표대신많이활용되고있으며, 특히유럽에서의 QR 이용이활발함
능동적위치기반서비스 실내사용자위치추적기술 GPS 외에또다른신호를수신하여신호에맞는데이터만수신함, 또는주변의정보를미리전송받아추가네트워크작업없이바로정보제공
능동적위치기반서비스 Starbucks 사이렌오더기술 (O2O: Online to offline) 매장에제공되고있는음악소리에매장코드가담긴고주파음을함께발생신호 (Beacon) 로사용하며, GPS 정보는보조역할을수행 네트워크만을이용한지점선택, 주문방식도있음
능동적위치기반서비스 실내측위기반모바일솔루션 대형쇼핑몰, 백화점, 공항, 전시관등에서위치에따른정보제공
능동적위치기반서비스 BLE 특정신호발생전달기술 ibeacon, beacon service 1. Proximity Marketing 2. Check-in Coupons 3. Indoor Location 4. Contactless Payment
능동적위치기반서비스 BLE 특정신호발생전달기술활용사례 13 년 9 월메이저리그뉴욕메츠홈구장에정보제공서비스 13 년 Shopkick 이 ShopBeacon 서비스공개 14 년 Beaconic 이 ibeacon Retail Kit 공개 14 년 Virgin Atlantic 가 ibeacon 도입 아직까지쇼핑및정보제공형태로만서비스를하고있음
능동적위치기반서비스 Li-Fi 기술을이용한데이터전송기술 LED 조명이사람이인식할수없을정도로깜박거리는것으로데이터전송