本文整理汇总了C++中OGR_SRSNode类的典型用法代码示例。如果您正苦于以下问题:C++ OGR_SRSNode类的具体用法?C++ OGR_SRSNode怎么用?C++ OGR_SRSNode使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了OGR_SRSNode类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: OGR_SRSNode
OGR_SRSNode *OGR_SRSNode::Clone() const
{
OGR_SRSNode *poNew = new OGR_SRSNode( pszValue );
for( int i = 0; i < nChildren; i++ )
{
poNew->AddChild( papoChildNodes[i]->Clone() );
}
return poNew;
}
示例2: CPLDebug
/**
* \brief Validate the current VERT_DATUM's arguments.
*
* @return OGRERR_NONE if the VERT_DATUM's arguments validate, an error code
* otherwise
*/
OGRErr OGRSpatialReference::ValidateVertDatum(OGR_SRSNode *poRoot)
{
if ( !EQUAL(poRoot->GetValue(), "VERT_DATUM") )
return OGRERR_NONE;
if (poRoot->GetChildCount() < 2 )
{
CPLDebug( "OGRSpatialReference::Validate",
"Invalid number of children : %d", poRoot->GetChildCount() );
return OGRERR_CORRUPT_DATA;
}
if (atoi(poRoot->GetChild(1)->GetValue()) == 0)
{
CPLDebug( "OGRSpatialReference::Validate",
"Invalid value for datum type (%s) : must be a number\n",
poRoot->GetChild(1)->GetValue());
return OGRERR_CORRUPT_DATA;
}
OGR_SRSNode *poNode;
int i;
for( i = 2; i < poRoot->GetChildCount(); i++ )
{
poNode = poRoot->GetChild(i);
if( EQUAL(poNode->GetValue(),"AUTHORITY") )
{
OGRErr eErr = ValidateAuthority(poNode);
if (eErr != OGRERR_NONE)
return eErr;
}
else if( EQUAL(poNode->GetValue(),"EXTENSION") )
{
// We do not try to control the sub-organization of
// EXTENSION nodes.
}
else
{
CPLDebug( "OGRSpatialReference::Validate",
"Unexpected child for VERT_DATUM `%s'.\n",
poNode->GetValue() );
return OGRERR_CORRUPT_DATA;
}
}
return OGRERR_NONE;
}
示例3: GetProjName
std::string CSpatialReference::GetProjName() const
{
if(!m_Handle)
{
return "";
}
OGRSpatialReference* psr = (OGRSpatialReference*)m_Handle;
//查找GEOGCS节点
OGR_SRSNode *pNode =psr->GetAttrNode("PROJCS");
if(!pNode)
{
return "";
}
return pNode->GetChild(0)->GetValue();
}
示例4: tmp
std::string SpatialReference::getVertical() const
{
std::string tmp("");
OGRSpatialReference* poSRS =
(OGRSpatialReference*)OSRNewSpatialReference(m_wkt.c_str());
char *pszWKT = NULL;
OGR_SRSNode* node = poSRS->GetAttrNode("VERT_CS");
if (node && poSRS)
{
node->exportToWkt(&pszWKT);
tmp = pszWKT;
CPLFree(pszWKT);
OSRDestroySpatialReference(poSRS);
}
return tmp;
}
示例5: OnItemRightClick
void ProjectionDlg::OnItemRightClick( wxListEvent &event )
{
int item_clicked = event.GetIndex();
OGR_SRSNode *root = m_proj.GetRoot();
OGR_SRSNode *node, *par1, *par2;
const char *value;
int children = root->GetChildCount();
int i, item = 0;
wxString str;
for (i = 0; i < children; i++)
{
node = root->GetChild(i);
value = node->GetValue();
if (strcmp(value, "PARAMETER"))
continue;
par1 = node->GetChild(0);
par2 = node->GetChild(1);
value = par2->GetValue();
if (item == item_clicked)
{
wxString caption = _("Value for ");
str = wxString(par1->GetValue(), wxConvUTF8);
caption += str;
str = wxString(value, wxConvUTF8);
wxString result = wxGetTextFromUser(caption, _("Enter new value"),
str, this);
if (result != _T(""))
{
// double newval = atof((const char *)result);
par2->SetValue(result.mb_str(wxConvUTF8));
DisplayProjectionSpecificParams();
return;
}
}
item++;
}
}
示例6: _
void ProjectionDlg::DisplayProjectionSpecificParams()
{
m_pParamCtrl->DeleteAllItems();
OGR_SRSNode *root = m_proj.GetRoot();
if (!root)
{
m_pParamCtrl->InsertItem(0, _("(Invalid projection)"));
return; // bogus projection
}
OGR_SRSNode *node, *par1, *par2;
const char *value;
int children = root->GetChildCount();
int i, item = 0;
wxString str;
for (i = 0; i < children; i++)
{
node = root->GetChild(i);
value = node->GetValue();
if (!strcmp(value, "PARAMETER"))
{
par1 = node->GetChild(0);
value = par1->GetValue();
str = wxString(value, wxConvUTF8);
item = m_pParamCtrl->InsertItem(item, str);
par2 = node->GetChild(1);
value = par2->GetValue();
str = wxString(value, wxConvUTF8);
m_pParamCtrl->SetItem(item, 1, str);
item++;
}
}
}
示例7: CheckCitationKeyForStatePlaneUTM
OGRBoolean CheckCitationKeyForStatePlaneUTM(GTIF* hGTIF, GTIFDefn* psDefn, OGRSpatialReference* poSRS, OGRBoolean* pLinearUnitIsSet)
{
if( !hGTIF || !psDefn || !poSRS )
return FALSE;
/* -------------------------------------------------------------------- */
/* For ESRI builds we are interested in maximizing PE */
/* compatability, but generally we prefer to use EPSG */
/* definitions of the coordinate system if PCS is defined. */
/* -------------------------------------------------------------------- */
#if !defined(ESRI_BUILD)
if( psDefn->PCS != KvUserDefined )
return FALSE;
#endif
char szCTString[512];
szCTString[0] = '\0';
/* Check units */
char units[32];
units[0] = '\0';
OGRBoolean hasUnits = FALSE;
if( GTIFKeyGet( hGTIF, GTCitationGeoKey, szCTString, 0, sizeof(szCTString) ) )
{
CPLString osLCCT = szCTString;
osLCCT.tolower();
if( strstr(osLCCT,"us") && strstr(osLCCT,"survey")
&& (strstr(osLCCT,"feet") || strstr(osLCCT,"foot")) )
strcpy(units, "us_survey_feet");
else if(strstr(osLCCT, "linear_feet")
|| strstr(osLCCT, "linear_foot")
|| strstr(osLCCT, "international"))
strcpy(units, "international_feet");
else if( strstr(osLCCT,"meter") )
strcpy(units, "meters");
if (strlen(units) > 0)
hasUnits = TRUE;
if( strstr( szCTString, "Projection Name = ") && strstr( szCTString, "_StatePlane_"))
{
const char *pStr = strstr( szCTString, "Projection Name = ") + strlen("Projection Name = ");
const char* pReturn = strchr( pStr, '\n');
char CSName[128];
strncpy(CSName, pStr, pReturn-pStr);
CSName[pReturn-pStr] = '\0';
if( poSRS->ImportFromESRIStatePlaneWKT(0, NULL, NULL, 32767, CSName) == OGRERR_NONE )
{
// for some erdas citation keys, the state plane CS name is incomplete, the unit check is necessary.
OGRBoolean done = FALSE;
if (hasUnits)
{
OGR_SRSNode *poUnit = poSRS->GetAttrNode( "PROJCS|UNIT" );
if( poUnit != NULL && poUnit->GetChildCount() >= 2 )
{
CPLString unitName = poUnit->GetChild(0)->GetValue();
unitName.tolower();
if (strstr(units, "us_survey_feet"))
{
if (strstr(unitName, "us_survey_feet") || strstr(unitName, "foot_us") )
done = TRUE;
}
else if (strstr(units, "international_feet"))
{
if (strstr(unitName, "feet") || strstr(unitName, "foot"))
done = TRUE;
}
else if (strstr(units, "meters"))
{
if (strstr(unitName, "meter") )
done = TRUE;
}
}
}
if (done)
return TRUE;
}
}
}
if( !hasUnits )
{
char *pszUnitsName = NULL;
GTIFGetUOMLengthInfo( psDefn->UOMLength, &pszUnitsName, NULL );
if( pszUnitsName && strlen(pszUnitsName) > 0 )
{
CPLString osLCCT = pszUnitsName;
GTIFFreeMemory( pszUnitsName );
osLCCT.tolower();
if( strstr(osLCCT, "us") && strstr(osLCCT, "survey")
&& (strstr(osLCCT, "feet") || strstr(osLCCT, "foot")))
strcpy(units, "us_survey_feet");
else if(strstr(osLCCT, "feet") || strstr(osLCCT, "foot"))
strcpy(units, "international_feet");
else if(strstr(osLCCT, "meter"))
//.........这里部分代码省略.........
示例8: atof
int OGRProj4CT::InitializeNoLock( OGRSpatialReference * poSourceIn,
OGRSpatialReference * poTargetIn )
{
if( poSourceIn == NULL || poTargetIn == NULL )
return FALSE;
poSRSSource = poSourceIn->Clone();
poSRSTarget = poTargetIn->Clone();
bSourceLatLong = poSRSSource->IsGeographic();
bTargetLatLong = poSRSTarget->IsGeographic();
/* -------------------------------------------------------------------- */
/* Setup source and target translations to radians for lat/long */
/* systems. */
/* -------------------------------------------------------------------- */
dfSourceToRadians = DEG_TO_RAD;
bSourceWrap = FALSE;
dfSourceWrapLong = 0.0;
if( bSourceLatLong )
{
OGR_SRSNode *poUNITS = poSRSSource->GetAttrNode( "GEOGCS|UNIT" );
if( poUNITS && poUNITS->GetChildCount() >= 2 )
{
dfSourceToRadians = atof(poUNITS->GetChild(1)->GetValue());
if( dfSourceToRadians == 0.0 )
dfSourceToRadians = DEG_TO_RAD;
}
}
dfTargetFromRadians = RAD_TO_DEG;
bTargetWrap = FALSE;
dfTargetWrapLong = 0.0;
if( bTargetLatLong )
{
OGR_SRSNode *poUNITS = poSRSTarget->GetAttrNode( "GEOGCS|UNIT" );
if( poUNITS && poUNITS->GetChildCount() >= 2 )
{
double dfTargetToRadians = atof(poUNITS->GetChild(1)->GetValue());
if( dfTargetToRadians != 0.0 )
dfTargetFromRadians = 1 / dfTargetToRadians;
}
}
/* -------------------------------------------------------------------- */
/* Preliminary logic to setup wrapping. */
/* -------------------------------------------------------------------- */
const char *pszCENTER_LONG;
if( CPLGetConfigOption( "CENTER_LONG", NULL ) != NULL )
{
bSourceWrap = bTargetWrap = TRUE;
dfSourceWrapLong = dfTargetWrapLong =
atof(CPLGetConfigOption( "CENTER_LONG", "" ));
CPLDebug( "OGRCT", "Wrap at %g.", dfSourceWrapLong );
}
pszCENTER_LONG = poSRSSource->GetExtension( "GEOGCS", "CENTER_LONG" );
if( pszCENTER_LONG != NULL )
{
dfSourceWrapLong = atof(pszCENTER_LONG);
bSourceWrap = TRUE;
CPLDebug( "OGRCT", "Wrap source at %g.", dfSourceWrapLong );
}
pszCENTER_LONG = poSRSTarget->GetExtension( "GEOGCS", "CENTER_LONG" );
if( pszCENTER_LONG != NULL )
{
dfTargetWrapLong = atof(pszCENTER_LONG);
bTargetWrap = TRUE;
CPLDebug( "OGRCT", "Wrap target at %g.", dfTargetWrapLong );
}
bCheckWithInvertProj = CSLTestBoolean(CPLGetConfigOption( "CHECK_WITH_INVERT_PROJ", "NO" ));
/* The threshold is rather experimental... Works well with the cases of ticket #2305 */
if (bSourceLatLong)
dfThreshold = atof(CPLGetConfigOption( "THRESHOLD", ".1" ));
else
/* 1 works well for most projections, except for +proj=aeqd that requires */
/* a tolerance of 10000 */
dfThreshold = atof(CPLGetConfigOption( "THRESHOLD", "10000" ));
/* -------------------------------------------------------------------- */
/* Establish PROJ.4 handle for source if projection. */
/* -------------------------------------------------------------------- */
// OGRThreadSafety: The following variable is not a thread safety issue
// since the only issue is incrementing while accessing which at worse
// means debug output could be one "increment" late.
static int nDebugReportCount = 0;
char *pszSrcProj4Defn = NULL;
if( poSRSSource->exportToProj4( &pszSrcProj4Defn ) != OGRERR_NONE )
{
CPLFree( pszSrcProj4Defn );
return FALSE;
//.........这里部分代码省略.........
示例9: rspfNotify
bool rspfOgcWktTranslator::toOssimKwl( const rspfString& wktString,
rspfKeywordlist &kwl,
const char *prefix)const
{
static const char MODULE[] = "rspfOgcWktTranslator::toOssimKwl";
if(traceDebug())
{
rspfNotify(rspfNotifyLevel_DEBUG) << MODULE << " entered...\n";
}
const char* wkt = wktString.c_str();
OGRSpatialReferenceH hSRS = NULL;
rspfDpt falseEastingNorthing;
hSRS = OSRNewSpatialReference(NULL);
if( OSRImportFromWkt( hSRS, (char **) &wkt ) != OGRERR_NONE )
{
OSRDestroySpatialReference( hSRS );
return false;
}
rspfString rspfProj = "";
const char* epsg_code = OSRGetAttrValue( hSRS, "AUTHORITY", 1 );
if(traceDebug())
{
rspfNotify(rspfNotifyLevel_DEBUG)
<< "epsg_code: " << (epsg_code?epsg_code:"null") << "\n";
}
const char* units = NULL;
OGR_SRSNode* node = ((OGRSpatialReference *)hSRS)->GetRoot();
int nbChild = node->GetChildCount();
for (int i = 0; i < nbChild; i++)
{
OGR_SRSNode* curChild = node->GetChild(i);
if (strcmp(curChild->GetValue(), "UNIT") == 0)
{
units = curChild->GetChild(0)->GetValue();
}
}
if(traceDebug())
{
rspfNotify(rspfNotifyLevel_DEBUG)
<< "units: " << (units?units:"null") << "\n";
}
rspfString rspf_units;
bool bGeog = OSRIsGeographic(hSRS);
if ( bGeog == false )
{
rspf_units = "meters";
if ( units != NULL )
{
rspfString s = units;
s.downcase();
if( ( s == rspfString("us survey foot") ) ||
( s == rspfString("u.s. foot") ) ||
( s == rspfString("foot_us") ) )
{
rspf_units = "us_survey_feet";
}
else if( s == rspfString("degree") )
{
rspf_units = "degrees";
}
else if( ( s == rspfString("meter") ) ||
( s == rspfString("metre") ) )
{
rspf_units = "meters";
}
}
}
else
{
rspf_units = "degrees";
}
if(traceDebug())
{
rspfNotify(rspfNotifyLevel_DEBUG)
<< "rspf_units: " << rspf_units << "\n";
}
if (epsg_code)
{
rspfString epsg_spec ("EPSG:");
epsg_spec += rspfString::toString(epsg_code);
rspfProjection* proj = rspfEpsgProjectionFactory::instance()->createProjection(epsg_spec);
if (proj)
rspfProj = proj->getClassName();
delete proj;
}
if(rspfProj == "")
{
const char* pszProjection = OSRGetAttrValue( hSRS, "PROJECTION", 0 );
if(pszProjection)
{
rspfProj = wktToOssimProjection(pszProjection);
}
else
//.........这里部分代码省略.........
示例10: WFS_ExprDumpAsOGCFilter
//.........这里部分代码省略.........
osFilter += ">";
osFilter += "<gml:lowerCorner>";
if (!WFS_ExprDumpRawLitteral(osFilter, poExpr->papoSubExpr[(bAxisSwap) ? 1 : 0]))
return FALSE;
osFilter += " ";
if (!WFS_ExprDumpRawLitteral(osFilter, poExpr->papoSubExpr[(bAxisSwap) ? 0 : 1]))
return FALSE;
osFilter += "</gml:lowerCorner>";
osFilter += "<gml:upperCorner>";
if (!WFS_ExprDumpRawLitteral(osFilter, poExpr->papoSubExpr[(bAxisSwap) ? 3 : 2]))
return FALSE;
osFilter += " ";
if (!WFS_ExprDumpRawLitteral(osFilter, poExpr->papoSubExpr[(bAxisSwap) ? 2 : 3]))
return FALSE;
osFilter += "</gml:upperCorner>";
osFilter += "</gml:Envelope>";
return TRUE;
}
if( poExpr->nOperation == SWQ_CUSTOM_FUNC &&
EQUAL(poExpr->string_value, "ST_GeomFromText") )
{
OGRSpatialReference oSRS;
const char* pszSRSName = WFS_ExprGetSRSName( poExpr, 1, psOptions, oSRS );
OGRGeometry* poGeom = NULL;
char* pszWKT = (char*)poExpr->papoSubExpr[0]->string_value;
OGRGeometryFactory::createFromWkt(&pszWKT, NULL, &poGeom);
char** papszOptions = NULL;
papszOptions = CSLSetNameValue(papszOptions, "FORMAT", "GML3");
if( pszSRSName != NULL )
{
if( oSRS.EPSGTreatsAsLatLong() || oSRS.EPSGTreatsAsNorthingEasting() )
{
OGR_SRSNode *poGEOGCS = oSRS.GetAttrNode( "GEOGCS" );
if( poGEOGCS != NULL )
poGEOGCS->StripNodes( "AXIS" );
OGR_SRSNode *poPROJCS = oSRS.GetAttrNode( "PROJCS" );
if (poPROJCS != NULL && oSRS.EPSGTreatsAsNorthingEasting())
poPROJCS->StripNodes( "AXIS" );
}
if( EQUALN(pszSRSName, "urn:ogc:def:crs:EPSG::", strlen("urn:ogc:def:crs:EPSG::")) )
papszOptions = CSLSetNameValue(papszOptions, "GML3_LONGSRS", "YES");
else
papszOptions = CSLSetNameValue(papszOptions, "GML3_LONGSRS", "NO");
poGeom->assignSpatialReference(&oSRS);
}
papszOptions = CSLSetNameValue(papszOptions, "GMLID",
CPLSPrintf("id%d", psOptions->nUniqueGeomGMLId ++));
char* pszGML = OGR_G_ExportToGMLEx( (OGRGeometryH)poGeom, papszOptions );
osFilter += pszGML;
CSLDestroy(papszOptions);
delete poGeom;
CPLFree(pszGML);
return TRUE;
}
if( poExpr->nOperation == SWQ_CUSTOM_FUNC )
{
const char* pszName =
EQUAL(poExpr->string_value, "ST_Equals") ? "Equals" :
EQUAL(poExpr->string_value, "ST_Disjoint") ? "Disjoint" :
EQUAL(poExpr->string_value, "ST_Touches") ? "Touches" :
EQUAL(poExpr->string_value, "ST_Contains") ? "Contains" :
示例11: SetProjectionUI
void ProjectionDlg::SetUIFromProjection()
{
if (m_proj.IsDymaxion())
SetProjectionUI(PT_DYMAX);
else if (m_proj.IsGeographic())
SetProjectionUI(PT_GEO);
else
{
const char *proj_string = m_proj.GetProjectionName();
if (!strcmp(proj_string, SRS_PT_TRANSVERSE_MERCATOR))
{
if (m_proj.GetUTMZone() != 0)
SetProjectionUI(PT_UTM);
else
SetProjectionUI(PT_TM);
}
// Supposedly, Gauss-Kruger is just a form of Transverse Mercator
else if (!strcmp(proj_string, "Gauss_Kruger"))
SetProjectionUI(PT_TM);
else if (!strcmp(proj_string, SRS_PT_ALBERS_CONIC_EQUAL_AREA))
SetProjectionUI(PT_ALBERS);
else if (!strcmp(proj_string, SRS_PT_MERCATOR_1SP))
SetProjectionUI(PT_MERC);
else if (!strcmp(proj_string, SRS_PT_HOTINE_OBLIQUE_MERCATOR))
SetProjectionUI(PT_HOM);
else if (!strcmp(proj_string, SRS_PT_LAMBERT_CONFORMAL_CONIC_1SP))
SetProjectionUI(PT_LCC1SP);
else if (!strcmp(proj_string, SRS_PT_LAMBERT_CONFORMAL_CONIC_2SP))
SetProjectionUI(PT_LCC);
else if (!strcmp(proj_string, SRS_PT_LAMBERT_AZIMUTHAL_EQUAL_AREA))
SetProjectionUI(PT_LAEA);
else if (!strcmp(proj_string, SRS_PT_NEW_ZEALAND_MAP_GRID))
SetProjectionUI(PT_NZMG);
else if (!strcmp(proj_string, SRS_PT_SINUSOIDAL))
SetProjectionUI(PT_SINUS);
else if (!strcmp(proj_string, SRS_PT_STEREOGRAPHIC))
SetProjectionUI(PT_STEREO);
else if (!strcmp(proj_string, SRS_PT_OBLIQUE_STEREOGRAPHIC))
SetProjectionUI(PT_OS);
else if (!strcmp(proj_string, SRS_PT_POLAR_STEREOGRAPHIC))
SetProjectionUI(PT_PS);
else if (!strcmp(proj_string, SRS_PT_KROVAK))
SetProjectionUI(PT_KROVAK);
// I've seen a .prj file for Stereo70 which refers to the projection
// as "Double_Stereographic", but this is unknown by OGR. We do know
// about Oblique Stereographic, which is what i believe is meant.
else if (!strcmp(proj_string, "Double_Stereographic"))
{
OGR_SRSNode *node = m_proj.GetAttrNode("PROJECTION");
node = node->GetChild(0);
node->SetValue(SRS_PT_OBLIQUE_STEREOGRAPHIC);
SetProjectionUI(PT_OS);
}
else
{
wxString str = _("Unknown projection: ");
str += wxString(proj_string, wxConvUTF8);
wxMessageBox(str);
}
}
}
示例12: CPL_TO_BOOL
int OGRProj4CT::InitializeNoLock( OGRSpatialReference * poSourceIn,
OGRSpatialReference * poTargetIn )
{
if( poSourceIn == NULL || poTargetIn == NULL )
return FALSE;
poSRSSource = poSourceIn->Clone();
poSRSTarget = poTargetIn->Clone();
bSourceLatLong = CPL_TO_BOOL(poSRSSource->IsGeographic());
bTargetLatLong = CPL_TO_BOOL(poSRSTarget->IsGeographic());
/* -------------------------------------------------------------------- */
/* Setup source and target translations to radians for lat/long */
/* systems. */
/* -------------------------------------------------------------------- */
dfSourceToRadians = DEG_TO_RAD;
bSourceWrap = false;
dfSourceWrapLong = 0.0;
if( bSourceLatLong )
{
OGR_SRSNode *poUNITS = poSRSSource->GetAttrNode( "GEOGCS|UNIT" );
if( poUNITS && poUNITS->GetChildCount() >= 2 )
{
dfSourceToRadians = CPLAtof(poUNITS->GetChild(1)->GetValue());
if( dfSourceToRadians == 0.0 )
dfSourceToRadians = DEG_TO_RAD;
}
}
dfTargetFromRadians = RAD_TO_DEG;
bTargetWrap = false;
dfTargetWrapLong = 0.0;
if( bTargetLatLong )
{
OGR_SRSNode *poUNITS = poSRSTarget->GetAttrNode( "GEOGCS|UNIT" );
if( poUNITS && poUNITS->GetChildCount() >= 2 )
{
double dfTargetToRadians = CPLAtof(poUNITS->GetChild(1)->GetValue());
if( dfTargetToRadians != 0.0 )
dfTargetFromRadians = 1 / dfTargetToRadians;
}
}
/* -------------------------------------------------------------------- */
/* Preliminary logic to setup wrapping. */
/* -------------------------------------------------------------------- */
if( CPLGetConfigOption( "CENTER_LONG", NULL ) != NULL )
{
bSourceWrap = true;
bTargetWrap = true;
dfSourceWrapLong = dfTargetWrapLong =
CPLAtof(CPLGetConfigOption( "CENTER_LONG", "" ));
CPLDebug( "OGRCT", "Wrap at %g.", dfSourceWrapLong );
}
const char *pszCENTER_LONG =
poSRSSource->GetExtension( "GEOGCS", "CENTER_LONG" );
if( pszCENTER_LONG != NULL )
{
dfSourceWrapLong = CPLAtof(pszCENTER_LONG);
bSourceWrap = true;
CPLDebug( "OGRCT", "Wrap source at %g.", dfSourceWrapLong );
}
pszCENTER_LONG = poSRSTarget->GetExtension( "GEOGCS", "CENTER_LONG" );
if( pszCENTER_LONG != NULL )
{
dfTargetWrapLong = CPLAtof(pszCENTER_LONG);
bTargetWrap = true;
CPLDebug( "OGRCT", "Wrap target at %g.", dfTargetWrapLong );
}
bCheckWithInvertProj =
CPLTestBool(CPLGetConfigOption( "CHECK_WITH_INVERT_PROJ", "NO" ));
// The threshold is experimental. Works well with the cases of ticket #2305.
if( bSourceLatLong )
dfThreshold = CPLAtof(CPLGetConfigOption( "THRESHOLD", ".1" ));
else
// 1 works well for most projections, except for +proj=aeqd that
// requires a tolerance of 10000.
dfThreshold = CPLAtof(CPLGetConfigOption( "THRESHOLD", "10000" ));
// OGRThreadSafety: The following variable is not a thread safety issue
// since the only issue is incrementing while accessing which at worse
// means debug output could be one "increment" late.
static int nDebugReportCount = 0;
char *pszSrcProj4Defn = NULL;
if( poSRSSource->exportToProj4( &pszSrcProj4Defn ) != OGRERR_NONE )
{
CPLFree( pszSrcProj4Defn );
return FALSE;
}
//.........这里部分代码省略.........
示例13: importXMLUnits
static void importXMLUnits(CPLXMLNode *psSrcXML, const char *pszClass,
OGRSpatialReference *poSRS, const char *pszTarget)
{
const char *pszUnitName, *pszUnitsPer;
OGR_SRSNode *poNode = poSRS->GetAttrNode(pszTarget);
OGR_SRSNode *poUnits;
CPLAssert(EQUAL(pszClass, "AngularUnit")
|| EQUAL(pszClass, "LinearUnit"));
psSrcXML = CPLGetXMLNode(psSrcXML, pszClass);
if (psSrcXML == NULL)
goto DefaultTarget;
pszUnitName = CPLGetXMLValue(psSrcXML, "NameSet.name", "unnamed");
if (EQUAL(pszClass, "AngularUnit"))
pszUnitsPer = CPLGetXMLValue(psSrcXML, "radiansPerUnit", NULL);
else
pszUnitsPer = CPLGetXMLValue(psSrcXML, "metresPerUnit", NULL);
if (pszUnitsPer == NULL)
{
CPLDebug("OGR_SRS_XML",
"Missing PerUnit value for %s.",
pszClass);
goto DefaultTarget;
}
if (poNode == NULL)
{
CPLDebug("OGR_SRS_XML", "Can't find %s in importXMLUnits.",
pszTarget);
goto DefaultTarget;
}
if (poNode->FindChild("UNIT") != -1)
{
poUnits = poNode->GetChild(poNode->FindChild("UNIT"));
poUnits->GetChild(0)->SetValue(pszUnitName);
poUnits->GetChild(1)->SetValue(pszUnitsPer);
}
else
{
poUnits = new OGR_SRSNode("UNIT");
poUnits->AddChild(new OGR_SRSNode(pszUnitName));
poUnits->AddChild(new OGR_SRSNode(pszUnitsPer));
poNode->AddChild(poUnits);
}
return;
DefaultTarget:
poUnits = new OGR_SRSNode("UNIT");
if (EQUAL(pszClass, "AngularUnit"))
{
poUnits->AddChild(new OGR_SRSNode(SRS_UA_DEGREE));
poUnits->AddChild(new OGR_SRSNode(SRS_UA_DEGREE_CONV));
}
else
{
poUnits->AddChild(new OGR_SRSNode(SRS_UL_METER));
poUnits->AddChild(new OGR_SRSNode("1.0"));
}
poNode->AddChild(poUnits);
}
示例14: ClearChildren
OGRErr OGR_SRSNode::importFromWkt( char ** ppszInput, int nRecLevel, int* pnNodes )
{
const char *pszInput = *ppszInput;
int bInQuotedString = FALSE;
/* Sanity checks */
if( nRecLevel == 10 )
{
return OGRERR_CORRUPT_DATA;
}
if( *pnNodes == 1000 )
{
return OGRERR_CORRUPT_DATA;
}
/* -------------------------------------------------------------------- */
/* Clear any existing children of this node. */
/* -------------------------------------------------------------------- */
ClearChildren();
/* -------------------------------------------------------------------- */
/* Read the ``value'' for this node. */
/* -------------------------------------------------------------------- */
char szToken[512];
int nTokenLen = 0;
while( *pszInput != '\0' && nTokenLen < (int) sizeof(szToken)-1 )
{
if( *pszInput == '"' )
{
bInQuotedString = !bInQuotedString;
}
else if( !bInQuotedString
&& (*pszInput == '[' || *pszInput == ']' || *pszInput == ','
|| *pszInput == '(' || *pszInput == ')' ) )
{
break;
}
else if( !bInQuotedString
&& (*pszInput == ' ' || *pszInput == '\t'
|| *pszInput == 10 || *pszInput == 13) )
{
/* just skip over whitespace */
}
else
{
szToken[nTokenLen++] = *pszInput;
}
pszInput++;
}
if( *pszInput == '\0' || nTokenLen == sizeof(szToken) - 1 )
return OGRERR_CORRUPT_DATA;
szToken[nTokenLen++] = '\0';
SetValue( szToken );
/* -------------------------------------------------------------------- */
/* Read children, if we have a sublist. */
/* -------------------------------------------------------------------- */
if( *pszInput == '[' || *pszInput == '(' )
{
do
{
OGR_SRSNode *poNewChild;
OGRErr eErr;
pszInput++; // Skip bracket or comma.
poNewChild = new OGR_SRSNode();
(*pnNodes) ++;
eErr = poNewChild->importFromWkt( (char **) &pszInput, nRecLevel + 1, pnNodes );
if( eErr != OGRERR_NONE )
{
delete poNewChild;
return eErr;
}
AddChild( poNewChild );
// swallow whitespace
while( isspace(*pszInput) )
pszInput++;
} while( *pszInput == ',' );
if( *pszInput != ')' && *pszInput != ']' )
return OGRERR_CORRUPT_DATA;
pszInput++;
}
*ppszInput = (char *) pszInput;
return OGRERR_NONE;
}
示例15: GDALApplyVerticalShiftGrid
//.........这里部分代码省略.........
const char* pszGridProjection = GDALGetProjectionRef(hGridDataset);
if( pszGridProjection == nullptr || pszGridProjection[0] == '\0' )
{
CPLError(CE_Failure, CPLE_NotSupported,
"Grid dataset has no projection.");
return nullptr;
}
if( GDALGetRasterCount(hGridDataset) != 1 )
{
CPLError(CE_Failure, CPLE_NotSupported,
"Only single band grid dataset is supported.");
return nullptr;
}
GDALDataType eDT = GDALGetRasterDataType(GDALGetRasterBand(hSrcDataset,1));
const char* pszDataType = CSLFetchNameValue(papszOptions, "DATATYPE");
if( pszDataType )
eDT = GDALGetDataTypeByName(pszDataType);
if( eDT == GDT_Unknown )
{
CPLError(CE_Failure, CPLE_NotSupported,
"Invalid DATATYPE=%s", pszDataType);
return nullptr;
}
const int nSrcXSize = GDALGetRasterXSize(hSrcDataset);
const int nSrcYSize = GDALGetRasterYSize(hSrcDataset);
OGRSpatialReference oSRS;
CPLString osSrcProjection(pszSrcProjection);
oSRS.SetFromUserInput(osSrcProjection);
if( oSRS.IsCompound() )
{
OGR_SRSNode* poNode = oSRS.GetRoot()->GetChild(1);
if( poNode != nullptr )
{
char* pszWKT = nullptr;
poNode->exportToWkt(&pszWKT);
osSrcProjection = pszWKT;
CPLFree(pszWKT);
}
}
void* hTransform = GDALCreateGenImgProjTransformer3( pszGridProjection,
adfGridGT,
osSrcProjection,
adfSrcGT );
if( hTransform == nullptr )
return nullptr;
GDALWarpOptions* psWO = GDALCreateWarpOptions();
psWO->hSrcDS = hGridDataset;
psWO->eResampleAlg = GRA_Bilinear;
const char* pszResampling = CSLFetchNameValue(papszOptions, "RESAMPLING");
if( pszResampling )
{
if( EQUAL(pszResampling, "NEAREST") )
psWO->eResampleAlg = GRA_NearestNeighbour;
else if( EQUAL(pszResampling, "BILINEAR") )
psWO->eResampleAlg = GRA_Bilinear;
else if( EQUAL(pszResampling, "CUBIC") )
psWO->eResampleAlg = GRA_Cubic;
}
psWO->eWorkingDataType = GDT_Float32;
int bHasNoData = FALSE;
const double dfSrcNoData = GDALGetRasterNoDataValue(
GDALGetRasterBand(hGridDataset, 1), &bHasNoData );