repeatedpointtester.cpp
来自「一个很好的vc底层代码」· C++ 代码 · 共 101 行
CPP
101 行
/********************************************************************** * $Id: RepeatedPointTester.cpp,v 1.11 2004/07/08 19:34:50 strk Exp $ * * GEOS - Geometry Engine Open Source * http://geos.refractions.net * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * $Log: RepeatedPointTester.cpp,v $ * Revision 1.11 2004/07/08 19:34:50 strk * Mirrored JTS interface of CoordinateSequence, factory and * default implementations. * Added DefaultCoordinateSequenceFactory::instance() function. * * Revision 1.10 2004/07/02 13:28:29 strk * Fixed all #include lines to reflect headers layout change. * Added client application build tips in README. * * Revision 1.9 2003/11/07 01:23:42 pramsey * Add standard CVS headers licence notices and copyrights to all cpp and h * files. * * Revision 1.8 2003/10/16 17:33:20 strk * dropped useless string() cast * **********************************************************************/#include <geos/opValid.h>#include <stdio.h>#include <typeinfo>namespace geos {Coordinate& RepeatedPointTester::getCoordinate(){ return repeatedCoord;}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());}bool RepeatedPointTester::hasRepeatedPoint(const CoordinateSequence *coord){ for(int i=1; i<coord->getSize(); i++) { if (coord->getAt(i - 1)==coord->getAt(i)) { repeatedCoord=coord->getAt(i); return true; } } return false;}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;}bool RepeatedPointTester::hasRepeatedPoint(const GeometryCollection *gc){ for(int i = 0; i<gc->getNumGeometries(); i++) { const Geometry *g=gc->getGeometryN(i); if (hasRepeatedPoint(g)) return true; } return false;}bool RepeatedPointTester::hasRepeatedPoint(const MultiPolygon *gc){ for(int i = 0; i<gc->getNumGeometries(); i++) { const Geometry *g=gc->getGeometryN(i); if (hasRepeatedPoint(g)) return true; } return false;}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;}}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?