23 #include "FileReaderLas.h"
25 LastReturnFilter::LastReturnFilter( ) : liblas::FilterI(eInclusion) {}
27 bool LastReturnFilter::filter(
const liblas::Point& p)
34 if (p.GetReturnNumber() == p.GetNumberOfReturns())
40 if (GetType() == eExclusion && output ==
true)
49 FileReaderLas::FileReaderLas(
void)
55 FileReaderLas::FileReaderLas(
const std::string& filename)
60 FileReaderLas::~FileReaderLas(
void)
68 void FileReaderLas::open(
const std::string& filename)
70 m_filename = filename;
75 void FileReaderLas::close(
void)
83 void FileReaderLas::setCodec(
const std::string& filename){
84 m_ifstream =
new(std::ifstream);
85 m_ifstream->open(m_filename.c_str(),std::ios::in|std::ios::binary);
86 liblas::ReaderFactory f;
87 liblas::Reader reader = f.CreateWithStream(*m_ifstream);
88 m_reader=
new liblas::Reader(reader);
94 liblas::Header
const& FileReaderLas::getHeader()
const{
95 return(m_reader->GetHeader());
98 bool FileReaderLas::isCompressed()
const{
99 return getHeader().Compressed();
102 unsigned long int FileReaderLas::getPointCount()
const{
103 return getHeader().GetPointRecordsCount();
106 void FileReaderLas::las2ascii(
const std::string& filename,
bool verbose)
const{
107 std::ofstream fpoints(filename.c_str(),std::ios::out);
109 fpoints <<
"X" <<
"," <<
"Y" <<
"," <<
"Z" << std::endl;
111 std::cout <<
"reset reading" << std::endl;
114 std::cout <<
"going through points" << std::endl;
115 while(m_reader->ReadNextPoint()){
116 liblas::Point
const& thePoint=m_reader->GetPoint();
117 double x=thePoint.GetX();
118 double y=thePoint.GetY();
119 double z=thePoint.GetZ();
120 fpoints.precision(12);
121 fpoints << x <<
"," << y <<
"," << z << std::endl;
126 void FileReaderLas::getExtent(
double& ulx,
double& uly,
double& lrx,
double& lry)
const{
127 const liblas::Header& theHeader=getHeader();
128 ulx=theHeader.GetMinX();
129 uly=theHeader.GetMaxY();
130 lrx=theHeader.GetMaxX();
131 lry=theHeader.GetMinY();
134 double FileReaderLas::getMinZ()
const{
135 return(getHeader().GetMinZ());
138 double FileReaderLas::getMaxZ()
const{
139 return(getHeader().GetMaxZ());
151 void FileReaderLas::addReturnsFilter(std::vector<unsigned short>
const& returns){
152 typedef liblas::ReturnFilter
filter;
153 filter* return_filter;
154 std::vector<boost::uint16_t> returns_t;
156 return_filter=
new filter(returns_t,
true);
158 for(
int index=0;index<returns.size();++index){
159 assert(returns[index]>0);
160 returns_t.push_back(returns[index]);
162 return_filter=
new filter(returns_t,
false);
164 m_filters.push_back(liblas::FilterPtr(return_filter));
167 void FileReaderLas::addClassFilter(std::vector<unsigned short>
const& classes){
169 std::vector<liblas::FilterPtr> filters;
170 std::vector<liblas::Classification> theClasses;
171 for(
int iclass=0;iclass<classes.size();++iclass){
172 liblas::Classification aClass(classes[iclass]);
173 theClasses.push_back(aClass);
175 liblas::FilterPtr class_filter = liblas::FilterPtr(
new liblas::ClassificationFilter(theClasses));
178 class_filter->SetType(liblas::FilterI::eInclusion);
179 m_filters.push_back(class_filter);