--- ./geometry-builder.cpp.ORIG 2015-02-22 16:08:14.000000000 +0100 +++ ./geometry-builder.cpp 2016-11-25 17:19:29.804737000 +0100 @@ -94,8 +94,8 @@ geometry_builder::maybe_wkt_t geometry_builder::get_wkt_simple(const osmNode *nodes, int count, int polygon) const { - GeometryFactory gf; - std::auto_ptr coords(gf.getCoordinateSequenceFactory()->create((size_t)0, (size_t)2)); + GeometryFactory::unique_ptr gf = GeometryFactory::create(); + std::auto_ptr coords(gf->getCoordinateSequenceFactory()->create((size_t)0, (size_t)2)); try { @@ -109,8 +109,8 @@ maybe_wkt_t wkt(new geometry_builder::wkt_t()); geom_ptr geom; if (polygon && (coords->getSize() >= 4) && (coords->getAt(coords->getSize() - 1).equals2D(coords->getAt(0)))) { - std::auto_ptr shell(gf.createLinearRing(coords.release())); - geom = geom_ptr(gf.createPolygon(shell.release(), new std::vector)); + std::auto_ptr shell(gf->createLinearRing(coords.release())); + geom = geom_ptr(gf->createPolygon(shell.release(), new std::vector)); if (!geom->isValid()) { if (excludepoly) { throw std::runtime_error("Excluding broken polygon."); @@ -123,7 +123,7 @@ } else { if (coords->getSize() < 2) throw std::runtime_error("Excluding degenerate line."); - geom = geom_ptr(gf.createLineString(coords.release())); + geom = geom_ptr(gf->createLineString(coords.release())); wkt->area = 0; } @@ -149,8 +149,8 @@ geometry_builder::maybe_wkts_t geometry_builder::get_wkt_split(const osmNode *nodes, int count, int polygon, double split_at) const { - GeometryFactory gf; - std::auto_ptr coords(gf.getCoordinateSequenceFactory()->create((size_t)0, (size_t)2)); + GeometryFactory::unique_ptr gf = GeometryFactory::create(); + std::auto_ptr coords(gf->getCoordinateSequenceFactory()->create((size_t)0, (size_t)2)); WKTWriter writer; //TODO: use count to get some kind of hint of how much we should reserve? maybe_wkts_t wkts(new std::vector); @@ -166,8 +166,8 @@ geom_ptr geom; if (polygon && (coords->getSize() >= 4) && (coords->getAt(coords->getSize() - 1).equals2D(coords->getAt(0)))) { - std::auto_ptr shell(gf.createLinearRing(coords.release())); - geom = geom_ptr(gf.createPolygon(shell.release(), new std::vector)); + std::auto_ptr shell(gf->createLinearRing(coords.release())); + geom = geom_ptr(gf->createPolygon(shell.release(), new std::vector)); if (!geom->isValid()) { if (excludepoly) { throw std::runtime_error("Excluding broken polygon."); @@ -189,7 +189,7 @@ double distance = 0; std::auto_ptr segment; - segment = std::auto_ptr(gf.getCoordinateSequenceFactory()->create((size_t)0, (size_t)2)); + segment = std::auto_ptr(gf->getCoordinateSequenceFactory()->create((size_t)0, (size_t)2)); segment->add(coords->getAt(0)); for(unsigned i=1; igetSize(); i++) { const Coordinate this_pt = coords->getAt(i); @@ -208,7 +208,7 @@ const Coordinate interpolated(frac * (this_pt.x - prev_pt.x) + prev_pt.x, frac * (this_pt.y - prev_pt.y) + prev_pt.y); segment->add(interpolated); - geom_ptr geom = geom_ptr(gf.createLineString(segment.release())); + geom_ptr geom = geom_ptr(gf->createLineString(segment.release())); //copy of an empty one should be cheapest wkts->push_back(geometry_builder::wkt_t()); @@ -216,7 +216,7 @@ wkts->back().geom = writer.write(geom.get()); wkts->back().area = 0; - segment.reset(gf.getCoordinateSequenceFactory()->create((size_t)0, (size_t)2)); + segment.reset(gf->getCoordinateSequenceFactory()->create((size_t)0, (size_t)2)); segment->add(interpolated); } // reset the distance based on the final splitting point for @@ -234,7 +234,7 @@ // on the last iteration, close out the line. if (i == coords->getSize()-1) { - geom_ptr geom = geom_ptr(gf.createLineString(segment.release())); + geom_ptr geom = geom_ptr(gf->createLineString(segment.release())); //copy of an empty one should be cheapest wkts->push_back(geometry_builder::wkt_t()); @@ -242,7 +242,7 @@ wkts->back().geom = writer.write(geom.get()); wkts->back().area = 0; - segment.reset(gf.getCoordinateSequenceFactory()->create((size_t)0, (size_t)2)); + segment.reset(gf->getCoordinateSequenceFactory()->create((size_t)0, (size_t)2)); } } } @@ -264,8 +264,8 @@ } int geometry_builder::parse_wkt(const char * wkt, struct osmNode *** xnodes, int ** xcount, int * polygon) { - GeometryFactory gf; - WKTReader reader(&gf); + GeometryFactory::unique_ptr gf = GeometryFactory::create(); + WKTReader reader(gf.get()); std::string wkt_string(wkt); Geometry * geometry; const Geometry * subgeometry; @@ -329,7 +329,7 @@ geometry_builder::maybe_wkts_t geometry_builder::build_polygons(const osmNode * const * xnodes, const int *xcount, bool enable_multi, osmid_t osm_id) const { std::auto_ptr > lines(new std::vector); - GeometryFactory gf; + GeometryFactory::unique_ptr gf = GeometryFactory::create(); geom_ptr geom; geos::geom::prep::PreparedGeometryFactory pgf; @@ -339,7 +339,7 @@ try { for (int c=0; xnodes[c]; c++) { - std::auto_ptr coords(gf.getCoordinateSequenceFactory()->create((size_t)0, (size_t)2)); + std::auto_ptr coords(gf->getCoordinateSequenceFactory()->create((size_t)0, (size_t)2)); for (int i = 0; i < xcount[c]; i++) { const osmNode *nodes = xnodes[c]; Coordinate c; @@ -348,13 +348,13 @@ coords->add(c, 0); } if (coords->getSize() > 1) { - geom = geom_ptr(gf.createLineString(coords.release())); + geom = geom_ptr(gf->createLineString(coords.release())); lines->push_back(geom.release()); } } //geom_ptr segment(0); - geom_ptr mline (gf.createMultiLineString(lines.release())); + geom_ptr mline (gf->createMultiLineString(lines.release())); //geom_ptr noded (segment->Union(mline.get())); LineMerger merger; //merger.add(noded.get()); @@ -371,8 +371,8 @@ std::auto_ptr pline ((*merged ) [i]); if (pline->getNumPoints() > 3 && pline->isClosed()) { - polys[totalpolys].polygon = gf.createPolygon(gf.createLinearRing(pline->getCoordinates()),0); - polys[totalpolys].ring = gf.createLinearRing(pline->getCoordinates()); + polys[totalpolys].polygon = gf->createPolygon(gf->createLinearRing(pline->getCoordinates()),0); + polys[totalpolys].ring = gf->createLinearRing(pline->getCoordinates()); polys[totalpolys].area = polys[totalpolys].polygon->getArea(); polys[totalpolys].iscontained = 0; polys[totalpolys].containedbyid = 0; @@ -460,7 +460,7 @@ } } - Polygon* poly(gf.createPolygon(polys[i].ring, interior.release())); + Polygon* poly(gf->createPolygon(polys[i].ring, interior.release())); poly->normalize(); polygons->push_back(poly); } @@ -468,7 +468,7 @@ // Make a multipolygon if required if ((toplevelpolygons > 1) && enable_multi) { - geom_ptr multipoly(gf.createMultiPolygon(polygons.release())); + geom_ptr multipoly(gf->createMultiPolygon(polygons.release())); if (!multipoly->isValid() && (excludepoly == 0)) { multipoly = geom_ptr(multipoly->buffer(0)); } @@ -526,7 +526,7 @@ geometry_builder::maybe_wkt_t geometry_builder::build_multilines(const osmNode * const * xnodes, const int *xcount, osmid_t osm_id) const { std::auto_ptr > lines(new std::vector); - GeometryFactory gf; + GeometryFactory::unique_ptr gf = GeometryFactory::create(); geom_ptr geom; maybe_wkt_t wkt(new geometry_builder::wkt_t()); @@ -534,7 +534,7 @@ try { for (int c=0; xnodes[c]; c++) { - std::auto_ptr coords(gf.getCoordinateSequenceFactory()->create((size_t)0, (size_t)2)); + std::auto_ptr coords(gf->getCoordinateSequenceFactory()->create((size_t)0, (size_t)2)); for (int i = 0; i < xcount[c]; i++) { const osmNode *nodes = xnodes[c]; Coordinate c; @@ -543,13 +543,13 @@ coords->add(c, 0); } if (coords->getSize() > 1) { - geom = geom_ptr(gf.createLineString(coords.release())); + geom = geom_ptr(gf->createLineString(coords.release())); lines->push_back(geom.release()); } } //geom_ptr segment(0); - geom_ptr mline (gf.createMultiLineString(lines.release())); + geom_ptr mline (gf->createMultiLineString(lines.release())); //geom_ptr noded (segment->Union(mline.get())); WKTWriter writer; @@ -571,7 +571,7 @@ int enable_multi, double split_at, osmid_t osm_id) const { std::auto_ptr > lines(new std::vector); - GeometryFactory gf; + GeometryFactory::unique_ptr gf = GeometryFactory::create(); geom_ptr geom; geos::geom::prep::PreparedGeometryFactory pgf; maybe_wkts_t wkts(new std::vector); @@ -580,7 +580,7 @@ try { for (int c=0; xnodes[c]; c++) { - std::auto_ptr coords(gf.getCoordinateSequenceFactory()->create((size_t)0, (size_t)2)); + std::auto_ptr coords(gf->getCoordinateSequenceFactory()->create((size_t)0, (size_t)2)); for (int i = 0; i < xcount[c]; i++) { const osmNode *nodes = xnodes[c]; Coordinate c; @@ -589,13 +589,13 @@ coords->add(c, 0); } if (coords->getSize() > 1) { - geom = geom_ptr(gf.createLineString(coords.release())); + geom = geom_ptr(gf->createLineString(coords.release())); lines->push_back(geom.release()); } } //geom_ptr segment(0); - geom_ptr mline (gf.createMultiLineString(lines.release())); + geom_ptr mline (gf->createMultiLineString(lines.release())); //geom_ptr noded (segment->Union(mline.get())); LineMerger merger; //merger.add(noded.get()); @@ -612,8 +612,8 @@ std::auto_ptr pline ((*merged ) [i]); if (make_polygon && pline->getNumPoints() > 3 && pline->isClosed()) { - polys[totalpolys].polygon = gf.createPolygon(gf.createLinearRing(pline->getCoordinates()),0); - polys[totalpolys].ring = gf.createLinearRing(pline->getCoordinates()); + polys[totalpolys].polygon = gf->createPolygon(gf->createLinearRing(pline->getCoordinates()),0); + polys[totalpolys].ring = gf->createLinearRing(pline->getCoordinates()); polys[totalpolys].area = polys[totalpolys].polygon->getArea(); polys[totalpolys].iscontained = 0; polys[totalpolys].containedbyid = 0; @@ -629,13 +629,13 @@ //std::cerr << "polygon(" << osm_id << ") is no good: points(" << pline->getNumPoints() << "), closed(" << pline->isClosed() << "). " << writer.write(pline.get()) << std::endl; double distance = 0; std::auto_ptr segment; - segment = std::auto_ptr(gf.getCoordinateSequenceFactory()->create((size_t)0, (size_t)2)); + segment = std::auto_ptr(gf->getCoordinateSequenceFactory()->create((size_t)0, (size_t)2)); segment->add(pline->getCoordinateN(0)); for(unsigned i=1; igetNumPoints(); i++) { segment->add(pline->getCoordinateN(i)); distance += pline->getCoordinateN(i).distance(pline->getCoordinateN(i-1)); if ((distance >= split_at) || (i == pline->getNumPoints()-1)) { - geom_ptr geom = geom_ptr(gf.createLineString(segment.release())); + geom_ptr geom = geom_ptr(gf->createLineString(segment.release())); //copy of an empty one should be cheapest wkts->push_back(geometry_builder::wkt_t()); @@ -643,7 +643,7 @@ wkts->back().geom = writer.write(geom.get()); wkts->back().area = 0; - segment.reset(gf.getCoordinateSequenceFactory()->create((size_t)0, (size_t)2)); + segment.reset(gf->getCoordinateSequenceFactory()->create((size_t)0, (size_t)2)); distance=0; segment->add(pline->getCoordinateN(i)); } @@ -730,7 +730,7 @@ } } - Polygon* poly(gf.createPolygon(polys[i].ring, interior.release())); + Polygon* poly(gf->createPolygon(polys[i].ring, interior.release())); poly->normalize(); polygons->push_back(poly); } @@ -738,7 +738,7 @@ // Make a multipolygon if required if ((toplevelpolygons > 1) && enable_multi) { - geom_ptr multipoly(gf.createMultiPolygon(polygons.release())); + geom_ptr multipoly(gf->createMultiPolygon(polygons.release())); if (!multipoly->isValid() && (excludepoly == 0)) { multipoly = geom_ptr(multipoly->buffer(0)); }