Changeset 639:a819cae56a57


Ignore:
Timestamp:
05/12/08 18:43:41 (2 years ago)
Author:
Howard Butler <hobu.inc@…>
Branch:
default
Convert:
svn:1766ff46-f334-0410-ab20-d63176f87757/trunk@706
Message:

start in on converting las2ogr to use the C API

Location:
apps
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • apps/Makefile.am

    r636 r639  
    77txt2las_SOURCES = txt2las.c 
    88 
    9 if GDAL_IS_CONFIG 
    10 las2ogr_SOURCES = las2ogr.cpp 
    11 bin_PROGRAMS = lasinfo las2las lasmerge las2txt txt2las las2ogr 
    12 else 
     9#if GDAL_IS_CONFIG 
     10#las2ogr_SOURCES = las2ogr.cpp 
     11#bin_PROGRAMS = lasinfo las2las lasmerge las2txt txt2las las2ogr 
     12#else 
    1313bin_PROGRAMS = lasinfo las2las lasmerge las2txt txt2las 
    1414 
    15 endif 
     15#endif 
    1616 
    1717LDADD = ../src/liblas.la 
  • apps/las2ogr.cpp

    r504 r639  
    1919#include <liblas/cstdint.hpp> 
    2020// ogr 
    21 #include <ogrsf_frmts.h> 
    22 #include <ogr_p.h> 
     21#include <ogr_api.h> 
     22// #include <ogrsf_frmts.h> 
     23// #include <ogr_p.h> 
    2324//std 
    2425#include <cassert> 
     
    9596}; 
    9697 
    97 void create_layer_def(OGRLayer& lyr) 
    98 { 
     98OGRFieldDefnH create_field(const char* name, OGRFieldType type, int width, int precision ) { 
     99 
     100    OGRFieldDefnH fld; 
     101    fld= OGR_Fld_Create(name, type); 
     102    OGR_Fld_SetWidth(fld, width); 
     103    OGR_Fld_SetPrecision(fld, precision); 
     104 
     105    return fld; 
     106     
     107} 
     108void create_layer_def(OGRLayerH lyr) 
     109{ 
     110    OGRErr err; 
    99111    std::string fldname("return_num"); 
    100     OGRFieldDefn fld(fldname.c_str(), OFTReal); 
    101     fld.SetWidth(1); 
    102     fld.SetPrecision(0); 
    103     if (OGRERR_NONE != lyr.CreateField(&fld)) 
    104     { 
    105         throw std::runtime_error(fldname + " field cration failed"); 
    106     } 
    107  
    108     fldname = "angle"; 
    109     fld.Set(fldname.c_str(), OFTReal, 3, 0); 
    110     if (OGRERR_NONE != lyr.CreateField(&fld)) 
    111     { 
    112         throw std::runtime_error(fldname + " field cration failed"); 
    113     } 
    114  
    115     fldname = "intensity"; 
    116     fld.Set(fldname.c_str(), OFTReal, 3, 0); 
    117     if (OGRERR_NONE != lyr.CreateField(&fld)) 
    118     { 
    119         throw std::runtime_error(fldname + " field cration failed"); 
    120     } 
    121  
    122     fldname = "asprsclass"; 
    123     fld.Set(fldname.c_str(), OFTReal, 3, 0); 
    124     if (OGRERR_NONE != lyr.CreateField(&fld)) 
    125     { 
    126         throw std::runtime_error(fldname + " field cration failed"); 
    127     } 
    128  
    129     fldname = "return_tot"; 
    130     fld.Set(fldname.c_str(), OFTReal, 3, 0); 
    131     if (OGRERR_NONE != lyr.CreateField(&fld)) 
    132     { 
    133         throw std::runtime_error(fldname + " field cration failed"); 
    134     } 
    135  
    136     fldname = "gps_time"; 
    137     fld.Set(fldname.c_str(), OFTReal, 13, 6); 
    138     if (OGRERR_NONE != lyr.CreateField(&fld)) 
    139     { 
    140         throw std::runtime_error(fldname + " field cration failed"); 
    141     } 
     112     
     113    OGRFieldDefnH fld; 
     114     
     115    fld = create_field("return_num", OFTInteger, 10, 0); 
     116    err = OGR_L_CreateField(lyr, fld, 0); 
     117    if (OGRERR_NONE != err) 
     118    { 
     119        throw std::runtime_error("return_num field creation failed"); 
     120    } 
     121     
     122    OGR_Fld_Destroy(fld); 
     123 
     124    fld = create_field("angle", OFTInteger, 10, 0); 
     125    err = OGR_L_CreateField(lyr, fld, 0); 
     126    if (OGRERR_NONE != err) 
     127    { 
     128        throw std::runtime_error("angle field cration failed"); 
     129    } 
     130     
     131    OGR_Fld_Destroy(fld); 
     132     
     133    fld = create_field("intensity", OFTInteger, 10, 0); 
     134    err = OGR_L_CreateField(lyr, fld, 0); 
     135    if (OGRERR_NONE != err) 
     136    { 
     137        throw std::runtime_error("intensity field cration failed"); 
     138    } 
     139     
     140    OGR_Fld_Destroy(fld); 
     141 
     142    fld = create_field("asprsclass", OFTInteger, 10, 0); 
     143    err = OGR_L_CreateField(lyr, fld, 0); 
     144    if (OGRERR_NONE != err) 
     145    { 
     146        throw std::runtime_error("asprsclass field creation failed"); 
     147    } 
     148     
     149    OGR_Fld_Destroy(fld); 
     150 
     151    fld = create_field("return_tot", OFTInteger, 10, 0); 
     152    err = OGR_L_CreateField(lyr, fld, 0); 
     153    if (OGRERR_NONE != err) 
     154    { 
     155        throw std::runtime_error("return_tot field creation failed"); 
     156    } 
     157     
     158    OGR_Fld_Destroy(fld); 
     159 
     160    fld = create_field("gpstime", OFTReal, 10, 0); 
     161    err = OGR_L_CreateField(lyr, fld, 0); 
     162    if (OGRERR_NONE != err) 
     163    { 
     164        throw std::runtime_error("gpstime field cration failed"); 
     165    } 
     166     
     167    OGR_Fld_Destroy(fld); 
     168 
    142169} 
    143170 
    144171void report_ogr_formats() 
    145172{ 
    146     OGRSFDriverRegistrar* r = 0; 
    147     r = OGRSFDriverRegistrar::GetRegistrar(); 
    148173 
    149174    std::cout << "Supported target formats:"; 
    150175 
    151     for (int i = 0; i < r->GetDriverCount(); ++i) 
    152     { 
    153         OGRSFDriver* drv = r->GetDriver(i); 
     176    for (int i = 0; i < OGRGetDriverCount(); ++i) 
     177    { 
     178        OGRSFDriverH drv = OGRGetDriver(i); 
    154179        assert(0 != drv); 
    155180 
    156         if (drv->TestCapability(ODrCCreateDataSource)) 
    157         { 
    158             std::cout << "\n - " << drv->GetName(); 
     181        if (OGR_Dr_TestCapability(drv,"ODrCCreateDataSource")) 
     182        { 
     183            std::cout << "\n - " << OGR_Dr_GetName(drv); 
    159184        } 
    160185    } 
     
    218243        } 
    219244 
    220         OGRLayer* lyr = 0; 
    221         lyr = ds->CreateLayer(lyrname.c_str(), 0, wkbPoint25D, 0); 
     245        OGRLayerH lyr = 0; 
     246        lyr = OGR_DS_CreateLayer(ds, lyrname.c_str(), 0, wkbPoint25D, 0); 
    222247        if (0 == lyr) 
    223248        { 
Note: See TracChangeset for help on using the changeset viewer.