本文整理汇总了C++中SUMOSAXAttributes类的典型用法代码示例。如果您正苦于以下问题:C++ SUMOSAXAttributes类的具体用法?C++ SUMOSAXAttributes怎么用?C++ SUMOSAXAttributes使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了SUMOSAXAttributes类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getID
void
MSLaneSpeedTrigger::myStartElement(int element,
const SUMOSAXAttributes& attrs) {
// check whether the correct tag is read
if (element != SUMO_TAG_STEP) {
return;
}
// extract the values
bool ok = true;
SUMOTime next = attrs.getSUMOTimeReporting(SUMO_ATTR_TIME, getID().c_str(), ok);
SUMOReal speed = attrs.getOptSUMORealReporting(SUMO_ATTR_SPEED, getID().c_str(), ok, -1);
// check the values
if (next < 0) {
WRITE_ERROR("Wrong time in vss '" + getID() + "'.");
return;
}
if (speed < 0) {
WRITE_ERROR("Wrong speed in vss '" + getID() + "'.");
return;
}
// set the values for the next step if they are valid
if (myLoadedSpeeds.size() != 0 && myLoadedSpeeds.back().first == next) {
WRITE_WARNING("Time " + time2string(next) + " was set twice for vss '" + getID() + "'; replacing first entry.");
myLoadedSpeeds.back().second = speed;
} else {
myLoadedSpeeds.push_back(std::make_pair(next, speed));
}
}
示例2: st
void
MSRouteHandler::openRouteDistribution(const SUMOSAXAttributes& attrs) {
// check whether the id is really necessary
bool ok = true;
if (myVehicleParameter != 0) {
// ok, a vehicle is wrapping the route,
// we may use this vehicle's id as default
myCurrentRouteDistributionID = "!" + myVehicleParameter->id; // !!! document this
} else {
myCurrentRouteDistributionID = attrs.getStringReporting(SUMO_ATTR_ID, 0, ok);
if (!ok) {
return;
}
}
myCurrentRouteDistribution = new RandomDistributor<const MSRoute*>();
if (attrs.hasAttribute(SUMO_ATTR_ROUTES)) {
bool ok = true;
StringTokenizer st(attrs.getStringReporting(SUMO_ATTR_ROUTES, myCurrentRouteDistributionID.c_str(), ok));
while (st.hasNext()) {
std::string routeID = st.next();
const MSRoute* route = MSRoute::dictionary(routeID);
if (route == 0) {
throw ProcessError("Unknown route '" + routeID + "' in distribution '" + myCurrentRouteDistributionID + "'.");
}
myCurrentRouteDistribution->add(1., route, false);
}
}
}
示例3: InvalidArgument
void
NLDiscreteEventBuilder::buildSaveTLStateCommand(const SUMOSAXAttributes& attrs,
const std::string& basePath) {
bool ok = true;
const std::string dest = attrs.getOptStringReporting(SUMO_ATTR_DEST, 0, ok, "");
const std::string source = attrs.getOptStringReporting(SUMO_ATTR_SOURCE, 0, ok, "");
// check the parameter
if (dest == "" || !ok) {
throw InvalidArgument("Incomplete description of an 'SaveTLSState'-action occured.");
}
if (source == "") {
const std::vector<std::string> ids = myNet.getTLSControl().getAllTLIds();
for (std::vector<std::string>::const_iterator tls = ids.begin(); tls != ids.end(); ++tls) {
const MSTLLogicControl::TLSLogicVariants& logics = myNet.getTLSControl().get(*tls);
new Command_SaveTLSState(logics, OutputDevice::getDevice(dest, basePath));
}
} else {
// get the logic
if (!myNet.getTLSControl().knows(source)) {
throw InvalidArgument("The traffic light logic to save (" + source + ") is not known.");
}
const MSTLLogicControl::TLSLogicVariants& logics = myNet.getTLSControl().get(source);
// build the action
new Command_SaveTLSState(logics, OutputDevice::getDevice(dest, basePath));
}
}
示例4: edge
void
NLTriggerBuilder::buildVaporizer(const SUMOSAXAttributes& attrs) {
bool ok = true;
// get the id, throw if not given or empty...
std::string id = attrs.get<std::string>(SUMO_ATTR_ID, 0, ok);
if (!ok) {
return;
}
MSEdge* e = MSEdge::dictionary(id);
if (e == 0) {
WRITE_ERROR("Unknown edge ('" + id + "') referenced in a vaporizer.");
return;
}
SUMOTime begin = attrs.getSUMOTimeReporting(SUMO_ATTR_BEGIN, 0, ok);
SUMOTime end = attrs.getSUMOTimeReporting(SUMO_ATTR_END, 0, ok);
if (!ok) {
return;
}
if (begin < 0) {
WRITE_ERROR("A vaporization begin time is negative (edge id='" + id + "').");
return;
}
if (begin >= end) {
WRITE_ERROR("A vaporization ends before it starts (edge id='" + id + "').");
return;
}
if (end >= string2time(OptionsCont::getOptions().getString("begin"))) {
Command* cb = new WrappingCommand< MSEdge >(e, &MSEdge::incVaporization);
MSNet::getInstance()->getBeginOfTimestepEvents().addEvent(cb, begin, MSEventControl::ADAPT_AFTER_EXECUTION);
Command* ce = new WrappingCommand< MSEdge >(e, &MSEdge::decVaporization);
MSNet::getInstance()->getBeginOfTimestepEvents().addEvent(ce, end, MSEventControl::ADAPT_AFTER_EXECUTION);
}
}
示例5: string2time
void
NLHandler::addEdgeLaneMeanData(const SUMOSAXAttributes& attrs, int objecttype) {
bool ok = true;
std::string id = attrs.get<std::string>(SUMO_ATTR_ID, 0, ok);
const SUMOReal maxTravelTime = attrs.getOpt<SUMOReal>(SUMO_ATTR_MAX_TRAVELTIME, id.c_str(), ok, 100000);
const SUMOReal minSamples = attrs.getOpt<SUMOReal>(SUMO_ATTR_MIN_SAMPLES, id.c_str(), ok, 0);
const SUMOReal haltingSpeedThreshold = attrs.getOpt<SUMOReal>(SUMO_ATTR_HALTING_SPEED_THRESHOLD, id.c_str(), ok, POSITION_EPS);
const std::string excludeEmpty = attrs.getOpt<std::string>(SUMO_ATTR_EXCLUDE_EMPTY, id.c_str(), ok, "false");
const bool withInternal = attrs.getOpt<bool>(SUMO_ATTR_WITH_INTERNAL, id.c_str(), ok, false);
const bool trackVehicles = attrs.getOpt<bool>(SUMO_ATTR_TRACK_VEHICLES, id.c_str(), ok, false);
const std::string file = attrs.get<std::string>(SUMO_ATTR_FILE, id.c_str(), ok);
const std::string type = attrs.getOpt<std::string>(SUMO_ATTR_TYPE, id.c_str(), ok, "performance");
std::string vtypes = attrs.getOpt<std::string>(SUMO_ATTR_VTYPES, id.c_str(), ok, "");
const SUMOTime frequency = attrs.getOptSUMOTimeReporting(SUMO_ATTR_FREQUENCY, id.c_str(), ok, -1);
const SUMOTime begin = attrs.getOptSUMOTimeReporting(SUMO_ATTR_BEGIN, id.c_str(), ok, string2time(OptionsCont::getOptions().getString("begin")));
const SUMOTime end = attrs.getOptSUMOTimeReporting(SUMO_ATTR_END, id.c_str(), ok, string2time(OptionsCont::getOptions().getString("end")));
if (!ok) {
return;
}
try {
myDetectorBuilder.createEdgeLaneMeanData(id, frequency, begin, end,
type, objecttype == SUMO_TAG_MEANDATA_LANE,
// equivalent to TplConvert::_2bool used in SUMOSAXAttributes::getBool
excludeEmpty[0] != 't' && excludeEmpty[0] != 'T' && excludeEmpty[0] != '1' && excludeEmpty[0] != 'x',
excludeEmpty == "defaults", withInternal, trackVehicles,
maxTravelTime, minSamples, haltingSpeedThreshold, vtypes,
FileHelpers::checkForRelativity(file, getFileName()));
} catch (InvalidArgument& e) {
WRITE_ERROR(e.what());
} catch (IOError& e) {
WRITE_ERROR(e.what());
}
}
示例6: pos
void
NIImporter_SUMO::addJunction(const SUMOSAXAttributes &attrs) {
// get the id, report an error if not given or empty...
std::string id;
if (!attrs.setIDFromAttributes("junction", id)) {
return;
}
if (id[0]==':') {
return;
}
bool ok = true;
SUMOReal x = attrs.getOptSUMORealReporting(SUMO_ATTR_X, "junction", id.c_str(), ok, -1);
SUMOReal y = attrs.getOptSUMORealReporting(SUMO_ATTR_Y, "junction", id.c_str(), ok, -1);
// !!! this is too simplified! A proper error check should be done
if (x==-1||y==-1) {
MsgHandler::getErrorInstance()->inform("Junction '" + id + "' has an invalid position.");
return;
}
Position2D pos(x, y);
if (!GeoConvHelper::x2cartesian(pos)) {
MsgHandler::getErrorInstance()->inform("Unable to project coordinates for junction " + id + ".");
return;
}
NBNode *node = new NBNode(id, pos);
if (!myNodeCont.insert(node)) {
MsgHandler::getErrorInstance()->inform("Problems on adding junction '" + id + "'.");
delete node;
return;
}
}
示例7: conn
void
NIXMLTrafficLightsHandler::removeTlConnection(const SUMOSAXAttributes& attrs) {
bool ok = true;
std::string tlID = attrs.getStringReporting(SUMO_ATTR_TLID, 0, ok);
// does the traffic light still exist?
const std::map<std::string, NBTrafficLightDefinition*>& programs = myTLLCont.getPrograms(tlID);
if (programs.size() > 0) {
// parse identifying attributes
NBEdge* from = retrieveEdge(attrs, SUMO_ATTR_FROM, ok);
NBEdge* to = retrieveEdge(attrs, SUMO_ATTR_TO, ok);
if (!ok) {
return;
}
int fromLane = retrieveLaneIndex(attrs, SUMO_ATTR_FROM_LANE, from, ok);
int toLane = retrieveLaneIndex(attrs, SUMO_ATTR_TO_LANE, to, ok);
if (!ok) {
return;
}
int tlIndex = attrs.getIntReporting(SUMO_ATTR_TLLINKINDEX, 0, ok);
NBConnection conn(from, fromLane, to, toLane, tlIndex);
// remove the connection from all definitions
std::map<std::string, NBTrafficLightDefinition*>::const_iterator it;
for (it = programs.begin(); it != programs.end(); it++) {
NBLoadedSUMOTLDef* tlDef = dynamic_cast<NBLoadedSUMOTLDef*>(it->second);
if (tlDef) {
tlDef->removeConnection(conn, false);
} else {
throw ProcessError("Corrupt traffic light definition '"
+ tlID + "' (program '" + it->first + "')");
}
}
}
}
示例8: ProcessError
void
RONetHandler::parseDistrict(const SUMOSAXAttributes& attrs) {
myCurrentEdge = 0;
bool ok = true;
myCurrentName = attrs.get<std::string>(SUMO_ATTR_ID, 0, ok);
if (!ok) {
return;
}
ROEdge* sink = myEdgeBuilder.buildEdge(myCurrentName + "-sink", 0, 0, 0);
sink->setType(ROEdge::ET_DISTRICT);
myNet.addEdge(sink);
ROEdge* source = myEdgeBuilder.buildEdge(myCurrentName + "-source", 0, 0, 0);
source->setType(ROEdge::ET_DISTRICT);
myNet.addEdge(source);
if (attrs.hasAttribute(SUMO_ATTR_EDGES)) {
std::vector<std::string> desc = attrs.getStringVector(SUMO_ATTR_EDGES);
for (std::vector<std::string>::const_iterator i = desc.begin(); i != desc.end(); ++i) {
ROEdge* edge = myNet.getEdge(*i);
// check whether the edge exists
if (edge == 0) {
throw ProcessError("The edge '" + *i + "' within district '" + myCurrentName + "' is not known.");
}
source->addFollower(edge);
edge->addFollower(sink);
}
}
}
示例9: ProcessError
void
AGActivityGenHandler::parseStreets(const SUMOSAXAttributes& attrs) {
try {
SUMOReal pop = 0;
SUMOReal work = 0;
if (attrs.hasAttribute(AGEN_ATTR_POPULATION)) {
pop = attrs.getFloat(AGEN_ATTR_POPULATION);
}
if (attrs.hasAttribute(AGEN_ATTR_OUT_WORKPOSITION)) {
work = attrs.getFloat(AGEN_ATTR_OUT_WORKPOSITION);
}
std::string eid = attrs.getString(SUMO_ATTR_EDGE);
AGStreet* street = dynamic_cast<AGStreet*>(net->getEdge(eid));
if (street == 0) {
WRITE_ERROR("Edge '" + eid + "' is not known.");
return;
}
street->setPopulation(pop * street->getLength());
street->setWorkplaceNumber(work * street->getLength());
myCity.streets.push_back(street);
} catch (const std::exception& e) {
WRITE_ERROR("Error while parsing the element " +
SUMOXMLDefinitions::Tags.getString(AGEN_TAG_STREET) + ": " +
e.what());
throw ProcessError();
}
}
示例10: throw
bool
NIXMLEdgesHandler::setNodes(const SUMOSAXAttributes &attrs) throw() {
// the names and the coordinates of the beginning and the end node
// may be found, try
bool ok = true;
std::string begNodeID = myIsUpdate ? myCurrentEdge->getFromNode()->getID() : "";
std::string endNodeID = myIsUpdate ? myCurrentEdge->getToNode()->getID() : "";
begNodeID = attrs.hasAttribute(SUMO_ATTR_FROMNODE) ? attrs.getStringReporting(SUMO_ATTR_FROMNODE, "edge", 0, ok) : begNodeID;
endNodeID = attrs.hasAttribute(SUMO_ATTR_TONODE) ? attrs.getStringReporting(SUMO_ATTR_TONODE, "edge", 0, ok) : endNodeID;
if (!ok) {
return false;
}
// or their positions !!! deprecated
SUMOReal begNodeXPos = tryGetPosition(attrs, SUMO_ATTR_XFROM, "XFrom");
SUMOReal begNodeYPos = tryGetPosition(attrs, SUMO_ATTR_YFROM, "YFrom");
SUMOReal endNodeXPos = tryGetPosition(attrs, SUMO_ATTR_XTO, "XTo");
SUMOReal endNodeYPos = tryGetPosition(attrs, SUMO_ATTR_YTO, "YTo");
if (begNodeXPos!=SUMOXML_INVALID_POSITION&&begNodeYPos!=SUMOXML_INVALID_POSITION) {
Position2D pos(begNodeXPos, begNodeYPos);
GeoConvHelper::x2cartesian(pos);
begNodeXPos = pos.x();
begNodeYPos = pos.y();
}
if (endNodeXPos!=SUMOXML_INVALID_POSITION&&endNodeYPos!=SUMOXML_INVALID_POSITION) {
Position2D pos(endNodeXPos, endNodeYPos);
GeoConvHelper::x2cartesian(pos);
endNodeXPos = pos.x();
endNodeYPos = pos.y();
}
// check the obtained values for nodes
myFromNode = insertNodeChecking(Position2D(begNodeXPos, begNodeYPos), begNodeID, "from");
myToNode = insertNodeChecking(Position2D(endNodeXPos, endNodeYPos), endNodeID, "to");
return myFromNode!=0&&myToNode!=0;
}
示例11: toString
void
NIImporter_SUMO::addLane(const SUMOSAXAttributes& attrs) {
bool ok = true;
std::string id = attrs.getStringReporting(SUMO_ATTR_ID, 0, ok);
if (!ok) {
return;
}
if (!myCurrentEdge) {
WRITE_ERROR("Found lane '" + id + "' not within edge element");
return;
}
myCurrentLane = new LaneAttrs;
if (myCurrentEdge->func == toString(EDGEFUNC_INTERNAL)) {
return; // skip internal lanes
}
if (attrs.hasAttribute(SUMO_ATTR_MAXSPEED__DEPRECATED)) {
myCurrentLane->maxSpeed = attrs.getSUMORealReporting(SUMO_ATTR_MAXSPEED__DEPRECATED, id.c_str(), ok);
if (!myHaveWarnedAboutDeprecatedMaxSpeed) {
myHaveWarnedAboutDeprecatedMaxSpeed = true;
WRITE_WARNING("'" + toString(SUMO_ATTR_MAXSPEED__DEPRECATED) + "' is deprecated, please use '" + toString(SUMO_ATTR_SPEED) + "' instead.");
}
} else {
myCurrentLane->maxSpeed = attrs.getSUMORealReporting(SUMO_ATTR_SPEED, id.c_str(), ok);
}
myCurrentLane->allow = attrs.getOptStringReporting(SUMO_ATTR_ALLOW, id.c_str(), ok, "");
myCurrentLane->disallow = attrs.getOptStringReporting(SUMO_ATTR_DISALLOW, id.c_str(), ok, "");
myCurrentLane->width = attrs.getOptSUMORealReporting(SUMO_ATTR_WIDTH, id.c_str(), ok, (SUMOReal) NBEdge::UNSPECIFIED_WIDTH);
myCurrentLane->offset = attrs.getOptSUMORealReporting(SUMO_ATTR_ENDOFFSET, id.c_str(), ok, (SUMOReal) NBEdge::UNSPECIFIED_OFFSET);
myCurrentLane->shape = GeomConvHelper::parseShapeReporting(
attrs.getStringReporting(SUMO_ATTR_SHAPE, id.c_str(), ok),
attrs.getObjectType(), id.c_str(), ok, false);
// lane coordinates are derived (via lane spread) do not include them in convex boundary
NILoader::transformCoordinates(myCurrentLane->shape, false, myLocation);
}
示例12:
void
NIImporter_SUMO::addRoundabout(const SUMOSAXAttributes& attrs) {
if (attrs.hasAttribute(SUMO_ATTR_EDGES)) {
myRoundabouts.push_back(attrs.getStringVector(SUMO_ATTR_EDGES));
} else {
WRITE_ERROR("Empty edges in roundabout.");
}
}
示例13: switch
void
SUMORouteHandler::myStartElement(int element,
const SUMOSAXAttributes& attrs) {
switch (element) {
case SUMO_TAG_VEHICLE:
delete myVehicleParameter;
myVehicleParameter = SUMOVehicleParserHelper::parseVehicleAttributes(attrs);
break;
case SUMO_TAG_PERSON:
delete myVehicleParameter;
myVehicleParameter = SUMOVehicleParserHelper::parseVehicleAttributes(attrs, false, false, true);
break;
case SUMO_TAG_CONTAINER:
delete myVehicleParameter;
myVehicleParameter = SUMOVehicleParserHelper::parseVehicleAttributes(attrs);
break;
case SUMO_TAG_FLOW:
delete myVehicleParameter;
myVehicleParameter = SUMOVehicleParserHelper::parseFlowAttributes(attrs, myBeginDefault, myEndDefault);
break;
case SUMO_TAG_VTYPE:
myCurrentVType = SUMOVehicleParserHelper::beginVTypeParsing(attrs, getFileName());
break;
case SUMO_TAG_VTYPE_DISTRIBUTION:
openVehicleTypeDistribution(attrs);
break;
case SUMO_TAG_ROUTE:
openRoute(attrs);
break;
case SUMO_TAG_ROUTE_DISTRIBUTION:
openRouteDistribution(attrs);
break;
case SUMO_TAG_STOP:
addStop(attrs);
break;
case SUMO_TAG_TRIP: {
myVehicleParameter = SUMOVehicleParserHelper::parseVehicleAttributes(attrs, true);
if (myVehicleParameter->id == "") {
//@todo warn about deprecation of missing trip ids
myVehicleParameter->id = myIdSupplier.getNext();
}
myVehicleParameter->setParameter |= VEHPARS_FORCE_REROUTE;
myActiveRouteID = "!" + myVehicleParameter->id;
break;
}
case SUMO_TAG_INTERVAL: {
bool ok;
myBeginDefault = attrs.getSUMOTimeReporting(SUMO_ATTR_BEGIN, 0, ok);
myEndDefault = attrs.getSUMOTimeReporting(SUMO_ATTR_END, 0, ok);
break;
}
case SUMO_TAG_PARAM:
addParam(attrs);
break;
default:
break;
}
}
示例14: WRITE_WARNING
void NIXMLEdgesHandler::addSplit(const SUMOSAXAttributes& attrs) {
if (myCurrentEdge == 0) {
if (!OptionsCont::getOptions().isInStringVector("remove-edges.explicit", myCurrentID)) {
WRITE_WARNING("Ignoring 'split' because it cannot be assigned to an edge");
}
return;
}
bool ok = true;
Split e;
e.pos = attrs.get<SUMOReal>(SUMO_ATTR_POSITION, 0, ok);
if (ok) {
if (fabs(e.pos) > myCurrentEdge->getGeometry().length()) {
WRITE_ERROR("Edge '" + myCurrentID + "' has a split at invalid position " + toString(e.pos) + ".");
return;
}
std::vector<Split>::iterator i = find_if(mySplits.begin(), mySplits.end(), split_by_pos_finder(e.pos));
if (i != mySplits.end()) {
WRITE_ERROR("Edge '" + myCurrentID + "' has already a split at position " + toString(e.pos) + ".");
return;
}
const std::string nameid = toString((int)e.pos);
if (e.pos < 0) {
e.pos += myCurrentEdge->getGeometry().length();
}
std::vector<std::string> lanes;
SUMOSAXAttributes::parseStringVector(attrs.getOpt<std::string>(SUMO_ATTR_LANES, 0, ok, ""), lanes);
for (std::vector<std::string>::iterator i = lanes.begin(); i != lanes.end(); ++i) {
try {
int lane = TplConvert::_2int((*i).c_str());
e.lanes.push_back(lane);
} catch (NumberFormatException&) {
WRITE_ERROR("Error on parsing a split (edge '" + myCurrentID + "').");
} catch (EmptyData&) {
WRITE_ERROR("Error on parsing a split (edge '" + myCurrentID + "').");
}
}
if (e.lanes.empty()) {
for (int l = 0; l < myCurrentEdge->getNumLanes(); ++l) {
e.lanes.push_back(l);
}
}
e.speed = attrs.getOpt(SUMO_ATTR_SPEED, 0, ok, myCurrentEdge->getSpeed());
if (attrs.hasAttribute(SUMO_ATTR_SPEED) && myOptions.getBool("speed-in-kmh")) {
e.speed /= (SUMOReal) 3.6;
}
e.idBefore = attrs.getOpt(SUMO_ATTR_ID_BEFORE, 0, ok, std::string(""));
e.idAfter = attrs.getOpt(SUMO_ATTR_ID_AFTER, 0, ok, std::string(""));
if (!ok) {
return;
}
e.node = new NBNode(myCurrentID + "." + nameid,
myCurrentEdge->getGeometry().positionAtOffset(e.pos));
NIXMLNodesHandler::processNodeType(attrs, e.node, e.node->getID(), e.node->getPosition(), false,
myNodeCont, myTLLogicCont);
mySplits.push_back(e);
}
}
示例15: GUIVisualizationSizeSettings
GUIVisualizationSizeSettings
GUISettingsHandler::parseSizeSettings(
const std::string& prefix, const SUMOSAXAttributes& attrs,
GUIVisualizationSizeSettings defaults) {
return GUIVisualizationSizeSettings(
TplConvert::_2SUMOReal(attrs.getStringSecure(prefix + "_minSize", toString(defaults.minSize)).c_str()),
TplConvert::_2SUMOReal(attrs.getStringSecure(prefix + "_exaggeration", toString(defaults.exaggeration)).c_str()),
TplConvert::_2bool(attrs.getStringSecure(prefix + "_constantSize", toString(defaults.constantSize)).c_str()));
}