Changeset 628:83050d993186


Ignore:
Timestamp:
05/09/08 14:04:07 (2 years ago)
Author:
Frank Warmerdam <warmerdam@…>
Branch:
default
Convert:
svn:1766ff46-f334-0410-ab20-d63176f87757/trunk@695
Message:

preliminary integration with libgeotiff - requires cvs head

Location:
src/detail
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/detail/Makefile.am

    r330 r628  
    11 
    2 INCLUDES = -I../../include -I../../include/detail 
     2#if LIBGEOTIFF_IS_CONFIG 
     3EXTRA_DEFS = -DHAVE_LIBGEOTIFF 
     4#endif 
     5 
     6INCLUDES = -I../../include -I../../include/detail @GEOTIFF_INC@ $(EXTRA_DEFS) 
    37 
    48noinst_LTLIBRARIES = liblasdetail.la 
  • src/detail/reader10.cpp

    r588 r628  
    4545#include <liblas/lasheader.hpp> 
    4646#include <liblas/laspoint.hpp> 
     47 
     48#ifdef HAVE_LIBGEOTIFF 
     49#include <geotiff.h> 
     50#include <geo_simpletags.h> 
     51#endif /* HAVE_LIBGEOTIFF */ 
     52 
    4753// std 
    4854#include <fstream> 
     
    203209    // TODO: Under construction 
    204210    //       Testing reading of VLRecords with GeoKeys 
    205     //ReadGeoreference(header); 
     211    ReadGeoreference(header); 
    206212 
    207213    return true; 
     
    210216bool ReaderImpl::ReadGeoreference(LASHeader const& header) 
    211217{ 
     218#ifndef HAVE_LIBGEOTIFF 
     219    return false; 
     220#else 
    212221    // TODO: Under construction 
    213  
    214222    VLRHeader vlrh = { 0 }; 
    215223    std::string const uid("LASF_Projection"); 
     224    ST_TIFF *st = ST_Create(); 
    216225 
    217226    m_ifs.seekg(header.GetHeaderSize(), std::ios::beg); 
     
    223232        if (uid == vlrh.userId && 34735 == vlrh.recordId) 
    224233        { 
    225             std::cout << "GeoKeyDirectoryTag: " << vlrh.recordId << std::endl; 
    226  
    227             GeoKeysHeader gkh = { 0 }; 
    228             read_n(gkh, m_ifs, sizeof(GeoKeysHeader)); 
    229  
    230             std::cout << "--Header: " << gkh.keyDirectoryVersion << " ; " << gkh.keyRevision << " ; " << gkh.minorRevision << " ; " << gkh.numberOfKeys << std::endl; 
    231  
    232             for (uint16_t j = 0; j < gkh.numberOfKeys; ++j) 
    233             { 
    234                 GeoKeyEntry gke = { 0 }; 
    235                 read_n(gke, m_ifs, sizeof(GeoKeyEntry)); 
    236  
    237                 std::cout << "---KeyEntry: " << gke.keyId << " ; " << gke.tiffTagLocation<< " ; " << gke.count << " ; " <<  gke.valueOffset << std::endl; 
    238             } 
     234            int count = vlrh.recordLengthAfterHeader / sizeof(short); 
     235            uint16_t *geokeys = new uint16_t[count]; 
     236            read_n(geokeys, m_ifs, vlrh.recordLengthAfterHeader); 
     237            ST_SetKey( st, vlrh.recordId, count, STT_SHORT, geokeys ); 
     238            delete[] geokeys; 
    239239        } 
    240240        else if (uid == vlrh.userId && 34736 == vlrh.recordId) 
    241241        { 
    242             std::cout << "GeoDoubleParamsTag: " << vlrh.recordId << std::endl; 
    243  
     242            int count = vlrh.recordLengthAfterHeader / sizeof(double); 
     243            double *values = new double[count]; 
     244            read_n(values, m_ifs, vlrh.recordLengthAfterHeader); 
     245            ST_SetKey( st, vlrh.recordId, count, STT_DOUBLE, values ); 
     246            delete[] values; 
     247        } 
     248        else if (uid == vlrh.userId && 34737 == vlrh.recordId) 
     249        { 
     250            int count = vlrh.recordLengthAfterHeader / sizeof(char); 
     251            char *values = new char[count]; 
     252            read_n(values, m_ifs, vlrh.recordLengthAfterHeader); 
     253            ST_SetKey( st, vlrh.recordId, count, STT_ASCII, values ); 
     254            delete[] values; 
     255        } 
     256        else 
     257        { 
    244258            std::istream::pos_type const pos = m_ifs.tellg(); 
    245259            m_ifs.seekg(pos + std::istream::pos_type(vlrh.recordLengthAfterHeader)); 
    246260        } 
    247         else if (uid == vlrh.userId && 34737 == vlrh.recordId) 
    248         { 
    249             std::cout << "GeoAsciiParamsTag: " << vlrh.recordId << std::endl; 
    250  
    251             std::istream::pos_type const pos = m_ifs.tellg(); 
    252             m_ifs.seekg(pos + std::istream::pos_type(vlrh.recordLengthAfterHeader)); 
    253         } 
    254         else 
    255         { 
    256             std::istream::pos_type const pos = m_ifs.tellg(); 
    257             m_ifs.seekg(pos + std::istream::pos_type(vlrh.recordLengthAfterHeader)); 
    258         } 
    259     } 
    260  
     261    } 
     262 
     263    GTIF *gtif = GTIFNewSimpleTags( st ); 
     264    GTIFPrint(gtif,0,0); 
     265    GTIFFree( gtif ); 
     266    ST_Destroy( st ); 
     267     
    261268    return true; 
     269#endif /* def HAVE_LIBGEOTIFF */ 
    262270} 
    263271 
Note: See TracChangeset for help on using the changeset viewer.