📄 geometryfactorytest.cpp
字号:
PointPtr pt = factory_.createPoint(sequence); ensure( "createPoint() returned null pointer.", pt != 0 ); ensure( "createPoint() returned empty point.", !pt->isEmpty() ); ensure( pt->isSimple() ); ensure( pt->isValid() ); ensure( pt->getCoordinate() != 0 ); CoordinateCPtr pcoord = pt->getCoordinate(); ensure( pcoord != 0 ); ensure_equals( pcoord->x, x_ ); ensure_equals( pcoord->y, y_ ); ensure_equals( pcoord->z, z_ ); GeometryPtr geo = 0; geo = pt->getEnvelope(); ensure( geo != 0 ); ensure( !geo->isEmpty() ); factory_.destroyGeometry(geo); geo = pt->getCentroid(); ensure( geo != 0 ); ensure( !geo->isEmpty() ); factory_.destroyGeometry(geo); geo = pt->getBoundary(); ensure( geo != 0 ); ensure( geo->isEmpty() ); factory_.destroyGeometry(geo); geo = pt->convexHull(); ensure( geo != 0 ); ensure( !geo->isEmpty() ); factory_.destroyGeometry(geo); ensure_equals( pt->getGeometryTypeId(), geos::geom::GEOS_POINT ); ensure_equals( pt->getDimension(), geos::geom::Dimension::P ); ensure_equals( pt->getBoundaryDimension(), geos::geom::Dimension::False ); ensure_equals( pt->getNumPoints(), 1u ); ensure_equals( pt->getLength(), 0.0 ); ensure_equals( pt->getArea(), 0.0 ); // FREE MEMORY factory_.destroyGeometry(pt); } // Test of createLinearRing() const template<> template<> void object::test<12>() { LinearRingPtr lr = factory_.createLinearRing(); ensure( "createLinearRing() returned null pointer.", lr != 0 ); ensure( "createLinearRing() returned non-empty point.", lr->isEmpty() ); ensure( lr->isEmpty() ); ensure( lr->isSimple() ); ensure( lr->isValid() ); ensure( lr->getCoordinate() == 0 ); // TODO - mloskot //http://geos.refractions.net/pipermail/geos-devel/2006-March/001961.html //ensure( lr->isClosed() ); // TODO - mloskot //http://geos.refractions.net/pipermail/geos-devel/2006-March/001962.html //ensure_equals( lr->getStartPoint(), lr->getEndPoint() ); ensure_equals( lr->getGeometryTypeId(), geos::geom::GEOS_LINEARRING ); ensure_equals( lr->getDimension(), geos::geom::Dimension::L ); ensure_equals( lr->getBoundaryDimension(), geos::geom::Dimension::False ); ensure_equals( lr->getNumPoints(), 0u ); ensure_equals( lr->getLength(), 0.0 ); ensure_equals( lr->getArea(), 0.0 ); // FREE MEMORY factory_.destroyGeometry(lr); } // Test of createLinearRing(CoordinateSequence* newCoords) const template<> template<> void object::test<13>() { const std::size_t size = 5; CoordArrayPtr coords = new geos::geom::CoordinateArraySequence(size); ensure( coords != 0 ); ensure_equals( coords->getSize(), size ); LinearRingPtr lr = factory_.createLinearRing(coords); ensure( "createLinearRing() returned null pointer.", lr != 0 ); ensure( "createLinearRing() returned empty point.", !lr->isEmpty() ); ensure( lr->isSimple() ); ensure( lr->getCoordinate() != 0 ); // TODO - mloskot - is this correct? //ensure( !lr->isValid() ); ensure_equals( lr->getGeometryTypeId(), geos::geom::GEOS_LINEARRING ); ensure_equals( lr->getDimension(), geos::geom::Dimension::L ); ensure_equals( lr->getBoundaryDimension(), geos::geom::Dimension::False ); ensure_equals( lr->getNumPoints(), size ); ensure_equals( lr->getLength(), 0.0 ); ensure_equals( lr->getArea(), 0.0 ); // FREE MEMORY factory_.destroyGeometry(lr); } // Test of createLinearRing(const CoordinateSequence& coordinates) const template<> template<> void object::test<14>() { const std::size_t size = 5; geos::geom::CoordinateArraySequence coords(size); ensure_equals( coords.getSize(), size ); LinearRingPtr lr = factory_.createLinearRing(coords); ensure( "createLinearRing() returned empty point.", !lr->isEmpty() ); ensure_equals( lr->getNumPoints(), size ); ensure( lr->isSimple() ); ensure( lr->getCoordinate() != 0 ); ensure_equals( lr->getGeometryTypeId(), geos::geom::GEOS_LINEARRING ); ensure_equals( lr->getDimension(), geos::geom::Dimension::L ); ensure_equals( lr->getBoundaryDimension(), geos::geom::Dimension::False ); ensure_equals( lr->getNumPoints(), size ); ensure_equals( lr->getLength(), 0.0 ); ensure_equals( lr->getArea(), 0.0 ); // FREE MEMORY factory_.destroyGeometry(lr); } // Test of createLineString() const template<> template<> void object::test<15>() { LineStringPtr line = factory_.createLineString(); ensure( "createLineString() returned null pointer.", line != 0 ); ensure( "createLineString() returned non-empty point.", line->isEmpty() ); ensure( line->isSimple() ); ensure( line->isValid() ); ensure( line->getCentroid() == 0 ); // TODO - mloskot - waiting for some decision // http://geos.refractions.net/pipermail/geos-devel/2006-March/002006.html //ensure( line->getCoordinate() == 0 ); GeometryPtr geo = 0; geo = line->getEnvelope(); ensure( geo != 0 ); ensure( geo->isEmpty() ); factory_.destroyGeometry(geo); geo = line->getBoundary(); ensure( geo != 0 ); ensure( geo->isEmpty() ); factory_.destroyGeometry(geo); geo = line->convexHull(); ensure( geo != 0 ); ensure( geo->isEmpty() ); factory_.destroyGeometry(geo); ensure_equals( line->getGeometryTypeId(), geos::geom::GEOS_LINESTRING ); ensure_equals( line->getDimension(), geos::geom::Dimension::L ); ensure_equals( line->getBoundaryDimension(), geos::geom::Dimension::P ); // empty linestring ensure_equals( line->getNumPoints(), 0u ); ensure_equals( line->getLength(), 0.0 ); ensure_equals( line->getArea(), 0.0 ); // FREE MEMORY factory_.destroyGeometry(line); } // Test of createLineString(CoordinateSequence* coordinates) const template<> template<> void object::test<16>() { const std::size_t size = 5; CoordArrayPtr coords = new geos::geom::CoordinateArraySequence(size); ensure( coords != 0 ); ensure_equals( coords->getSize(), size ); LineStringPtr line = factory_.createLineString(coords); ensure( "createLineString() returned null pointer.", line != 0 ); ensure( "createLineString() returned empty point.", !line->isEmpty() ); ensure( line->isSimple() ); ensure( line->getCoordinate() != 0 ); // TODO - mloskot - is this correct? //ensure( line->isValid() ); ensure_equals( line->getGeometryTypeId(), geos::geom::GEOS_LINESTRING ); ensure_equals( line->getDimension(), geos::geom::Dimension::L ); ensure_equals( line->getBoundaryDimension(), geos::geom::Dimension::False ); ensure_equals( line->getNumPoints(), size ); ensure_equals( line->getLength(), 0.0 ); ensure_equals( line->getArea(), 0.0 ); // FREE MEMORY factory_.destroyGeometry(line); } // Test of createLineString(const CoordinateSequence& coordinates) const template<> template<> void object::test<17>() { const std::size_t size = 5; geos::geom::CoordinateArraySequence coords(size); ensure_equals( coords.getSize(), size ); LineStringPtr line = factory_.createLineString(coords); ensure( "createLineString() returned empty point.", !line->isEmpty() ); ensure_equals( line->getNumPoints(), size ); ensure( line->isSimple() ); ensure( line->getCoordinate() != 0 ); ensure_equals( line->getGeometryTypeId(), geos::geom::GEOS_LINESTRING ); ensure_equals( line->getDimension(), geos::geom::Dimension::L ); ensure_equals( line->getBoundaryDimension(), geos::geom::Dimension::False ); ensure_equals( line->getNumPoints(), size ); ensure_equals( line->getLength(), 0.0 ); ensure_equals( line->getArea(), 0.0 ); // FREE MEMORY factory_.destroyGeometry(line); } // Test of createPolygon() const template<> template<> void object::test<18>() { PolygonPtr poly = factory_.createPolygon(); ensure( "createPolygon() returned null pointer.", poly != 0 ); ensure( "createPolygon() returned non-empty point.", poly->isEmpty() ); ensure( poly->isSimple() ); ensure( poly->isValid() ); ensure( poly->getCentroid() == 0 ); // TODO - mloskot - waiting for some decision // http://geos.refractions.net/pipermail/geos-devel/2006-March/002006.html //ensure( poly->getCoordinate() == 0 ); GeometryPtr geo = 0; // TODO - mloskot - waiting for resolution // http://geos.refractions.net/pipermail/geos-devel/2006-March/002011.html //geo = poly->getEnvelope(); //ensure( geo != 0 ); //ensure( geo->isEmpty() ); //factory_.destroyGeometry(geo); geo = poly->getBoundary(); ensure( geo != 0 ); ensure( geo->isEmpty() ); factory_.destroyGeometry(geo); geo = poly->convexHull(); ensure( geo != 0 ); ensure( geo->isEmpty() ); factory_.destroyGeometry(geo); ensure_equals( poly->getGeometryTypeId(), geos::geom::GEOS_POLYGON ); ensure_equals( poly->getDimension(), geos::geom::Dimension::A ); ensure_equals( poly->getBoundaryDimension(), geos::geom::Dimension::L ); ensure_equals( poly->getNumPoints(), 0u ); ensure_equals( poly->getLength(), 0.0 ); ensure_equals( poly->getArea(), 0.0 ); // FREE MEMORY factory_.destroyGeometry(poly); } // Test of createPolygon(LinearRing* shell, std::vector<Geometry*>* holes) const template<> template<> void object::test<19>() { using geos::geom::Coordinate; const std::size_t size = 7; // Create sequence of coordiantes CoordArrayPtr coords = new geos::geom::CoordinateArraySequence(size); ensure( coords != 0 ); coords->setAt(Coordinate(0, 10), 0); coords->setAt(Coordinate(5, 5), 1); coords->setAt(Coordinate(10, 5), 2); coords->setAt(Coordinate(15, 10), 3); coords->setAt(Coordinate(10, 15), 4); coords->setAt(Coordinate(5, 15), 5); coords->setAt(Coordinate(0, 10), 6); ensure_equals( coords->getSize(), size ); // Create exterior ring LinearRingPtr exterior = factory_.createLinearRing(coords); ensure( "createLinearRing returned null pointer.", exterior != 0 ); ensure( "createLinearRing() returned empty point.", !exterior->isEmpty() ); ensure( exterior->isSimple() ); ensure_equals( exterior->getGeometryTypeId(), geos::geom::GEOS_LINEARRING ); ensure_equals( exterior->getDimension(), geos::geom::Dimension::L ); ensure_equals( exterior->getBoundaryDimension(), geos::geom::Dimension::False ); ensure_equals( exterior->getNumPoints(), size ); ensure_equals( exterior->getArea(), 0.0 ); ensure_not_equals( exterior->getLength(), 0.0 ); // Create polygon PolygonPtr poly = factory_.createPolygon(exterior, 0); ensure( "createPolygon returned null pointer.", poly != 0 ); ensure( "createPolygon() returned empty point.", !poly->isEmpty() ); ensure( poly->isSimple() ); ensure_equals( poly->getGeometryTypeId(), geos::geom::GEOS_POLYGON ); ensure_equals( poly->getDimension(), geos::geom::Dimension::A ); ensure_equals( poly->getBoundaryDimension(), geos::geom::Dimension::L ); ensure_equals( poly->getNumPoints(), size ); ensure_not_equals( poly->getArea(), 0.0 ); ensure_not_equals( poly->getLength(), 0.0 ); // FREE MEMORY factory_.destroyGeometry(poly); } // Test of createPolygon(const LinearRing& shell, const std::vector<Geometry*>& holes) const template<> template<> void object::test<20>() { using geos::geom::Coordinate; const std::size_t exteriorSize = 7; const std::size_t interiorSize = 5; // Create sequence of coordiantes CoordArrayPtr coords = new geos::geom::CoordinateArraySequence(exteriorSize); ensure( coords != 0 ); coords->setAt(Coordinate(0, 10), 0); coords->setAt(Coordinate(5, 5), 1); coords->setAt(Coordinate(10, 5), 2); coords->setAt(Coordinate(15, 10), 3); coords->setAt(Coordinate(10, 15), 4); coords->setAt(Coordinate(5, 15), 5); coords->setAt(Coordinate(0, 10), 6); ensure_equals( coords->getSize(), exteriorSize ); // Create exterior ring LinearRingPtr exterior = factory_.createLinearRing(coords); ensure( "createLinearRing returned null pointer.", exterior != 0 ); ensure( "createLinearRing() returned empty point.", !exterior->isEmpty() ); ensure( exterior->isSimple() ); ensure_equals( exterior->getGeometryTypeId(), geos::geom::GEOS_LINEARRING ); ensure_equals( exterior->getDimension(), geos::geom::Dimension::L ); ensure_equals( exterior->getBoundaryDimension(), geos::geom::Dimension::False ); ensure_equals( exterior->getNumPoints(), exteriorSize ); ensure_equals( exterior->getArea(), 0.0 ); ensure_not_equals( exterior->getLength(), 0.0 ); // Create collection of holes GeometryPtr geo = reader_.read(("LINEARRING(7 7, 12 7, 12 12, 7 12, 7 7)")); ensure( geo != 0 ); LinearRingPtr hole = static_cast<LinearRingPtr>(geo); ensure( hole->isRing() ); ensure_equals( hole->getNumPoints(), interiorSize ); // REMEMBER TO DEALLOCATE THIS COLLECTION std::vector<GeometryPtr> holes; holes.push_back(hole); // Create polygon using copy ctor PolygonPtr poly = factory_.createPolygon((*exterior), holes); ensure( "createPolygon returned null pointer.", poly != 0 ); ensure( "createPolygon() returned empty point.", !poly->isEmpty() ); ensure( poly->isSimple() ); ensure_equals( poly->getGeometryTypeId(), geos::geom::GEOS_POLYGON ); ensure_equals( poly->getDimension(), geos::geom::Dimension::A ); ensure_equals( poly->getBoundaryDimension(), geos::geom::Dimension::L ); ensure_equals( poly->getNumPoints(), exteriorSize + interiorSize ); ensure_not_equals( poly->getArea(), 0.0 ); ensure_not_equals( poly->getLength(), 0.0 ); ensure_equals( poly->getNumGeometries(), 1u ); ensure_equals( poly->getNumInteriorRing(), 1u ); // FREE MEMORY std::vector<GeometryPtr>::const_iterator it; for (it = holes.begin(); it != holes.end(); ++it) { delete (*it); } holes.clear(); factory_.destroyGeometry(exterior); factory_.destroyGeometry(poly); } // Test of createGeometryCollection() const template<> template<> void object::test<21>() { GeometryColPtr col = factory_.createGeometryCollection(); ensure( "createGeometryCollection() returned null pointer.", col != 0 ); ensure( col->isEmpty() ); ensure( col->isValid() ); try { ensure( !col->isSimple() ); fail("IllegalArgumentException expected"); } catch ( geos::util::IllegalArgumentException const& e ) { const char* msg = e.what(); // ok ensure( msg != 0 ); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -