示例#1
0
//helper function for funning triangulation
void runVoronoi(const char *sitesWkt, const char *expectedWkt , const double tolerance)
{
    WKTReader reader;
    WKTWriter writer;
    geos::triangulate::VoronoiDiagramBuilder builder;
    std::auto_ptr<Geometry> sites ( reader.read(sitesWkt) );
    std::auto_ptr<Geometry> expected ( reader.read(expectedWkt) );
    std::auto_ptr<GeometryCollection> results;
    GeometryFactory geomFact;
    builder.setSites(*sites);

    //set Tolerance:
    builder.setTolerance(tolerance);
    results = builder.getDiagram(geomFact);

    results->normalize();
    expected->normalize();

    ensure_equals(results->getCoordinateDimension(), expected->getCoordinateDimension());
    bool eq = results->equalsExact(expected.get(), 1e-7);
    if ( ! eq ) {
        writer.setTrim(true);
        cout << endl;
        cout << " Expected: " << writer.write(expected.get()) << endl;
        cout << " Obtained: " << writer.write(results.get()) << endl;
    }
    ensure(eq);

}
示例#2
0
int main(int /*argc*/, char** /*argv*/)
{
    
	try {
		ofstream out("WKTOut");
		ifstream in("WKTIn");
		string instr;
		string outstr;
		WKTReader *r = new WKTReader(new GeometryFactory(new PrecisionModel(),10));
		WKTWriter *w = new WKTWriter();
		Geometry *g;

		cout << "Start Testing:" << endl;
		while(!in.eof()) {
			getline(in,instr);
			if (instr!="") {
				g=r->read(instr);
				outstr=w->write(g);
				out << "----------" << endl;
				out << instr << endl;
				out << outstr << endl;
				out << "----------" << endl << endl;
			}
		}
		out.flush();
		out.close();
		cout << "End of Testing" << endl;

	} catch (const GEOSException& ge) {
		cout << ge.what() << endl;
	}

	return 0;
}
示例#3
0
std::string mlsToMlp(const std::string &input1){
  std::string result;
  WKTReader wktr;
  WKTWriter wktw;
  Geometry *mls = wktr.read(input1);

  // First we have to properly node the linestrings. Union makes this easy.
  Polygon *envelope = dynamic_cast<Polygon*>(mls->getEnvelope());
  Geometry *nodedLineStrings = envelope->getExteriorRing()->Union(mls);

  // The polygonizer creates polygons out of the linework
  geos::operation::polygonize::Polygonizer polygonizer;
  polygonizer.add(nodedLineStrings);
  std::vector<Polygon*> *polygons = polygonizer.getPolygons();

  // Annoyingly, we have to transform one vector type to another
  std::vector<Geometry*> geometries;
  for(int inx = 0; inx < polygons->size(); inx++){
    geometries.push_back((*polygons)[inx]);
  }

  Geometry *mlp = GeometryFactory::getDefaultInstance()->createMultiPolygon(geometries);
  result = wktw.write(mlp);
  return result;
}
示例#4
0
std::vector<std::string> polygonize(const std::string &input1, const std::string &input2)
{
  std::vector<std::string> result;
  WKTReader wktr;
  WKTWriter wktw;
  Geometry *line1 = wktr.read(input1);
  Geometry *line2 = wktr.read(input2);

  // Unioning the linestrings inserts nodes for polygonization
  Geometry *nodedLineStrings = line1->Union(line2);
  
  // Add additional lineStrings to each end to close them off
  LineString *ls1 = dynamic_cast<LineString*>(line1);
  LineString *ls2 = dynamic_cast<LineString*>(line2);
  Point *sp1 = ls1->getStartPoint();
  Point *sp2 = ls2->getStartPoint();
  Point *ep1 = ls1->getEndPoint();
  Point *ep2 = ls2->getEndPoint();
  Geometry *smallests = smallestSegment(sp1, ep1, sp2, ep2);
  nodedLineStrings = nodedLineStrings->Union(smallests);

  // Use GEOS to polygonize the strings
  geos::operation::polygonize::Polygonizer polygonizer;
  polygonizer.add(nodedLineStrings);
  std::vector<Polygon*> *polygons = polygonizer.getPolygons();
  
  for(int inx = 0; inx < polygons->size(); inx++){
    result.push_back(wktw.write((*polygons)[inx]));
  }

  return result;
}
示例#5
0
	//helper function for funning triangulation
	void runDelaunay(const char *sitesWkt, bool computeTriangles, const char *expectedWkt)
	{
		WKTReader reader;
		std::auto_ptr<Geometry> results;
		Geometry *sites = reader.read(sitesWkt);
		Geometry *expected = reader.read(expectedWkt);
		DelaunayTriangulationBuilder builder;
		GeometryFactory geomFact;

		builder.setSites(*sites);
		if(computeTriangles)
			results=builder.getTriangles(geomFact);
		else
			results=builder.getEdges(geomFact);

		results->normalize();
		expected->normalize();
			
		ensure(results->equalsExact(expected, 1e-7));
		ensure(results->getCoordinateDimension() == expected->getCoordinateDimension());

		cout << "this is some text" << endl;
		delete sites;
		delete expected;
	}
 GeomPtr
 readGeometry(const std::string& wkt)
 {
     GeomPtr g;
     if(wkt[0] == '0' || wkt[0] == '1') {
         WKBReader r;
         std::istringstream is(wkt);
         g.reset(r.readHEX(is));
     }
     else {
         WKTReader r;
         g.reset(r.read(wkt));
     }
     return g;
 }
示例#7
0
	//helper function for funning triangulation
	void runVoronoi(const char *sitesWkt, const char *expectedWkt , const double tolerance)
	{
		WKTReader reader;
		WKTWriter writer;
		geos::triangulate::VoronoiDiagramBuilder builder;
		std::auto_ptr<Geometry> sites ( reader.read(sitesWkt) );
		std::auto_ptr<Geometry> expected ( reader.read(expectedWkt) );
		std::auto_ptr<GeometryCollection> results;
		GeometryFactory geomFact;
		builder.setSites(*sites);

		//set Tolerance:
		builder.setTolerance(tolerance);
		results = builder.getDiagram(geomFact);

		results->normalize();
		expected->normalize();

		ensure(results->equalsExact(expected.get(), 1e-7));
		ensure(results->getCoordinateDimension() == expected->getCoordinateDimension());

	}