한국어

Programming

twin 주소복사
조회 수 3122 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

앱인벤터의 센서 중에 LocationSensor는 GPS 좌표와 주소, 속도를 알려줍니다. 이 센서를 이용하여 거리측정기 앱을 만들어보겠습니다. 
 

<그림 1> DistanceChecker 앱의 실행 화면

Start와 Check 두개의 버튼이 있습니다. 그 아래 GPS Read Label이 있는데, 이것은 현재 GPS 값을 표시하는 곳입니다. GPS Accuracy는 현재 GPS의 정확도를 표시합니다. GPS는 오차가 상당합니다. 주변에 가리는 건물이 없는 곳에서는 3~4m 정도, 아파트나 건물이 많은 곳에서는 10m 이상의 오차가 발생합니다. 따라서 거리 오차를 감안하고 사용해야 합니다.

1. GPS Read 에 좌표값이 표시되면(GPS 데이터를 수신하였다는 뜻입니다) 출발점에서 Start 버튼을 누릅니다. 이때의 좌표값이 Start 부분에 표시됩니다.

2. 이때부터 측정하고 싶은 곳으로 이동하면서 Check 버튼을 누르면 그때마다 Check 표시가 추가되면서 GPS 좌표와 출발점으로부터의 거리가 출력됩니다.

디자인 화면은 <그림 2>와 같습니다. 각 컴포넌트들의 배치와 이름을 확인하세요.
 

<그림 2> 디자인 화면
<그림 3> 디자인 화면 중 표시된 부분은 Visible을 해제

앱이 시작되고 GPS 좌표를 받기 전에는 GPS Read와 GPS Accuracy에 "GPS not ready" 라고 표시됩니다. HAStart와 HACheck 및 선을 표시하기 위한 Label6, Label11은 각각 Start와 Check 버튼이 클릭될 때까지는 화면에 보이지 않도록 Visible 속성을 uncheck 합니다.

블록 코딩을 살펴보겠습니다.
 

<그림 4> 블록코딩 1

앱이 실행되면서 LocationSensor의 TimeInterval과 DistanceInterval을 설정합니다. 이 값들은 설정된 거리나 시간 이상이 되어야 LocationChanged 이벤트를 발생시킵니다. 지금은 TimeInterval의 단위는 ms이므로 1초, 거리는 1m로 설정한 것입니다.

LocationSensor가 현재와 다른 GPS 값을 받게되면 LocationChanged 이벤트가 발생합니다. 이때마다 현재 좌표값과 정확도를 표시합니다.
 

<그림 5> 블록코딩 2

이제 Start 버튼이 클릭될 때의 코딩을 작성합니다. 출발점의 위도(Latitude)와 경도(Longitude) 좌표를 StartLat, StartLong으로 저장하기 위해 global variable로 설정합니다. btnStart가 클릭되면 visble 속성을 해제했던 Label6와 HAStart를 visible로 해주고 LocationSensor의 현재 위도, 경도를 표시합니다.
 

<그림 6> Check 버튼의 클릭 이벤트


이제 Check 버튼의 클릭이벤트를 작성합니다. 선을 표시하는 Label11과 HACheck의 visible을 true로 바꾸고 체크 번호와 함께 좌표값과 출발점으로 부터의 거리를 표시합니다.

두개의 GPS 좌표로 부터 거리를 계산하는 공식은 매우 복잡합니다. 그중 두가지를 만들어 보았는데 테스트해 본 결과 가까운 거리까지는 정확하게 같았습니다.

거리 계산하는 두가지 공식을 모두 프로시저로 만들어서 <그림 7>과 <그림 8>에 나타냈습니다. 둘다 Start 지점과  현재 위치의 거리를 계산합니다. 둘 중에 하나만 사용하면 됩니다.

첫번째 계산식은 http://www.appinventor.org/Procedures2 에서 가져왔습니다. 이 곳에서는 단위를 mile로 계산했기 때문에 이를 m로 변환해서 반올림하는 부분만 제가 추가했습니다.
 

<그림 7> GPS 좌표로부터 거리 측정

두번째 계산식은 훨씬 복잡합니다. 잘 보이지도 않네요... ㅎㅎ 
http://hochulshin.com/distance-between-two-coordinates/ 를 비롯한 여러 사이트를 참조했습니다.

<그림 8> GPS 좌표로부터 거리측정

둥그런 지구 위의 위치를 나타내는 위도, 경도로 부터 거리를 계산하는 방법이니 어려울 수 밖에요... 

오늘은 GPS로 부터 거리 계산하는 앱을 만들어보았습니다. 다양한 응용이 가능할 겁니다.


List of Articles
번호 제목 글쓴이 날짜 조회 수
31 [앱인벤터2] 말하는 Hello World 앱  twin 2018.08.27 1554
» [앱인벤터] 위치센서 LocationSensor를 이용한 거리측정기  twin 2018.08.27 3122
29 [앱인벤터] 리스트를 이용하여 녹음이 되는 실로폰  twin 2018.08.27 5561
28 [앱인벤터] Sound를 이용한 실로폰 앱  twin 2018.08.27 1055
27 [앱인벤터] 내가 만든 앱을 구글 플레이스토어에 등록하는 방법  twin 2018.08.27 748
26 [앱인벤터] App Inventor 2 Tips  twin 2018.08.27 1401
25 [앱인벤터] 에뮬레이터, 녹스(nox) 앱플레이어 사용법  twin 2018.08.27 873
24 [앱인벤터] ActivityStarter 액티비티 스타터를 사용한 여행앱  twin 2018.08.27 1720
23 [앱인벤터] 성적계산기  twin 2018.08.27 1071
22 [앱인벤터] Camera & Share, 사진찍고 메모해서 공유하기  twin 2018.08.27 944
21 [앱인벤터]Player(플레이어)를 이용한 I have a dream 앱  twin 2018.08.27 1117
20 [앱인벤터] 카메라와 캔버스, PaintPot 앱  twin 2018.08.27 1358
19 [앱 인벤터] 캔버스와 이미지 스프라이트, 두더지잡기 게임(Molemash)  twin 2018.08.27 2769
18 [앱인벤터] 방향센서와 나침반  twin 2018.08.27 1192
17 [앱인벤터2] 캔버스와 이미지스프라이트, Bouncing Ball 예제  twin 2018.08.27 1156
16 [앱인벤터2] 두 개의 스크린 사이의 값 전달, 구구단 예제  twin 2018.08.27 4316
15 [앱인벤터2] Slider를 사용하는 타이머  twin 2018.08.27 2233
14 [앱 인벤터2] 알람시계  twin 2018.08.27 3347
13 [앱 인벤터2] 위치센서와 문자 보내기, SOS 앱  twin 2018.08.27 2610
12 [앱인벤터2] 아날로그 시계 만들기  twin 2018.08.27 3003
Board Pagination Prev 1 2 3 Next
/ 3