WPF - XDL Tutorial

XDL MapView È°¿ë µÎ¹ø°

(piXoneer XDL Tutorial)

 

 

 

 

 2°³ÀÇ NXMapView¸¦ ÀÌ¿ëÇÏ¿© Original View¿Í Processed View¸¦ »ý¼ºÇÕ´Ï´Ù.

 Original View¿¡´Â ÀÔ·Â ¿µ»óÀ» µµ½ÃÇÏ°í

Processed View¿¡´Â °ø°£ ÇÊÅ͸µµÈ ¿µ»óÀ» µµ½ÃÇÏ´Â ±â´ÉÀ» Á¦ÀÛÇÕ´Ï´Ù.

 

 

2019. 04.

 

 

¸ñÂ÷

XDL MapView È°¿ë µÎ¹ø°... 1

1    »ç¿ëÇϱâ... 3

1.1    NXMapView¸¦ ÀÌ¿ëÇÑ ¿¹Á¦ ÇÁ·Î±×·¥ ¸¸µé±â... 3

1.2    ¸Þ´º »ý¼ºÇϱâ... 12

1.3    GridSplitterÄÁÆ®·Ñ ¿Ã¸®±â... 13

1.4    NXMapViewÄÁÆ®·Ñ ¿Ã¸®±â... 14

1.5    ¿µ»ó ¿­±â ±â´É... 16

1.6    Spatial FilterÀû¿ë... 20

1.7    µà¾ó ºä¿¡ ´ëÇÑ µ¿±âÈ­... 23

 

 

 

 

1     »ç¿ëÇϱâ

º» Æ©Å͸®¾óÀ» °øºÎÇϱâ Àü¿¡ ¸ÕÀú ¡°XDL MapView È°¿ë ù¹ø°¡±¸¦ ¸ÕÀú ¼±ÇàÇϽñ⠹ٶø´Ï´Ù.

 

1.1    NXMapView¸¦ ÀÌ¿ëÇÑ ¿¹Á¦ ÇÁ·Î±×·¥ ¸¸µé±â

1.1.1     Visual Studio 2015À» ½ÇÇàÇÑ´Ù.

1.1.2     ¸Þ´º [ÆÄÀÏ]-[»õ·Î ¸¸µé±â]-[ÇÁ·ÎÁ§Æ®]¸¦ ¼±ÅÃÇÑ´Ù.

 

 

1.1.1     [»õ ÇÁ·ÎÁ§Æ®] ´ëÈ­»óÀÚ¿¡¼­ ¿ÞÂÊÀÇ ÅÛÇø´ â¿¡¼­ ¡°Visual C#¡±À» ¼±ÅÃÇÏ°í, ´ëÈ­»óÀÚ Áß°£ÀÇ ¸ñ·Ï¿¡¼­ ¡°WPF ÀÀ¿ë ÇÁ·Î±×·¥¡±À» ¼±ÅÃÇÑ´Ù.

»ç¿ëÀÚ°¡ ¿øÇÏ´Â °æ·Î¸¦ ¼±ÅÃÇÑ ´ÙÀ½ ÇÁ·ÎÁ§Æ® À̸§À» ¡°XDL_MapView2¡± À¸·Î ÀÔ·ÂÇÏ°í [»õ ÇÁ·ÎÁ§Æ®] ´ëÈ­»óÀÚÀÇ ¡°È®ÀΡ± ¹öÆ°À» Ŭ¸¯ÇÑ´Ù. ÀÌ ¹®¼­¿¡¼­´Â ´ëÈ­»óÀÚ ¿À¸¥ÂÊ ¾Æ·¡¿¡ ÀÖ´Â ¡°¼Ö·ç¼Ç¿ë µð·ºÅ͸® ¸¸µé±â¡±´Â ¼±ÅÃÇÏÁö ¾Ê°Ú´Ù. ¡°È®ÀΡ± ¹öÆ°À» ´©¸£¸é ÇÁ·ÎÁ§Æ®°¡ ±âº»ÀûÀ¸·Î »ý¼ºµÇ°í, È­¸é¿¡ WindowÀ» µðÀÚÀÎÇÒ ¼ö ÀÖ´Â È­¸éÀÌ ¶á´Ù. ¸¸¾à ¾Æ·¡¿Í °°Àº Window âÀÌ »ý¼ºµÇÁö ¾ÊÀ¸¸é, [¼Ö·ç¼Ç Ž»ö±â] â¿¡¼­ MainWindow.xaml¡±¸¦ ¸¶¿ì½º ´õºíŬ¸¯À» ÇÏ¿© âÀ» ¿¬´Ù.

 

 

1.1.2     ¼Ö·ç¼Ç Ž»ö±âÀÇ ÇÁ·ÎÁ§Æ® ÇϺÎÀÇ [ÂüÁ¶]ÀÇ ¿À¸¥ÂÊ ¸¶¿ì½º Ŭ¸¯À» ÅëÇØ [ÂüÁ¶Ãß°¡]¸¦ ¼±ÅÃÇÑ´Ù

 

 

1.1.3  [ã¾Æº¸±â]ÅÇÀ¸·Î À̵¿ÇÑ ÈÄ ¡°C:\Pixoneer\XDL1.2\bin\¡±°æ·Î·Î À̵¿ÇÑ´Ù. CtrlÅ°¸¦   
 
´©¸¥ ä ¿¬¼ÓÀ¸·Î ¡°NXDL.dll¡±, ¡°NXDLcc.dll¡±, ¡°NXDLgr.dll¡±, ¡°NXDLio.dll¡±,
 
¡°NXDLrs.dll¡±, ¡°NXMap.dll¡±À» ¼±ÅÃÇÑ ÈÄ ¡°È®ÀΡ±¹öÆ°À» ¼±ÅÃÇÑ´Ù.

 

1.1.4  ¼Ö·ç¼Ç Ž»ö±âÀÇ ÇÁ·ÎÁ§Æ® ÇϺÎÀÇ [ÂüÁ¶]Ç׿¡ NXDL, NXDLcc, NXDLgr, NXDLio, NXDLrs, NXMap°¡ Ãß°¡µÇ¾úÀ½À» È®ÀÎÇÑ´Ù.

1.1.5  MapViewÄÁÆ®·ÑÀ» È°¿ëÇϱâ À§ÇØ MainWindow.xaml â¿¡¼­ namespace¸¦ ´ÙÀ½°ú °°ÀÌ Ãß°¡ÇÑ´Ù.

 

1.2    ¸Þ´º »ý¼ºÇϱâ

1.2.1     MainWindow.xamlâ¿¡¼­ ±âº»À¸·Î »ý¼ºµÈ Grid ·¹À̾ƿô¿¡ Grid.RowDefinitionÀ» ÀÌ¿ëÇÏ¿© µÎ °³ÀÇ RowÀ» »ý¼ºÇÑ´Ù. Menu¸¦ ù ¹ø° Cell¿¡ ¹èÄ¡ÇÏ°í MenuItem Ç׸ñÀ» Ãß°¡ÇÏ°í ¾Æ·¡ÀÇ Ç¥¸¦ Âü°íÇÏ¿© [File]-[Open]°ú [Tool]-[SpatialFilter]À» »ý¼ºÇÑ´Ù. (¸Þ´º »ý¼º¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸íÀº XDL MapView1À» Âü°íÇÑ´Ù.)

 

 

Control Type

Header

Name

MenuItem

_File

 

MenuItem

_Open

openFileMenuItem

 

Control Type

Header

Name

MenuItem

_Tools

 

MenuItem

_Spatial Filter

spatialFilterToolsMenuItem

 

´ÙÀ½°ú °°Àº XAML Äڵ尡 »ý¼ºµÇ´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="30"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>

      <Menu Grid.Row="0">
        <MenuItem Header="_File" Margin="5,5,0,0">
        <MenuItem x:Name="openFileMenuItem" Header="_Open"/>
<MenuItem Header="_Tools" Margin="5,5,0,0">
<MenuItem x:Name="spatialFilterToolsMenuItem" Header="_Spatial Filter"> 
         </MenuItem>
      </Menu>
</Grid>

1.3    GridSplitterÄÁÆ®·Ñ ¿Ã¸®±â

1.3.1     Grid ·¹À̾ƿô ³»ºÎÀÇ µÎ ¹ø° Grid Row Cell¿¡¼­ Grid.ColumnDefinitionÀ» ÀÌ¿ëÇÏ¿© ¼¼ °³ÀÇ ColumnÀ» »ý¼ºÇÑ´Ù. ù ¹ø° Cell(1)°ú ¼¼ ¹ø° Cell(3)Àº MapView ÄÁÆ®·ÑÀ» ¹èÄ¡ÇÒ °ÍÀÌ°í µÎ ¹ø° Cell(2)¿¡ GridSplitterÀ» ¹èÄ¡ÇÒ °ÍÀÌ´Ù.

 

 

1.3.2     µµ±¸»óÀÚ¿¡¼­ GridSpliterÀ» ²ø¾î (2)¿¡ GridSplitterÀ» ¹èÄ¡ÇÑ´Ù.

 

¾Æ·¡¿Í °°Àº XAML Äڵ尡 »ý¼ºµÇ´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.

<Grid Grid.Row="1">
       <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="5"/>
            <ColumnDefinition Width="*"/>
       </Grid.ColumnDefinitions>

<GridSplitter Grid.Column="1" Width="5" HorizontalAlignment="Stretch"/>
</Grid>

1.4    NXMapViewÄÁÆ®·Ñ Ãß°¡Çϱâ

1.4.1     ù ¹ø° Column°ú ¼¼ ¹ø° Column¿¡ MapView ÄÁÆ®·ÑÀ» ¹èÄ¡Çϱâ À§ÇØ Window Forms ControlÀ» »ç¿ëÇÑ´Ù. ÀÌ´Â Window forms¸¦ Hosting ÇØÁÖ´Â °³Ã¼ÀÌ´Ù. (WindowFormIntegration¿Í System.Window.Forms À» ¾î¼Àºí¸®¿¡ ´ëÇÑ ÂüÁ¶ Ãß°¡¸¦ ÇÑ´Ù.)

1.4.2     Grid ·¹À̾ƿô¿¡ WindowFormsHost¸¦ ÀÔ·ÂÇÏ°í ¾Õ¼­ namespace¸¦ Ãß°¡ÇÑ nxMap¸¦ ÀÌ¿ëÇÏ¿© NXMapViewÄÁÆ®·ÑÀ» ºÒ·¯¿Í ¹èÄ¡ÇÑ´Ù(1), (3). ÀÌ NXMapViewÀÇ À̸§Àº °¢°¢ nxMapView1¿Í nxMapView2À¸·Î ÇÑ´Ù.  

NXMapView´Â ´Ù¾çÇÑ NXMapLayerXXXXXµéÀ» ´ãÀ»¼ö ÀÖ´Â ÄÁÅ×À̳ÊÀÌ´Ù. Áï, NXMapView´Â ´Ù¾çÇÑ °èÃþÀÇ ·¹À̾î·Î ±¸¼ºÇÏ¿© ¿µ»óµµ½Ã¿¡ ´ëÇÑ ´Ù¾çÇÑ ±â´ÉÀ» ±¸ÇöÀÌ °¡´ÉÇÏ´Ù.

<Grid Grid.Row="1">
       <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="5"/>
            <ColumnDefinition Width="*"/>
       </Grid.ColumnDefinitions>

<WindowsFormsHost Grid.Column="0" Margin="3,0,0,3">
            <nxMap:NXMapView x:Name="nxMapView1">
</nxMap:NXMapView>
</WindowsFormsHost>

<GridSplitter Grid.Column="1" Width="5" HorizontalAlignment="Stretch"/>

<WindowsFormsHost Grid.Column="2" Margin="3,0,3,3">
            <nxMap:NXMapView x:Name="nxMapView2">                  
            </nxMap:NXMapView>
</WindowsFormsHost>
</Grid>

 

.

1.4.3     NXMapViewÀ§¿¡ NXMapLayerComposites¿Í NXMapLayerGPU¸¦ °¢°¢ Ãß°¡ÇÑ´Ù.

NXMapLayerCompositesÀº XDMCompManager °´Ã¼¿¡ ÀÖ´Â composite ¸ñ·ÏÀ» µµ½ÃÇÑ´Ù. NXMapLayerGPU´Â »ç¿ëÀÚ°¡ OpenGLÀ» ÀÌ¿ëÇÏ¿© °´Ã¼¸¦ µµ½ÃÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â ÄÁÆ®·ÑÀ» ³ªÅ¸³½´Ù. °¢°¢ À̸§Àº nxMapLayerComposites1, nxMapLayerComposites2¿Í nxMapLayerGPU1, nxMapLayerGPU2·Î ÇÑ´Ù.

 

<Grid Grid.Row="1">
       <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="5"/>
            <ColumnDefinition Width="*"/>
       </Grid.ColumnDefinitions>

<WindowsFormsHost Grid.Column="0" Margin="3,0,0,3">
            <nxMap:NXMapView x:Name="nxMapView1">
<nxMap:NXMapView.Controls>
             <nxMap:NXMapLayerComposites x:Name="nxMapLayerComposites1"/>
             <nxMap:NXMapLayerGPU x:Name="nxMapLayerGPU1" 
          </nxMap:NXMapView.Controls>
</nxMap:NXMapView>
</WindowsFormsHost>

<GridSplitter Grid.Column="1" Width="5" HorizontalAlignment="Stretch"/>

<WindowsFormsHost Grid.Column="2" Margin="3,0,3,3">
            <nxMap:NXMapView x:Name="nxMapView2">   
<nxMap:NXMapView.Controls>
            <nxMap:NXMapLayerComposites x:Name="nxMapLayerComposites2"/>
            <nxMap:NXMapLayerGPU x:Name="nxMapLayerGPU2"/>
         </nxMap:NXMapView.Controls>               
            </nxMap:NXMapView>
</WindowsFormsHost>
</Grid>

 

1.4.4     [F5]Å°¸¦ ´­·¯ ÇÁ·Î±×·¥À» ½ÇÇàÇÑ´Ù. ¾Æ·¡¿Í °°ÀÌ 2°³ÀÇ NXMapViewÄÁÆ®·ÑÀÌ Á¸ÀçÇÏ´Â Áö È®ÀÎÇÑ´Ù.

 

 

1.5    ¿µ»ó ¿­±â ±â´É

1.5.1     XAMLâ¿¡¼­ [File]-[Open]À» ´õºí Ŭ¸¯ÇÏ¿© ÇÔ¼ö¸¦ ÀÚµ¿ »ý¼ºÇÑ´Ù.

 

 

private void openFileMenuItem_Click(object sender, RoutedEventArgs e)
{

}

 

1.5.2     ÇâÈÄ »ç¿ëÇÒ ¸â¹ö º¯¼öµéÀ» ¼±¾ðÇÑ´Ù.

public XRasterIO m_RasterIO;     // ¿µ»óÀÇ ÀÔÃâ·ÂÀ» ´ã´çÇÒ °´Ã¼ ¼±¾ð
XRSLoadFile xrsFileInput1 = null;       // ¿µ»ó µð½ºÇ÷¹ÀÌ¿ë ÆÄÀÏ °´Ã¼ »ý¼º
XRSLoadFile xrsFileInput2 = null;       // ¿µ»ó 󸮿ë ÆÄÀÏ °´Ã¼ »ý¼º

double oldPixelSize = 0.0;      // ÀÌÀü È­¸éÀÇ Çȼ¿ Å©±â
double oldWCX = 0.0;            // ÀÌÀü È­¸éÀÇ È­¸é ¼¾ÅÍ X°ª
double oldWCY = 0.0;            // ÀÌÀü È­¸éÀÇ È­¸é ¼¾ÅÍ Y°ª

 

1.5.3     MainWindow»ý¼ºÀÚ¿¡ ´ÙÀ½°ú °°ÀÌ °´Ã¼¸¦ »ý¼ºÇÑ´Ù. XRasterIO°´Ã¼¸¦ »ý¼ºÇÏ°í NXMapLayerComposites °´Ã¼ÀÇ ¼Ó¼ºÀ» VisibleÇÒ¼ö ÀÖµµ·Ï ¼Ó¼ºÀ» º¯°æÇÑ´Ù.

public MainWindow()
{
    InitializeComponent();

    String StrError;
    m_RasterIO = new XRasterIO();   // °´Ã¼ »ý¼º
    if (m_RasterIO.Initialize(out StrError) == false)   // ¿µ»ó ÀÔÃâ·Â °´Ã¼ ÃʱâÈ­
    {
        MessageBox.Show(StrError);
    }

    nxMapLayerComposites1.LayerVisible = true; // ¿µ»ó·¹À̾ º¸À̵µ·Ï ¼Ó¼ºÀ» º¯°æ
    nxMapLayerComposites2.LayerVisible = true; // ¿µ»ó·¹À̾ º¸À̵µ·Ï ¼Ó¼ºÀ» º¯°æ
}

 

1.5.4     [File]-[Open] ¹öÆ°À» ´­·¶À» ¶§ »ý¼ºµÉ [Open] ´ëÈ­»óÀÚ¿Í ¼±ÅÃµÈ ÆÄÀÏ¿¡ ´ëÇÑ XRSLoadFile°´Ã¼¸¦ »ý¼ºÇÏ°í ¿ÞÂÊ ºä ÄÁÆ®·Ñ¿¡ µµ½Ã¸¦ ¼öÇàÇÑ´Ù.

private void openFileMenuItem_Click(object sender, RoutedEventArgs e)
{
// 1. ÆÄÀÏ OpenÀ» ¼öÇàÇÑ´Ù.
     OpenFileDialog openFileDialog = new OpenFileDialog();
     openFileDialog.Filter = "XDM file(*.xdm)|*.XDM||";
     openFileDialog.RestoreDirectory = true;

     Nullable<bool> result = openFileDialog.ShowDialog();
     if (result != true) return;

     string strFilePath = openFileDialog.FileName;

     // 2. FileDriverManger¸¦ ÅëÇØ XRSLoadFileÀ» »ý¼ºÇÑ´Ù.
     string strError;
     xrsFileInput1 = m_RasterIO.LoadFile(strFilePath, out strError, false,
     eIOCreateXLDMode.All_NoMsg);
     xrsFileInput2 = m_RasterIO.LoadFile(strFilePath, out strError, false,
 eIOCreateXLDMode.All_NoMsg);

     if (xrsFileInput1 == null || xrsFileInput2 == null)
    {
          MessageBox.Show("Cannot Open"
          return;
     }

ShowImageOrigin();  // ½ÇÁ¦ À̹ÌÁö¸¦ ¿ÞÂÊ È­¸é¿¡ µµ½ÃÇÏ´Â ¿ªÇÒ 

    // »õ·Î¿î ÆÄÀÏÀ» ¿­ ¶§¸¶´Ù ¿À¸¥ÂÊ¿¡ µµ½ÃµÈ ±âÁ¸ À̹ÌÁö ÆÄÀÏÀ» »èÁ¦ÇÑ´Ù.
    // nxMapLayerComposites2°³Ã¼¿¡ Á¸ÀçÇÏ´Â Composite¸¦ °ü¸®ÇÏ´Â XDMCompManager¸¦
// ²¨³½´Ù. 
    XDMCompManager xdmCompManager = nxMapLayerComposites2.GetXDMCompManager();

    // ±âÁ¸¿¡ Composite°¡ Á¸ÀçÇÑ´Ù¸é ¸ðµÎ »èÁ¦ÇÑ´Ù.
    for (int i = 0; i < xdmCompManager.NumComp; i++)
    {
        XDMComposite comp = xdmCompManager.GetXDMCompositeAt(i);
        comp.Dispose();
    }
        xdmCompManager.RemoveXDMCompositeAll();
}

 

1.5.5     ¿ÞÂÊ ÄÁÆ®·Ñ¿¡ À̹ÌÁö¸¦ µµ½ÃÇÏ´Â ShowImageOriginÇÔ¼ö¸¦ ±¸ÇöÇÑ´Ù. ÀÌ ÇÔ¼ö´Â 3°³ÀÌ»óÀÇ ¹êµå¸¦ Æ÷ÇÔÇÏ´Â ¿µ»ó°ú ±× ÀÌÇÏÀÎ ¹êµå¸¦ Æ÷ÇÔÇÏ´Â ¿µ»óÀ» RGB ¸ðµå³ª Gray¸ðµå·Î µµ½ÃÇÏ´Â Äڵ带 Æ÷ÇÔÇÑ´Ù. ¶ÇÇÑ, µµ½ÃµÇ´Â ¿µ»ó¿¡ ´ëÇØ ¹à±â¸¦ Çâ»ó½ÃÅ°±â À§ÇÑ Image Enhancement ±â´ÉÀ» ±¸ÇöÇÒ ¼ö ÀÖ´Ù.

private void ShowImageOrigin()
{
     // ±âÁ¸¿¡ »ý¼ºµÇ¾î ÀÖ´Â Composite°¡ ÀÖ´Ù¸é LockÀ» °É¾î µµ½Ã ¼öÇàÀ» Àá½Ã ¸ØÃá´Ù. 
     nxMapLayerComposites1.Lock();

    // nxMapLayerComposites1°³Ã¼¿¡ Á¸ÀçÇÏ´Â XDMCompManager¸¦ ²¨³½´Ù. 
// XDMCompManager°¡ ½ÇÁ¦·Î CompositeµéÀÇ °ü¸®¸¦ ¼öÇàÇÑ´Ù.    
 XDMCompManager xdmCompManager = nxMapLayerComposites1.GetXDMCompManager();

    // ±âÁ¸¿¡ Composite°¡ Á¸ÀçÇÑ´Ù¸é ¸ðµÎ »èÁ¦ÇÑ´Ù.
    for (int i = 0; i < xdmCompManager.NumComp; i++)
    {
          XDMComposite comp = xdmCompManager.GetXDMCompositeAt(i);
          comp.Dispose();
    }
    xdmCompManager.RemoveXDMCompositeAll();

    // XDMComposite¸¦ »ý¼ºÇÑ´Ù. .
    XDMComposite newComp = new XDMComposite();

    // ·ÎµùµÈ ÆÄÀÏ·Î ºÎÅÍ ¹êµåÀÇ °¹¼ö°¡ Ä®¶ó·Î ±×¸±°ÍÀÎÁö Èæ¹éÀ¸·Î ±×¸±°ÍÀÎÁö¸¦ ÆÇ´ÜÇÑ´Ù.
    // ¸¸¾à 3°³ ¹Ì¸¸ÀÎ °æ¿ì´Â Gray¸ðµå·Î ±×¸®°í, 3°³ ÀÌ»óÀÎ °æ¿ì´Â Ä®¶ó·Î ±×¸°´Ù.
    int nNumBand = xrsFileInput1.NumBand;
    if (nNumBand < 3)   // 3°³ ¹Ì¸¸ÀÇ ¹êµå¸¦ °¡Áö°í ÀÖ´Â °æ¿ì
    {
          // Default·Î 0¹ø° ¹êµå¸¦ Gray¸ðµå·Î ±×¸°´Ù. 
          XDMBand band = xrsFileInput1.GetBandAt(0);

          // ¹êµå À̸§À» ±×´ë·Î CompositeÀ̸§À¸·Î ¼³Á¤
          newComp.Name = band.BandName;

          // Gray Mode·Î ±×¸®´Â°ÍÀ» ¼³Á¤
          newComp.Mode = eCompMode.Gray;

          // CompositeÀÇ 0¹ø¿¡ Band¼³Á¤, Gray¸ðµå¿¡¼­´Â 0¹ø ¹êµå¸¸À» ÀνÄÇÑ´Ù. 
          newComp.SetBand(ref band, 0);
          // ¿µ»ó 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 = xrsFileInput1.GetBandAt(0);
          XDMBand band2 = xrsFileInput1.GetBandAt(1);
          XDMBand band3 = xrsFileInput1.GetBandAt(2);
// ÆÄÀÏ À̸§À» CompoisteÀ̸§À¸·Î ¼³Á¤

         newComp.Name = xrsFileInput1.FileName; 

         newComp.Mode = eCompMode.RGB;  // RGB Mode·Î ±×¸®´Â°ÍÀ» ¼³Á¤
newComp.SetBand(ref band1, 0); // CompositeÀÇ 0¹ø¿¡ Band¼³Á¤, 
Blue Channel¼³Á¤ 
newComp.SetBand(ref band2, 1); // CompositeÀÇ 1¹ø¿¡ Band¼³Á¤, 
Green Channel¼³Á¤
         newComp.SetBand(ref band3, 2); // 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°´Ã¼¿¡ Ãß°¡ÇÑ´Ù. 
       xdmCompManager.AddXDMComposite(ref newComp);

       // Àüü È­¸é º¸±â¸¦ ¼³Á¤ÇÑ´Ù.
       nxMapLayerComposites1.ZoomFit();

       // È­¸é ¾÷µ¥ÀÌÆ®¸¦ ¼öÇàÇÑ´Ù. 
       nxMapLayerComposites1.Invalidate();

       // ¼³Á¤µÈ Lock¸¦ ÇØÁ¦ÇÑ´Ù. 
       nxMapLayerComposites1.UnLock();
}

 

1.6    Spatial FilterÀû¿ë

1.6.1      XAMLâ¿¡¼­ [Tool]-[Spatial Filter] ¹öÆ°À» ´õºí Ŭ¸¯ÇÏ¿© ¡°Spatial Filter¡±±â´É ±¸ÇöÀ» À§ÇÑ ÇÔ¼ö¸¦ ÀÚµ¿ »ý¼º½ÃŲ´Ù.

 

 

private void spatialFilterToolsMenuItem_Click(object sender, RoutedEventArgs e)
{

}

 

1.6.2     OpenµÈ ¿µ»ó¿¡ ´ëÇÑ °ø°£ ÇÊÅ͸µ ¼öÇàÀ» À§ÇÑ Äڵ带 ÀÛ¼ºÇÑ´Ù.

private void spatialFilterToolsMenuItem_Click(object sender, RoutedEventArgs e)
{
      if (xrsFileInput2 == null) return;

      XBandParamSpatialFilter param = new XBandParamSpatialFilter();
      param.SrcBand = xrsFileInput2.GetBandAt(0); // ¿µ»ó󸮸¦ À§ÇÑ Source Band¸¦ ¼³Á¤
      param.FilterMethod = eSpatialFilterMethod.Average; // ÇÊÅÍ ¼³Á¤
      param.KernelSize = 3; // FilterÀÇ Ä¿³Î »çÀÌÁî ¼³Á¤

      // XDMBandSpatialFiter ¹êµå¸¦ »ý¼ºÇÏ°í ÀÔ·Â º¯¼ö¸¦ ¼³Á¤
      XDMBandSpatialFilter bandSF = new XDMBandSpatialFilter();
      bandSF.SetInputParam(ref param);

      ShowProcessedImage(bandSF);
}

 

1.6.3     ShowProcessedImage Äڵ带 ÀÛ¼ºÇÑ´Ù. ¿©±â¿¡¼­´Â Default·Î Gray·Î ±×¸®´Â Äڵ带 ÀÔ·ÂÇÏ¿´´Ù. ¸¸¾à, °ø°£ ÇÊÅ͸µµÈ À̹ÌÁö¸¦ RGB·Î ¸¸µé°í ½Í´Ù¸é ShowImageOriginÇÔ¼ö¿¡¼­ ±¸ÇöÇÏ¿´´ø °Íó·³ 3°³ÀÇ Band¿¡ ´ëÇØ °¢°¢ °ø°£ ÇÊÅ͸µÀ» ¼öÇàÇÏ°í NXLayerComposites°´Ã¼ÀÇ ¸ðµå¸¦ RGB·Î ¼³Á¤ÇÏ¿© µµ½ÃÇÏ¸é µÈ´Ù.

private void ShowProcessedImage(XDMBandSpatialFilter bandSF)
{
    // ±âÁ¸¿¡ »ý¼ºµÇ¾î ÀÖ´Â Composite°¡ ÀÖ´Ù¸é LockÀ» °É¾î µµ½Ã ¼öÇàÀ» Àá½Ã ¸ØÃá´Ù. 
    nxMapLayerComposites2.Lock();

    // nxMapLayerComposites2°³Ã¼¿¡ Á¸ÀçÇÏ´Â XDMCompManager¸¦ ²¨³½´Ù. 
// XDMCompManager°¡ ½ÇÁ¦·Î CompositeµéÀÇ °ü¸®¸¦ ¼öÇàÇÑ´Ù. 
    XDMCompManager xdmCompManager = nxMapLayerComposites2.GetXDMCompManager();

    // ±âÁ¸¿¡ Composite°¡ Á¸ÀçÇÑ´Ù¸é ¸ðµÎ »èÁ¦ÇÑ´Ù.
    for (int i = 0; i < xdmCompManager.NumComp; i++)
    {
        XDMComposite comp = xdmCompManager.GetXDMCompositeAt(i);
        comp.Dispose();
    }
    xdmCompManager.RemoveXDMCompositeAll();

    // XDMComposite¸¦ »ý¼ºÇÑ´Ù. .
    XDMComposite newComp = new XDMComposite();

    // Spatial Filter ¹êµå¸¦ Gray¸ðµå·Î ±×¸°´Ù. 
    XDMBand band = bandSF;

    // ¹êµå À̸§À» ±×´ë·Î CompositeÀ̸§À¸·Î ¼³Á¤
    newComp.Name = band.BandName;

    // Gray Mode·Î ±×¸®´Â °ÍÀ» ¼³Á¤
    newComp.Mode = eCompMode.Gray;

    // CompositeÀÇ 0¹ø¿¡ Band¼³Á¤, Gray¸ðµå¿¡¼­´Â 0¹ø ¹êµå¸¸À» ÀνÄÇÑ´Ù. 
    newComp.SetBand(ref band, 0);
    // ¿µ»ó Enhancement¸¦ À§ÇØ HistogramÀÇ ¹üÀ§ ¼³Á¤(Á¤±ÔºÐÆ÷ 95% ¿µ¿ª)
    newComp.SetCutType(eCompCutType.Ct95, 0);
    // ¿µ»ó Enhancement¸¦ À§ÇØ ½Ç½Ã°£ ¿µ»ó󸮴 ¹Ýµå½Ã Visible·Î ¼³Á¤
    newComp.SetStretchCoverage(eCompStretchCoverage.Visible, 0);
    // ¿µ»ó Enhancement¸¦ À§ÇØ HistogramÀÇ StretchÇüÅ ¼³Á¤(GaussianÀ¸·Î ¼³Á¤)
    newComp.SetStretchType(eCompStretchType.Gaussian, 0);

    // »ý¼ºµÈ Composite¸¦ XDMCompManger°´Ã¼¿¡ Ãß°¡ÇÑ´Ù. 
    xdmCompManager.AddXDMComposite(ref newComp);

    // Àüü È­¸é º¸±â¸¦ ¼³Á¤ÇÑ´Ù.
    nxMapLayerComposites2.ZoomFit();

    // È­¸é ¾÷µ¥ÀÌÆ®¸¦ ¼öÇàÇÑ´Ù. 
    nxMapLayerComposites2.Invalidate();

    // ¼³Á¤µÈ Lock¸¦ ÇØÁ¦ÇÑ´Ù. 
    nxMapLayerComposites2.UnLock();
}

 

1.7    µà¾ó ºä¿¡ ´ëÇÑ µ¿±âÈ­

1.7.1     GPU LayerÀ» ³ªÅ¸³»´Â nxMapLayerGPU1ÀÇ XAMLÄÚµå·Î À̵¿ÇÏ¿© OnOrthoRender À̺¥Æ®¸¦ Ãß°¡ÇÑ´Ù. [¼Ó¼º]-[À̺¥Æ®] ¹öÆ°À» ´©¸£°í OnOrthoRender¸¦ ´õºí Ŭ¸¯ÇÏ¿© ÀÚµ¿ »ý¼º ÇÔ¼ö¸¦ ¸¸µç´Ù.

 

 

1.7.2     [¼Ó¼º]-[À̺¥Æ®]¹öÆ°À» ´©¸£°í OnOrthoRender¸¦ ´õºí Ŭ¸¯ÇÏ¿© ÀÚµ¿ »ý¼º ÇÔ¼ö¸¦ ¸¸µç´Ù.

private bool nxMapLayerGPU1_OnOrthoRender(NXMapLayerGPU sender, NXMapViewDrawArgs DrawArgs)
{

}

 

1.7.3     nxMapLayerGPU1_OnOrthoRenderÇÔ¼ö¿¡ µ¿±âÈ­ ÇÒ ¼ö ÀÖ´Â Äڵ带 ÀÛ¼ºÇÑ´Ù.

private bool nxMapLayerGPU1_OnOrthoRender(NXMapLayerGPU sender, NXMapViewDrawArgs DrawArgs)
{
// ¸¶¿ì½º°¡ ¿ÞÂÊ NXMapViewÄÁÆ®·Ñ À§¿¡ Á¸ÀçÇÏ´ÂÁö ¿©ºÎ È®ÀÎ
      if (!this.nxMapView1.IsUnderMouse())
           return default(bool);

      // Screen Bound¸¦ ¾ò´Â´Ù. 
      double x1w, x2w, y1w, y2w;
      x1w = x2w = y1w = y2w = 0.0;
      nxMapView1.GetScreenBound(ref x1w, ref x2w, ref y1w, ref y2w);

      // È­¸éÀÇ Áß½ÉÁ¡À» °è»êÇÑ´Ù.
      double wcx, wcy;
      wcx = (x1w + x2w) / 2.0;
      wcy = (y1w + y2w) / 2.0;

      // ÇöÀç È­¸éÀÇ È­¼Ò °ø°£ Å©±â¸¦ ¾ò´Â´Ù.
      double pixelSize = DrawArgs.PixelSize;

      // ÀÌÀü È­¼ÒÀÇ Å©±â/¼¾ÅÍ¿Í ÇöÀç È­¸éÀÇ È­¼ÒÀÇ Å©±â/¼¾ÅÍ°ªÀÌ ¸ðµÎ µ¿ÀÏÇÑ °æ¿ì 
// µµ½Ã ¼º´ÉÀ» À§ÇØ Àû¿ëÇÏÁö ¾Ê´Â´Ù.
      if (oldPixelSize == DrawArgs.PixelSize &&
      oldWCX == wcx &&
      oldWCY == wcy) return true;

      // ¿ÞÂÊ NXMapViewÀÇ È­¸é µµ½Ã Á¤º¸¸¦ ¿À¸¥ÂÊ NXMapViewÄÁÆ®·Ñ¿¡ Àû¿ëÇÑ´Ù.
      nxMapView2.SetWorld(new XVertex2d(wcx, wcy), new XVertex2d(pixelSize,
 pixelSize), new XAngle(0));

      // ÇöÀç Çȼ¿ Å©±â/È­¸é Á᫐ ÁÂÇ¥¸¦ ÀúÀåÇÑ´Ù.
      oldPixelSize = DrawArgs.PixelSize;
      oldWCX = wcx;
      oldWCY = wcy;

      nxMapView2.RefreshScreen();

      return true;
}

 

1.7.4     [F5]Å°¸¦ ´­·¯ ÇÁ·Î±×·¥À» ½ÇÇàÇÑ´Ù. ½ÇÇàµÈ ÇÁ·Î±×·¥À¸·ÎºÎÅÍ [File]-[Open]¹öÆ°À» ´­·¯ ȨÆäÀÌÁö¿¡¼­ ´Ù¿î·Îµå ¹ÞÀº ¡°etm.xdm¡±À» ¼±ÅÃÇÑ´Ù. [Tool]-[Spatial Filter]¹öÆ°À» ´­·¯ °ø°£ ÇÊÅ͸µ 󸮸¦ ¼öÇàÇÑ´Ù.

 

 

1.7.5     ¿ÞÂÊ ÄÁÆ®·Ñ¿¡ ¸¶¿ì½º Ä¿¼­¸¦ ¿Ã¸®°í ¸¶¿ì½º ÈÙÀ» ´ç±â°Å³ª ¹Ð¾îÁØ´Ù. ¶ÇÇÑ ¸¶¿ì½º ¿À¸¥ÂÊ Å¬¸¯À» ¼öÇàÇÑ Ã¤·Î ²ø±â¸¦ ¼öÇàÇØ ¿À¸¥ÂÊ¿¡ ÀÖ´Â ¿µ»óÀÌ µ¿±âÈ­ µÇ´ÂÁö È®ÀÎÇÑ´Ù.