Skip to content

Commit

Permalink
ferry filter scaffolding #435
Browse files Browse the repository at this point in the history
  • Loading branch information
hobu committed Sep 24, 2014
1 parent 95a9ed5 commit 36b3d49
Show file tree
Hide file tree
Showing 5 changed files with 299 additions and 3 deletions.
67 changes: 67 additions & 0 deletions include/pdal/filters/Ferry.hpp
@@ -0,0 +1,67 @@
/******************************************************************************
* Copyright (c) 2014, Howard Butler <hobu.inc@gmail.com>
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following
* conditions are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided
* with the distribution.
* * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
* names of its contributors may be used to endorse or promote
* products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
* OF SUCH DAMAGE.
****************************************************************************/

#pragma once

#include <pdal/Filter.hpp>

namespace pdal
{
namespace filters
{

class PDAL_DLL Ferry : public Filter
{
public:
SET_STAGE_NAME("filters.ferry", "Data ferrying filter")
SET_STAGE_LINK("http://pdal.io/stages/filters.ferry.html")
SET_STAGE_ENABLED(true)

Ferry(const Options& options) : Filter(options) {};
static Options getDefaultOptions();

private:
virtual void initialize();
virtual void processOptions(const Options&);
virtual void ready(PointContext ctx);
virtual void filter(PointBuffer& buffer);
virtual void done(PointContext ctx);

Ferry& operator=(const Ferry&); // not implemented
Ferry(const Ferry&); // not implemented
};

} // namespace filters
} // namespace pdal

6 changes: 4 additions & 2 deletions src/CMakeLists.txt
Expand Up @@ -349,7 +349,7 @@ set(PDAL_DRIVERS_P2G_HPP
"${PDAL_P2G_HEADERS}/P2gWriter.hpp"
)

set (PDAL_DRIVERS_P2G_CPP
set (PDAL_DRIVERS_P2G_CPP
"${PDAL_P2G_SRC}/P2gWriter.cpp"
)

Expand All @@ -373,7 +373,7 @@ if (PDAL_HAVE_PCL)
"${PDAL_PCD_HEADERS}/Writer.hpp"
)

set (PDAL_DRIVERS_PCD_CPP
set (PDAL_DRIVERS_PCD_CPP
"${PDAL_PCD_SRC}/Common.cpp"
"${PDAL_PCD_SRC}/Reader.cpp"
"${PDAL_PCD_SRC}/Writer.cpp"
Expand Down Expand Up @@ -574,6 +574,7 @@ set(PDAL_FILTERS_HPP
"${PDAL_FILTERS_HEADERS}/Chipper.hpp"
"${PDAL_FILTERS_HEADERS}/Crop.hpp"
"${PDAL_FILTERS_HEADERS}/Decimation.hpp"
"${PDAL_FILTERS_HEADERS}/Ferry.hpp"
"${PDAL_FILTERS_HEADERS}/HexBin.hpp"
"${PDAL_FILTERS_HEADERS}/InPlaceReprojection.hpp"
"${PDAL_FILTERS_HEADERS}/Merge.hpp"
Expand All @@ -588,6 +589,7 @@ set (PDAL_FILTERS_CPP
"${PDAL_FILTERS_SRC}/Chipper.cpp"
"${PDAL_FILTERS_SRC}/Crop.cpp"
"${PDAL_FILTERS_SRC}/Decimation.cpp"
"${PDAL_FILTERS_SRC}/Ferry.cpp"
"${PDAL_FILTERS_SRC}/HexBin.cpp"
"${PDAL_FILTERS_SRC}/Reprojection.cpp"
"${PDAL_FILTERS_SRC}/Splitter.cpp"
Expand Down
138 changes: 138 additions & 0 deletions src/filters/Ferry.cpp
@@ -0,0 +1,138 @@
/******************************************************************************
* Copyright (c) 2014, Howard Butler, howard@hobu.co
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following
* conditions are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided
* with the distribution.
* * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
* names of its contributors may be used to endorse or promote
* products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
* OF SUCH DAMAGE.
****************************************************************************/

#include <pdal/filters/Ferry.hpp>

namespace pdal
{
namespace filters
{



void Ferry::initialize()
{
}


Options Ferry::getDefaultOptions()
{
Options options;

pdal::Option red("dimension", "Red", "");
pdal::Option b0("band",1, "");
pdal::Option s0("scale", 1.0f, "scale factor for this dimension");
pdal::Options redO;
redO.add(b0);
redO.add(s0);
red.setOptions(redO);

pdal::Option green("dimension", "Green", "");
pdal::Option b1("band",2, "");
pdal::Option s1("scale", 1.0f, "scale factor for this dimension");
pdal::Options greenO;
greenO.add(b1);
greenO.add(s1);
green.setOptions(greenO);

pdal::Option blue("dimension", "Blue", "");
pdal::Option b2("band",3, "");
pdal::Option s2("scale", 1.0f, "scale factor for this dimension");
pdal::Options blueO;
blueO.add(b2);
blueO.add(s2);
blue.setOptions(blueO);

pdal::Option reproject("reproject", false,
"Reproject the input data into the same coordinate system as "
"the raster?");

options.add(red);
options.add(green);
options.add(blue);
options.add(reproject);

return options;
}


void Ferry::processOptions(const Options& options)
{
// m_rasterFilename = options.getValueOrThrow<std::string>("raster");
// std::vector<Option> dimensions = options.getOptions("dimension");
//
// if (dimensions.size() == 0)
// {
// m_bands.emplace_back("Red", Dimension::Id::Red, 1, 1.0);
// m_bands.emplace_back("Green", Dimension::Id::Green, 2, 1.0);
// m_bands.emplace_back("Blue", Dimension::Id::Blue, 3, 1.0);
// log()->get(LogLevel::Debug) << "No dimension mappings were given. "
// "Using default mappings." << std::endl;
// }
// for (auto i = dimensions.begin(); i != dimensions.end(); ++i)
// {
// std::string name = i->getValue<std::string>();
// boost::optional<Options const&> dimensionOptions = i->getOptions();
// if (!dimensionOptions)
// {
// std::ostringstream oss;
// oss << "No band and scaling information given for dimension '" <<
// name << "'";
// throw pdal_error(oss.str());
// }
// uint32_t bandId =
// dimensionOptions->getValueOrThrow<uint32_t>("band");
// double scale =
// dimensionOptions->getValueOrDefault<double>("scale", 1.0);
// m_bands.emplace_back(name, Dimension::Id::Unknown, bandId, scale);
// }
}


void Ferry::ready(PointContext ctx)
{
}


void Ferry::filter(PointBuffer& buffer)
{
}

void Ferry::done(PointContext ctx)
{
}

} // namespace filters
} // namespace pdal

2 changes: 1 addition & 1 deletion test/unit/CMakeLists.txt
Expand Up @@ -24,7 +24,7 @@ SET(PDAL_UNITTEST_TEST_SRC
ConfigTest.cpp
filters/CropFilterTest.cpp
filters/DecimationFilterTest.cpp
# DimensionTest.cpp
filters/FerryFilterTest.cpp
EnvironmentTest.cpp
drivers/faux/FauxReaderTest.cpp
FileUtilsTest.cpp
Expand Down
89 changes: 89 additions & 0 deletions test/unit/filters/FerryFilterTest.cpp
@@ -0,0 +1,89 @@
/******************************************************************************
* Copyright (c) 2014, Howard Butler (howard@hobu.co)
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following
* conditions are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided
* with the distribution.
* * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
* names of its contributors may be used to endorse or promote
* products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
* OF SUCH DAMAGE.
****************************************************************************/

#include <boost/test/unit_test.hpp>
#include <boost/cstdint.hpp>

#include <pdal/drivers/faux/Reader.hpp>
#include <pdal/filters/Reprojection.hpp>
#include <pdal/filters/Ferry.hpp>
#include <pdal/drivers/las/Reader.hpp>
#include <pdal/FileUtils.hpp>
#include <pdal/PointBuffer.hpp>
#include "Support.hpp"
#include "../StageTester.hpp"

using namespace pdal;

BOOST_AUTO_TEST_SUITE(FerryFilterTest)

BOOST_AUTO_TEST_CASE(test_ferry_polygon)
{
using namespace pdal;

Options ops1;
ops1.add("filename", Support::datapath("las/1.2-with-color.las"));
drivers::las::Reader reader(ops1);


Options options;

Option x("dimension", "X", "");
Option toX("to","X", "");
Options xO;
xO.add(toX);
x.setOptions(xO);
options.add(x);

Option y("dimension", "Y", "");
Option toY("to","Y", "");
Options yO;
yO.add(toY);
y.setOptions(yO);
options.add(y);

filters::Ferry ferry(options);
ferry.setInput(&reader);

PointContext ctx;

ferry.prepare(ctx);
PointBufferSet pbSet = ferry.execute(ctx);
BOOST_CHECK_EQUAL(pbSet.size(), 1);
PointBufferPtr buffer = *pbSet.begin();
BOOST_CHECK_EQUAL(buffer->size(), 47u);

}

BOOST_AUTO_TEST_SUITE_END()

0 comments on commit 36b3d49

Please sign in to comment.