[GIS] Xr로 만든 간단한 지도 이미지..

서울시의 구에 대한 shp 파일 하나만을 가지고 Xr 맵엔진에서 표출해 본 지도 이미지 입니다. 디자이너를 위한 지도 데코레이션 툴을 만들고 있는 중에… 머리도 복잡하여 한번 테스트 겸 간단히 만들어 보았는데.. 아직은 많은 부분에서 밋밋한 분위기입니다만.. 좀더 다양한 레이어와 POI 그리고 아이콘 등으로 장식을 하면 보다 이쁜 지도 이미지가 나오지 않을까 기대를 해봅니다.
사용자 삽입 이미지
지금 개발하고 있는 디자이너를 위한 툴은 Xr 맵엔진을 기반으로 해 만든 툴로써 추후 지도 타일 이미지를 만들기 위한 툴입니다. 추후 개발할 RIA 기술을 적용한 엔진에서 사용할 지도 이미지를 만들기 위한 목적으로 개발되고 있습니다.

참고로 이툴에 사용되는 Xr  클라이언트 맵엔진은 오픈소스를 목적으로 개발하고 있습니다. 추후 어느 정도 안정화되고 가닦이 잡히면 소스를 공개할 예정입니다. 소스를 공개하는 이유는 향후 보다 많은 분들의 의견 수렴을 받기 위함입니다. 기능적인 부분에서 뿐만이라 지도 이미지의 비주얼적인 모습에 대한 조언을 듣고 적당하다면 적극적으로 수렴할 계획입니다.

그리고 아래는 도로 중심선(Polyline) 데이터에 대한 하나의 shp 파일을 이용해 만들어본 지도 이미지입니다.

사용자 삽입 이미지
참고로 아래는 예전에 올렸던, Xr 맵 엔진을 이용해 만든 지도 이미지입니다. 이 글과 연관이 깊어 다시 한번 함께 올려봅니다.
사용자 삽입 이미지

Java 프로세스의 종료시점 후킹

자신이 개발하고 있는 어플리케이션을 완전히 제어하고픈 개발자(나를 포함한..)에게 Java에 매우 좋은 API를 제공합니다. 바로 Java 프로세스의 종료 시점을 어떠한 상황에서든 잡아 내 그 시점에서 원하는 코드를 실행하게 할 수 있는 방법인데요.. 아래의 간단한 코드를 살펴 보는 것으로 시작하겠습니다.

public class TestMain {
    public static void main(String[] args) throws InterruptedException {
        System.out.println("processing something in main(" + 
            Thread.currentThread().getName() + ") start...");
  
        Runtime rt = Runtime.getRuntime();
  
        rt.addShutdownHook(
            new Thread() {
                public void run() {
                    System.out.println("======================");
                    System.out.println("do arrange resource !!");
                    System.out.println("======================");
            }
        } );
  
        System.out.println("Waiting while 10 seconds or hit ^C for exit.");
  
        Thread.sleep(10000);
        System.out.println("processing something in main end...");
        System.exit(0);
  
        System.out.println("this code never run!");
    }
}

핵심은 바로 Runtime.getRuntime()으로 얻어진 Runtime 타입의 인스턴스입니다. 이 인스턴스에 addShutdownHook 매서드를 통해 자바 가상 머신이 종료하는 시점에서 실행하는 코드를 개발자가 유연하게(얼마까지 유연할지는 모르겠지만…) 붙일 수 있습니다. 자바 어플리케이션이 콘솔이여서 ^C를 눌러 강제로 종료시키든… 예외나 에러가 발생하든 Runtime의 addShutdownHook로 지정한 스레드의 실행(run) 로직은 반드시 실행된다는 점입니다.