void PcdWriter::write(const PointBuffer& data) { pcl::PointCloud<XYZIRGBA>::Ptr cloud(new pcl::PointCloud<XYZIRGBA>); BOX3D const& buffer_bounds = data.calculateBounds(); pclsupport::PDALtoPCD(const_cast<PointBuffer&>(data), *cloud, buffer_bounds); pcl::PCDWriter w; if (m_compressed) w.writeBinaryCompressed<XYZIRGBA>(m_filename, *cloud); else w.writeASCII<XYZIRGBA>(m_filename, *cloud); }
void P2gWriter::write(const PointBuffer& buf) { std::string z_name = getOptions().getValueOrDefault<std::string>("Z", "Z"); for (point_count_t idx = 0; idx < buf.size(); idx++) { double x = buf.getFieldAs<double>(Dimension::Id::X, idx); double y = buf.getFieldAs<double>(Dimension::Id::Y, idx); double z = buf.getFieldAs<double>(Dimension::Id::Z, idx); m_coordinates.push_back(boost::tuple<double, double, double>(x, y, z)); } m_bounds = buf.calculateBounds(); m_GRID_SIZE_X = (int)(ceil((m_bounds.maxx - m_bounds.minx)/m_GRID_DIST_X)) + 1; m_GRID_SIZE_Y = (int)(ceil((m_bounds.maxy - m_bounds.miny)/m_GRID_DIST_Y)) + 1; log()->get(LogLevel::Debug) << "X grid size: " << m_GRID_SIZE_X << std::endl; log()->get(LogLevel::Debug) << "Y grid size: " << m_GRID_SIZE_Y << std::endl; log()->floatPrecision(6); log()->get(LogLevel::Debug) << "X grid distance: " << m_GRID_DIST_X << std::endl; log()->get(LogLevel::Debug) << "Y grid distance: " << m_GRID_DIST_Y << std::endl; log()->clearFloat(); boost::scoped_ptr<OutCoreInterp> p(new OutCoreInterp(m_GRID_DIST_X, m_GRID_DIST_Y, m_GRID_SIZE_X, m_GRID_SIZE_Y, m_RADIUS_SQ, m_bounds.minx, m_bounds.maxx, m_bounds.miny, m_bounds.maxy, m_fill_window_size)); m_interpolator.swap(p); if (m_interpolator->init() < 0) { throw p2g_error("unable to initialize interpolator"); } int rc(0); std::vector<boost::tuple<double, double, double> >::const_iterator i; for (i = m_coordinates.begin(); i!= m_coordinates.end(); ++i) { double x = i->get<0>(); double y = i->get<1>(); x = x - m_bounds.minx; y = y - m_bounds.miny; rc = m_interpolator->update(x, y, i->get<2>()); if (rc < 0) { throw p2g_error("interp->update() error while processing "); } } double adfGeoTransform[6]; adfGeoTransform[0] = m_bounds.minx; adfGeoTransform[1] = m_GRID_DIST_X; adfGeoTransform[2] = 0.0; adfGeoTransform[3] = m_bounds.maxy; adfGeoTransform[4] = 0.0; adfGeoTransform[5] = -1 * m_GRID_DIST_Y; SpatialReference const& srs = getSpatialReference(); if ((rc = m_interpolator->finish(const_cast<char*>(m_filename.c_str()), m_outputFormat, m_outputTypes, adfGeoTransform, srs.getWKT().c_str())) < 0) { throw p2g_error("interp->finish() error"); } return; }