2017 년도한국철도학회추계계학술대회논문집 KSR2017A043 위치추적을위한오프라인지도서비스구축방법 Method on Constructing Offline Map Service for Location Tracking 오경철 *, 최일윤 ** Kyoung-Chul Oh *, IL-YOON CHOI ** 초록본논문에서는고속궤도검측열차의위치추적을위한오프라인지도서비스구축방법을소개한다. 기존구글지도및국토교통부의 vworld 등의지도서비스는온라인으로제공되고있다. 오프라인지도서비스는인터넷이안되는환경의 PC 기반에서지도와서비스를구축하여무료로사용할수있다. 오픈스트리트맵이라는지도는집단지성에의해지도가생성및업데이트되고무료로제공되는지도이고오픈레이어는프로그램개발자가지도상에서비스를생성하는공개응용프로그램인터페이스툴이다. 본연구는대한민국영역의무료지도서버를구축하고고속철도의고속궤도검측열차의위치추적서비스구현방법을제시한다. 주요어 : Location Tracking, Offline Map Service, Openlayer, OpenStreetMap, Track Measurement System 1. 서론 교통수단과정보기술의발전에따라공간정 보를이용한위치기반서비스의요구가증대 되고있다. 이에부응하여다양한분야의산 학연에서위치기반지도서비스의연구개발 이진행되고있으나온라인상에서제공되는 웹지도서비스라는제약이있다. 2006 년구 글어스, 2007 년구글스트리트뷰, 2012 년구 글실내지도서비스를선보이면서구글은전 세계디지털지도시장의 70% 이상을점유했 고 2009 년세계금융위기로구글은주수입원 인광고매출이하락하게되자, 2011 년상용화 기업을상대로자사서비스사용에대한유 료화를선언했다 [1]. 우리나라에서는 한국형 구글어스개발 을목표로국토교통부에서 공간정보오픈플랫폼 vworld 를개발하여 2012 년에공개하였다. 오픈스트리트맵 (OpenStreetMap; OSM) 은 2005 년설립된영국의비영리기구오픈스트 리트맵재단이운영하는 오픈소스방식의 참여형무료지도서비스이다. 집단지성형 * 대보정보통신기술연구소 (dokgan@dbcs.co.kr) ** 한국철도기술연구원고속철도연구본부첨단고속철도연구실 식의지도로비영리인위키백과를모델로하고있어누구나편집하고활용할수있다. 2012년 4월구글지도가유료화움직임을보임에따라이를서비스하던위키백과와애플은스마트폰서비스부분에서오픈스트리트맵으로전환하기도했다 [2]. 오픈스트리트맵은공개프로그래밍인터페이스뿐만아니라지도가무료로제공되고있어서개인이자체적인오프라인지도서버를구축하고서비스를개발할수있다. 기존의오프라인지도서비스관련연구를살펴보면, 오프라인오픈스트리트맵지도서버를구축하고지도상에도로나해당지역의특징적이미지를추가하여지도를재생성하는것이고오픈스트리트맵을구축하고오픈프로그래밍인터페이스를이용하여지도상에서비스를제공하는구현방법을소개하는내용은찾아보기어려웠다. 논문에서는 2장에서오프라인지도서비스구성에대해기술하고 3장에서고속궤도검측열차의위치추적지도서비스구현방법을소개하고 4장에서구축사례의활용방안을제안한다. 2. 오프라인지도서비스구성 2.1 지도서비스방식
지도서비스방식에는인터넷상의구글지도서비스서버와의공개프로그램밍인터페이스를통한온라인방식과자체지도서비스서버를구축하여로컬네트워크에서동일방식으로인터페이스하는오프라인방식이있다. Fig. 1. Diagram of online map service Fig. 1은온라인방식의지도서비스개념도이다. 구글지도와같은지도서비스제공사의지도서버와서비스요청자의웹서버간에인터넷망을통하여지도를받아서사용자요청지도서비스를제공한다. 클라이언트웹브라우저에서검측열차의위치를실시간으로표출하고열차의운행구간을속도에따라색깔을달리하여선으로표시하며검측철도위치정보를화면에표출한다. 또한검측후에검측구간을시뮬레이션하여검측과동일한정보를화면에표출하는서비스를제공한다. 열차의 GPS좌표와타코미터를이용하여이동거리정보등을수집하고 DB에저장하며위치추적서비스를제공하는웹서버는초당 10회간격으로 DB를참조하여열차의위치를확인하고해당위치의지도를지도서버로부터받아지도상에열차의위치를갱신한다. 또한열차의 GPS좌표의이상값을보정하는맵매칭을위해서철도의거리정보 (KP : Kilo Post) 와 GPS좌표데이터를 DB에미리등록하고실시간수집되는거리정보와매칭하여열차의 GPS좌표로사용한다. Fig. 2. Diagram of offline map service Fig. 2는오프라인방식의로컬네트워크의지도서비스개념도이다. 지도를제공하는구글지도 Server와같은자체지도서버를오픈스트리트맵을이용하여구축하고자체지도서버와연동해서인터넷이안되는로컬네트워크환경에서지도서비스를제공한다. 2.2 위치추적오프라인지도서비스구성고속궤도검측열차의위치추적을위한오프라인지도서비스는 Fig. 3처럼구성된다. Fig. 3. Diagram of location tracking service Fig. 4. S/W Block diagram of offline map service and tracking service Fig. 4 는오프라인지도서비스와위치추적 서비스의소프트웨어블록구성도이다. 오프라인지도서비스시스템구축을위해서 오픈스트리트맵에서제공하는무료소프트웨어 구성을따랐다. 우분투리눅스운영체제위에 아파치웹서버와지도제공매핑툴킷인 Mapnik, GIS DB 로 PostgreSQL 를설치하고 지도는데이터용량을감안하여 50MB 정도의 대한민국지도를다운받아시스템에등록시켰다. 그리고위치추적서비스를위한웹서버 시스템은지도서비스와같은컴퓨터에 구성하여운영체제와웹서버는같이사용하고 응용서비스 DB 로 SQL Server 를설치하고 WAS 로톰캣과웹어플리케이션언어로 자바를설치구성하였다.
3. 위치추적지도서비스구현방법 3.1 오프라인지도서비스구축사례오프라인지도서비스구축사례인고속궤도검측시스템은고속검측차량으로최고 300km/h의속도로주행하면서궤도의틀림, 레일의마모등궤도의결함을 25cm 간격으로측정하고모니터링및분석하는기능과결함궤도의위치정보를시설관리원에게제공한다 [4]. 본장에서는검측차량검측실의검측원에게고속주행하는검측차량의위치를실시간으로제공하는서비스구현방법을소개한다. Table 1. Deployment process of OpenStreetMap offline map service Step Operation & Remark Install OS - install Ubuntu 14.04.1 Install map server and Import map data - refer to https://switch2osm.org/serving-tiles/building-a-tile-server-from-packages - download http://download.geofabrik.de/asia/south-korea-latest.osm.pbf install application language - install oracle-java7-installer(java version 1.7.0_80) Install WAS - install tomcat7 Install apache tomcat interface module - install libapache2-mod-jk and setting Setting map API(openlayers) - modify main web page(slippymap.html) <script src="http://192.168.188.128/api/openlayers.js"></script> <script src="http://192.168.188.128/openlayers/openstreetmap.js"></script> - download API file and copy /var/lib/tomcat7/webapps/api/openlayers.js /var/lib/tomcat7/webapps/api/openlayers/openstreetmap.js Restart webserver and WAS - restart tomcat7 and apache2 Request map - http://192.168.188.128/osm/slippymap.html Table 1은오픈스트리트맵을이용한오프라인지도서비스구축절차이다. 오픈스트리트맵의 switch2osm 사이트 [3] 에서제공하는지도서비스구축매뉴얼에따라지도서버를설치하고필요한지도데이터를등록하고 Openlayer Open API를이용하기위해서일반적인방법으로아파치와연동을위한톰캣 WAS서버를설치하고 Openlayers와 Openstreetmap 자바스크립트 API 파일을다운로드하여해당패스에복사한다. Table 1의 Openlayers 세팅과정에서보이는 IP 주소는자체아파치웹서버주소이다. Fig. 5는고속궤도검측시스템의개념도이다. Fig. 6은오픈스트리트맵을이용한오프라인지도서비스구축웹서버에지도요청실행결과화면이다. 등록한오픈스트리트맵의대한민국지도와확대축소등기본적인기능이제공되고우측하단의 OpenstreetMap contributors를표시함으로써무료사용라이선스를표시한다 [1]. Fig. 5. Diagram of high speed track measurement system Fig. 6. Execution result screen of offline map service
3.2 위치추적지도서비스구현사례오픈스트리트맵오프라인지도서비스기반의 위치추적서비스는지도서비스와의연동을 통해서구현되며 Openlayers 라는오픈스트리트 맵지도서비스연동 API 의사용사례를 숙지하는것은중요하다. 위치추적지도서비스웹서버의화면구성과데이터처리관련웹페이지소스코드는각각 Table 2 및 Table 3과같다. Table 2. UI source code of web page Function display map and optimize control box display train location marker display train route Source code & Remark map = new OpenLayers.Map ("map", { controls:[ new OpenLayers.Control.NavToolbar(), new OpenLayers.Control.PanZoomBar(), new OpenLayers.Control.ScaleLine(), new OpenLayers.Control.MousePosition(), new OpenLayers.Control.Attribution() units: "km", maxextent: new OpenLayers.Bounds(13988520.407629, 4043234.324895, 14444696.592371,4671852.4454248), // map boundary of south korea restrictedextent: new OpenLayers.Bounds(13988520.407629, 4043234.324895, 14444696.592371,4671852.4454248), // map boundary of south korea projection: new OpenLayers.Projection("EPSG:900913"), // internal google Coordinate displayprojection: new OpenLayers.Projection("EPSG:4326") // external WGS84 Coordinate ); trainmarkers = new OpenLayers.Layer.Markers("Train"); map.addlayer(trainmarkers); function setmarker(longitude, Latitude, Velocity) { )...(skip)... trainmarkers.clearmarkers(); var icon = new OpenLayers.Icon(iconUrl, size, offset); trainmarkers.addmarker( new OpenLayers.Marker( lonlat, icon ) );...(skip)... var virtuallonlat = new OpenLayers.LonLat(Longitude, Latitude).transform(new OpenLayers.Projection("EPSG:4326"), map.getprojectionobject()); map.setcenter(virtuallonlat); linelayer = new OpenLayers.Layer.Vector("LineLayer"); map.addlayer(linelayer); function setmarker(longitude, Latitude, Velocity) {...(skip)... if(oldlongitude) { var points = new Array( new OpenLayers.Geometry.Point(oldLongitude, oldlatitude).transform(new OpenLayers.Projection("EPSG:4326"), map.getprojectionobject()), new OpenLayers.Geometry.Point(Longitude, Latitude).transform(new OpenLayers.Projection("EPSG:4326"), map.getprojectionobject()) ); var line = new OpenLayers.Geometry.LineString(points); var style = { strokecolor: linecolor, strokeopacity: 0.6, strokewidth: 6 ; var linefeature = new OpenLayers.Feature.Vector(line, null, style); linelayer.addfeatures([linefeature]);
Table 2의위치추적지도서비스의웹페이지화면구성기능은지표표출및컨트롤박스최적화와표출지도영역의설정과열차의현재위치마커표시기능그리고열차의이동경로선형표출부분으로이루어진다. 각각은 Openlayers의 API를사용하여코딩된다. Table 3의웹페이지데이터처리기능으로는실시간으로열차의현재위치를추적하는기능이있다. 또한열차운행후이동경로추적재생기능이있으나주기적으로 DB의이력데이터를참조하는방식으로실시간데이터처리와유사하여생략하였다. Table 3. Data processing source code of web page Function Tracking current location in real time Source code & Remark function starttracetrain() { allstop(); $("#loadingimgrealtime").show(); $("#loadingimghistory").hide(); $("#btnrealtime").addclass("btnrunning"); $("#btnhistory").removeclass("btnrunning"); traceflag=1; replayframe=0; settracetrain(); function settracetrain() { if(traceflag==0) {return; $.ajax({ type: "POST", datatype: "JSON", async: true, // true Async - false Sync url: "../jsp/getdata.jsp", // call getdata.jsp function in WAS success: function(result) { if(traceflag==0) {return; if(result.dataseqno) { setmarker(result.longitude,result.latitude, result.velocity); setinfomationdiv(result); settimeout("settracetrain()", refreshinterval); ); Table 4. DB processing source code of WAS Function Information of DB connection Query Return query result Close DB Source code & Remark String jdbcdriver = "jdbc:sqlserver://192.168.6.21:1433;databasename=dbname;"; String dbuser = "user"; String dbpass = "password"; Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); conn = DriverManager.getConnection(jdbcDriver, dbuser, dbpass); String query = " SELECT top 1...(skip)... "; stmt = conn.createstatement(); rs = stmt.executequery(query); while(rs.next()){...(skip)... rst_data += "\"Longitude\":"+rs.getString("Longitude")+","; rst_data += "\"Latitude\":"+rs.getString("Latitude")+",";...(skip)...... (skip)... out.println("{\"result\":\""+rst_result+"\",\"message\":\""+rst_message+"\","+rst_data+""); if(rs!=null)try{rs.close(); catch(sqlexception ex){ if(stmt!= null) try {stmt.close();catch(sqlexception ex){ if(conn!= null) try {conn.close(); catch(sqlexception ex){
Table 4는웹어플리케이션서버의어플리케이션 DB 데이터처리소스코드이다. JDBC를사용하여 SQL Server DB 데이터를쿼리하는내용으로일반적인방법이나위치추적서비스의이해를돕기위해서기술한다. 이상으로구현된오픈스트리트맵오프라인지도서비스를이용한위치추적서비스화면은 Fig. 7과같다. 운영체제가상머신기반으로간편하게구축할수있어서연구개발이나인터넷이안되는환경의시스템개발에유용하게사용할수있을것으로기대된다. 후기 본논문은국토교통부국토교통과학기술진흥원에서시행하는철도기술연구사업의 " 철도인프라의유지보수를위한고속종합검측기술개발 " 과제로수행된내용입니다. 참고문헌 Fig. 7. Execution screen of location tracking service Fig. 7은경부고속철도를검측하는고속검측열차의위치와이동경로및속도등의데이터를표출하고열차의위치를센터로두며지도를이동시키는위치추적서비스를보여주고있다. 4. 결론본논문에서는오픈스트리트맵을이용하여오프라인지도서버를구축하여고속궤도검측시스템검측차량위치추적서비스구현사례를소개했다. 단말PC에서오프라인지도서비스개발에있어서어려웠던점은오픈스트리트맵지도서비스서버의구축방법을찾는것과해당지도서비스의 API인 Openlayers를이용해위치추적지도서비스를구현하는웹프로그래밍사용용례를찾는것이었다. 오픈스트리트맵오프라인지도서비스는윈도운운영체제 PC에리눅스 [1] J. H. Park. "Attractions providing location-based services technology", R&D result report, pp. 18, 50-51, June, 2014. [2] Wikipedia. 오픈스트리트맵. https://ko.wikipedia.org/wiki/%ec%98%a4%ed% 94%88%EC%8A%A4%ED%8A%B8%EB%A6%A C%ED%8A%B8%EB%A7%B5 (accessed August., 28, 2017) [3] OpenStreetMap and contributors. Building a tile server from packages. https://switch2osm.org/serving-tiles/building-a-tile-s erver-from-packages/. (accessed August., 28, 2017) [4] I.-Y. Choi, Status and Prospects of Development of The High Speed Track Measurement System for Railway Maintenance, J. of the Korean Society for Railway, vol. 17, no. 1, pp. 31-35, 2014.