patch pour utiliser geos 3.6
parent
d13a4c2d8a
commit
16d2d77d4a
@ -0,0 +1,296 @@
|
||||
--- ./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<CoordinateSequence> coords(gf.getCoordinateSequenceFactory()->create((size_t)0, (size_t)2));
|
||||
+ GeometryFactory::unique_ptr gf = GeometryFactory::create();
|
||||
+ std::auto_ptr<CoordinateSequence> 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<LinearRing> shell(gf.createLinearRing(coords.release()));
|
||||
- geom = geom_ptr(gf.createPolygon(shell.release(), new std::vector<Geometry *>));
|
||||
+ std::auto_ptr<LinearRing> shell(gf->createLinearRing(coords.release()));
|
||||
+ geom = geom_ptr(gf->createPolygon(shell.release(), new std::vector<Geometry *>));
|
||||
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<CoordinateSequence> coords(gf.getCoordinateSequenceFactory()->create((size_t)0, (size_t)2));
|
||||
+ GeometryFactory::unique_ptr gf = GeometryFactory::create();
|
||||
+ std::auto_ptr<CoordinateSequence> 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<geometry_builder::wkt_t>);
|
||||
@@ -166,8 +166,8 @@
|
||||
|
||||
geom_ptr geom;
|
||||
if (polygon && (coords->getSize() >= 4) && (coords->getAt(coords->getSize() - 1).equals2D(coords->getAt(0)))) {
|
||||
- std::auto_ptr<LinearRing> shell(gf.createLinearRing(coords.release()));
|
||||
- geom = geom_ptr(gf.createPolygon(shell.release(), new std::vector<Geometry *>));
|
||||
+ std::auto_ptr<LinearRing> shell(gf->createLinearRing(coords.release()));
|
||||
+ geom = geom_ptr(gf->createPolygon(shell.release(), new std::vector<Geometry *>));
|
||||
if (!geom->isValid()) {
|
||||
if (excludepoly) {
|
||||
throw std::runtime_error("Excluding broken polygon.");
|
||||
@@ -189,7 +189,7 @@
|
||||
|
||||
double distance = 0;
|
||||
std::auto_ptr<CoordinateSequence> segment;
|
||||
- segment = std::auto_ptr<CoordinateSequence>(gf.getCoordinateSequenceFactory()->create((size_t)0, (size_t)2));
|
||||
+ segment = std::auto_ptr<CoordinateSequence>(gf->getCoordinateSequenceFactory()->create((size_t)0, (size_t)2));
|
||||
segment->add(coords->getAt(0));
|
||||
for(unsigned i=1; i<coords->getSize(); 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<std::vector<Geometry*> > lines(new std::vector<Geometry*>);
|
||||
- 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<CoordinateSequence> coords(gf.getCoordinateSequenceFactory()->create((size_t)0, (size_t)2));
|
||||
+ std::auto_ptr<CoordinateSequence> 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<LineString> 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<std::vector<Geometry*> > lines(new std::vector<Geometry*>);
|
||||
- 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<CoordinateSequence> coords(gf.getCoordinateSequenceFactory()->create((size_t)0, (size_t)2));
|
||||
+ std::auto_ptr<CoordinateSequence> 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<std::vector<Geometry*> > lines(new std::vector<Geometry*>);
|
||||
- GeometryFactory gf;
|
||||
+ GeometryFactory::unique_ptr gf = GeometryFactory::create();
|
||||
geom_ptr geom;
|
||||
geos::geom::prep::PreparedGeometryFactory pgf;
|
||||
maybe_wkts_t wkts(new std::vector<geometry_builder::wkt_t>);
|
||||
@@ -580,7 +580,7 @@
|
||||
try
|
||||
{
|
||||
for (int c=0; xnodes[c]; c++) {
|
||||
- std::auto_ptr<CoordinateSequence> coords(gf.getCoordinateSequenceFactory()->create((size_t)0, (size_t)2));
|
||||
+ std::auto_ptr<CoordinateSequence> 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<LineString> 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<CoordinateSequence> segment;
|
||||
- segment = std::auto_ptr<CoordinateSequence>(gf.getCoordinateSequenceFactory()->create((size_t)0, (size_t)2));
|
||||
+ segment = std::auto_ptr<CoordinateSequence>(gf->getCoordinateSequenceFactory()->create((size_t)0, (size_t)2));
|
||||
segment->add(pline->getCoordinateN(0));
|
||||
for(unsigned i=1; i<pline->getNumPoints(); 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));
|
||||
}
|
Loading…
Reference in New Issue