Beispiel #1
0
bool RepeatedPointTester::hasRepeatedPoint(const Polygon *p){
	if (hasRepeatedPoint(p->getExteriorRing()->getCoordinates())) return true;
	for(int i=0; i<p->getNumInteriorRing(); i++) {
		if (hasRepeatedPoint(p->getInteriorRingN(i)->getCoordinates())) return true;
	}
	return false;
}
Beispiel #2
0
bool RepeatedPointTester::hasRepeatedPoint(const Geometry *g){
	if (g->isEmpty()) return false;
	if (typeid(*g)==typeid(Point)) return false;
	else if (typeid(*g)==typeid(MultiPoint)) return false;
	// LineString also handles LinearRings
	else if (typeid(*g)==typeid(LineString)) return hasRepeatedPoint(((LineString*)g)->getCoordinates());
	else if (typeid(*g)==typeid(Polygon)) return hasRepeatedPoint((Polygon*)g);
	else if (typeid(*g)==typeid(MultiPolygon)) return hasRepeatedPoint((MultiPolygon*)g);
	else if (typeid(*g)==typeid(MultiLineString)) return hasRepeatedPoint((MultiLineString*)g);
	else if (typeid(*g)==typeid(GeometryCollection)) return hasRepeatedPoint((GeometryCollection*)g);
	else  throw new UnsupportedOperationException(typeid(*g).name());
}
Beispiel #3
0
bool RepeatedPointTester::hasRepeatedPoint(const MultiLineString *gc){
	for(int i = 0; i<gc->getNumGeometries(); i++) {
		const Geometry *g=gc->getGeometryN(i);
		if (hasRepeatedPoint(g)) return true;
	}
	return false;
}
Beispiel #4
0
bool
RepeatedPointTester::hasRepeatedPoint(const Polygon *p)
{
	if (hasRepeatedPoint(p->getExteriorRing()->getCoordinates()))
	{
		return true;
	}

	for(size_t i=0, n=p->getNumInteriorRing(); i<n; ++i)
	{
		if (hasRepeatedPoint(p->getInteriorRingN(i)->getCoordinates()))
		{
			return true;
		}
	}
	return false;
}
Beispiel #5
0
bool
RepeatedPointTester::hasRepeatedPoint(const MultiPolygon *gc)
{
	for(unsigned int i=0, n=gc->getNumGeometries(); i<n; ++i)
	{
		const Geometry *g=gc->getGeometryN(i);
		if (hasRepeatedPoint(g)) return true;
	}
	return false;
}
Beispiel #6
0
bool
RepeatedPointTester::hasRepeatedPoint(const Geometry *g)
{
	if (g->isEmpty()) return false;

	if ( dynamic_cast<const Point*>(g) ) return false;
	if ( dynamic_cast<const MultiPoint*>(g) ) return false;

	// LineString also handles LinearRings
	if ( const LineString* x = dynamic_cast<const LineString*>(g) ) 
  {
    return hasRepeatedPoint(x->getCoordinatesRO());
  }

	if ( const Polygon* x = dynamic_cast<const Polygon*>(g) ) 
  {
    return hasRepeatedPoint(x);
  }

	if ( const MultiPolygon* x = dynamic_cast<const MultiPolygon*>(g) ) 
  {
    return hasRepeatedPoint(x);
  }

	if ( const MultiLineString* x = dynamic_cast<const MultiLineString*>(g) ) 
  {
    return hasRepeatedPoint(x);
  }

	if ( const GeometryCollection* x = dynamic_cast<const GeometryCollection*>(g) ) 
  {
    return hasRepeatedPoint(x);
  }

	throw util::UnsupportedOperationException(typeid(*g).name());
}