XDL Manual

XDL MapView È°¿ë ³×¹ø°

(piXoneer XDL Tutorial)

 

 

 

 

 

 

 NXMapView¸¦ È°¿ëÇÏ¿© ¿©·¯ÀåÀÇ TifÆÄÀÏÀ»

 µµ½ÃÇÏ´Â ±â´ÉÀ» ±¸ÇöÇÕ´Ï´Ù.

 

 

2017. 01.

¼öÁ¤ 2019. 02

 

 

¸ñÂ÷

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; // ÆÄÀÏ À̸§À» CompositeÀ̸§À¸·Î ¼³Á¤

        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¸¦ XDMCompManager°´Ã¼¿¡ Ãß°¡ÇÑ´Ù.        
    return newComp;
}

 

1.5.5     [F5]Å°¸¦ ´­·¯ ÇÁ·Î±×·¥À» ½ÇÇàÇÑ´Ù. [File]-[Open]¸Þ´º¸¦ ´­·¯ 1.tifÆÄÀÏÀ» ¿¬´Ù. ´Ù½Ã [File]-[Open]¸Þ´º¸¦ ´­·¯ 2.tifÆÄÀÏÀ» ¿¬´Ù.