모바일 GPS 디바이스 API 가이드 프로그램은 모바일 디바이스 API 실행환경을 활용하여 하이브리드 앱을 개발자들이 구현 시 GPS API를 통해 위치 정보를 알아내고, 위치를 맵에 표시할 수 있도록 참고 및 활용될 수 있는 가이드 앱 이다.
본 가이드 프로그램에서는 GPS 기능을 가이드 할 수 있도록 GPS API 정보 호출, GPS API 정보 DB 목록 을 제공하고 있다.
| 구분 | 내용 |
|---|---|
| Local 디바이스 개발 환경 | 전자정부표준프레임워크 개발환경3.5, Android SDK API 22(version 5.0 Lollipop) |
| 서버 사이드 개발 환경 | 전자정부표준프레임워크 개발환경3.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.3 |
| 추가 라이브러리 적용 | N/A |
| 구분 | 내용 |
|---|---|
| 크로스 도메인 사용 | 폰갭에서 특정 외부 도메인이나 외부 도메인의 하위 도메인을 사용해야할 경우, Res/xml/config.xml에서 <access origin=”” />에 외부 도메인 주소를 추가 설정해야 외부 도메인에 접속할 수 있다. |
| 유형 | 대상소스 | 비고 |
|---|---|---|
| Activity | kr.go.egovframework.hyb.gpsapi.GPSAPIGuide_AndroidActivity | GPSAPI 가이드 프로그램 Activity Class |
| CSS | assets/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 |
| HTML | assets/www/GPSAPI.html | GPSAPI 메인 페이지 |
| HTML | assets/www/Intro.html | GPSAPI Intro 페이지 |
| HTML | assets/www/license.html | GPSAPI 라이센스 페이지 |
| HTML | assets/www/overview.html | GPSAPI 기능설명 페이지 |
navigator.geolocation.getCurrentPosition
navigator.geolocation.getCurrentPosition(successCallback, failCallback);
| Option | 설명 | 비고 |
|---|---|---|
| successCallback | 성공시 리턴되는 함수 | |
| failCallback | 실패시 리턴되는 함수 |
| 유형 | 대상소스 | 비고 |
|---|---|---|
| Controller | egovframework.hyb.add.gps.web.EgovGPSAndroidAPIController.java | GPS 정보 관리를 위한 클래스 |
| Service | egovframework.hyb.add.gps.service.EgovGPSAndroidAPIService.java | GPS 정보 관리를 위한 서비스 인터페이스 |
| VO | egovframework.hyb.add.gps.service.GPSAndroidAPIDefaultVO.java | GPS 관리를 위한 VO 클래스 |
| VO | egovframework.hyb.add.gps.service.GPSAndroidAPIVO.java | GPS 관리를 위한 VO 클래스 |
| DAO | egovframework.hyb.add.gps.service.impl.GPSAndroidAPIDAO.java | GPS 관리를 위한 데이터처리 클래스 |
| DAO | egovframework.hyb.add.gps.service.impl.EgovGPSAndroidAPIServiceImpl.java | 요청 서비스 처리를 위한 클래스 |
| Query XML | resources/egovframework/sqlmap/hyb/add/gps/EgovGPSAndroidAPIGuide_SQL_xxx.xml | GPS 정보 관리를 위한 Query 파일 |
| 테이블명 | 테이블명(영문) | 비고 |
|---|---|---|
| GPS | GPS | GPS 정보 관리 |
| No. | 컬럼 | 컬럼명 | 타입 | 길이 | Null | KEY |
|---|---|---|---|---|---|---|
| 1 | SN | 일련번호 | NUMERIC | 6 | NotNull | pk |
| 2 | UUID | UUID | VARCHAR | 50 | NotNull | pk |
| 3 | LA | 위도 | VARCHAR | 48 | Null | |
| 4 | LO | 경도 | VARCHAR | 48 | Null | |
| 5 | ACCRCY | 정확도 | VARCHAR | 10 | Null | |
| 6 | USEYN | 활성화여부 | CHAR | 1 | Null |
GPS 디바이스 API 가이드 프로그램에서 제공하는 모바일 디바이스의 GPS 관련 기능을 활용하기 위하여 필요한 항목 및 그 환경 설정은 다음과 같다.
<plugins> <plugin name="Geolocation" value="org.apache.cordova.GeoBroker"/> <!--전자정부 Interface 디바이스 API를 사용하기 위한 Phonegap Plugin 클래스--> <plugin name="EgovInterfacePlugin" value="kr.go.egovframework.hyb.plugin.EgovInterfacePlugin" /> </plugins>
<!--전자정부 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>
<sqlMap resource="egovframework/sqlmap/hyb/add/dvc/EgovGPSAndroidAPIGuide_SQL_[DB명].xml"/>
GPS 디바이스API 가이드 프로그램은 크게 GPS API 정보 호출, GPS API 정보 DB 목록 기능으로 구성되어 있다.
// 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";
});
}
| 기능 | URL | Controller | method | 화면(HTML) |
|---|---|---|---|---|
| GPS 데이터 서버로 전송하기 | /gps/xml/addGPSInfo.do | EgovGPSAndroidAPIController | insertGPSInfo | GPSAPI.html#myLocation |
입력 데이터는 GPS API 정보를 사용한다.
GPS 데이터를 서버로 전송하기 위해서는 DB저장 버튼을 클릭하면 된다.
DB저장 : GPS 데이터를 서버로 전송한다.
Back 버튼 : GPS 디바이스 API 가이드 프로그램 메뉴 화면으로 이동한다.
// 목록 읽기
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;
}
});
}
| 기능 | URL | Controller | method | 화면(HTML) |
|---|---|---|---|---|
| GPS 정보 목록 조회 | /gps/xml/gpsInfoList.do | EgovGPSAndroidAPIController | selectGPSInfoListXml | GPSAPI.html#gpsInfoList |
| GPS 정보 목록 삭제 | /gps/xml/deleteGPSInfo.do | EgovGPSAndroidAPIController | deleteGPSInfo | GPSAPI.html#gpsInfoList |
위치 정보 목록을 삭제하기 위해서는 DB삭제 버튼을 클릭하면 된다.
DB삭제 : GPS 정보 목록을 삭제한다.
Back 버튼 : GPS 디바이스 API 가이드 프로그램 메뉴 화면으로 이동한다.
디바이스 어플리케이션에서 발생한 오류 내용 확인 및 디버깅을 위해서는 폰갭 프레임워크에서 제공하는 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