![](XDL_MapView2.files/image001.png)
1.1.1
[»õ ÇÁ·ÎÁ§Æ®] ´ëÈ»óÀÚ¿¡¼
¿ÞÂÊÀÇ ÅÛÇø´ â¿¡¼ ¡°Visual C#¡±À» ¼±ÅÃÇÏ°í, ´ëÈ»óÀÚ
Áß°£ÀÇ ¸ñ·Ï¿¡¼ ¡°WPF ÀÀ¿ë ÇÁ·Î±×·¥¡±À» ¼±ÅÃÇÑ´Ù.
»ç¿ëÀÚ°¡
¿øÇÏ´Â °æ·Î¸¦ ¼±ÅÃÇÑ ´ÙÀ½ ÇÁ·ÎÁ§Æ® À̸§À» ¡°XDL_MapView2¡± À¸·Î ÀÔ·ÂÇÏ°í [»õ ÇÁ·ÎÁ§Æ®] ´ëÈ»óÀÚÀÇ ¡°È®ÀΡ± ¹öÆ°À» Ŭ¸¯ÇÑ´Ù. ÀÌ ¹®¼¿¡¼´Â ´ëÈ»óÀÚ ¿À¸¥ÂÊ ¾Æ·¡¿¡ ÀÖ´Â
¡°¼Ö·ç¼Ç¿ë µð·ºÅ͸® ¸¸µé±â¡±´Â ¼±ÅÃÇÏÁö ¾Ê°Ú´Ù. ¡°È®ÀΡ± ¹öÆ°À» ´©¸£¸é ÇÁ·ÎÁ§Æ®°¡ ±âº»ÀûÀ¸·Î »ý¼ºµÇ°í, ȸ鿡 WindowÀ» µðÀÚÀÎÇÒ ¼ö Àִ ȸéÀÌ ¶á´Ù. ¸¸¾à ¾Æ·¡¿Í °°Àº Window âÀÌ »ý¼ºµÇÁö ¾ÊÀ¸¸é, [¼Ö·ç¼Ç Ž»ö±â] â¿¡¼ MainWindow.xaml¡±¸¦
¸¶¿ì½º ´õºíŬ¸¯À» ÇÏ¿© âÀ» ¿¬´Ù.
![](XDL_MapView2.files/image002.jpg)
1.1.2
¼Ö·ç¼Ç Ž»ö±âÀÇ ÇÁ·ÎÁ§Æ® ÇϺÎÀÇ [ÂüÁ¶]ÀÇ
¿À¸¥ÂÊ ¸¶¿ì½º Ŭ¸¯À» ÅëÇØ [ÂüÁ¶Ãß°¡]¸¦ ¼±ÅÃÇÑ´Ù
![](XDL_MapView2.files/image003.jpg)
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¸¦ ´ÙÀ½°ú °°ÀÌ Ãß°¡ÇÑ´Ù.
![](XDL_MapView2.files/image004.png)
1.2.1
MainWindow.xamlâ¿¡¼ ±âº»À¸·Î »ý¼ºµÈ Grid ·¹À̾ƿô¿¡ Grid.RowDefinitionÀ» ÀÌ¿ëÇÏ¿©
µÎ °³ÀÇ RowÀ» »ý¼ºÇÑ´Ù. Menu¸¦ ù ¹ø° Cell¿¡ ¹èÄ¡ÇÏ°í MenuItem Ç׸ñÀ» Ãß°¡ÇÏ°í ¾Æ·¡ÀÇ Ç¥¸¦
Âü°íÇÏ¿© [File]-[Open]°ú [Tool]-[SpatialFilter]À»
»ý¼ºÇÑ´Ù. (¸Þ´º »ý¼º¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸íÀº XDL
MapView1À» Âü°íÇÑ´Ù.)
![](XDL_MapView2.files/image005.png)
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>](XDL_MapView2.files/image006.png)
1.3.1
Grid ·¹À̾ƿô ³»ºÎÀÇ µÎ ¹ø° Grid
Row Cell¿¡¼ Grid.ColumnDefinitionÀ» ÀÌ¿ëÇÏ¿© ¼¼ °³ÀÇ ColumnÀ» »ý¼ºÇÑ´Ù. ù ¹ø°
Cell(1)°ú ¼¼ ¹ø° Cell(3)Àº MapView
ÄÁÆ®·ÑÀ» ¹èÄ¡ÇÒ °ÍÀÌ°í µÎ ¹ø° Cell(2)¿¡ GridSplitterÀ»
¹èÄ¡ÇÒ °ÍÀÌ´Ù.
![](XDL_MapView2.files/image007.jpg)
1.3.2
µµ±¸»óÀÚ¿¡¼ GridSpliterÀ» ²ø¾î
(2)¿¡ GridSplitterÀ» ¹èÄ¡ÇÑ´Ù.
![](XDL_MapView2.files/image008.png)
¾Æ·¡¿Í °°Àº 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>](XDL_MapView2.files/image009.png)
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>](XDL_MapView2.files/image010.png)
![](XDL_MapView2.files/image011.png)
.
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>](XDL_MapView2.files/image012.png)
1.4.4
[F5]Å°¸¦ ´·¯ ÇÁ·Î±×·¥À» ½ÇÇàÇÑ´Ù. ¾Æ·¡¿Í
°°ÀÌ 2°³ÀÇ NXMapViewÄÁÆ®·ÑÀÌ Á¸ÀçÇÏ´Â Áö È®ÀÎÇÑ´Ù.
![](XDL_MapView2.files/image013.png)
1.5.1
XAMLâ¿¡¼ [File]-[Open]À»
´õºí Ŭ¸¯ÇÏ¿© ÇÔ¼ö¸¦ ÀÚµ¿ »ý¼ºÇÑ´Ù.
![](XDL_MapView2.files/image014.png)
![private void openFileMenuItem_Click(object sender, RoutedEventArgs e)
{
}](XDL_MapView2.files/image015.png)
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°ª](XDL_MapView2.files/image016.png)
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; // ¿µ»ó·¹À̾ º¸À̵µ·Ï ¼Ó¼ºÀ» º¯°æ
}](XDL_MapView2.files/image017.png)
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();
}](XDL_MapView2.files/image018.png)
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();
}](XDL_MapView2.files/image019.png)
1.6.1
XAMLâ¿¡¼ [Tool]-[Spatial
Filter] ¹öÆ°À» ´õºí Ŭ¸¯ÇÏ¿© ¡°Spatial Filter¡±±â´É ±¸ÇöÀ» À§ÇÑ ÇÔ¼ö¸¦
ÀÚµ¿ »ý¼º½ÃŲ´Ù.
![](XDL_MapView2.files/image020.png)
![private void spatialFilterToolsMenuItem_Click(object sender, RoutedEventArgs e)
{
}](XDL_MapView2.files/image021.png)
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);
}](XDL_MapView2.files/image022.png)
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();
}](XDL_MapView2.files/image023.png)
1.7.1
GPU LayerÀ» ³ªÅ¸³»´Â nxMapLayerGPU1ÀÇ
XAMLÄÚµå·Î À̵¿ÇÏ¿© OnOrthoRender À̺¥Æ®¸¦
Ãß°¡ÇÑ´Ù. [¼Ó¼º]-[À̺¥Æ®] ¹öÆ°À» ´©¸£°í OnOrthoRender¸¦ ´õºí Ŭ¸¯ÇÏ¿© ÀÚµ¿
»ý¼º ÇÔ¼ö¸¦ ¸¸µç´Ù.
![](XDL_MapView2.files/image024.png)
1.7.2
[¼Ó¼º]-[À̺¥Æ®]¹öÆ°À» ´©¸£°í OnOrthoRender¸¦ ´õºí Ŭ¸¯ÇÏ¿© ÀÚµ¿ »ý¼º
ÇÔ¼ö¸¦ ¸¸µç´Ù.
![private bool nxMapLayerGPU1_OnOrthoRender(NXMapLayerGPU sender, NXMapViewDrawArgs DrawArgs)
{
}](XDL_MapView2.files/image025.png)
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;
}](XDL_MapView2.files/image026.png)
1.7.4
[F5]Å°¸¦ ´·¯ ÇÁ·Î±×·¥À» ½ÇÇàÇÑ´Ù. ½ÇÇàµÈ
ÇÁ·Î±×·¥À¸·ÎºÎÅÍ [File]-[Open]¹öÆ°À» ´·¯ ȨÆäÀÌÁö¿¡¼ ´Ù¿î·Îµå ¹ÞÀº ¡°etm.xdm¡±À» ¼±ÅÃÇÑ´Ù. [Tool]-[Spatial Filter]¹öÆ°À»
´·¯ °ø°£ ÇÊÅ͸µ 󸮸¦ ¼öÇàÇÑ´Ù.
![](XDL_MapView2.files/image027.png)
1.7.5
¿ÞÂÊ ÄÁÆ®·Ñ¿¡ ¸¶¿ì½º Ä¿¼¸¦ ¿Ã¸®°í ¸¶¿ì½º ÈÙÀ» ´ç±â°Å³ª ¹Ð¾îÁØ´Ù. ¶ÇÇÑ
¸¶¿ì½º ¿À¸¥ÂÊ Å¬¸¯À» ¼öÇàÇÑ Ã¤·Î ²ø±â¸¦ ¼öÇàÇØ ¿À¸¥ÂÊ¿¡ ÀÖ´Â ¿µ»óÀÌ µ¿±âÈ µÇ´ÂÁö È®ÀÎÇÑ´Ù.
|