Skip to content

Commit

Permalink
We can't toWKT 3D bounds, so you only get 2D. Add a toBox() method th…
Browse files Browse the repository at this point in the history
…at creates a PostGIS-compatible BOX or BOX3D
  • Loading branch information
hobu committed Apr 19, 2013
1 parent 090f6fa commit e68d001
Showing 1 changed file with 41 additions and 15 deletions.
56 changes: 41 additions & 15 deletions include/pdal/Bounds.hpp
Expand Up @@ -505,29 +505,55 @@ class PDAL_DLL Bounds
std::string toWKT(boost::uint32_t precision = 8, boost::uint32_t dimensions=0) const
{
std::stringstream oss;

oss.precision(precision);
oss.setf(std::ios_base::fixed, std::ios_base::floatfield);

oss << "POLYGON ((";

if (m_ranges.size() == 2 || (dimensions != 0 && dimensions == 2))
{
oss << getMinimum(0) << " " << getMinimum(1) << ", ";
oss << getMinimum(0) << " " << getMaximum(1) << ", ";
oss << getMaximum(0) << " " << getMaximum(1) << ", ";
oss << getMaximum(0) << " " << getMinimum(1) << ", ";
oss << getMinimum(0) << " " << getMinimum(1);

} else if (m_ranges.size() == 3 || (dimensions != 0 && dimensions == 3))
oss << getMinimum(0) << " " << getMinimum(1) << ", ";
oss << getMinimum(0) << " " << getMaximum(1) << ", ";
oss << getMaximum(0) << " " << getMaximum(1) << ", ";
oss << getMaximum(0) << " " << getMinimum(1) << ", ";
oss << getMinimum(0) << " " << getMinimum(1);

// Nothing happens for 3D bounds.
// else if (m_ranges.size() == 3 || (dimensions != 0 && dimensions == 3))
// {
// oss << getMinimum(0) << " " << getMinimum(1) << " " << getMaximum(2) << ", ";
// oss << getMinimum(0) << " " << getMaximum(1) << " " << getMaximum(2) << ", ";
// oss << getMaximum(0) << " " << getMaximum(1) << " " << getMaximum(2) << ", ";
// oss << getMaximum(0) << " " << getMinimum(1) << " " << getMaximum(2) << ", ";
// oss << getMinimum(0) << " " << getMinimum(1) << " " << getMaximum(2);
// }
oss << "))";
return oss.str();
}

std::string toBox(boost::uint32_t precision = 8, boost::uint32_t dimensions=2) const
{
std::stringstream oss;

oss.precision(precision);
oss.setf(std::ios_base::fixed, std::ios_base::floatfield);


if (dimensions == 2)
{
oss << "BOX(";
oss << getMinimum(0) << " " << getMinimum(1) << ", ";
oss << getMaximum(0) << " " << getMaximum(1) << ")";
}

else if (dimensions == 3)
{
oss << getMinimum(0) << " " << getMinimum(1) << " " << getMaximum(2) <<", ";
oss << getMinimum(0) << " " << getMaximum(1) << " " << getMaximum(2) << ", ";
oss << getMaximum(0) << " " << getMaximum(1) << " " << getMaximum(2) << ", ";
oss << getMaximum(0) << " " << getMinimum(1) << " " << getMaximum(2) << ", ";
oss << getMinimum(0) << " " << getMinimum(1) << " " << getMaximum(2);
oss << "BOX3D(";
oss << getMinimum(0) << " " << getMinimum(1) << " " << getMinimum(2) << ", ";
oss << getMaximum(0) << " " << getMaximum(1) << " " << getMaximum(2) << ")";
}
oss << "))";
return oss.str();
}

};


Expand Down

0 comments on commit e68d001

Please sign in to comment.