Add GEOSPointOnSurface test for case of three similar polygons

Might help to catch significant changes in
algorithm calculating point on surface.

Source https://trac.osgeo.org/geos/ticket/840
3.7
Mateusz Loskot 2017-08-29 17:02:33 +02:00
parent 080d94701c
commit 64e823b26b
1 changed files with 56 additions and 0 deletions

View File

@ -188,5 +188,61 @@ namespace tut
}
// Check point on surface for three similar polygons (shapes)
// https://trac.osgeo.org/geos/ticket/840
template<>
template<>
void object::test<7>()
{
// Polygon A
{
geom1_ = GEOSGeomFromWKT("POLYGON(("
"182111.031940953 141935.935903267,181944.315698016 141813.663222482,"
"181993.426552077 141735.161360171,182025.215323227 141755.058841504,"
"182042.126877935 141723.338145732,182089.035943744 141755.453352846,"
"182096.699289843 141744.892410235,182142.107084301 141773.967727472,"
"182140.268233846 141825.482203511,182123.233970367 141827.369156254,"
"182111.031940953 141935.935903267))");
ensure(0 != geom1_);
geom2_ = GEOSPointOnSurface(geom1_);
ensure(0 != geom2_);
wkt_ = GEOSWKTWriter_write(wktw_, geom2_);
ensure_equals(std::string(wkt_), std::string("POINT (182077.08 141881.65)"));
}
// Polygon B
{
geom1_ = GEOSGeomFromWKT("POLYGON(("
"182512.231897141 141935.935903267,182344.315698016 141813.663222482,"
"182393.426552077 141735.161360171,182425.215323227 141755.058841504,"
"182442.126877935 141723.338145732,182489.035943744 141755.453352846,"
"182496.699289843 141744.892410235,182542.107084301 141773.967727472,"
"182540.268233846 141825.482203511,182522.034014178 141825.369229273,"
"182512.231897141 141935.935903267))");
ensure(0 != geom1_);
geom2_ = GEOSPointOnSurface(geom1_);
ensure(0 != geom2_);
wkt_ = GEOSWKTWriter_write(wktw_, geom2_);
ensure_equals(std::string(wkt_), std::string("POINT (182476.76 141880.71)"));
}
// Polygon C
{
geom1_ = GEOSGeomFromWKT("POLYGON(("
"182635.760119718 141846.477712277,182826.153168283 141974.473039044,"
"182834.952846998 141857.67730337,182862.151853936 141851.277537031,"
"182860.551912351 141779.280165725,182824.553226698 141748.881275618,"
"182814.953577191 141758.480925126,182766.155358861 141721.682268681,"
"182742.156235092 141744.881421657,182692.558045971 141716.882443927,"
"182635.760119718 141846.477712277))");
ensure(0 != geom1_);
geom2_ = GEOSPointOnSurface(geom1_);
ensure(0 != geom2_);
wkt_ = GEOSWKTWriter_write(wktw_, geom2_);
ensure_equals(std::string(wkt_), std::string("POINT (182755.89 141812.88)"));
}
}
} // namespace tut