/* open source routing machine Copyright (C) Dennis Luxen, others 2010 This program is free software; you can redistribute it and/or modify it under the terms of the GNU AFFERO General Public License as published by the Free Software Foundation; either version 3 of the License, or any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or see http://www.gnu.org/licenses/agpl.txt. */ #ifndef DESCRIPTIONFACTORY_H_ #define DESCRIPTIONFACTORY_H_ #include #include "../typedefs.h" #include "../Algorithms/DouglasPeucker.h" #include "../Algorithms/PolylineCompressor.h" #include "../DataStructures/ExtractorStructs.h" #include "../DataStructures/SegmentInformation.h" /* This class is fed with all way segments in consecutive order * and produces the description plus the encoded polyline */ class DescriptionFactory { DouglasPeucker dp; PolylineCompressor pc; PhantomNode startPhantom, targetPhantom; public: //I know, declaring this public is considered bad. I'm lazy std::vector pathDescription; DescriptionFactory(); virtual ~DescriptionFactory(); double GetAzimuth(const _Coordinate& C, const _Coordinate& B) const; void AppendEncodedPolylineString(std::string &output); void AppendUnencodedPolylineString(std::string &output); void AppendSegment(const _Coordinate & coordinate, const _PathData & data); void SetStartSegment(const PhantomNode & startPhantom); void SetEndSegment(const PhantomNode & startPhantom); void AppendEncodedPolylineString(std::string & output, bool isEncoded); unsigned Run(const unsigned zoomLevel); }; #endif /* DESCRIPTIONFACTORY_H_ */ //private: // void appendInstructionNameToString(const std::string & nameOfStreet, const std::string & instructionOrDirection, std::string &output, bool firstAdvice = false) { // output += "["; // if(config.instructions) { // output += "\""; // if(firstAdvice) { // output += "Head "; // } // output += instructionOrDirection; // output += "\",\""; // output += nameOfStreet; // output += "\","; // } // } // // void appendInstructionLengthToString(unsigned length, std::string &output) { // if(config.instructions){ // std::string tmpDistance; // intToString(10*(round(length/10.)), tmpDistance); // output += tmpDistance; // output += ","; // intToString(descriptionFactory.startIndexOfGeometry, tmp); // output += tmp; // output += ","; // intToString(descriptionFactory.durationOfInstruction, tmp); // output += tmp; // output += ","; // output += "\""; // output += tmpDistance; // output += "\","; // double angle = descriptionFactory.GetAngleBetweenCoordinates(); // DirectionOfInstruction direction; // getDirectionOfInstruction(angle, direction); // output += "\""; // output += direction.shortDirection; // output += "\","; // std::stringstream numberString; // numberString << fixed << setprecision(2) << angle; // output += numberString.str(); // } // output += "]"; // }