void HiJitCube::computePoly() { // Compute sample and line coordinates in the focal plane int samp0,sampN; if (originst) { samp0=jdata.fpSamp0 + jdata.sampOffset; sampN=samp0 + npSamps[jdata.cpmmNumber] - 1; } else { samp0=jdata.fpSamp0 + jdata.sampOffset; sampN=samp0 + Samples() - 1; } int line0(jdata.fpLine0 + jdata.lineOffset), lineN(line0 + Lines() - 1); // Allocate a new coordinate sequence and define it geos::geom::CoordinateSequence *pts = new geos::geom::CoordinateArraySequence(); pts->add(geos::geom::Coordinate(samp0, lineN)); pts->add(geos::geom::Coordinate(sampN, lineN)); pts->add(geos::geom::Coordinate(sampN, line0)); pts->add(geos::geom::Coordinate(samp0, line0)); pts->add(geos::geom::Coordinate(samp0, lineN)); // Make this reentrant and delete previous one if it exists and get the // new one delete fpGeom; fpGeom = geosFactory.createPolygon(geosFactory.createLinearRing(pts), 0); return; }
test_polygon_data() : pm_(1), factory_(&pm_, 0), reader_(&factory_), empty_poly_(factory_.createPolygon()), poly_size_(7) { // Create non-empty LinearRing GeometryPtr geo = 0; geo = reader_.read("POLYGON((0 10, 5 5, 10 5, 15 10, 10 15, 5 15, 0 10))"); poly_ = static_cast<PolygonPtr>(geo); }
void multipolygon_polygon_finish() { try { assert(!m_rings.empty()); auto inner_rings = new std::vector<geos::geom::Geometry*>; std::transform(std::next(m_rings.begin(), 1), m_rings.end(), std::back_inserter(*inner_rings), [](std::unique_ptr<geos::geom::LinearRing>& r) { return r.release(); }); m_polygons.emplace_back(m_geos_factory->createPolygon(m_rings[0].release(), inner_rings)); m_rings.clear(); } catch (const geos::util::GEOSException& e) { THROW(osmium::geos_geometry_error(e.what())); } }