LCOV - code coverage report
Current view: top level - frmts/sdts - sdtspointreader.cpp (source / functions) Hit Total Coverage
Test: gdal_filtered.info Lines: 34 51 66.7 %
Date: 2024-11-21 22:18:42 Functions: 9 11 81.8 %

          Line data    Source code
       1             : /******************************************************************************
       2             :  *
       3             :  * Project:  SDTS Translator
       4             :  * Purpose:  Implementation of SDTSPointReader and SDTSRawPoint classes.
       5             :  * Author:   Frank Warmerdam, warmerdam@pobox.com
       6             :  *
       7             :  ******************************************************************************
       8             :  * Copyright (c) 1999, Frank Warmerdam
       9             :  *
      10             :  * SPDX-License-Identifier: MIT
      11             :  ****************************************************************************/
      12             : 
      13             : #include "sdts_al.h"
      14             : 
      15             : /************************************************************************/
      16             : /* ==================================================================== */
      17             : /*                            SDTSRawPoint                              */
      18             : /*                                                                      */
      19             : /*      This is a simple class for holding the data related with a      */
      20             : /*      point feature.                                                  */
      21             : /* ==================================================================== */
      22             : /************************************************************************/
      23             : 
      24             : /************************************************************************/
      25             : /*                            SDTSRawPoint()                            */
      26             : /************************************************************************/
      27             : 
      28         129 : SDTSRawPoint::SDTSRawPoint() : dfX(0.0), dfY(0.0), dfZ(0.0)
      29             : {
      30         129 :     nAttributes = 0;
      31         129 : }
      32             : 
      33             : /************************************************************************/
      34             : /*                           ~STDSRawPoint()                            */
      35             : /************************************************************************/
      36             : 
      37         258 : SDTSRawPoint::~SDTSRawPoint()
      38             : {
      39         258 : }
      40             : 
      41             : /************************************************************************/
      42             : /*                                Read()                                */
      43             : /*                                                                      */
      44             : /*      Read a record from the passed SDTSPointReader, and assign the   */
      45             : /*      values from that record to this point.  This is the bulk of     */
      46             : /*      the work in this whole file.                                    */
      47             : /************************************************************************/
      48             : 
      49         129 : int SDTSRawPoint::Read(SDTS_IREF *poIREF, DDFRecord *poRecord)
      50             : 
      51             : {
      52             :     /* ==================================================================== */
      53             :     /*      Loop over fields in this record, looking for those we           */
      54             :     /*      recognise, and need.                                            */
      55             :     /* ==================================================================== */
      56         551 :     for (int iField = 0; iField < poRecord->GetFieldCount(); iField++)
      57             :     {
      58         422 :         DDFField *poField = poRecord->GetField(iField);
      59         422 :         if (poField == nullptr)
      60           0 :             return FALSE;
      61         422 :         DDFFieldDefn *poFieldDefn = poField->GetFieldDefn();
      62         422 :         if (poFieldDefn == nullptr)
      63           0 :             return FALSE;
      64             : 
      65         422 :         const char *pszFieldName = poFieldDefn->GetName();
      66             : 
      67         422 :         if (EQUAL(pszFieldName, "PNTS"))
      68         129 :             oModId.Set(poField);
      69             : 
      70         293 :         else if (EQUAL(pszFieldName, "ATID"))
      71           0 :             ApplyATID(poField);
      72             : 
      73         293 :         else if (EQUAL(pszFieldName, "ARID"))
      74             :         {
      75          35 :             oAreaId.Set(poField);
      76             :         }
      77         258 :         else if (EQUAL(pszFieldName, "SADR"))
      78             :         {
      79         129 :             poIREF->GetSADR(poField, 1, &dfX, &dfY, &dfZ);
      80             :         }
      81             :     }
      82             : 
      83         129 :     return TRUE;
      84             : }
      85             : 
      86             : /************************************************************************/
      87             : /*                                Dump()                                */
      88             : /************************************************************************/
      89             : 
      90           0 : void SDTSRawPoint::Dump(FILE *fp)
      91             : 
      92             : {
      93           0 :     fprintf(fp, "SDTSRawPoint %s: ", oModId.GetName());
      94             : 
      95           0 :     if (oAreaId.nRecord != -1)
      96           0 :         fprintf(fp, " AreaId=%s", oAreaId.GetName());
      97             : 
      98           0 :     for (int i = 0; i < nAttributes; i++)
      99           0 :         fprintf(fp, "  ATID[%d]=%s", i, paoATID[i].GetName());
     100             : 
     101           0 :     fprintf(fp, "  Vertex = (%.2f,%.2f,%.2f)\n", dfX, dfY, dfZ);
     102           0 : }
     103             : 
     104             : /************************************************************************/
     105             : /* ==================================================================== */
     106             : /*                             SDTSPointReader                          */
     107             : /*                                                                      */
     108             : /*      This is the class used to read a point module.                  */
     109             : /* ==================================================================== */
     110             : /************************************************************************/
     111             : 
     112             : /************************************************************************/
     113             : /*                           SDTSPointReader()                          */
     114             : /************************************************************************/
     115             : 
     116           3 : SDTSPointReader::SDTSPointReader(SDTS_IREF *poIREFIn) : poIREF(poIREFIn)
     117             : {
     118           3 : }
     119             : 
     120             : /************************************************************************/
     121             : /*                             ~SDTSLineReader()                        */
     122             : /************************************************************************/
     123             : 
     124           6 : SDTSPointReader::~SDTSPointReader()
     125             : {
     126           6 : }
     127             : 
     128             : /************************************************************************/
     129             : /*                               Close()                                */
     130             : /************************************************************************/
     131             : 
     132           0 : void SDTSPointReader::Close()
     133             : 
     134             : {
     135           0 :     oDDFModule.Close();
     136           0 : }
     137             : 
     138             : /************************************************************************/
     139             : /*                                Open()                                */
     140             : /*                                                                      */
     141             : /*      Open the requested line file, and prepare to start reading      */
     142             : /*      data records.                                                   */
     143             : /************************************************************************/
     144             : 
     145           3 : int SDTSPointReader::Open(const char *pszFilename)
     146             : 
     147             : {
     148           3 :     return oDDFModule.Open(pszFilename);
     149             : }
     150             : 
     151             : /************************************************************************/
     152             : /*                            GetNextPoint()                            */
     153             : /*                                                                      */
     154             : /*      Fetch the next feature as an STDSRawPoint.                      */
     155             : /************************************************************************/
     156             : 
     157         132 : SDTSRawPoint *SDTSPointReader::GetNextPoint()
     158             : 
     159             : {
     160             :     /* -------------------------------------------------------------------- */
     161             :     /*      Read a record.                                                  */
     162             :     /* -------------------------------------------------------------------- */
     163         132 :     if (oDDFModule.GetFP() == nullptr)
     164           0 :         return nullptr;
     165             : 
     166         132 :     DDFRecord *poRecord = oDDFModule.ReadRecord();
     167             : 
     168         132 :     if (poRecord == nullptr)
     169           3 :         return nullptr;
     170             : 
     171             :     /* -------------------------------------------------------------------- */
     172             :     /*      Transform into a point feature.                                 */
     173             :     /* -------------------------------------------------------------------- */
     174         129 :     SDTSRawPoint *poRawPoint = new SDTSRawPoint();
     175             : 
     176         129 :     if (poRawPoint->Read(poIREF, poRecord))
     177             :     {
     178         129 :         return poRawPoint;
     179             :     }
     180             : 
     181           0 :     delete poRawPoint;
     182           0 :     return nullptr;
     183             : }

Generated by: LCOV version 1.14