54 #ifdef CHECK_MEMORY_LEAKS
56 #endif // CHECK_MEMORY_LEAKS
68 if (!oc.
isSet(
"osm-files")) {
74 std::map<long, PCOSMNode*> nodes;
76 for (std::vector<std::string>::const_iterator file = files.begin(); file != files.end(); ++file) {
79 WRITE_ERROR(
"Could not open osm-file '" + *file +
"'.");
89 std::map<std::string, PCOSMEdge*> edges;
91 for (std::vector<std::string>::const_iterator file = files.begin(); file != files.end(); ++file) {
100 for (std::map<std::string, PCOSMEdge*>::iterator i = edges.begin(); i != edges.end(); ++i) {
111 WRITE_WARNING(
"Unable to project coordinates for polygon '" + e->
id +
"'.");
116 std::string name = oc.
getBool(
"osm.use-name") && e->
name !=
"" ? e->
name : e->
id;
120 bool discard = oc.
getBool(
"discard");
121 int layer = oc.
getInt(
"layer");
130 }
else if (e->
myType.find(
".") != std::string::npos && tm.
has(e->
myType.substr(0, e->
myType.find(
".")))) {
144 if (oc.
getBool(
"osm.keep-full-type")) {
150 if (!toFill.
insert(name, poly, layer)) {
151 WRITE_ERROR(
"Polygon '" + name +
"' could not been added.");
157 for (std::map<long, PCOSMNode*>::iterator i = nodes.begin(); i != nodes.end(); ++i) {
164 bool discard = oc.
getBool(
"discard");
165 int layer = oc.
getInt(
"layer");
176 }
else if (type.find(
".") != std::string::npos && tm.
has(type.substr(0, type.find(
".")))) {
189 if (oc.
getBool(
"osm.keep-full-type")) {
192 bool ignorePrunning =
false;
194 ignorePrunning =
true;
198 WRITE_WARNING(
"Unable to project coordinates for POI '" + name +
"'.");
203 if (!toFill.
insert(name, poi, layer, ignorePrunning)) {
204 WRITE_ERROR(
"POI '" + name +
"' could not been added.");
212 for (std::map<long, PCOSMNode*>::const_iterator i = nodes.begin(); i != nodes.end(); ++i) {
216 for (std::map<std::string, PCOSMEdge*>::iterator i = edges.begin(); i != edges.end(); ++i) {
227 :
SUMOSAXHandler(
"osm - file"), myToFill(toFill), myLastNodeID(-1) {}
235 myParentElements.push_back(element);
243 if (myToFill.find(
id) == myToFill.end()) {
257 myToFill[toAdd->
id] = toAdd;
260 if (element ==
SUMO_TAG_TAG && myParentElements.size() > 2 && myParentElements[myParentElements.size() - 2] ==
SUMO_TAG_NODE) {
267 if (key ==
"waterway" || key ==
"aeroway" || key ==
"aerialway" || key ==
"power" || key ==
"man_made" || key ==
"building"
268 || key ==
"leisure" || key ==
"amenity" || key ==
"shop" || key ==
"tourism" || key ==
"historic" || key ==
"landuse"
269 || key ==
"natural" || key ==
"military" || key ==
"boundary" || key ==
"sport" || key ==
"polygon") {
270 if (myLastNodeID >= 0) {
271 myToFill[myLastNodeID]->myType = key +
"." + value;
272 myToFill[myLastNodeID]->myIsAdditional =
true;
275 if (key ==
"name" && myLastNodeID != -1) {
276 myToFill[myLastNodeID]->myType = key +
"." + value;
287 myParentElements.pop_back();
295 const std::map<long, PCOSMNode*> &osmNodes,
296 std::map<std::string, PCOSMEdge*> &toFill)
298 myOSMNodes(osmNodes), myEdgeMap(toFill) {
308 myParentElements.push_back(element);
317 myCurrentEdge->id = id;
318 myCurrentEdge->myIsAdditional =
false;
319 myCurrentEdge->myIsClosed =
false;
326 if (myOSMNodes.find(ref) == myOSMNodes.end()) {
330 myCurrentEdge->myCurrentNodes.push_back(ref);
334 if (element ==
SUMO_TAG_TAG && myParentElements.size() > 2 && myParentElements[myParentElements.size() - 2] ==
SUMO_TAG_WAY) {
341 if (key ==
"waterway" || key ==
"aeroway" || key ==
"aerialway" || key ==
"power" || key ==
"man_made"
342 || key ==
"building" || key ==
"leisure" || key ==
"amenity" || key ==
"shop" || key ==
"tourism"
343 || key ==
"historic" || key ==
"landuse" || key ==
"natural" || key ==
"military" || key ==
"boundary"
344 || key ==
"sport" || key ==
"polygon") {
345 myCurrentEdge->myType = key +
"." + value;
346 myCurrentEdge->myIsAdditional =
true;
347 }
else if (key ==
"name") {
348 myCurrentEdge->name = value;
356 myParentElements.pop_back();
358 if (myCurrentEdge->myIsAdditional) {
359 myEdgeMap[myCurrentEdge->id] = myCurrentEdge;
361 delete myCurrentEdge;