[GIS] 블랙포인트 엔진을 이용한 ‘스마트 현장지원 시스템’ 개발 완료

안드로이드 기반의 모바일 GIS 엔진인 블랙포인트를 이용해 개발한 스마트 현장지원 시스템 개발이 완료되었습니다. 개발 기간은 3월 1일부터 시작하여 정확히 1달 소요되었습니다.

사용자 삽입 이미지
25cm 급 항공영상을 해상도 손실 없이 그대로 사용하면서 지적도 역시 SHP 파일을 그대로 사용하는 시스템입니다. 장점은 역시…. 지도 표시 속도가 빠르다는 것.. 그리고 대용량의 공간 데이터를 메모리 제약 없이 사용할 수 있다는 것… 개인적으로는 기본에 충실했다는 것… 보다 자세한 내용은 지오서비스(www.geoservice.co.kr)의 자료실을 참고하시기 바랍니다.

현장이라는 특성상.. 통신이 않되는 상황에서도 지도를 살펴볼 수 있습니다.. 이번에 개발한 스마트 현장지원 시스템은 기본적인 GIS 기능을 담고 있고.. 추후 사용자의 요구사항에 대해 빠르게 커스커마이징 할 수 있도록 개발되었습니다.

오는 3월 31일에.. 네이버 GIS 프로그래밍 연구소(cafe.naver.com/gisdev)에서 개발자분들에게 블랙포인트 엔진에 대한 소개와 엔진을 개발할때 격었던 문제점과 해결책을 공유할 예정입니다. 관심있는 분들은 꼭 참석해 보시기 바랍니다. 이외에도 다른 GIS 개발자분들이 개발한 엔진에 대한 소개가 진행될 예정입니다. GIS 개발자분들에게는 소통의 장이 될 수 있을 거라 생각합니다..

[ActionScript] DataGrid(Spark)의 각 셀값 읽기

var iCol:int = 0;
var rows:XMLListCollection = grid.dataProvider as XMLListCollection;
var columns:ArrayList = grid.columns as ArrayList;
var cntCols:int = columns.length;
   
for(var iRow:int=0; iRow{
    var row:Object = rows[iRow];
    
    for(iCol=0; iCol    {
        var column:GridColumn = columns.getItemAt(iCol) as GridColumn;
        var key:String = column.dataField;
        var value:String = row[key]; // Cell Value !!

        ...
    }
}

ActionScript를 통한 코드 작성이 무슨 퍼즐도 아니고…. 이리 저리 코드 조합해 나가는 재미가… 하나도 없군요… ㅡ_ㅡ; 위 코드 조합해 내느라 2시간 정도 걸렸습니다.. 나중에 또 다시 이런 시간 허비가 없도록 하기 위해 포스팅합니다..

[Java] 특정 폴더에서 원하는 확장자를 가지는 파일 목록 구하기

원하는 폴더 안에.. 특정한 확장자를 가지는 파일 목록을 얻어야 할때가 있습니다. 예를 들어서 D:/TEMP라는 폴더안에 확장자가 SHP인 파일의 목록을 배열 형태로 반환하도록 하는 경우이지요. 이때 사용할만한 함수입니다.

private Vector getFileNames(String targetDirName, String fileExt) {
    Vector fileNames = new Vector();
    File dir = new File(targetDirName);
    fileExt = fileExt.toLowerCase();
  
    if(dir.isDirectory()) {
        String dirName = dir.getPath();
        String[] filenames = dir.list(null);
        int cntFiles = filenames.length;
       
        for(int iFile=0; iFile            String filename = filenames[iFile];
            String fullFileName = dirName + "/" + filename;
            File file = new File(fullFileName);
 
            boolean isDirectory = file.isDirectory();
            if(!isDirectory && filename.toLowerCase().endsWith(fileExt)) {
                fileNames.add(fullFileName);
            }
        }
    }

    return fileNames;
 }

제가 이 함수가 필요했던 이유는.. 특정 폴더에 존재하는 수백개의 항공영상이나 수백개의 SHP 파일을 한꺼번에 레이어로 추가하고자 하는 필요 때문이였습니다.

아래의 코드는 안드로이드 기반의 GIS 엔진인 블랙포인트에서 위의 함수를 사용해 25cm 해상도의 192개의 항공영상(GEOTIFF 기준으로 40GB 이상)과 일정한 격자로 나눈  SHP 파일 185개(전체 용량 85MB)를 올리는 코드예입니다.

LayerManager layerMan = map.getLayerManager();
  
String ess = Environment.getExternalStorageState();   
String sdCardPath = null;   
if(ess.equals(Environment.MEDIA_MOUNTED)) {   
    sdCardPath = Environment.getExternalStorageDirectory().getAbsolutePath();
    String rootDir = sdCardPath + "/mapdata/yp";
    
    // 항공사진 레이어 추가  
    Vector xrrFiles = getFileNames(rootDir +"/XrR", "xrr");
    for(int i=0; i        ILayer layer = new TileImageLayer("xrr_" + i, xrrFiles.get(i), false);
        layerMan.addLayer(layer);
    }

    // 수치지도 레이어 추가
    Vector cassFiles = getFileNames(rootDir + "/CBND", "shp");
    int cntCbndLyr = cassFiles.size();
    for(int i=0; i        ILayer layer = new ShapeLayer("cbnd_" + i, cassFiles.get(i));
        layerMan.addLayer(layer);
       
        ShapeLayerLabel roadLbl = (ShapeLayerLabel)shpLyr.getLabel();
        roadLbl.setFieldName("JIBUN");
        roadLbl.setEnable(true);
        roadLbl.getFontSymbol().setTextSize(11);
        SimpleDrawShapeTheme roadTheme = (SimpleDrawShapeTheme)shpLyr.getTheme();
        roadTheme.getFillSymbol().setHollow(true);
        roadLbl.getFontSymbol().setTextColor(Color.GREEN);
        roadTheme.getStrokeSymbol().setColor(Color.YELLOW);
}

아래는 위의 코드에 반영된 시스템에 대한 실행 화면입니다. 클릭하면 원본 크기로 볼 수 있습니다.