EVOLUTION-MANAGER
Edit File: LocationIndexOfLine.cpp
/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * 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. * ********************************************************************** * * Last port: linearref/LengthIndexedLine.java r731 * **********************************************************************/ #include <geos/geom/Geometry.h> #include <geos/geom/LineString.h> #include <geos/linearref/LinearLocation.h> #include <geos/linearref/LocationIndexOfLine.h> #include <geos/linearref/LocationIndexOfPoint.h> using namespace std; using namespace geos::geom; namespace geos { namespace linearref { // geos.linearref /* public static */ LinearLocation* LocationIndexOfLine::indicesOf(const Geometry* linearGeom, const Geometry* subLine) { LocationIndexOfLine locater(linearGeom); return locater.indicesOf(subLine); } LocationIndexOfLine::LocationIndexOfLine(const Geometry* p_linearGeom) : linearGeom(p_linearGeom) {} /* public */ LinearLocation* LocationIndexOfLine::indicesOf(const Geometry* subLine) const { Coordinate startPt = dynamic_cast<const LineString*>(subLine->getGeometryN(0))->getCoordinateN(0); const LineString* lastLine = dynamic_cast<const LineString*>(subLine->getGeometryN(subLine->getNumGeometries() - 1)); Coordinate endPt = lastLine->getCoordinateN(lastLine->getNumPoints() - 1); LocationIndexOfPoint locPt(linearGeom); LinearLocation* subLineLoc = new LinearLocation[2]; subLineLoc[0] = locPt.indexOf(startPt); // check for case where subline is zero length if(subLine->getLength() == 0.0) { subLineLoc[1] = subLineLoc[0]; } else { subLineLoc[1] = locPt.indexOfAfter(endPt, &subLineLoc[0]); } return subLineLoc; } } }