⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ogr_srsnode.cpp

📁 在linux环境下
💻 CPP
📖 第 1 页 / 共 3 页
字号:
/****************************************************************************** * $Id: ogr_srsnode.cpp,v 1.26 2003/05/28 19:16:42 warmerda Exp $ * * Project:  OpenGIS Simple Features Reference Implementation * Purpose:  The OGR_SRSNode class. * Author:   Frank Warmerdam, warmerdam@pobox.com * ****************************************************************************** * Copyright (c) 1999,  Les Technologies SoftMap Inc. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. ****************************************************************************** * * $Log: ogr_srsnode.cpp,v $ * Revision 1.26  2003/05/28 19:16:42  warmerda * fixed up argument names and stuff for docs * * Revision 1.25  2003/03/12 14:25:31  warmerda * Fixed bug 294 re: quoting of axis directions * * Revision 1.24  2003/01/08 18:14:28  warmerda * added FixupOrdering() * * Revision 1.23  2002/12/10 04:06:57  warmerda * Added support for a parent pointer in OGR_SRSNode. * Ensure that authority codes are quoted (bugzilla 201) * * Revision 1.22  2002/07/25 13:13:36  warmerda * fixed const correctness of some docs * * Revision 1.21  2002/04/18 14:22:45  warmerda * made OGRSpatialReference and co 'const correct' * * Revision 1.20  2002/03/05 14:25:14  warmerda * expand tabs * * Revision 1.19  2002/02/21 20:09:04  warmerda * Drop white space outside of quotes when ingesting WKT.  This makes the * ingest of 'pretty' WKT possible. * * Revision 1.18  2002/01/24 16:21:29  warmerda * added StripNodes method, removed simplify flag from pretty wkt * * Revision 1.17  2002/01/18 15:30:04  warmerda * fixed serious bug in DeleteChild() * * Revision 1.16  2001/12/01 17:01:50  warmerda * don't omit empty child nodes when exporting pretty wkt * * Revision 1.15  2001/10/11 19:29:57  warmerda * fixed redeclaration of i * * Revision 1.14  2001/10/11 19:26:16  warmerda * added applyRemapping * * Revision 1.13  2001/07/18 05:03:05  warmerda * added CPL_CVSID * * Revision 1.12  2001/01/19 21:10:46  warmerda * replaced tabs * * Revision 1.11  2000/07/09 20:48:02  warmerda * added exportToPrettyWkt * * Revision 1.10  2000/03/31 14:40:49  warmerda * Fixed multiple declaration of i in GetNode(). * * Revision 1.9  2000/03/16 19:03:20  warmerda * added DestroyChild(), FindChild() * * Revision 1.8  2000/02/25 13:23:25  warmerda * removed include of ogr_geometry.h * * Revision 1.7  2000/01/26 21:22:18  warmerda * added tentative MakeValueSafe implementation * * Revision 1.6  2000/01/12 04:12:55  warmerda * Fixed bug in InsertChild(). * * Revision 1.5  2000/01/11 22:12:13  warmerda * added InsertChild * * Revision 1.4  1999/11/18 19:02:19  warmerda * expanded tabs * * Revision 1.3  1999/07/29 18:09:20  warmerda * Avoid use of isdigit() * * Revision 1.2  1999/07/29 18:00:44  warmerda * modified quoting rules for WKT to more closely match standard examples * * Revision 1.1  1999/06/25 20:20:53  warmerda * New * */#include "ogr_spatialref.h"#include "ogr_p.h"CPL_CVSID("$Id: ogr_srsnode.cpp,v 1.26 2003/05/28 19:16:42 warmerda Exp $");/************************************************************************//*                            OGR_SRSNode()                             *//************************************************************************//** * Constructor. * * @param pszValueIn this optional parameter can be used to initialize * the value of the node upon creation.  If omitted the node will be created * with a value of "".  Newly created OGR_SRSNodes have no children. */OGR_SRSNode::OGR_SRSNode( const char * pszValueIn ){    pszValue = CPLStrdup( pszValueIn );    nChildren = 0;    papoChildNodes = NULL;    poParent = NULL;}/************************************************************************//*                            ~OGR_SRSNode()                            *//************************************************************************/OGR_SRSNode::~OGR_SRSNode(){    CPLFree( pszValue );    ClearChildren();}/************************************************************************//*                           ClearChildren()                            *//************************************************************************/void OGR_SRSNode::ClearChildren(){    for( int i = 0; i < nChildren; i++ )    {        delete papoChildNodes[i];    }    CPLFree( papoChildNodes );    papoChildNodes = NULL;    nChildren = 0;}/************************************************************************//*                           GetChildCount()                            *//************************************************************************//** * \fn int OGR_SRSNode::GetChildCount() const; * * Get number of children nodes. * * @return 0 for leaf nodes, or the number of children nodes.  *//************************************************************************//*                              GetChild()                              *//************************************************************************//** * Fetch requested child. * * @param iChild the index of the child to fetch, from 0 to * GetChildCount() - 1. * * @return a pointer to the child OGR_SRSNode, or NULL if there is no such * child.  */OGR_SRSNode *OGR_SRSNode::GetChild( int iChild ){    if( iChild < 0 || iChild >= nChildren )        return NULL;    else        return papoChildNodes[iChild];}const OGR_SRSNode *OGR_SRSNode::GetChild( int iChild ) const{    if( iChild < 0 || iChild >= nChildren )        return NULL;    else        return papoChildNodes[iChild];}/************************************************************************//*                              GetNode()                               *//************************************************************************//** * Find named node in tree. * * This method does a pre-order traversal of the node tree searching for * a node with this exact value (case insensitive), and returns it.  Leaf * nodes are not considered, under the assumption that they are just * attribute value nodes. * * If a node appears more than once in the tree (such as UNIT for instance), * the first encountered will be returned.  Use GetNode() on a subtree to be * more specific.  * * @param pszName the name of the node to search for. * * @return a pointer to the node found, or NULL if none. */OGR_SRSNode *OGR_SRSNode::GetNode( const char * pszName ){    int  i;    if( this == NULL )        return NULL;        if( nChildren > 0 && EQUAL(pszName,pszValue) )        return this;/* -------------------------------------------------------------------- *//*      First we check the immediate children so we will get an         *//*      immediate child in preference to a subchild.                    *//* -------------------------------------------------------------------- */    for( i = 0; i < nChildren; i++ )    {        if( EQUAL(papoChildNodes[i]->pszValue,pszName)             && papoChildNodes[i]->nChildren > 0 )            return papoChildNodes[i];    }/* -------------------------------------------------------------------- *//*      Then get each child to check their children.                    *//* -------------------------------------------------------------------- */    for( i = 0; i < nChildren; i++ )    {        OGR_SRSNode *poNode;        poNode = papoChildNodes[i]->GetNode( pszName );        if( poNode != NULL )            return poNode;    }    return NULL;}const OGR_SRSNode *OGR_SRSNode::GetNode( const char * pszName ) const{    return ((OGR_SRSNode *) this)->GetNode( pszName );}/************************************************************************//*                              AddChild()                              *//************************************************************************//** * Add passed node as a child of target node. * * Note that ownership of the passed node is assumed by the node on which * the method is invoked ... use the Clone() method if the original is to * be preserved.  New children are always added at the end of the list. * * @param poNew the node to add as a child. */void OGR_SRSNode::AddChild( OGR_SRSNode * poNew ){    InsertChild( poNew, nChildren );}/************************************************************************//*                            InsertChild()                             *//************************************************************************//** * Insert the passed node as a child of target node, at the indicated * position.  * * Note that ownership of the passed node is assumed by the node on which * the method is invoked ... use the Clone() method if the original is to * be preserved.  All existing children at location iChild and beyond are * push down one space to make space for the new child.  * * @param poNew the node to add as a child. * @param iChild position to insert, use 0 to insert at the beginning.  */void OGR_SRSNode::InsertChild( OGR_SRSNode * poNew, int iChild ){    if( iChild > nChildren )        iChild = nChildren;    nChildren++;    papoChildNodes = (OGR_SRSNode **)        CPLRealloc( papoChildNodes, sizeof(void*) * nChildren );    memmove( papoChildNodes + iChild + 1, papoChildNodes + iChild,             sizeof(void*) * (nChildren - iChild - 1) );        papoChildNodes[iChild] = poNew;    poNew->poParent = this;}/************************************************************************//*                            DestroyChild()                            *//************************************************************************//** * Remove a child node, and it's subtree. *

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -