📄 proj4_grid.cpp
字号:
///////////////////////////////////////////////////////////
// //
// SAGA //
// //
// System for Automated Geoscientific Analyses //
// //
// Module Library: //
// Projection_Proj4 //
// //
//-------------------------------------------------------//
// //
// PROJ4_Grid.cpp //
// //
// Copyright (C) 2003 by //
// Olaf Conrad //
// //
//-------------------------------------------------------//
// //
// This file is part of 'SAGA - System for Automated //
// Geoscientific Analyses'. SAGA is free software; you //
// can redistribute it and/or modify it under the terms //
// of the GNU General Public License as published by the //
// Free Software Foundation; version 2 of the License. //
// //
// SAGA is distributed in the hope that it will be //
// useful, but WITHOUT ANY WARRANTY; without even the //
// implied warranty of MERCHANTABILITY or FITNESS FOR A //
// PARTICULAR PURPOSE. See the GNU General Public //
// License for more details. //
// //
// You should have received a copy of the GNU General //
// Public License along with this program; if not, //
// write to the Free Software Foundation, Inc., //
// 59 Temple Place - Suite 330, Boston, MA 02111-1307, //
// USA. //
// //
//-------------------------------------------------------//
// //
// e-mail: oconrad@saga-gis.org //
// //
// contact: Olaf Conrad //
// Institute of Geography //
// University of Goettingen //
// Goldschmidtstr. 5 //
// 37077 Goettingen //
// Germany //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
#include <string.h>
#include "PROJ4_Grid.h"
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
CPROJ4_Grid::CPROJ4_Grid(void)
{
CSG_Parameters *pParameters;
//-----------------------------------------------------
Set_Name (_TL("Proj4 (Grid)"));
Set_Author (_TL("Copyrights (c) 2003 by Olaf Conrad"));
Set_Description (_TW(
"Coordinate Transformation for Grids.\n"
"Based on the PROJ.4 Cartographic Projections library originally written by Gerald Evenden "
"and later continued by the United States Department of the Interior, Geological Survey (USGS).\n"
"<a target=\"_blank\" href=\"http://remotesensing.org/proj/\">Homepage</a>\n"
));
//-----------------------------------------------------
Parameters.Add_Grid_Output(
NULL , "OUT_GRID" , _TL("Grid"),
_TL("")
);
Parameters.Add_Grid_Output(
NULL , "OUT_X" , _TL("X Coordinates"),
_TL("")
);
Parameters.Add_Grid_Output(
NULL , "OUT_Y" , _TL("Y Coordinates"),
_TL("")
);
Parameters.Add_Shapes_Output(
NULL , "OUT_SHAPES" , _TL("Shapes"),
_TL("")
);
//-----------------------------------------------------
Parameters.Add_Grid(
Parameters("SOURCE_NODE"),
"SOURCE" , _TL("Source"),
_TL(""),
PARAMETER_INPUT
);
Parameters.Add_Value(
Parameters("TARGET_NODE"),
"CREATE_XY" , _TL("Create X/Y Grids"),
_TL(""),
PARAMETER_TYPE_Bool, false
);
Parameters.Add_Choice(
Parameters("TARGET_NODE"),
"TARGET_TYPE" , _TL("Target"),
_TL(""),
CSG_String::Format(SG_T("%s|%s|%s|%s|%s|"),
_TL("user defined"),
_TL("automatic fit"),
_TL("grid system"),
_TL("grid"),
_TL("shapes")
), 0
);
Parameters.Add_Choice(
Parameters("TARGET_NODE") , "INTERPOLATION" , _TL("Grid Interpolation"),
_TL(""),
CSG_String::Format(SG_T("%s|%s|%s|%s|%s|"),
_TL("Nearest Neigbhor"),
_TL("Bilinear Interpolation"),
_TL("Inverse Distance Interpolation"),
_TL("Bicubic Spline Interpolation"),
_TL("B-Spline Interpolation")
), 4
);
//-----------------------------------------------------
pParameters = Add_Parameters("GET_AUTOFIT" , _TL("Automatic fit") , _TL(""));
pParameters->Add_Value(
NULL, "GRIDSIZE" , _TL("Grid Size") , _TL(""), PARAMETER_TYPE_Double, 10000.0, 0.0, true
);
pParameters->Add_Choice(
NULL, "AUTOEXTMODE" , _TL("Fit Size") , _TL(""),
CSG_String::Format(SG_T("%s|%s|"),
_TL("Extent only (fast)"),
_TL("Check each point|")
), 0
);
//-----------------------------------------------------
pParameters = Add_Parameters("GET_USER" , _TL("User defined") , _TL(""));
pParameters->Add_Value(
NULL, "XMIN" , _TL("Left") , _TL(""), PARAMETER_TYPE_Double
);
pParameters->Add_Value(
NULL, "XMAX" , _TL("Right") , _TL(""), PARAMETER_TYPE_Double
);
pParameters->Add_Value(
NULL, "YMIN" , _TL("Bottom") , _TL(""), PARAMETER_TYPE_Double
);
pParameters->Add_Value(
NULL, "YMAX" , _TL("Top") , _TL(""), PARAMETER_TYPE_Double
);
pParameters->Add_Value(
NULL, "SIZE" , _TL("Grid Size") , _TL(""), PARAMETER_TYPE_Double, 10000.0, 0.0, true
);
pParameters->Add_Info_Value(
NULL, "NX" , _TL("Columns") , _TL(""), PARAMETER_TYPE_Int
);
pParameters->Add_Info_Value(
NULL, "NY" , _TL("Rows") , _TL(""), PARAMETER_TYPE_Int
);
//-----------------------------------------------------
pParameters = Add_Parameters("GET_SYSTEM" , _TL("Choose Grid Project"), _TL(""));
pParameters->Add_Grid_System(
NULL, "SYSTEM" , _TL("System") , _TL("")
);
//-----------------------------------------------------
pParameters = Add_Parameters("GET_GRID" , _TL("Choose Grid") , _TL(""));
pParameters->Add_Grid(
NULL, "GRID" , _TL("Grid") , _TL(""), PARAMETER_INPUT , false
);
//-----------------------------------------------------
pParameters = Add_Parameters("GET_SHAPES" , _TL("Choose Shapes") , _TL(""));
pParameters->Add_Shapes(
NULL, "SHAPES" ,_TL("Shapes") , _TL(""), PARAMETER_OUTPUT , SHAPE_TYPE_Point
);
}
//---------------------------------------------------------
CPROJ4_Grid::~CPROJ4_Grid(void)
{}
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
bool CPROJ4_Grid::On_Execute_Conversion(void)
{
int Interpol;
CSG_Grid *pSource, *pGrid;
CSG_Shapes *pShapes;
//-----------------------------------------------------
pSource = Parameters("SOURCE")->asGrid();
pGrid = NULL;
pShapes = NULL;
Interpol = Parameters("INTERPOLATION")->asInt();
//-----------------------------------------------------
switch( Parameters("TARGET_TYPE")->asInt() )
{
case 0: // create new user defined grid...
pGrid = Get_Target_Userdef(pSource, Interpol == 0);
break;
case 1: // create new with chosen grid size and fitted extent...
if( Dlg_Parameters("GET_AUTOFIT") )
{
pGrid = Get_Target_Autofit(
pSource,
Get_Parameters("GET_AUTOFIT")->Get_Parameter("GRIDSIZE") ->asDouble(),
Get_Parameters("GET_AUTOFIT")->Get_Parameter("AUTOEXTMODE") ->asInt(),
Interpol == 0
);
}
break;
case 2: // select grid system...
if( Dlg_Parameters("GET_SYSTEM") )
{
pGrid = SG_Create_Grid(
*Get_Parameters("GET_SYSTEM")->Get_Parameter("SYSTEM")->asGrid_System()
);
}
break;
case 3: // select grid...
if( Dlg_Parameters("GET_GRID") )
{
pGrid = Get_Parameters("GET_GRID")->Get_Parameter("GRID")->asGrid();
}
break;
case 4: // shapes...
if( Dlg_Parameters("GET_SHAPES") )
{
pShapes = Get_Parameters("GET_SHAPES")->Get_Parameter("SHAPES")->asShapes();
}
break;
default:
return( false );
}
//-----------------------------------------------------
if( pShapes )
{
Set_Shapes (pSource, pShapes);
Parameters("OUT_SHAPES") ->Set_Value(pShapes);
}
//-----------------------------------------------------
if( pGrid )
{
Set_Grid (pSource, pGrid, Interpol);
Parameters("OUT_GRID") ->Set_Value(pGrid);
}
//-----------------------------------------------------
return( true );
}
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
int CPROJ4_Grid::On_Parameter_Changed(CSG_Parameters *pParameters, CSG_Parameter *pParameter)
{
double xMin, xMax, yMin, yMax, size;
if( !SG_STR_CMP(pParameters->Get_Identifier(), SG_T("GET_USER")) )
{
xMin = pParameters->Get_Parameter("XMIN")->asDouble();
xMax = pParameters->Get_Parameter("XMAX")->asDouble();
yMin = pParameters->Get_Parameter("YMIN")->asDouble();
yMax = pParameters->Get_Parameter("YMAX")->asDouble();
size = pParameters->Get_Parameter("SIZE")->asDouble();
if( !SG_STR_CMP(pParameter->Get_Identifier(), SG_T("SIZE")) )
{
pParameters->Get_Parameter("XMAX")->Set_Value((xMax = xMin + ((int)((xMax - xMin) / size)) * size));
pParameters->Get_Parameter("YMAX")->Set_Value((yMax = yMin + ((int)((yMax - yMin) / size)) * size));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -