55 const cFigure::Color COLOR_HIGHWAY_RESIDENTIAL = { 240, 240, 240 };
58 auto buildings =
new cGroupFigure(
"buildings");
59 buildings->setTags(
"buildings");
60 auto primaryStreets =
new cGroupFigure(
"primaryStreets");
61 primaryStreets->setTags(
"primary_streets");
62 auto residentialStreets =
new cGroupFigure(
"residentialStreets");
63 residentialStreets->setTags(
"residential_streets");
64 auto pathways =
new cGroupFigure(
"pathways");
65 pathways->setTags(
"pathways");
67 auto mapFigure =
new cGroupFigure(
"openStreetMap");
68 mapFigure->setTags(
"street_map");
69 mapFigure->addFigure(buildings);
70 mapFigure->addFigure(pathways);
71 mapFigure->addFigure(residentialStreets);
72 mapFigure->addFigure(primaryStreets);
74 for (
const auto& way : map.getWays()) {
75 std::vector<cFigure::Point> points;
76 for (
const auto& node : way->getNodes())
77 points.push_back(
toCanvas(map, node->getLat(), node->getLon()));
78 bool isArea = way->getNodes().front() == way->getNodes().back();
82 cPolylineFigure *polyline =
new cPolylineFigure();
83 polyline->setPoints(points);
84 polyline->setZoomLineWidth(
true);
86 polyline->setName(std::to_string(way->getId()).c_str());
87 const char *name = way->getTag(
"name");
89 polyline->setTooltip(name);
91 std::string highwayType = opp_nulltoempty(way->getTag(
"highway"));
92 if (highwayType ==
"primary" || highwayType ==
"secondary" || highwayType ==
"tertiary" ||
93 highwayType ==
"primary_link" || highwayType ==
"secondary_link" || highwayType ==
"tertiary_link")
95 polyline->setLineWidth(8);
96 polyline->setLineColor(COLOR_HIGHWAY_PRIMARY);
97 polyline->setCapStyle(cFigure::CAP_ROUND);
98 polyline->setJoinStyle(cFigure::JOIN_ROUND);
99 primaryStreets->addFigure(polyline);
101 else if (highwayType ==
"residential" || highwayType ==
"service") {
102 polyline->setLineWidth(4);
103 polyline->setLineColor(COLOR_HIGHWAY_RESIDENTIAL);
104 polyline->setCapStyle(cFigure::CAP_ROUND);
105 polyline->setJoinStyle(cFigure::JOIN_ROUND);
106 residentialStreets->addFigure(polyline);
108 else if (highwayType !=
"") {
109 polyline->setLineStyle(cFigure::LINE_DOTTED);
110 polyline->setLineColor(COLOR_HIGHWAY_PATH);
111 pathways->addFigure(polyline);
120 cPolygonFigure *polygon =
new cPolygonFigure();
122 polygon->setPoints(points);
124 polygon->setName(std::to_string(way->getId()).c_str());
125 const char *name = way->getTag(
"name");
127 polygon->setTooltip(name);
129 polygon->setFilled(
true);
130 polygon->setFillOpacity(0.1);
131 polygon->setLineOpacity(0.5);
132 polygon->setLineColor(cFigure::GREY);
133 if (!opp_isempty(way->getTag(
"building")))
137 buildings->addFigure(polygon);