EVOLUTION-MANAGER
Edit File: RepeatedPointRemover.cpp
/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2019 Daniel Baston <dbaston@gmail.com * * 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. * **********************************************************************/ #include <geos/operation/valid/RepeatedPointRemover.h> #include <geos/geom/Coordinate.h> #include <geos/geom/CoordinateArraySequenceFactory.h> #include <geos/util.h> namespace geos { namespace operation { namespace valid { std::unique_ptr<geom::CoordinateArraySequence> RepeatedPointRemover::removeRepeatedPoints(const geom::CoordinateSequence* seq) { using geom::Coordinate; if (seq->isEmpty()) { return detail::make_unique<geom::CoordinateArraySequence>(0, seq->getDimension()); } auto pts = detail::make_unique<std::vector<Coordinate>>(); auto sz = seq->getSize(); pts->reserve(sz); // assume not many points are repeated const Coordinate* prevPt = &(seq->getAt(0)); pts->push_back(*prevPt) ; for (size_t i = 1; i < sz; i++) { const Coordinate* nextPt = &(seq->getAt(i)); if (*nextPt != *prevPt) { pts->push_back(*nextPt); } prevPt = nextPt; } return detail::make_unique<geom::CoordinateArraySequence>(pts.release(), seq->getDimension()); } } } }