목차

GPS 디바이스 API 가이드 프로그램

개요

모바일 GPS 디바이스 API 가이드 프로그램은 모바일 디바이스 API 실행환경을 활용하여 하이브리드 앱을 개발자들이 구현 시 GPS API를 통해 위치 정보를 알아내고, 위치를 맵에 표시할 수 있도록 참고 및 활용될 수 있는 가이드 앱 이다.

특징

본 가이드 프로그램에서는 GPS 기능을 가이드 할 수 있도록 GPS API 정보 호출, GPS API 정보 DB 목록 을 제공하고 있다.

기능 흐름도

기능시퀀스

전제 조건

구분내용
Local 디바이스 개발 환경전자정부표준프레임워크 개발환경2.5, Android SDK Revision 18(적용빌드번호 : GINGERBREAD EL21)
서버 사이드 개발 환경전자정부표준프레임워크 개발환경2.5
Mash up Open API 연계GPS API 가이드 프로그램의 예제로 제공하는 2가지 지도를 사용하기 위해서는 별도로 해당 지도 API 인증키를 신청하여야 한다. \\- Daum 지도 : https://apis.daum.net/register/myapi.daum)

예제로 사용하는 국가공간정보통합체계 지도 및 Daum 지도 사용에 관한 모든 권한은 해당 기관에 있으며,
Daum 지도 사용시 'Daum 지도 Open API 서비스 이용약관'을 확인 후 사용한다.
(Daum 지도 Open API 서비스 이용약관 : http://dna.daum.net/apis/mapagreement)

예제로 사용하는 지도 외에도 기타 지도 API 약관 및 규격에 맞추에 서비스를 연계하여 구축 가능하다.
테스트 디바이스 Galaxy S2
테스트 플랫폼 Android 2.2
추가 라이브러리 적용N/A

제약 사항

구분 내용
크로스 도메인 사용폰갭에서 특정 외부 도메인이나 외부 도메인의 하위 도메인을 사용해야할 경우,
Res/xml/config.xml에서 <access origin=”” />에 외부 도메인 주소를 추가 설정해야 외부 도메인에 접속할 수 있다.

설명

관련 클래스다이어그램

Device Application

관련 소스

유형대상소스비고
Activitykr.go.egovframework.hyb.gpsapi.GPSAPIGuide_AndroidActivityGPSAPI 가이드 프로그램 Activity Class
CSSassets/www/css/egovframwork/mbl/hyb/GPSAPI.css GPSAPI 가이드 프로그램 주요 Cascading Style Sheets
IMAGE assets/www/images/egovframwork/mbl/hyb/ GPSAPI 가이드 프로그램 주요 Image 폴더
JS assets/www/js/egovframwork/mbl/hyb/GPSAPI.js GPSAPI 가이드 프로그램 주요 JavaScript
RES assets/www/res/ GPSAPI 가이드 프로그램 주요 Resource 폴더
XML AndroidManiFest.xml 안드로이드 어플리케이션 설정 XML
HTMLassets/www/GPSAPI.htmlGPSAPI 메인 페이지
HTMLassets/www/Intro.htmlGPSAPI Intro 페이지
HTMLassets/www/license.htmlGPSAPI 라이센스 페이지
HTMLassets/www/overview.htmlGPSAPI 기능설명 페이지

활용 API

navigator.geolocation.getCurrentPosition
navigator.geolocation.getCurrentPosition
navigator.geolocation.getCurrentPosition(successCallback, failCallback);
Option설명비고
successCallback성공시 리턴되는 함수
failCallback실패시 리턴되는 함수

Server Application

관련 소스

유형대상소스비고
Controlleregovframework.hyb.add.gps.web.EgovGPSAndroidAPIController.javaGPS 정보 관리를 위한 클래스
Serviceegovframework.hyb.add.gps.service.EgovGPSAndroidAPIService.javaGPS 정보 관리를 위한 서비스 인터페이스
VOegovframework.hyb.add.gps.service.GPSAndroidAPIDefaultVO.javaGPS 관리를 위한 VO 클래스
VOegovframework.hyb.add.gps.service.GPSAndroidAPIVO.javaGPS 관리를 위한 VO 클래스
DAOegovframework.hyb.add.gps.service.impl.GPSAndroidAPIDAO.javaGPS 관리를 위한 데이터처리 클래스
DAOegovframework.hyb.add.gps.service.impl.EgovGPSAndroidAPIServiceImpl.java요청 서비스 처리를 위한 클래스
Query XMLresources/egovframework/sqlmap/hyb/add/gps/EgovGPSAndroidAPIGuide_SQL_xxx.xmlGPS 정보 관리를 위한 Query 파일

관련 테이블

테이블명테이블명(영문)비고
GPSGPSGPS 정보 관리

테이블 명세서

No.컬럼컬럼명타입길이NullKEY
1SN일련번호NUMERIC6NotNullpk
2UUIDUUIDVARCHAR50NotNullpk
3LA위도VARCHAR48Null
4LO경도VARCHAR48Null
5ACCRCY정확도VARCHAR10Null
6USEYN활성화여부CHAR1Null

ERD

환경설정

GPS 디바이스 API 가이드 프로그램에서 제공하는 모바일 디바이스의 GPS 관련 기능을 활용하기 위하여 필요한 항목 및 그 환경 설정은 다음과 같다.

Device Application

res/xml/plugins.xml

<plugins>
    <plugin name="Geolocation" value="org.apache.cordova.GeoBroker"/>
    <!--전자정부 Interface 디바이스 API를 사용하기 위한 Phonegap Plugin 클래스-->
    <plugin name="EgovInterfacePlugin" value="kr.go.egovframework.hyb.plugin.EgovInterfacePlugin" />
</plugins>

res/values/serverinfo.xml

    <!--전자정부 Interface 디바이스 API에서 사용하기 위한 서버경로 설정-->
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
	<string name="SERVER_URL">http://192.168.100.222:8080/DeviceAPIGuideTotal_Web_V1.7.1</string>
    </resources>

Server Aplication

resource/egovframework/sqlmap/sql-map-config_[DB명].xml

<sqlMap resource="egovframework/sqlmap/hyb/add/dvc/EgovGPSAndroidAPIGuide_SQL_[DB명].xml"/>

관련 기능

GPS 디바이스API 가이드 프로그램은 크게 GPS API 정보 호출, GPS API 정보 DB 목록 기능으로 구성되어 있다.

GPS API 정보 호출

비즈니스 규칙

관련코드

// GPS API 정보 호출
navigator.geolocation.getCurrentPosition(onSuccess, onError);

// GPS 정보를 맵에 표시
function onSuccess(position) {
    console.log('DeviceAPIGuide onSuccess Success');
    lat = position.coords.latitude;
    lon = position.coords.longitude;
    var html = "";
    html = '위도 : ' + position.coords.latitude + '<br/>';
    html += '경도 : ' + position.coords.longitude + '';
	
    $('#latlngInfo').html(html);

    // 현재 위치 좌표*
    var latlng =  new daum.maps.LatLng(position.coords.latitude, position.coords.longitude);
	
    // 지도 설정*
    var myOptions = {
        level: 4,
        center: latlng,
        mapTypeId: daum.maps.MapTypeId.ROADMAP
    };
	
    // 지도 생성*
    var map = new daum.maps.Map(document.getElementById("map"), myOptions);
    map.addControl(new daum.maps.ZoomControl());
    
    // 현재 위치 마커 표시*
    var curMarker = new daum.maps.Marker({
                                         position: latlng
                                         });
    curMarker.setMap(map);
	
    var infowindow = new daum.maps.InfoWindow({
                                              content: '<font size=2>위도:'+position.coords.latitude + '<br/>' + '경도:'+position.coords.longitude+'</font>'
                                              });
    infowindow.open(map, curMarker);
    
    $.mobile.hidePageLoadingMsg('a');
}

// 현재 위치 정보를 서버에 전송
function fn_egov_go_addGpsInfo()
{
    //3G 사용시 과금이 발생 할 수 있다는 경고 메시지 표시
    if(!fn_egov_network_check(false)) {
        return;
    }
    
    var url = "/gps/xml/addGPSInfo.do";
    var acceptType = "xml";
    var params = {uuid : device.uuid,
                    lat: lat,
                    lon: lon,
                    useYn: 'Y'};
    
    $.mobile.showPageLoadingMsg('a');	
	
    window.plugins.EgovInterface.post(url, acceptType, params, function(xmldata) {
                    console.log('DeviceAPIGuide fn_egov_go_addGpsInfo request Complete');
                                         
                    alert($(xmldata).find("resultMessage").text());
                                         
                    $.mobile.hidePageLoadingMsg('a');
                    location.href = "GPSAPI.html";
    });    
}

관련화면 및 수행매뉴얼

기능URLControllermethod화면(HTML)
GPS 데이터 서버로 전송하기/gps/xml/addGPSInfo.doEgovGPSAndroidAPIControllerinsertGPSInfoGPSAPI.html#myLocation

입력 데이터는 GPS API 정보를 사용한다.

GPS 데이터를 서버로 전송하기 위해서는 DB저장 버튼을 클릭하면 된다.

DB저장 : GPS 데이터를 서버로 전송한다.
Back 버튼 : GPS 디바이스 API 가이드 프로그램 메뉴 화면으로 이동한다.

GPS API 정보 DB 목록

비즈니스 규칙

관련코드

// 목록 읽기
function fn_egov_go_gpsInfoList()
{
    //3G 사용시 과금이 발생 할 수 있다는 경고 메시지 표시    
    if(!fn_egov_network_check(false)) {
        return;
    }
    
    $.mobile.changePage("#gpsInfoList", "slide", false, false);
    $.mobile.showPageLoadingMsg('a');
    
    var url = "/gps/xml/gpsInfoList.do";
    var acceptType = "xml";
    var params = {uuid : device.uuid};
    // get the data from server
    window.plugins.EgovInterface.post(url, acceptType, params, function(xmldata) {
                console.log('DeviceAPIGuide fn_egov_go_gpsInfoList request Complete');                                   
                $.mobile.hidePageLoadingMsg('a');
                                         
                var list_html = "";                                         
                if($(xmldata).find("gpsInfoList").length == 0) {
                    alert('조회된 데이터가 없습니다');
                } else {                                         		
                    $(xmldata).find("gpsInfoList").each(function(){
                        var uuid = $(this).find("uuid").text();
                        var lat = $(this).find("lat").text();
                        var lon = $(this).find("lon").text();      
	
                        list_html += "<li><h3>UUID : " + uuid + "</h3>";
                        list_html += "<p>위도 : " + lat + "</p>";
                        list_html += "<p>경도 : " + lon + "</p></li>";
                    });                
                }
                                         
                var theList = $('#theLogList');
                theList.html(list_html);
                theList.listview("refresh");	                                         
                setTimeout(loadiScrollList, 1000);
            });
    
}

// 위치 정보 목록을 삭제한다.
function fn_egov_go_deleteGpsInfo()
{
    //3G 사용시 과금이 발생 할 수 있다는 경고 메시지 표시
    if(!fn_egov_network_check(false)) {
        return;
    }
    
    var url = "/gps/xml/deleteGPSInfo.do";
    var acceptType = "xml";
    var params = {uuid : device.uuid};
    // get the data from server
    jConfirm('서버에 저장된 GPS 정보 목록을 삭제 하시겠습니까?', '알림', 'c', function(r){
                if(r == true){
                    $.mobile.showPageLoadingMsg('a');
                    window.plugins.EgovInterface.post(url, acceptType, params, function(result) {
                                    console.log('DeviceAPIGuide fn_egov_go_deleteGpsInfo request Complete');
                                                     
                                    alert($(result).find("resultMessage").text());
                                                  
                                    $.mobile.hidePageLoadingMsg('a');
                                    location.href = "GPSAPI.html";
                                });
                }else{
                    return;
                }
            });
}

관련화면 및 수행매뉴얼

기능URLControllermethod화면(HTML)
GPS 정보 목록 조회/gps/xml/gpsInfoList.doEgovGPSAndroidAPIControllerselectGPSInfoListXmlGPSAPI.html#gpsInfoList
GPS 정보 목록 삭제/gps/xml/deleteGPSInfo.doEgovGPSAndroidAPIControllerdeleteGPSInfoGPSAPI.html#gpsInfoList

위치 정보 목록을 삭제하기 위해서는 DB삭제 버튼을 클릭하면 된다.

DB삭제 : GPS 정보 목록을 삭제한다.
Back 버튼 : GPS 디바이스 API 가이드 프로그램 메뉴 화면으로 이동한다.

컴파일 디버깅 배포

컴파일

GPSAPI Device Applicaton 컴파일 방법



DeviceInfoAPI Server Applicaton 컴파일 방법

디버깅

디바이스 어플리케이션에서 발생한 오류 내용 확인 및 디버깅을 위해서는 폰갭 프레임워크에서 제공하는 console.log를 이용할 수 있다. console.log 함수는 자바스크립트 구문에서 사용할 수 있는 디버그 코드로 이클립스에서 확인 할 수 있다.

console.log의 작성 방법은 다음과 같다.

function onSuccess(position) {    
    console.log('DeviceAPIGuide onSuccess Success');
    lat = position.coords.latitude;
    lon = position.coords.longitude;
    ...
}

디버깅 코드가 실행 되면 아래와 같은 메시지를 개발도구의 콘솔 메시지 창에서 볼 수 있다.

GPS 디바이스 API 가이드 프로그램 에서는 디버깅을 위하여 다음과 같이 콘솔 정보를 출력한다.

디버그 코드디버깅 내용
DeviceAPIGuide onSuccess Success GPS 정보 읽기 성공 시
DeviceAPIGuide onError Fail GPS 정보 읽기 실패 시
DeviceAPIGuide fn_egov_go_gpsInfoList request Complete 서버에서 GPS 정보 목록 읽기 성공 시
DeviceAPIGuide fn_egov_go_addGpsInfo request Complete 서버에 GPS 정보 저장 성공 시
DeviceAPIGuide fn_egov_go_deleteGpsInfo request Complete 서버의 GPS 목록 삭제 성공 시
DeviceAPIGuide EgovInterface.get request Fail HTTP GET Method 요청 실패 시
DeviceAPIGuide EgovInterface.post request Fail HTTP POST Method 요청 실패 시
DeviceAPIGuide EgovInterface.geturl Fail geturl 함수 요청 실패 시

배포

GPS 디바이스 API 가이드 다운로드 : Click

참고 자료