천상낙원

GML을 이용한 지도 서비스

DoItMyself
2006년 5월부터 7월까지 약 3개월간 현재 제가 속해있는 연구실에서 GML Veiwer를 제작하였습니다. GML Veiwer를 만들면서 새로운 분야에 대해서 공부하고 배울 수 있는 기회가 되었네요. 후기랄까? 만들면서 느꼈던 내용을 기록하고자 합니다.
----------------------------------------------------------------------------------

먼저 GML에 대해서 알아보겠습니다. Generalized Markup Language이 아니라, Geographic Markup Language입니다. 한글로는 지리 생성 언어(地理生成言語)라고 하면 되구요. 네이버 사전에서는 GML을 다음과 같이 정의하고 있네요.
지리 정보의 상호 운용성 제고를 위해 OGC(Open GIS 컨소시엄)가 개발한 XML 기반의 지리 정보 인코딩 언어. OGC는 세계 수많은 회사, 정부 기관, 대학 등 지리 정보 산업체들이 주축이 된 민간 GIS 표준 기관으로, 1988년부터 GML을 개발하기 시작했다.
XML(eXtensible Markup Language)은 W3 Consortium에서 웹 기반의 구조화된 문서를 기술하기 위해 표준화한 것으로, 확장성과 유연성이 매우 뛰어나다는 특징을 가지고 있습니다. OGC에서는 XML의 확장성과 유연성이라는 특징을 가지고 여러 가지 장점을 GIS 분야에 도입하고자 합니다. 그 산물이 GML인거죠. 1999년 12월에 GML 버전 1.0을 제시하였고, 현재는 .버전까지 공개된 상태입니다.

쉽게 말해서 GML은 그냥 지도를 표현하기위한 표준 언어라고 보면 될꺼 같습니다.

그렇다면 GML Viewer의 목적은 무엇일까요? 네, 간단히 말해서 지도를 보여주기 위해서입니다.

GML을 이용해서 지도 서비스를 함으로서 여러가지 이득이 생기게됩니다. 기존의 GIS시스템을 보면 비트맵 형식의 그림파일로 보여주고 있는데 많은 양의 지도를 모두 그림 파일로 가지고 있어야 한다는 말이 되겠죠. 이로 인해, 많은 용량의 저장공간이 필요함은 물론이고 지도를 수정/추가하기 어려울뿐아니라, 제작시간또한 오래 걸리겠죠.

과거에는 각각의 GIS엔진에 따라서 다른 형태의 지리 데이터를 구축하고 활용했습니다. 때문에 구축 시간이나 비용이 엄척났었죠. 따라서 몇몇의 일부 사용자들만이 GIS를 사용할 수 있었습니다. 하지만 현재에는 인터넷, 네비게이션 등 주위 일상에서의 요구가 급속히 증가하고 있습니다. 지리 데이터를 표준안으로 채택된 GML을 이용함으로서 구축 시간과 비용을 상당부분 줄일 수 있다는 장점을 가지게 됩니다.

이제 그럼 저희가 만들어본 GML뷰어의 개략적인 구조에 대해서 살펴보도록 하겠습니다.

저희 GML뷰어는 Client - Server 구조를 이루고 있습니다. 지도 데이터를 보관하고 있는 서버와 서버에서 데이터를 받아서 화면에 보여주는 클라이언트로 나누어져있습니다.

먼저 서버는 GML 문서를 파싱하여 GigaBase라는 데이터베이스 라이브러리를 이용하여 데이터를 저장/ 관리하고 있습니다. 또한 기가베이스에 지원해주는 라이브러리(SubSQL, 소켓이용)를 이용하여 클라이언트와 통신합니다.

클라이언트에서는 SubSQL과 대응되는 CLI를 이용해서 서버로부터 지도 데이터를 받아옵니다. 그리고 받은 데이터를 이용해서 화면에 보여주는 일을 합니다.

혹시라도 관련하여 궁금한 내용이 있으시거나, 저희에게 조언을 해주실 분들 계시면.. 덧글 남겨주시면 감사하겠습니다.

'DoItMyself' 카테고리의 다른 글

영상처리를 이용한 악보 인식  (6) 2007.02.12
모의 수강신청  (0) 2006.02.14
배차 관리 시스템 (Marshalling of Cars)  (0) 2006.01.23

로보코드 코리아 컵 2006

일상이야기
IBM에서 주최하고, JCO와 인쿠르트가 후원하는 대회이군요.

참가자격은 없고, 6월 25일까지 로봇(3개 이하)을 만들어서 E-mail로 제출하기만 하면 되는군요.

참가에 의의를 두고 월드컵 기념 티셔츠를 목표로 달려야겠습니다.

로보코드코리아 컵 사이트 가기 : http://www.ibm.com/developerworks/kr/robocode/

'일상이야기' 카테고리의 다른 글

ACM/ICPC 2006 Asia Regional Contest - Seoul 참가 후기  (1) 2006.11.04
드디어 Tistory로 이주하였습니다.  (2) 2006.05.27
싸움의 기술  (0) 2006.04.09

드디어 Tistory로 이주하였습니다.

일상이야기
드디어 Tistory로 이주하였습니다.

그렇게도 원했건만 탈락해버리고 낙심해있었습니다.

그러던중에 yotta님께서 초대장을 보내주셔서 Tistory에 입주하게 되었네요.
(yotta님! 초대권.. 정말 진심으로 감사합니다.)

이전에 태터툴즈를 이용해서 블로그를 운영하고 있었지만 동아리 서버가 조금 불안한 관계로

유료 계정으로 이전 계획을 가지고 있던 찰나에 이런 기회를 가지게 되어 너무 기쁘군요.

전 무료를 정말 좋아한답니다. ㅋㅋ


이제 시작하는 Tistory지만 나날이 번창하길 바랍니다.

'일상이야기' 카테고리의 다른 글

로보코드 코리아 컵 2006  (0) 2006.06.22
싸움의 기술  (0) 2006.04.09
너 어느별에서 왔니?  (1) 2006.03.27

개와 땅다람쥐 (Dog and Gopher)

ACM 퀴즈
넓은 마당에 개와 땅다람쥐가 있다. 개는 땅다람쥐를 잡아먹으려고 하고, 땅다람쥐는 땅 속에 있는 여러 개의 땅다람쥐 구멍을 통해서 안전하게 도망가려고 한다.

개와 땅다람쥐는 둘 다 수학 전공은 아니지만 그리 멍청하지도 않다. 땅다람쥐는 구멍 한 개를 정한 다음 그 구멍을 향해 일정한 속도로 직선으로 뛰어간다. 개는 보디 랭귀지를 파악하는데 매우 능숙해서 그 땅다람쥐가 어느 구멍으로 들어가기로 했는지 정확하게 파악할 수 있다. 개는 땅다람쥐의 두배의 속도로 같은 구멍으로 들어가기로 했는지 정확하게 파악할 수 있다. 개는 땅다람쥐의 두배의 속도로 같은 구멍을 향해 뛰어간다. 땅다람쥐는 개가 구멍에 먼저 도착하면 잡혀 먹히고, 그렇지 않으면 도망칠 수 있다.

땅다람쥐로부터, 어떤 구멍으로 숨어야 할지 결정하는데 도움을 줄만한 프로그램을 만들어 달라는 요청을 받았다.

입력
한 입력 파일에 여러 개의 테스트 케이스가 입력될 수 있다. 각 테스트 케이스의 첫째 줄에는 정수 한 개와 부동소수점수 네 개가 입력된다. 정수 n은 구멍의 개수를 나타낸다. 네 개의 부동소수점수는 땅다람쥐가 있는 위치의 (x, y) 좌표와 개가 있는 위치의 (x, y) 좌표를 나타낸다. 그 아래로는 n줄에 걸쳐서 땅다람쥐 구멍의 (x, y) 좌표를 나타내는 부동소수점수가 두 개씩 입력된다. 모든 거리는 미터 단위로, 밀리리터 단위까지 (즉 소수점 셋째 자리까지) 반올림한 값으로 입력된다. 파일 종료 문자가 입력되면 입력이 종료되며, 서로 다른 테스트 케이스 사이에는 빈 줄이 입력된다.

출력
각 테스트 케이스마다 한 줄씩 결과를 출력한다. 땅다람쥐가 도망칠 수 있으면 "The gopher can escape through the hole at (x, y)."라고 출력한다, 이때 밀리미터 단위까지 반올림한 값으로 구멍의 좌표를 출력한다. 두 개 이상의 구멍으로 도망칠 수 있으면 더 먼저 입력된 구멍을 출력한다. 한 테스트 케이스에 입력될 수 있는 구멍의 개수는 최대 1,000개고, 모든 좌표는 -10,000 이상, +10,000이하다.

입력예
1 1.000 1.000 2.000 2.000
1.500 1.500
2 2.000 2.000 1.000 1.000
1.500 1.500
2.500 2.500

출력예
The gopher cannot escape.
The gopher escape through the hole at (2.500, 2.500).

싸움의 기술

일상이야기

오랜만에 영화를 봤다. 백윤식, 재희 주연의 싸움의 기술. 상콤한 여배우는 나오지 않지만, 나름대로 만족스러움을 느끼며 재미있게 봤다.

항상 맞기만 하던 왕따 병태가 싸움의 고수 판수를 만나 싸움의 기술을 터득하고 복수하는 과정을 담은영화이다. 영화를 보면서 왠지 말죽거리 잔혹사의 현대판이라는 생각이 많이 들었다. 절대로 존재하지 않을꺼 같은 싸움의 고수 오판수(백윤식)가 성룡의 위치를 대신한다. 안맞고 평안한 삶을 꿈꾸는 송병태(재희)에게 싸움의 고수인 오판수는 꿈이자 사부가 되어 싸움의 기술을 전수한다.

솔직히 재미나게 살고 있는 사람들에게 권하기는 조금 그렇고, 삶이 무료하고 심심하여 할일이 없는 사람들에게 권해본다.

'일상이야기' 카테고리의 다른 글

드디어 Tistory로 이주하였습니다.  (2) 2006.05.27
너 어느별에서 왔니?  (1) 2006.03.27
우분투 시디 도착했습니다.  (1) 2006.03.19

너 어느별에서 왔니?

일상이야기
어느 별에서 왔는지 확인해보는(?) 재미있는 테스트가 있길래 한번 해봤습니다.
그다지 일치하는거 같지는 않지만 그래도.. 재미삼아~

해에서 온 사람
해에서 온 사람
친구들 사이에서 당신은 가장 빛나는 별입니다.

연극같은 삶을 사는 당신은 언제나 주목받는 존재입니다.

당신의 끼는 누구도 따라올 수 없으며 당신이 빠진 파티는 생각할 수도 없습니다.

하지만 조심하세요!
태양은 고집이 세고 도가 지나친 건방진 존재가 될 수도 있습니다.

당신은 훌륭한 지도자이자 좋은 친구입니다. 당신이 최고입니다!

너 어느 별에서 왔니?

'일상이야기' 카테고리의 다른 글

싸움의 기술  (0) 2006.04.09
우분투 시디 도착했습니다.  (1) 2006.03.19
KHAN_2005전주게임엑스포(JCGE2005)  (0) 2005.10.09

체스판 위의 개미 (Ant on a Chessboard)

ACM 퀴즈
어느 날 앨리스라는 개미가 M × M 체스판에 올라갔다. 앨리스는 체스판에 있는 모든 셀을 방문하려고 한다. 그래서 판 한 쪽 구석에서 시작해서 체스판을 한 꺼풀씩 훑어나가기로 했다. 앨리스는 (1, 1)자리부터 움직이기 시작했다. 처음에는 한 칸 위로 올라간 다음, 오른쪽으로 한 칸 이동하고, 다시 한 칸 아래로 내려왔다. 그리고 나서 한 칸 오른쪽으로 움직여서 두 칸 위로 올라가고, 두 칸 왼쪽으로 움직였다. 이런 식으로 매번 한 행, 그리고 한 열씩을 더 움직였다. 예를 들어 앨리스가 25단계를 움직인 경로를 표시해보면 다음과 같다. 여기에서 각 숫자는 앨리스가 각 셀을 방문한 순서를 나타낸다.

2524232221
1011121320
9871419
2361518
1451617

앨리스는 여덟 번째 단계에서는 (2, 3) 위치에 있었고, 20번째 단계에서는 (5, 4) 위치에 있었다. 단계수가 주어졌을 때, 체스판이 매우 커서 움직일 수 있는 위치에 제한이 없다고 할 때, 앨리스의 위치를 결정하는 프로그램을 만들어야 한다.

입력
입력 파일은 여러 줄로 구성되는데, 각 줄마다 단계 번호를 나타내는 정수 N (1≤N≤10^9)이 하나씩 입력된다. 0이 입력되면 입력이 종료된다.

출력
입력된 값에 대해 해당 단계에서의 앨리스의 위치 (x, y)를 나타내는 두 정수를 출력한다. x는 열 번호, y는 행 번호를 나타낸다. 두 정수 사이에는 스페이스가 한 개 들어간다.

입력 예
8
20
25
0

출력 예
2 3
5 4
1 5

'ACM 퀴즈' 카테고리의 다른 글

개와 땅다람쥐 (Dog and Gopher)  (0) 2006.04.14
큰 것이 더 똑똑하다? (Is Bigger Smarter?)  (0) 2006.03.26
주근깨 (Freckles)  (0) 2006.03.04

큰 것이 더 똑똑하다? (Is Bigger Smarter?)

ACM 퀴즈
어떤 사람은 코끼리가 더 똑똑하다고 생각한다. 그런 생각이 틀렸다는 것을 증명하기 위해, 일련의 코끼리들을 분석해서 체중은 증가하는 순서로, IQ는 감소하는 순서로 된 가장 긴 순서열을 뽑아보자.

입력
한 줄에 한 마리씩, 여러 코끼리에 대한 정보가 입력된다. 파일 종료문자가 입력되면 입력이 끝난다. 각 코끼리에 대한 정보는 한 쌍의 정수로 입력되는데, 첫번째 정수는 체중을 킬로그램 단위로 나타낸 것이고, 두번째 정수는 IQ에 100을 곱한 값이다. 두 정수는 모두 1이상 1000이하다. 최대 1000마리의 코끼리에 대한 정보가 입력될 수 있다. 체중이 같은 코끼리가 두 마리 이상 있을 수 있으며, IQ가 같은 코끼리가 두 마리 이상 있을 수도 있다. 그리고 체중과 IQ가 모두 똑같을 수도 있다.

출력
첫째 줄에는 찾아낸 코끼리 순서열의 길이를 나타내는 정수 n을 출력한다. 그 밑으로는 n줄에 걸쳐서 각 코끼리를 찾아내는 양의 정수를 하나씩 출력한다. i번째 데이터 행으로 입력된 숫자들을 W[i], S[i]라고 표기해보자. 찾아낸 n마리의 코끼리의 순서열이 a[1], a[2], ..., a[n]이라면 다음과 같은 관계가 성립해야 한다.
W[a[1]] < W[a[2]] < ... < W[a[n]] 이고, S[a[1]] < S[a[2]] < ... < S[a[n]]
이러 관계가 만족되면서 n값은 최대한 큰 값이어야 한다. 모든 부등호에는 등호는 포함되지 않는다. 즉 체중은 반드시 증가해야 하며 (같으면 안됨), IQ는 감소해야 한다(IQ도 같으면 안됨).
조건이 맞으면 아무 답이나 출력해도 된다.

입력 예
6008 1300
6000 2100
500 2000
1000 4000
1100 3000
6000 2000
8000 1400
6000 1200
2000 1900

출력 예
4
4
5
9
7

'ACM 퀴즈' 카테고리의 다른 글

체스판 위의 개미 (Ant on a Chessboard)  (0) 2006.03.26
주근깨 (Freckles)  (0) 2006.03.04
두 색으로 칠하기 (Bicoloring)  (0) 2006.02.22