SUMO - Simulation of Urban MObility
Main Page
Related Pages
Modules
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
NILoader.cpp
Go to the documentation of this file.
1
/****************************************************************************/
10
// Perfoms network import
11
/****************************************************************************/
12
// SUMO, Simulation of Urban MObility; see http://sumo-sim.org/
13
// Copyright (C) 2001-2013 DLR (http://www.dlr.de/) and contributors
14
/****************************************************************************/
15
//
16
// This file is part of SUMO.
17
// SUMO is free software: you can redistribute it and/or modify
18
// it under the terms of the GNU General Public License as published by
19
// the Free Software Foundation, either version 3 of the License, or
20
// (at your option) any later version.
21
//
22
/****************************************************************************/
23
24
25
// ===========================================================================
26
// included modules
27
// ===========================================================================
28
#ifdef _MSC_VER
29
#include <
windows_config.h
>
30
#else
31
#include <
config.h
>
32
#endif
33
34
#include <string>
35
#include <
utils/common/UtilExceptions.h
>
36
#include <
utils/common/MsgHandler.h
>
37
#include <
utils/options/OptionsCont.h
>
38
#include <
utils/options/Option.h
>
39
#include <
utils/common/FileHelpers.h
>
40
#include <
utils/common/StringUtils.h
>
41
#include <
utils/common/ToString.h
>
42
#include <
netbuild/NBTypeCont.h
>
43
#include <
netbuild/NBNodeCont.h
>
44
#include <
netbuild/NBEdgeCont.h
>
45
#include <
netbuild/NBNetBuilder.h
>
46
#include <
utils/xml/SUMOSAXHandler.h
>
47
#include <
utils/xml/SUMOSAXReader.h
>
48
#include <
netimport/NIXMLEdgesHandler.h
>
49
#include <
netimport/NIXMLNodesHandler.h
>
50
#include <
netimport/NIXMLTrafficLightsHandler.h
>
51
#include <
netimport/NIXMLTypesHandler.h
>
52
#include <
netimport/NIXMLConnectionsHandler.h
>
53
#include <
netimport/NIImporter_DlrNavteq.h
>
54
#include <
netimport/NIImporter_VISUM.h
>
55
#include <
netimport/vissim/NIImporter_Vissim.h
>
56
#include <
netimport/NIImporter_ArcView.h
>
57
#include <
netimport/NIImporter_SUMO.h
>
58
#include <
netimport/NIImporter_RobocupRescue.h
>
59
#include <
netimport/NIImporter_OpenStreetMap.h
>
60
#include <
netimport/NIImporter_OpenDrive.h
>
61
#include <
netimport/NIImporter_MATSim.h
>
62
#include <
netimport/NIImporter_ITSUMO.h
>
63
#include <
utils/xml/XMLSubSys.h
>
64
#include "
NILoader.h
"
65
#include <
utils/common/TplConvert.h
>
66
#include <
utils/geom/GeoConvHelper.h
>
67
68
#ifdef HAVE_INTERNAL
69
#include <internal/HeightMapper.h>
70
#endif
71
72
#ifdef CHECK_MEMORY_LEAKS
73
#include <
foreign/nvwa/debug_new.h
>
74
#endif // CHECK_MEMORY_LEAKS
75
76
77
// ===========================================================================
78
// method definitions
79
// ===========================================================================
80
NILoader::NILoader
(
NBNetBuilder
& nb)
81
: myNetBuilder(nb) {}
82
83
84
NILoader::~NILoader
() {}
85
86
87
void
88
NILoader::load
(
OptionsCont
& oc) {
89
// load types first
90
NIXMLTypesHandler
* handler =
91
new
NIXMLTypesHandler
(
myNetBuilder
.
getTypeCont
());
92
loadXMLType
(handler, oc.
getStringVector
(
"type-files"
),
"types"
);
93
// try to load height data so it is ready for use by other importers
94
#ifdef HAVE_INTERNAL
95
HeightMapper::loadIfSet(oc);
96
#endif
97
// try to load using different methods
98
NIImporter_SUMO::loadNetwork
(oc,
myNetBuilder
);
99
NIImporter_RobocupRescue::loadNetwork
(oc,
myNetBuilder
);
100
NIImporter_OpenStreetMap::loadNetwork
(oc,
myNetBuilder
);
101
NIImporter_VISUM::loadNetwork
(oc,
myNetBuilder
);
102
NIImporter_ArcView::loadNetwork
(oc,
myNetBuilder
);
103
NIImporter_Vissim::loadNetwork
(oc,
myNetBuilder
);
104
NIImporter_DlrNavteq::loadNetwork
(oc,
myNetBuilder
);
105
NIImporter_OpenDrive::loadNetwork
(oc,
myNetBuilder
);
106
NIImporter_MATSim::loadNetwork
(oc,
myNetBuilder
);
107
NIImporter_ITSUMO::loadNetwork
(oc,
myNetBuilder
);
108
if
(oc.
getBool
(
"tls.discard-loaded"
) || oc.
getBool
(
"tls.discard-simple"
)) {
109
myNetBuilder
.
getNodeCont
().
discardTrafficLights
(
myNetBuilder
.
getTLLogicCont
(), oc.
getBool
(
"tls.discard-simple"
));
110
size_t
removed =
myNetBuilder
.
getTLLogicCont
().
getNumExtracted
();
111
if
(removed > 0) {
112
WRITE_MESSAGE
(
" Removed "
+
toString
(removed) +
" traffic lights before loading plain-XML"
);
113
}
114
}
115
loadXML
(oc);
116
// check the loaded structures
117
if
(
myNetBuilder
.
getNodeCont
().
size
() == 0) {
118
throw
ProcessError
(
"No nodes loaded."
);
119
}
120
if
(
myNetBuilder
.
getEdgeCont
().
size
() == 0) {
121
throw
ProcessError
(
"No edges loaded."
);
122
}
123
// report loaded structures
124
WRITE_MESSAGE
(
" Import done:"
);
125
if
(
myNetBuilder
.
getDistrictCont
().
size
() > 0) {
126
WRITE_MESSAGE
(
" "
+
toString
(
myNetBuilder
.
getDistrictCont
().
size
()) +
" districts loaded."
);
127
}
128
WRITE_MESSAGE
(
" "
+
toString
(
myNetBuilder
.
getNodeCont
().
size
()) +
" nodes loaded."
);
129
if
(
myNetBuilder
.
getTypeCont
().
size
() > 0) {
130
WRITE_MESSAGE
(
" "
+
toString
(
myNetBuilder
.
getTypeCont
().
size
()) +
" types loaded."
);
131
}
132
WRITE_MESSAGE
(
" "
+
toString
(
myNetBuilder
.
getEdgeCont
().
size
()) +
" edges loaded."
);
133
if
(
myNetBuilder
.
getEdgeCont
().
getNoEdgeSplits
() > 0) {
134
WRITE_MESSAGE
(
"The split of edges was performed "
+
toString
(
myNetBuilder
.
getEdgeCont
().
getNoEdgeSplits
()) +
" times."
);
135
}
136
if
(
GeoConvHelper::getProcessing
().usingGeoProjection()) {
137
WRITE_MESSAGE
(
"Proj projection parameters used: '"
+
GeoConvHelper::getProcessing
().getProjString() +
"'."
);
138
}
139
}
140
141
142
/* -------------------------------------------------------------------------
143
* file loading methods
144
* ----------------------------------------------------------------------- */
145
void
146
NILoader::loadXML
(
OptionsCont
& oc) {
147
// load nodes
148
loadXMLType
(
new
NIXMLNodesHandler
(
myNetBuilder
.
getNodeCont
(),
149
myNetBuilder
.
getTLLogicCont
(), oc),
150
oc.
getStringVector
(
"node-files"
),
"nodes"
);
151
// load the edges
152
loadXMLType
(
new
NIXMLEdgesHandler
(
myNetBuilder
.
getNodeCont
(),
153
myNetBuilder
.
getEdgeCont
(),
154
myNetBuilder
.
getTypeCont
(),
155
myNetBuilder
.
getDistrictCont
(),
156
myNetBuilder
.
getTLLogicCont
(),
157
oc),
158
oc.
getStringVector
(
"edge-files"
),
"edges"
);
159
// load the connections
160
loadXMLType
(
new
NIXMLConnectionsHandler
(
myNetBuilder
.
getEdgeCont
()),
161
oc.
getStringVector
(
"connection-files"
),
"connections"
);
162
// load traffic lights (needs to come last, references loaded edges and connections)
163
loadXMLType
(
new
NIXMLTrafficLightsHandler
(
164
myNetBuilder
.
getTLLogicCont
(),
myNetBuilder
.
getEdgeCont
()),
165
oc.
getStringVector
(
"tllogic-files"
),
"traffic lights"
);
166
}
167
168
169
void
170
NILoader::loadXMLType
(
SUMOSAXHandler
* handler,
const
std::vector<std::string>& files,
171
const
std::string& type) {
172
// build parser
173
std::string exceptMsg =
""
;
174
// start the parsing
175
try
{
176
for
(std::vector<std::string>::const_iterator file = files.begin(); file != files.end(); ++file) {
177
if
(!
FileHelpers::exists
(*file)) {
178
WRITE_ERROR
(
"Could not open "
+ type +
"-file '"
+ *file +
"'."
);
179
exceptMsg =
"Process Error"
;
180
continue
;
181
}
182
PROGRESS_BEGIN_MESSAGE
(
"Parsing "
+ type +
" from '"
+ *file +
"'"
);
183
XMLSubSys::runParser
(*handler, *file);
184
PROGRESS_DONE_MESSAGE
();
185
}
186
}
catch
(
const
XERCES_CPP_NAMESPACE::XMLException& toCatch) {
187
exceptMsg =
TplConvert::_2str
(toCatch.getMessage())
188
+
"\n The "
+ type +
" could not be loaded from '"
+ handler->
getFileName
() +
"'."
;
189
}
catch
(
const
ProcessError
& toCatch) {
190
exceptMsg = std::string(toCatch.what()) +
"\n The "
+ type +
" could not be loaded from '"
+ handler->
getFileName
() +
"'."
;
191
}
catch
(...) {
192
exceptMsg =
"The "
+ type +
" could not be loaded from '"
+ handler->
getFileName
() +
"'."
;
193
}
194
delete
handler;
195
if
(exceptMsg !=
""
) {
196
throw
ProcessError
(exceptMsg);
197
}
198
}
199
200
/****************************************************************************/
build
buildd
sumo-0.18~dfsg
src
netimport
NILoader.cpp
Generated on Wed Oct 23 2013 01:15:11 for SUMO - Simulation of Urban MObility by
1.8.4