本文整理汇总了C++中PointBuffer::getSchema方法的典型用法代码示例。如果您正苦于以下问题:C++ PointBuffer::getSchema方法的具体用法?C++ PointBuffer::getSchema怎么用?C++ PointBuffer::getSchema使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PointBuffer
的用法示例。
在下文中一共展示了PointBuffer::getSchema方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getNumPoints
boost::uint32_t Reader::processBuffer(PointBuffer& data, boost::uint64_t index) const
{
const Schema& schema = data.getSchema();
// how many are they asking for?
boost::uint64_t numPointsWanted = data.getCapacity();
// we can only give them as many as we have left
boost::uint64_t numPointsAvailable = getNumPoints() - index;
if (numPointsAvailable < numPointsWanted)
numPointsWanted = numPointsAvailable;
schema::DimensionMap* d = m_buffer.getSchema().mapDimensions(data.getSchema());
data.setNumPoints(0);
PointBuffer::copyLikeDimensions(m_buffer, data,
*d,
index,
0,
numPointsWanted);
data.setNumPoints(numPointsWanted);
delete d;
return numPointsWanted;
}
示例2: alterSchema
void Selector::alterSchema(PointBuffer& buffer)
{
Schema const& original_schema = buffer.getSchema();
Schema new_schema = buffer.getSchema();
std::map<std::string, bool> const& ignoredMap = m_selectorFilter.getIgnoredMap();
// for (std::map<std::string, bool>::const_iterator i = ignoredMap.begin();
// i != ignoredMap.end(); ++i)
// {
// boost::optional<Dimension const&> d = original_schema.getDimensionOptional(i->first);
// if (d)
// {
// Dimension d2(*d);
// boost::uint32_t flags = d2.getFlags();
// if (i->second)
// d2.setFlags(flags | dimension::IsIgnored);
// new_schema.setDimension(d2);
// }
// }
//
schema::Map dimensions = original_schema.getDimensions();
schema::index_by_index const& dims = dimensions.get<schema::index>();
for (schema::index_by_index::const_iterator t = dims.begin();
t != dims.end();
++t)
{
std::map<std::string, bool>::const_iterator ignored = ignoredMap.find(t->getName());
if (ignored != ignoredMap.end())
{
if (ignored->second) // marked to be dropped
{
// set to ignored
Dimension d2(*t);
boost::uint32_t flags = d2.getFlags();
d2.setFlags(flags | dimension::IsIgnored);
new_schema.setDimension(d2);
}
}
else { // didn't find it in our map of specified dimensions
if (m_selectorFilter.doIgnoreUnspecifiedDimensions())
{
// set to ignored
Dimension d2(*t);
boost::uint32_t flags = d2.getFlags();
d2.setFlags(flags | dimension::IsIgnored);
new_schema.setDimension(d2);
}
}
}
buffer = PointBuffer(new_schema, buffer.getCapacity());
}
示例3: python_error
boost::uint32_t Predicate::processBuffer(PointBuffer& data, pdal::plang::BufferedInvocation& python) const
{
python.resetArguments();
python.beginChunk(data);
python.execute();
if (!python.hasOutputVariable("Mask"))
{
throw python_error("Mask variable not set in predicate filter function");
}
boost::uint8_t* mask = new boost::uint8_t[data.getNumPoints()];
PointBuffer dstData(data.getSchema(), data.getCapacity());
python.extractResult("Mask", (boost::uint8_t*)mask, data.getNumPoints(), 1, pdal::dimension::RawByte, 1);
boost::uint8_t* dst = dstData.getData(0);
boost::uint8_t* src = data.getData(0);
const Schema& schema = dstData.getSchema();
boost::uint32_t numBytes = schema.getByteSize();
assert(numBytes == data.getSchema().getByteSize());
boost::uint32_t numSrcPoints = data.getNumPoints();
boost::uint32_t count = 0;
for (boost::uint32_t srcIndex=0; srcIndex<numSrcPoints; srcIndex++)
{
if (mask[srcIndex])
{
memcpy(dst, src, numBytes);
dst += numBytes;
++count;
dstData.setNumPoints(count);
}
src += numBytes;
}
data.copyPointsFast(0, 0, dstData, count);
data.setNumPoints(count);
delete[] mask;
return count;
}
示例4: tmp
boost::uint32_t Mosaic::readBufferImpl(PointBuffer& destData)
{
boost::uint32_t totalNumPointsToRead = destData.getCapacity();
boost::uint32_t totalNumPointsRead = 0;
boost::uint32_t destPointIndex = 0;
// for each stage, we read as many points as we can
while (totalNumPointsRead < totalNumPointsToRead)
{
assert(m_iteratorIndex < m_prevIterators.size());
m_prevIterator = m_prevIterators[m_iteratorIndex];
// read as much as we can into temp buffer
PointBuffer tmp(destData.getSchema(), totalNumPointsToRead-totalNumPointsRead);
boost::uint32_t numRead = m_prevIterator->read(tmp);
totalNumPointsRead += numRead;
// concat the temp buffer on to end of real dest buffer
destData.copyPointsFast(destPointIndex, 0, tmp, numRead);
destPointIndex += numRead;
destData.setNumPoints(destData.getNumPoints() + numRead);
if (m_prevIterator->atEnd())
{
++m_iteratorIndex;
}
if (m_iteratorIndex == m_prevIterators.size())
{
break;
}
}
return totalNumPointsRead;
}
示例5: readBufferBeginImpl
void Index::readBufferBeginImpl(PointBuffer& buffer)
{
// Cache dimension positions
if (!m_xDim && !m_yDim && !m_zDim)
{
pdal::Schema const& schema = buffer.getSchema();
std::string x_name = m_stage.getOptions().getValueOrDefault<std::string>("x_dim", "X");
std::string y_name = m_stage.getOptions().getValueOrDefault<std::string>("x_dim", "Y");
std::string z_name = m_stage.getOptions().getValueOrDefault<std::string>("x_dim", "Z");
m_stage.log()->get(logDEBUG2) << "Indexing PointBuffer with X: '" << x_name
<< "' Y: '" << y_name
<< "' Z: '" << z_name << " with " << m_stage.getDimensions() << " dimensions" << std::endl;
m_xDim = &schema.getDimension(x_name);
m_yDim = &schema.getDimension(y_name);
m_zDim = &schema.getDimension(z_name);
if (!m_stage.getNumPoints())
throw pdal_error("Unable to create index from pipeline that has an indeterminate number of points!");
}
}
示例6: readBufferBeginImpl
void Colorization::readBufferBeginImpl(PointBuffer& buffer)
{
// Cache dimension positions
pdal::Schema const& schema = buffer.getSchema();
m_dimX = &(schema.getDimension(m_stage.getOptions().getValueOrDefault<std::string>("x_dim", "X")));
m_dimY = &(schema.getDimension(m_stage.getOptions().getValueOrDefault<std::string>("y_dim", "Y")));
std::map<std::string, boost::uint32_t> band_map = m_stage.getBandMap();
std::map<std::string, double> scale_map = m_stage.getScaleMap();
m_dimensions.clear();
m_bands.clear();
m_scales.clear();
for (std::map<std::string, boost::uint32_t>::const_iterator i = band_map.begin();
i != band_map.end();
++i)
{
pdal::Dimension const* dim = &(schema.getDimension(i->first));
m_dimensions.push_back(dim);
m_bands.push_back(static_cast<boost::uint32_t>(i->second));
std::map<std::string, double>::const_iterator t = scale_map.find(i->first);
double scale(1.0);
if (t != scale_map.end())
scale = t->second;
m_scales.push_back(scale);
}
}
示例7: processBuffer
void Reprojection::processBuffer(PointBuffer& data) const
{
const boost::uint32_t numPoints = data.getNumPoints();
const Schema& schema = data.getSchema();
Dimension const& dimX = schema.getDimension("X");
Dimension const& dimY = schema.getDimension("Y");
Dimension const& dimZ = schema.getDimension("Z");
for (boost::uint32_t pointIndex=0; pointIndex<numPoints; pointIndex++)
{
double x = data.getField<double>(dimX, pointIndex);
double y = data.getField<double>(dimY, pointIndex);
double z = data.getField<double>(dimZ, pointIndex);
this->transform(x,y,z);
data.setField<double>(dimX, pointIndex, x);
data.setField<double>(dimY, pointIndex, y);
data.setField<double>(dimZ, pointIndex, z);
data.setNumPoints(pointIndex+1);
}
return;
}
示例8: srcData
boost::uint32_t Crop::readBufferImpl(PointBuffer& dstData)
{
// The client has asked us for dstData.getCapacity() points.
// We will read from our previous stage until we get that amount (or
// until the previous stage runs out of points).
boost::uint32_t numPointsNeeded = dstData.getCapacity();
assert(dstData.getNumPoints() == 0);
while (numPointsNeeded > 0)
{
if (getPrevIterator().atEnd()) break;
// set up buffer to be filled by prev stage
PointBuffer srcData(dstData.getSchema(), numPointsNeeded);
// read from prev stage
const boost::uint32_t numSrcPointsRead = getPrevIterator().read(srcData);
assert(numSrcPointsRead == srcData.getNumPoints());
assert(numSrcPointsRead <= numPointsNeeded);
// we got no data, and there is no more to get -- exit the loop
if (numSrcPointsRead == 0) break;
// copy points from src (prev stage) into dst (our stage),
// based on the CropFilter's rules (i.e. its bounds)
const boost::uint32_t numPointsProcessed = m_cropFilter.processBuffer(dstData, srcData);
numPointsNeeded -= numPointsProcessed;
}
const boost::uint32_t numPointsAchieved = dstData.getNumPoints();
return numPointsAchieved;
}
示例9:
boost::uint32_t ByteSwap::processBuffer(PointBuffer& dstData, const PointBuffer& srcData) const
{
const Schema& dstSchema = dstData.getSchema();
schema::index_by_index const& dstDims = dstSchema.getDimensions().get<schema::index>();
dstData.setSpatialBounds(srcData.getSpatialBounds());
dstData.copyPointsFast(0, 0, srcData, srcData.getNumPoints());
dstData.setNumPoints(srcData.getNumPoints());
for (boost::uint32_t i = 0; i != dstData.getNumPoints(); ++i)
{
boost::uint8_t* data = dstData.getData(i);
std::size_t position = 0;
for (boost::uint32_t n = 0; n < dstDims.size(); ++n)
{
const Dimension& d = dstSchema.getDimension(n);
std::size_t size = d.getByteSize();
boost::uint8_t* pos = data + position;
SWAP_ENDIANNESS_N(*pos, size);
position = position + size;
}
}
return dstData.getNumPoints();
}
示例10: fillUserBuffer
void IteratorBase::fillUserBuffer(PointBuffer& user_buffer)
{
Schema const& user_schema = user_buffer.getSchema();
schema::index_by_index const& idx = user_schema.getDimensions().get<schema::index>();
boost::int32_t numUserSpace = user_buffer.getCapacity() - user_buffer.getNumPoints();
if (numUserSpace < 0)
throw pdal_error("We ran out of space!");
boost::int32_t numOraclePoints = m_active_buffer->getNumPoints() - m_buffer_position;
schema::index_by_index::size_type i(0);
for (i = 0; i < idx.size(); ++i)
{
copyDatabaseData(*m_active_buffer,
user_buffer,
idx[i],
m_buffer_position,
user_buffer.getNumPoints(),
(std::min)(numOraclePoints,numUserSpace));
}
bool bSetPointSourceId = getReader().getOptions().getValueOrDefault<bool>("populate_pointsourceid", false);
if (bSetPointSourceId)
{
Dimension const* point_source_field = &(user_buffer.getSchema().getDimensionOptional("PointSourceId").get());
if (point_source_field)
{
for (boost::int32_t i = 0; i < numUserSpace; ++i)
{
if (i < 0)
throw sqlite_driver_error("point_source_field point index is less than 0!");
user_buffer.setField(*point_source_field, i, m_active_cloud_id);
}
}
}
if (numOraclePoints > numUserSpace)
m_buffer_position = m_buffer_position + numUserSpace;
else if (numOraclePoints < numUserSpace)
m_buffer_position = 0;
boost::uint32_t howManyThisRead = (std::min)(numUserSpace, numOraclePoints);
user_buffer.setNumPoints(howManyThisRead + user_buffer.getNumPoints());
}
示例11: addToCache
void Cache::addToCache(boost::uint64_t pointIndex, const PointBuffer& data) const
{
PointBuffer* block = new PointBuffer(data.getSchema(), m_cacheBlockSize);
block->copyPointsFast(0, 0, data, m_cacheBlockSize);
m_cache->insert(pointIndex, block);
return;
}
示例12: makeTestBuffer
PointBuffer* makeTestBuffer()
{
Dimension d1("Classification", dimension::UnsignedInteger, 1);
Dimension d2("X", dimension::SignedInteger, 4);
Dimension d3("Y", dimension::Float, 8);
Schema schema;
schema.appendDimension(d1);
schema.appendDimension(d2);
schema.appendDimension(d3);
std::size_t offX = schema.getDimension(0).getByteOffset();
BOOST_CHECK(offX==0);
std::size_t offY = schema.getDimension(1).getByteOffset();
BOOST_CHECK(offY==1);
std::size_t offZ = schema.getDimension(2).getByteOffset();
BOOST_CHECK(offZ==5);
boost::uint32_t capacity = 17;
PointBuffer* data = new PointBuffer(schema, capacity);
BOOST_CHECK(data->getCapacity() == capacity);
Dimension const& dimC = data->getSchema().getDimension("Classification");
Dimension const& dimX = data->getSchema().getDimension("X");
Dimension const& dimY = data->getSchema().getDimension("Y");
// write the data into the buffer
for (boost::uint32_t i=0; i<data->getCapacity(); i++)
{
const boost::uint8_t x = static_cast<boost::uint8_t>(i)+1;
const boost::int32_t y = i*10;
const double z = i * 100;
data->setField(dimC, i, x);
data->setField(dimX, i, y);
data->setField(dimY, i, z);
data->setNumPoints(i+1);
}
BOOST_CHECK(data->getCapacity() ==17);
BOOST_CHECK(data->getNumPoints() ==17);
return data;
}
示例13: writeBufferBegin
void Writer::writeBufferBegin(PointBuffer const& data)
{
if (m_sdo_pc_is_initialized) return;
CreateCloud(data.getSchema());
m_sdo_pc_is_initialized = true;
return;
}
示例14: verifyTestBuffer
static void verifyTestBuffer(const PointBuffer& data)
{
Dimension const& dimC = data.getSchema().getDimension("Classification");
Dimension const& dimX = data.getSchema().getDimension("X");
Dimension const& dimY = data.getSchema().getDimension("Y");
// read the data back out
for (int i=0; i<17; i++)
{
const boost::uint8_t x = data.getField<boost::uint8_t>(dimC, i);
const boost::int32_t y = data.getField<boost::int32_t>(dimX, i);
const double z = data.getField<double>(dimY, i);
BOOST_CHECK(x == i+1);
BOOST_CHECK(y == i*10);
BOOST_CHECK(Utils::compare_approx(z, static_cast<double>(i)*100.0, (std::numeric_limits<double>::min)()) == true);
}
}
示例15: setNumPoints
Reader::Reader(const Options& options, const PointBuffer& buffer)
: pdal::Reader(options)
, m_buffer(buffer)
{
setNumPoints(buffer.getNumPoints());
setBounds(buffer.getSpatialBounds());
setSchema(buffer.getSchema());
setPointCountType(PointCount_Fixed);
return;
}