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

📄 ntf_estlayers.cpp

📁 支持各种栅格图像和矢量图像读取的库
💻 CPP
📖 第 1 页 / 共 5 页
字号:
/****************************************************************************** * $Id: ntf_estlayers.cpp 10646 2007-01-18 02:38:10Z warmerdam $ * * Project:  NTF Translator * Purpose:  NTFFileReader methods related to establishing the schemas *           of features that could occur in this product and the functions *           for actually performing the NTFRecord to OGRFeature conversion. * Author:   Frank Warmerdam, warmerdam@pobox.com * ****************************************************************************** * Copyright (c) 1999, Frank Warmerdam * * 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. ****************************************************************************/#include <stdarg.h>#include "ntf.h"#include "cpl_string.h"CPL_CVSID("$Id: ntf_estlayers.cpp 10646 2007-01-18 02:38:10Z warmerdam $");#define MAX_LINK        5000/************************************************************************//*                         TranslateCodePoint()                         *//*                                                                      *//*      Used for code point, and code point plus.                       *//************************************************************************/static OGRFeature *TranslateCodePoint( NTFFileReader *poReader,                                       OGRNTFLayer *poLayer,                                       NTFRecord **papoGroup ){    if( CSLCount((char **) papoGroup) < 2        || papoGroup[0]->GetType() != NRT_POINTREC        || papoGroup[1]->GetType() != NRT_GEOMETRY )        return NULL;            OGRFeature  *poFeature = new OGRFeature( poLayer->GetLayerDefn() );    // POINT_ID    poFeature->SetField( 0, atoi(papoGroup[0]->GetField( 3, 8 )) );    // Geometry    poFeature->SetGeometryDirectly(poReader->ProcessGeometry(papoGroup[1]));    // Attributes    if( EQUAL(poLayer->GetLayerDefn()->GetName(),"CODE_POINT") )        poReader->ApplyAttributeValues( poFeature, papoGroup,                                        "PC", 1, "PQ", 2, "PR", 3, "TP", 4,                                        "DQ", 5, "RP", 6, "BP", 7, "PD", 8,                                        "MP", 9, "UM", 10, "RV", 11,                                         NULL );    else        poReader->ApplyAttributeValues( poFeature, papoGroup,                                        "PC", 1, "PQ", 2, "PR", 3, "TP", 4,                                        "DQ", 5, "RP", 6, "BP", 7, "PD", 8,                                        "MP", 9, "UM", 10, "RV", 11,                                        "RH", 12, "LH", 13, "CC", 14,                                        "DC", 15, "WC", 16,                                         NULL );    return poFeature;}/************************************************************************//*                       TranslateAddressPoint()                        *//************************************************************************/static OGRFeature *TranslateAddressPoint( NTFFileReader *poReader,                                          OGRNTFLayer *poLayer,                                          NTFRecord **papoGroup ){    if( CSLCount((char **) papoGroup) < 2        || papoGroup[0]->GetType() != NRT_POINTREC        || papoGroup[1]->GetType() != NRT_GEOMETRY )        return NULL;            OGRFeature  *poFeature = new OGRFeature( poLayer->GetLayerDefn() );    // POINT_ID    poFeature->SetField( 0, atoi(papoGroup[0]->GetField( 3, 8 )) );    // CHG_TYPE    poFeature->SetField( 17, papoGroup[0]->GetField( 22, 22 ) );    // CHG_DATE    poFeature->SetField( 18, papoGroup[0]->GetField( 23, 28 ) );    // Geometry    poFeature->SetGeometryDirectly(poReader->ProcessGeometry(papoGroup[1]));    // Attributes    poReader->ApplyAttributeValues( poFeature, papoGroup,                                    "OA", 1, "ON", 2, "DP", 3, "PB", 4,                                    "SB", 5, "BD", 6, "BN", 7, "DR", 8,                                    "TN", 9, "DD", 10, "DL", 11, "PT", 12,                                    "CN", 13, "PC", 14, "SF", 15, "RV", 16,                                    NULL );    return poFeature;}/************************************************************************//*                        TranslateOscarPoint()                         *//*                                                                      *//*      Used for OSCAR Traffic and Asset datasets.                      *//************************************************************************/static OGRFeature *TranslateOscarPoint( NTFFileReader *poReader,                                        OGRNTFLayer *poLayer,                                        NTFRecord **papoGroup ){    if( CSLCount((char **) papoGroup) < 2        || papoGroup[0]->GetType() != NRT_POINTREC        || papoGroup[1]->GetType() != NRT_GEOMETRY )        return NULL;            OGRFeature  *poFeature = new OGRFeature( poLayer->GetLayerDefn() );    // POINT_ID    poFeature->SetField( 0, atoi(papoGroup[0]->GetField( 3, 8 )) );    // Geometry    int         nGeomId;        poFeature->SetGeometryDirectly(poReader->ProcessGeometry(papoGroup[1],                                                             &nGeomId));    poFeature->SetField( 1, nGeomId );    // Attributes    poReader->ApplyAttributeValues( poFeature, papoGroup,                                    "FC", 2, "OD", 3, "JN", 4, "SN", 5,                                    NULL );    return poFeature;}/************************************************************************//*                         TranslateOscarLine()                         *//************************************************************************/static OGRFeature *TranslateOscarLine( NTFFileReader *poReader,                                       OGRNTFLayer *poLayer,                                       NTFRecord **papoGroup ){    if( CSLCount((char **) papoGroup) < 2        || papoGroup[0]->GetType() != NRT_LINEREC        || papoGroup[1]->GetType() != NRT_GEOMETRY )        return NULL;            OGRFeature  *poFeature = new OGRFeature( poLayer->GetLayerDefn() );    // LINE_ID    poFeature->SetField( 0, atoi(papoGroup[0]->GetField( 3, 8 )) );    // Geometry    int         nGeomId;        poFeature->SetGeometryDirectly(poReader->ProcessGeometry(papoGroup[1],                                                             &nGeomId));    poFeature->SetField( 1, nGeomId );    // Attributes    poReader->ApplyAttributeValues( poFeature, papoGroup,                                    "FC", 2, "OD", 3, "PN", 4, "LL", 5,                                    "SC", 6, "FW", 7, "RN", 8, "TR", 9,                                    NULL );    return poFeature;}/************************************************************************//*                      TranslateOscarRoutePoint()                      *//************************************************************************/static OGRFeature *TranslateOscarRoutePoint( NTFFileReader *poReader,                                             OGRNTFLayer *poLayer,                                             NTFRecord **papoGroup ){    if( CSLCount((char **) papoGroup) < 2        || papoGroup[0]->GetType() != NRT_POINTREC        || papoGroup[1]->GetType() != NRT_GEOMETRY )        return NULL;            OGRFeature  *poFeature = new OGRFeature( poLayer->GetLayerDefn() );    // POINT_ID    poFeature->SetField( 0, atoi(papoGroup[0]->GetField( 3, 8 )) );    // Geometry    int         nGeomId;        poFeature->SetGeometryDirectly(poReader->ProcessGeometry(papoGroup[1],                                                             &nGeomId));    poFeature->SetField( 1, nGeomId );    // Attributes    poReader->ApplyAttributeValues( poFeature, papoGroup,                                    "FC", 2, "OD", 3, "JN", 4, "SN", 5,                                    "NP", 6, "RT", 8,                                    NULL );    // PARENT_OSODR    char        **papszTypes, **papszValues;    if( poReader->ProcessAttRecGroup( papoGroup, &papszTypes, &papszValues ) )    {        char    **papszOSODRList = NULL;        for( int i = 0; papszTypes != NULL && papszTypes[i] != NULL; i++ )        {            if( EQUAL(papszTypes[i],"PO") )                papszOSODRList = CSLAddString(papszOSODRList,papszValues[i]);        }        poFeature->SetField( 7, papszOSODRList );        CPLAssert( CSLCount(papszOSODRList) ==                   poFeature->GetFieldAsInteger( 6 ) );        CSLDestroy( papszOSODRList );        CSLDestroy( papszTypes );        CSLDestroy( papszValues );    }    return poFeature;}/************************************************************************//*                      TranslateOscarRouteLine()                       *//************************************************************************/static OGRFeature *TranslateOscarRouteLine( NTFFileReader *poReader,                                            OGRNTFLayer *poLayer,                                            NTFRecord **papoGroup ){    if( CSLCount((char **) papoGroup) < 2        || papoGroup[0]->GetType() != NRT_LINEREC        || papoGroup[1]->GetType() != NRT_GEOMETRY )        return NULL;            OGRFeature  *poFeature = new OGRFeature( poLayer->GetLayerDefn() );    // LINE_ID    poFeature->SetField( 0, atoi(papoGroup[0]->GetField( 3, 8 )) );    // Geometry    int         nGeomId;        poFeature->SetGeometryDirectly(poReader->ProcessGeometry(papoGroup[1],                                                             &nGeomId));    poFeature->SetField( 1, nGeomId );    // Attributes    poReader->ApplyAttributeValues( poFeature, papoGroup,                                    "FC", 2, "OD", 3, "PN", 4, "LL", 5,                                    "RN", 6, "TR", 7, "NP", 8,                                     NULL );    // PARENT_OSODR    char        **papszTypes, **papszValues;    if( poReader->ProcessAttRecGroup( papoGroup, &papszTypes, &papszValues ) )    {        char    **papszOSODRList = NULL;        for( int i = 0; papszTypes != NULL && papszTypes[i] != NULL; i++ )        {            if( EQUAL(papszTypes[i],"PO") )                papszOSODRList = CSLAddString(papszOSODRList,papszValues[i]);        }        poFeature->SetField( 9, papszOSODRList );        CPLAssert( CSLCount(papszOSODRList) ==                   poFeature->GetFieldAsInteger( 8 ) );        CSLDestroy( papszOSODRList );        CSLDestroy( papszTypes );        CSLDestroy( papszValues );    }    return poFeature;}/************************************************************************//*                       TranslateOscarComment()                        *//************************************************************************/static OGRFeature *TranslateOscarComment( NTFFileReader *poReader,                                          OGRNTFLayer *poLayer,                                          NTFRecord **papoGroup ){    if( CSLCount((char **) papoGroup) != 1         || papoGroup[0]->GetType() != NRT_COMMENT )        return NULL;            OGRFeature  *poFeature = new OGRFeature( poLayer->GetLayerDefn() );    // RECORD_TYPE    poFeature->SetField( 0, atoi(papoGroup[0]->GetField( 3, 4 )) );    // RECORD_ID    poFeature->SetField( 1, papoGroup[0]->GetField( 5, 17 ) );    // CHANGE_TYPE    poFeature->SetField( 2, papoGroup[0]->GetField( 18, 18 ) );    return poFeature;}/************************************************************************//*                     TranslateOscarNetworkPoint()                     *//************************************************************************/static OGRFeature *TranslateOscarNetworkPoint( NTFFileReader *poReader,                                               OGRNTFLayer *poLayer,                                               NTFRecord **papoGroup ){    if( CSLCount((char **) papoGroup) < 2        || papoGroup[0]->GetType() != NRT_POINTREC        || papoGroup[1]->GetType() != NRT_GEOMETRY )        return NULL;            OGRFeature  *poFeature = new OGRFeature( poLayer->GetLayerDefn() );    // POINT_ID    poFeature->SetField( 0, atoi(papoGroup[0]->GetField( 3, 8 )) );    // Geometry    int         nGeomId;        poFeature->SetGeometryDirectly(poReader->ProcessGeometry(papoGroup[1],                                                             &nGeomId));    poFeature->SetField( 1, nGeomId );

⌨️ 快捷键说明

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