Changeset 1343:94416cbd4575
- Timestamp:
- 10/06/09 09:47:34 (10 months ago)
- Branch:
- default
- Files:
-
- 8 edited
-
include/liblas/capi/liblas.h (modified) (1 diff)
-
include/liblas/lasheader.hpp (modified) (1 diff)
-
include/liblas/lasreader.hpp (modified) (2 diffs)
-
python/liblas/core.py (modified) (1 diff)
-
python/liblas/file.py (modified) (1 diff)
-
python/tests/SRS.txt (modified) (5 diffs)
-
src/las_c_api.cpp (modified) (3 diffs)
-
src/lasreader.cpp (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
include/liblas/capi/liblas.h
r1335 r1343 183 183 LAS_DLL LASReaderH LASReader_Create(const char * filename); 184 184 185 /** Creates a LASReaderH object that can be used to read LASHeaderH and 186 * LASPointH objects with. The LASReaderH must not be created with a 187 * filename that is opened for read or write by any other API functions. 188 * @return opaque pointer to a LASReaderH instance. 189 * @param filename Filename to open for read 190 */ 191 LAS_DLL LASReaderH LASReader_CreateWithHeader( const char * filename, 192 LASHeaderH hHeader); 193 185 194 /** Reads the next available point on the LASReaderH instance. If no point 186 195 * is available to read, NULL is returned. If an error happens during -
include/liblas/lasheader.hpp
r1252 r1343 109 109 /// Default constructor. 110 110 /// The default constructed header is configured according to the ASPRS 111 /// LAS 1. 1Specification, point data format set to 0.111 /// LAS 1.2 Specification, point data format set to 0. 112 112 /// Other fields filled with 0. 113 113 LASHeader(); -
include/liblas/lasreader.hpp
r1309 r1343 68 68 LASReader(std::istream& ifs); 69 69 70 /// User-defined consructor initializes reader with input stream and 71 /// a header to override the values in the file 72 /// @excepion std::runtime_error - on failure state of the input stream. 73 LASReader(std::istream& ifs, LASHeader& header); 74 70 75 /// Destructor. 71 76 /// @excepion nothrow … … 146 151 std::vector<LASVariableRecord> m_vlrs; 147 152 153 bool bCustomHeader; 154 148 155 }; 149 156 -
python/liblas/core.py
r1313 r1343 169 169 las.LASReader_Create.errcheck = check_void 170 170 171 las.LASReader_CreateWithHeader.argtypes = [ctypes.c_char_p, ctypes.c_void_p] 172 las.LASReader_CreateWithHeader.restype = ctypes.c_void_p 173 las.LASReader_CreateWithHeader.errcheck = check_void 174 171 175 las.LASReader_GetNextPoint.restype=ctypes.c_void_p 172 176 las.LASReader_GetNextPoint.argtypes = [ctypes.c_void_p] -
python/liblas/file.py
r1312 r1343 76 76 def open(self): 77 77 if self._mode == 'r' or self._mode =='rb': 78 self.handle = core.las.LASReader_Create(self.filename) 78 79 if not self._header: 80 self.handle = core.las.LASReader_Create(self.filename) 81 self._header = lasheader.Header(handle = core.las.LASReader_GetHeader(self.handle)) 82 else: 83 self.handle = core.las.LASReader_CreateWithHeader(self.filename, self._header.handle) 84 79 85 self.mode = 0 80 self._header = lasheader.Header(handle = core.las.LASReader_GetHeader(self.handle))81 86 files['read'].append(self.filename) 82 87 -
python/tests/SRS.txt
r1313 r1343 67 67 ... f.set_srs(s2) 68 68 ... p = f.read(0) 69 ... p.descale(f.header)70 69 ... if not s2.vlr_count() == 3: return False 71 70 ... if not s2.GetVLR(0).recordlength == 64: return False 72 ... return int(round(p.x)) == -93 and int(round(p.y)) == 9071 ... return int(round(p.x)) == -93 and int(round(p.y)) == 42 73 72 ... return False 74 73 … … 78 77 >>> del f 79 78 80 >>> f = file.File('../test/data/1.2_3.las',mode='r') 81 >>> f.header.data_offset 82 438L 79 80 # -93.3515625902 41.5771483954 81 83 82 >>> utm_wkt = """PROJCS["NAD83 / UTM zone 15N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.2572221010002,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433],AUTHORITY["EPSG","4269"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-93],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AUTHORITY["EPSG","26915"]]""" 84 83 … … 88 87 >>> s_utm = srs.SRS() 89 88 >>> s_utm.wkt = utm_wkt 89 90 >>> f = file.File('../test/data/1.2_3.las',mode='r') 91 >>> dd_header = f.header 92 >>> utm_header = f.header 93 >>> del f 94 95 >>> utm_header.offset 96 [0.0, 0.0, 0.0] 97 >>> utm_header.offset = [offset+1.0/0.000001 for offset in utm_header.offset] 98 >>> utm_header.offset 99 [1000000.0, 1000000.0, 1000000.0] 100 >>> utm_header.scale = [0.000001,0.000001,0.000001] 101 >>> utm_header.srs = s_utm 102 103 >>> dd_header.scale = [0.000001,0.000001,0.000001] 104 >>> dd_header.srs = s_dd 105 106 >>> f = file.File('../test/data/1.2_3.las',mode='r', header = utm_header) 107 >>> f.header.data_offset 108 438L 109 >>> f.header.scale 110 [9.9999999999999995e-07, 9.9999999999999995e-07, 9.9999999999999995e-07] 90 111 >>> p = f.read(0) 91 112 >>> origx, origy = p.x, p.y … … 95 116 True 96 117 >>> p = f.read(0) 97 >>> p.descale(f.header)98 118 >>> p.x, p.y 99 (-9 2.999999999999972, 89.999999999999972)100 >>> dd_header = f.header101 >>> dd_header.scale = [0.000001,0.000001,0.000001]102 >>> dd_header.srs = s_dd 119 (-93.350000000000009, 41.57) 120 121 122 103 123 >>> f_project = file.File('junk_srs_project.las',mode='w',header=dd_header) 104 124 >>> dd_header.srs.proj4 … … 113 133 >>> s_utm.wkt = utm_wkt 114 134 >>> p3 = f3.read(1) 115 >>> p3.x, p3.y116 (-9 2.999999000000003, 89.999999000000003)135 >>> int(round(p3.x)), int(round(p3.y)) 136 (-93, 42) 117 137 >>> p3 = f3.read(0) 118 >>> p3.x,p3.y119 (-9 2.999999000000003, 89.999999000000003)138 >>> int(round(p3.x)), int(round(p3.y)) 139 (-93, 42) 120 140 121 141 >>> import os -
src/las_c_api.cpp
r1313 r1343 182 182 } 183 183 184 std::istream* OpenInput(std::string filename) 185 { 186 std::ios::openmode const mode = std::ios::in | std::ios::binary; 187 std::istream* istrm = 0; 188 if (compare_no_case(filename.c_str(),"STDIN",5) == 0) 189 { 190 istrm = &std::cin; 191 } 192 else 193 { 194 istrm = new std::ifstream(filename.c_str(), mode); 195 } 196 197 if (!istrm->good()) 198 { 199 delete istrm; 200 throw std::runtime_error("Reading stream was not able to be created"); 201 exit(1); 202 } 203 return istrm; 204 } 205 184 206 LAS_DLL LASReaderH LASReader_Create(const char* filename) 185 207 … … 188 210 189 211 try { 190 std::ios::openmode const mode = std::ios::in | std::ios::binary;191 std::istream* istrm;192 if (compare_no_case(filename,"STDIN",5) == 0)193 {194 istrm = &std::cin;195 }196 else197 {198 istrm = new std::ifstream(filename, mode);199 }200 212 201 if (!istrm->good()) 202 { 203 delete istrm; 204 throw std::runtime_error("Reading stream was not able to be created"); 205 } 213 std::istream* istrm = OpenInput(std::string(filename)); 206 214 return (LASReaderH) new LASReader(*istrm); 207 215 … … 213 221 } 214 222 215 223 } 224 225 LAS_DLL LASReaderH LASReader_CreateWithHeader( const char* filename, 226 LASHeaderH hHeader) 227 228 { 229 VALIDATE_LAS_POINTER1(filename, "LASReader_CreateWithHeader", NULL); 230 VALIDATE_LAS_POINTER1(hHeader, "LASReader_CreateWithHeader", NULL); 231 232 try { 233 234 std::istream* istrm = OpenInput(std::string(filename)); 235 236 LASHeader* header = ((LASHeader*) hHeader); 237 return (LASReaderH) new LASReader(*istrm, *header); 238 239 240 } catch (std::exception const& e) 241 { 242 LASError_PushError(LE_Failure, e.what(), "LASReader_Create"); 243 return NULL; 244 } 245 216 246 } 217 247 -
src/lasreader.cpp
r1309 r1343 56 56 57 57 LASReader::LASReader(std::istream& ifs) : 58 m_pimpl(detail::ReaderFactory::Create(ifs)) 58 m_pimpl(detail::ReaderFactory::Create(ifs)), 59 bCustomHeader(false) 59 60 { 60 61 … … 62 63 } 63 64 65 LASReader::LASReader(std::istream& ifs, LASHeader& header) : 66 m_pimpl(detail::ReaderFactory::Create(ifs)), 67 bCustomHeader(false) 68 { 69 m_header = header; 70 bCustomHeader = true; 71 Init(); 72 } 64 73 LASReader::~LASReader() 65 74 { … … 112 121 113 122 void LASReader::Init() 114 { 123 { 124 // Copy our existing header in case we have already set a custom 125 // one. We will use this instead of the one from the file if 126 // the constructor with the header was used. 127 LASHeader custom_header(m_header); 128 115 129 bool ret = m_pimpl->ReadHeader(m_header); 116 130 if (!ret) … … 123 137 m_pimpl->ReadGeoreference(m_header); 124 138 m_pimpl->Reset(m_header); 139 140 if (bCustomHeader) { 141 custom_header.SetDataOffset(m_header.GetDataOffset()); 142 m_header = custom_header; 143 } 125 144 } 126 145
Note: See TracChangeset
for help on using the changeset viewer.
