XDL Manual

XDL MapView 활용 네번째

(piXoneer XDL Tutorial)

 

 

 

 

 

 

이 문서는 XDL Development Library

 설치 및 사용하기 위한 문서입니다.

 

2017. 01.

 

 

목차

XDL MapView 활용 네번째... 1

1    사용하기... 1

1.1    NXMapView 이용한 예제 프로그램 만들기... 1

1.2    Driver복사하기... 1

1.3    메뉴 생성하기... 1

1.4    NXMapView컨트롤 리기... 1

1.5    영상 열기 기능... 1

 

 

 

 

1     사용하기

본 튜터리얼을 공부하기 전에 먼저 XDL MapView 활용 첫번째를 먼저 선행하시기 바랍니다.

 

1.1    NXMapView를 이용한 예제 프로그램 만들기

1.1.1     Visual Studio 2010을 실행한다.

1.1.2     메뉴 [파일]-[새로 만들기]-[프로젝트]를 선택한다.

1.1.3     [새 프로젝트] 대화상자에서 왼쪽의 템플릿 창에서 “Visual C#”을 선택하고, 대화상자 중간의 목록에서 “Windows Forms 응용 프로그램을 선택한다. 프로젝트의 이름을 입력하고 [새 프로젝트] 대화상자의 확인버튼을 클릭한다.

1.1.4     [도구상자] [항목선택]을 선택한다.

[도구 상자] 창의 일반에서 마우스 오른쪽 버튼을 클릭하여 생성되는 팝업메뉴에서 항목 선택메뉴를 선택한다.

 

메뉴를 선택하면 아래와 같이 [도구 상자 항목 선택] 대화상자가 나타나며, 대화상자 아래쪽에 있는 찾아보기버튼을 클릭한다.

 

열기 대화상자에서 “C:\Pixoneer\XDL1.2\bin\NXMap.dll” 파일을 선택한 후 열기를 클릭하고, [도구 상자 항목 선택] 대화상자의 확인버튼을 클릭한다.

 

.Net Framework 구성요소 탭에 다양한 레이어와 NXMapView가 설정된다. “확인”버튼을 클릭한다.

 

 [도구상자] 에 다양한 MapLayer들과 NXMapView가 추가됨을 확인한다.

 

1.1.1     솔루션 탐색기의 프로젝트 하부의 [참조]의 오른쪽 마우스 클릭을 통해 [참조추가]를 선택한다.

1.1.2 [찾아보기]탭으로 이동한 후 “C:\Pixoneer\XDL1.2\bin\”경로로 이동한다. Ctrl키를 누른채 연속으로 “NXDL.dll, NXDLcc.dll, NXDLgr.dll, NXDLio.dll, NXDLrs.dll”을 선택한 후 “확인”버튼을 선택한다.

 

1.1.3 솔루션 탐색기의 프로젝트 하부의 [참조]항에 NXDL, NXDLcc, NXDLgr, NXDLio, NXDLrs가 추가되었음을 확인한다.

 

1.2    Driver복사하기

Driver는 현재 데모 버전에서는 설치된 경로로부터 실행 경로 하부로 손으로 복사하여 넣어야 한다. 차기 버전에는 복사를 하지 않아도 실행될 수 있도록 구성된다.

 

1.2.1     XDL 라이브러리가 설치된 경로(C:\Pixoneer\XDL1.2\bin)로 이동한다.

1.2.2     IODrivers폴더를 통째로 복사하여 현재 프로 젝트의 “…..\XDL_MapView4\bin\Debug”폴더 하부에 복사하여 넣는다.

1.2.3     F5키를 눌러 프로그램을 실행하면 다음과 같이 구성된다.

1.3    메뉴 생성하기

1.3.1      [도구상자]  MenuStrip을 선택하고 Form1의 상단부에 드래그하여 위치시킨다.

 

1.3.2      메뉴에 File – Open을 입력하여 생성한다.

 

1.4    NXMapView컨트롤 올리기

1.4.1     [도구상자]-[일반]에서 NXMapView를 드래그하여 Form1에 올려 놓는다. NXMapView컨트롤의 [부모컨테이너에서 도킹]버튼을 눌러 도킹시킨다

.

1.4.2     NXMapLayerComposites를 드래그 하여 NXMapView 컨트롤 위에 올려 놓는다.

 

1.4.3     [F5]키를 눌러 프로그램을 실행한다. 아래와 같이 NXMapView컨트롤이 존재하는 프로그램이 실행된다.

1.4.4      프로그램을 종료한다.

 

1.5    영상 열기 기능

1.5.1     디자인창에서 Toolbar[File]-[Open]을 더블클릭하여 함수를 자동 생성한다.

 

private void OpenToolStripMenuItem_Click(object sender, EventArgs e)
{
}

 

1.5.2     View  구현시 필요한 XRasterIO객체를 선언한다.

public XRasterIO m_RasterIO;    //영상의 입출력을 담당할 객체 선언

 

1.5.3     Form1생성자에서 XRasterIO의 객체 생성 및 NXMapLayerComposites에 대한 속성을 변경시킨다.

public Form1()
{
    InitializeComponent();

    String StrError;
    m_RasterIO = new XRasterIO();   // 객체 생성
    if (m_RasterIO.Initialize(out StrError) == false) // 영상 입출력 객체 초기화
    {
        MessageBox.Show(StrError);
    }

 nxMapLayerComposites1.LayerVisible = true; // 영상레이어를 보이도록 속성을 변경
}

 

1.5.4     File열기 버튼을 눌렀을 때 생성될 Open 대화상자와 선택된 파일에 대한 XRSLoadFile객체를 생성한다.

 

private void OpenToolStripMenuItem_Click(object sender, EventArgs e)
{
    // 파일 Open을 수행한다.
    OpenFileDialog openFileDialog = new OpenFileDialog();
    openFileDialog.Filter = "GeoTiff file(*.tif)|*.TIF||";
    openFileDialog.RestoreDirectory = true;

    if (openFileDialog.ShowDialog() != DialogResult.OK) return;

    string strFilePath = openFileDialog.FileName;

    // FileDriverManger를 통해 XRSLoadFile을 생성한다. 
    // Tiff를 직접로딩하는 경우 영상크기가 큰 경우 도시 속도를 위해서 LOD가 필요하기때문에 필요한 경우 같은 폴더에 .xld파일을 생성한다.
    string strError;
    XRSLoadFile xrsFileInput1 = m_RasterIO.LoadFile(strFilePath, out strError, false, eIOCreateXLDMode.All_NoMsg);
    if (xrsFileInput1 == null) return;

    // 다시 Original Image에 대한 Composite와 Processed Image에 대한 Composite를 생성하여 뷰 컨트롤에 도시한다.
    XDMComposite newComp = CreateComposite(xrsFileInput1, 0, 1, 2);

    // 기존에 생성되어 있는 Composite가 있다면 Lock을 걸어 도시 수행을 잠시 멈춘다. 
    nxMapLayerComposites1.Lock();

    // nxMapLayerComposites1개체에 존재하는 XDMCompManager들을 꺼낸다. XDMCompManager가 실제로 Composite들의 관리를 수행한다. 
    XDMCompManager xdmCompManager = nxMapLayerComposites1.GetXDMCompManager();

    // 생성된 Composite를 XDMCompManager에 추가한다.
    xdmCompManager.AddXDMComposite(ref newComp);

    // 전체 화면 보기를 설정한다.
    nxMapLayerComposites1.ZoomFit();

    // 화면 업데이트를 수행한다. 
    nxMapLayerComposites1.Invalidate();

    // Lock을 다시 풀어 준다. 
    nxMapLayerComposites1.UnLock();
}

 

XDMComposite CreateComposite(XRSLoadFile xrsFileInput, int nBandIdx0, int nBandIdx1, int nBandIdx2)
{
    // XDMComposite를 생성한다. .
    XDMComposite newComp = new XDMComposite();

    // 로딩된 파일로 부터 밴드의 갯수가 칼라로 그릴것인지 흑백으로 그릴것인지를 판단한다.
    // 만약 3개 미만인 경우는 Gray모드로 그리고, 3개 이상인 경우는 칼라로 그린다.
    int nNumBand = xrsFileInput.NumBand;
    if (nNumBand < 3)   // 3개 미만의 밴드를 가지고 있는 경우
    {
        // Default로 0번째 밴드를 Gray모드로 그린다. 
        XDMBand band = xrsFileInput.GetBandAt(0);

        // Gray Mode로 그리는것을 설정
        newComp.Mode = eCompMode.Gray;

        // Composite의 0번에 Band설정, Gray모드에서는 0번 밴드만을 인식한다. 
        newComp.SetBand(ref band, nBandIdx0);
        // 영상 Enhancement를 위해 Histogram의 범위 설정(정규분포 95% 영역)
        newComp.SetCutType(eCompCutType.Ct95, 0);
        // 영상 Enhancement를 위해 Histogram적용시 전체 영역에 대한 Histogram(Band)설정, Visible은 현재 영역
        newComp.SetStretchCoverage(eCompStretchCoverage.Band, 0);
        // 영상 Enhancement를 위해 Histogram의 Stretch형태 설정(Gaussian으로 설정)
        newComp.SetStretchType(eCompStretchType.Gaussian, 0);

    }
    else // 3개 이상의 밴드를 가지고 있는 경우 
    {
        XDMBand band1 = xrsFileInput.GetBandAt(nBandIdx0);
        XDMBand band2 = xrsFileInput.GetBandAt(nBandIdx1);
        XDMBand band3 = xrsFileInput.GetBandAt(nBandIdx2);
        newComp.Name = xrsFileInput.FileName; // 파일 이름을 Compoiste이름으로 설정

        newComp.Mode = eCompMode.RGB;  // RGB Mode로 그리는것을 설정
        newComp.SetBand(ref band3, nBandIdx0); // Composite의 0번에 Band설정, Blue Channel설정 
        newComp.SetBand(ref band2, nBandIdx1); // Composite의 1번에 Band설정, Green Channel설정
        newComp.SetBand(ref band1, nBandIdx2); // Composite의 2번에 Band설정, Red Channel설정

        for (int i = 0; i < 3; i++)
        {
            // 영상 Enhancement를 위해 Histogram의 범위 설정(정규분포 95% 영역)
            newComp.SetCutType(eCompCutType.Ct95, i);
            // 영상 Enhancement를 위해 Histogram적용시 전체 영역에 대한 Histogram(Band)설정, Visible은 현재 영역
            newComp.SetStretchCoverage(eCompStretchCoverage.Band, i);
            // 영상 Enhancement를 위해 Histogram의 Stretch형태 설정(Gaussian으로 설정)
            newComp.SetStretchType(eCompStretchType.Gaussian, i);
        }
    }

    // 생성된 Composite를 XDMCompManger객체에 추가한다.        
    return newComp;
}

 

1.5.5     [F5]키를 눌러 프로그램을 실행한다. [File]-[Open]메뉴를 눌러 1.tif파일을 연다. 다시 [File]-[Open]메뉴를 툴러 2.tif파일을 연다.