47 #ifdef CHECK_MEMORY_LEAKS
49 #endif // CHECK_MEMORY_LEAKS
55 using namespace traci;
177 if (inputStorage.
readInt() != 2) {
190 if (inputStorage.
readInt() != 3) {
222 std::pair<MSLane*, SUMOReal>
224 std::pair<MSLane*, SUMOReal> result;
225 std::vector<std::string> allEdgeIds;
229 for (std::vector<std::string>::iterator itId = allEdgeIds.begin(); itId != allEdgeIds.end(); itId++) {
231 for (std::vector<MSLane*>::const_iterator itLane = allLanes.begin(); itLane != allLanes.end(); itLane++) {
232 const SUMOReal newDistance = (*itLane)->getShape().distance(pos);
233 if (newDistance < minDistance) {
234 minDistance = newDistance;
235 result.first = (*itLane);
240 result.second = result.first->getShape().nearest_position_on_line_to_point2D(pos,
false);
251 if (laneIndex < 0 || laneIndex >= (
int)edge->
getLanes().size()) {
255 if (pos < 0 || pos > lane->
getLength()) {
265 std::pair<MSLane*, SUMOReal> roadPos;
273 switch (srcPosType) {
284 cartesianPos.
set(x, y);
293 std::string roadID = inputStorage.
readString();
297 cartesianPos = geoPos = getLaneChecking(roadID, laneIdx, pos)->getShape().positionAtLengthPosition(pos);
317 switch (destPosType) {
320 roadPos = convertCartesianToRoadMap(cartesianPos);
323 outputStorage.
writeString(roadPos.first->getEdge().getID());
325 const std::vector<MSLane*> lanes = roadPos.first->getEdge().getLanes();
326 outputStorage.
writeUnsignedByte((
int)distance(lanes.begin(), find(lanes.begin(), lanes.end(), roadPos.first)));
359 std::pair<const MSLane*, SUMOReal> roadPos1;
360 std::pair<const MSLane*, SUMOReal> roadPos2;
367 std::string roadID = inputStorage.
readString();
369 roadPos1.first = getLaneChecking(roadID, inputStorage.
readUnsignedByte(), roadPos1.second);
370 pos1 = roadPos1.first->getShape().positionAtLengthPosition(roadPos1.second);
385 roadPos1 = convertCartesianToRoadMap(pos1);
397 std::string roadID = inputStorage.
readString();
399 roadPos2.first = getLaneChecking(roadID, inputStorage.
readUnsignedByte(), roadPos2.second);
400 pos2 = roadPos2.first->getShape().positionAtLengthPosition(roadPos2.second);
415 roadPos2 = convertCartesianToRoadMap(pos2);
428 if ((roadPos1.first == roadPos2.first) && (roadPos1.second <= roadPos2.second)) {
430 distance = roadPos2.second - roadPos1.second;
435 MSRoute route(
"", newRoute,
false, 0, std::vector<SUMOVehicleParameter::Stop>());
436 distance = route.
getDistanceBetween(roadPos1.second, roadPos2.second, &roadPos1.first->getEdge(), &roadPos2.first->getEdge());