⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 douglaspeuckersimplifiertest.cpp

📁 在Linux下做的QuadTree的程序
💻 CPP
字号:
// $Id: DouglasPeuckerSimplifierTest.cpp 1988 2007-06-08 17:13:36Z mloskot $// // Test Suite for geos::simplify::DouglasPeuckerSimplifierTest// TUT#include <tut.h>// GEOS#include <geos/io/WKTReader.h>#include <geos/geom/PrecisionModel.h>#include <geos/geom/GeometryFactory.h>#include <geos/geom/Geometry.h>#include <geos/simplify/DouglasPeuckerSimplifier.h>#include <string>#include <memory>namespace tut{	using namespace geos::simplify;		//	// Test Group	//	// Common data used by tests	struct test_dpsimp_data	{		geos::geom::PrecisionModel pm;		geos::geom::GeometryFactory gf;		geos::io::WKTReader wktreader;		typedef geos::geom::Geometry::AutoPtr GeomPtr;		test_dpsimp_data()			:			pm(1.0),			gf(&pm),			wktreader(&gf)		{}	};	typedef test_group<test_dpsimp_data> group;	typedef group::object object;	group test_dpsimp_group("geos::simplify::DouglasPeuckerSimplifier");	//	// Test Cases	//	// 1 - PolygonNoReduction	template<>	template<>	void object::test<1>()	{         		std::string wkt("POLYGON((20 220, 40 220, 60 220, 80 220, 100 220, \					120 220, 140 220, 140 180, 100 180, 60 180, 20 180, 20 220))");		GeomPtr g(wktreader.read(wkt));		GeomPtr simplified = DouglasPeuckerSimplifier::simplify(			g.get(), 10.0);		ensure( simplified->isValid() );		// topology is unchanged		ensure( simplified->equals(g.get()) );	}	// 2 - PolygonReductionWithSplit	template<>	template<>	void object::test<2>()	{         		std::string wkt_in("POLYGON ((40 240, 160 241, 280 240, 280 160, \					160 240, 40 140, 40 240))");				std::string wkt_ex("MULTIPOLYGON (((40.0 240.0, 160.0 240.0, 40.0 140.0, 40.0 240.0)), \					((160.0 240.0, 280.0 240.0, 280.0 160.0, 160.0 240.0)))");		GeomPtr g(wktreader.read(wkt_in));		GeomPtr expected(wktreader.read(wkt_ex));        // TODO: This test blows because if instability of geos.index.strtree::yComparator() predicate		GeomPtr simplified = DouglasPeuckerSimplifier::simplify(			g.get(), 10.0);		ensure( simplified->isValid() );				ensure( simplified->equalsExact(expected.get()) );	}	// 3 - PolygonReduction	template<>	template<>	void object::test<3>()	{         		std::string wkt_in("POLYGON ((120 120, 121 121, 122 122, 220 120, \					180 199, 160 200, 140 199, 120 120))");		std::string wkt_ex("POLYGON ((120 120, 140 199, 160 200, 180 199, 220 120, 120 120))");		GeomPtr g(wktreader.read(wkt_in));		GeomPtr expected(wktreader.read(wkt_ex));		GeomPtr simplified = DouglasPeuckerSimplifier::simplify(			g.get(), 10.0);		ensure( simplified->isValid() );				ensure( simplified->equalsExact(expected.get()) );	}	// 4 - PolygonWithTouchingHole	template<>	template<>	void object::test<4>()	{         		std::string wkt_in("POLYGON ((80 200, 240 200, 240 60, 80 60, 80 200), \					(120 120, 220 120, 180 199, 160 200, 140 199, 120 120))");				std::string wkt_ex("POLYGON ((80 200, 160 200, 240 200, 240 60, 80 60, 80 200), \					(160 200, 140 199, 120 120, 220 120, 180 199, 160 200)))");		GeomPtr g(wktreader.read(wkt_in));		GeomPtr expected(wktreader.read(wkt_ex));		GeomPtr simplified = DouglasPeuckerSimplifier::simplify(			g.get(), 10.0);		ensure( simplified->isValid() );		ensure( simplified->isValid() );		ensure( simplified->equalsExact(expected.get()) );	}	// 5 - FlattishPolygon	template<>	template<>	void object::test<5>()	{         		std::string wkt_in("POLYGON ((0 0, 50 0, 53 0, 55 0, 100 0, 70 1, 60 1, 50 1, 40 1, 0 0))");		std::string wkt_ex("POLYGON EMPTY");		GeomPtr g(wktreader.read(wkt_in));		GeomPtr expected(wktreader.read(wkt_ex));		GeomPtr simplified = DouglasPeuckerSimplifier::simplify(			g.get(), 10.0);		ensure( simplified->isValid() );		ensure( simplified->equalsExact(expected.get()) );		//ensure_equals( *simplified, *expected );	}	// 6 - TinySquare	template<>	template<>	void object::test<6>()	{         		std::string wkt_in("POLYGON ((0 5, 5 5, 5 0, 0 0, 0 1, 0 5))");		std::string wkt_ex("POLYGON EMPTY");		GeomPtr g(wktreader.read(wkt_in));		GeomPtr expected(wktreader.read(wkt_ex));		GeomPtr simplified = DouglasPeuckerSimplifier::simplify(			g.get(), 10.0);		ensure( simplified->isValid() );		ensure( simplified->equalsExact(expected.get()) );	}	// 7 - TinyLineString	template<>	template<>	void object::test<7>()	{         		std::string wkt_in("LINESTRING (0 5, 1 5, 2 5, 5 5)");		std::string wkt_ex("LINESTRING (0 5, 5 5)");		GeomPtr g(wktreader.read(wkt_in));		GeomPtr expected(wktreader.read(wkt_ex));		GeomPtr simplified = DouglasPeuckerSimplifier::simplify(			g.get(), 10.0);		ensure( simplified->isValid() );		ensure( simplified->equalsExact(expected.get()) );	}	// 8 - MultiPoint	template<>	template<>	void object::test<8>()	{         		std::string wkt_in("MULTIPOINT(80 200, 240 200, 240 60, 80 60, 80 200, 140 199, 120 120)");		GeomPtr g(wktreader.read(wkt_in));		GeomPtr simplified = DouglasPeuckerSimplifier::simplify(			g.get(), 10.0);		// MultiPoint is *not* simplified		ensure( simplified->equalsExact(g.get()) );	}	// 9 - MultiLineString	template<>	template<>	void object::test<9>()	{         		std::string wkt_in("MULTILINESTRING( (0 0, 50 0, 70 0, 80 0, 100 0), \					(0 0, 50 1, 60 1, 100 0) )");				std::string wkt_ex("MULTILINESTRING( (0 0, 100 0), (0 0, 100 0) )");		GeomPtr g(wktreader.read(wkt_in));		GeomPtr expected(wktreader.read(wkt_ex));		GeomPtr simplified = DouglasPeuckerSimplifier::simplify(			g.get(), 10.0);		ensure( simplified->isValid() );		ensure( simplified->equalsExact(expected.get()) );	}	// 10 - GeometryCollection	template<>	template<>	void object::test<10>()	{         		std::string wkt_in("GEOMETRYCOLLECTION ( \					MULTIPOINT (80 200, 240 200, 240 60, 80 60, 80 200, 140 199, 120 120), \					POLYGON ((80 200, 240 200, 240 60, 80 60, 80 200)), \					LINESTRING (80 200, 240 200, 240 60, 80 60, 80 200, 140 199, 120 120) )");		std::string wkt_ex("MULTILINESTRING( (0 0, 100 0), (0 0, 100 0) )");		GeomPtr g(wktreader.read(wkt_in));		GeomPtr expected(wktreader.read(wkt_ex));		GeomPtr simplified = DouglasPeuckerSimplifier::simplify(			g.get(), 10.0);		ensure( simplified->isValid() );		// Non simplification occurs		ensure( simplified->equalsExact(g.get()) );	}} // namespace tut

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -