47 #ifdef CHECK_MEMORY_LEAKS
49 #endif // CHECK_MEMORY_LEAKS
55 using namespace traci;
175 if (inputStorage.
readInt() != 2) {
186 if (inputStorage.
readInt() != 3) {
215 std::pair<MSLane*, SUMOReal>
217 std::pair<MSLane*, SUMOReal> result;
218 std::vector<std::string> allEdgeIds;
222 for (std::vector<std::string>::iterator itId = allEdgeIds.begin(); itId != allEdgeIds.end(); itId++) {
224 for (std::vector<MSLane*>::const_iterator itLane = allLanes.begin(); itLane != allLanes.end(); itLane++) {
225 const SUMOReal newDistance = (*itLane)->getShape().distance(pos);
226 if (newDistance < minDistance) {
227 minDistance = newDistance;
228 result.first = (*itLane);
233 result.second = result.first->getShape().nearest_offset_to_point2D(pos,
false);
244 if (laneIndex < 0 || laneIndex >= (
int)edge->
getLanes().size()) {
248 if (pos < 0 || pos > lane->
getLength()) {
258 std::pair<MSLane*, SUMOReal> roadPos;
266 switch (srcPosType) {
277 cartesianPos.
set(x, y);
286 std::string roadID = inputStorage.
readString();
290 cartesianPos = geoPos = getLaneChecking(roadID, laneIdx, pos)->getShape().positionAtOffset(pos);
309 switch (destPosType) {
312 roadPos = convertCartesianToRoadMap(cartesianPos);
315 outputStorage.
writeString(roadPos.first->getEdge().getID());
317 const std::vector<MSLane*> lanes = roadPos.first->getEdge().getLanes();
318 outputStorage.
writeUnsignedByte((
int)distance(lanes.begin(), find(lanes.begin(), lanes.end(), roadPos.first)));
351 std::pair<const MSLane*, SUMOReal> roadPos1;
352 std::pair<const MSLane*, SUMOReal> roadPos2;
359 std::string roadID = inputStorage.
readString();
361 roadPos1.first = getLaneChecking(roadID, inputStorage.
readUnsignedByte(), roadPos1.second);
362 pos1 = roadPos1.first->getShape().positionAtOffset(roadPos1.second);
377 roadPos1 = convertCartesianToRoadMap(pos1);
389 std::string roadID = inputStorage.
readString();
391 roadPos2.first = getLaneChecking(roadID, inputStorage.
readUnsignedByte(), roadPos2.second);
392 pos2 = roadPos2.first->getShape().positionAtOffset(roadPos2.second);
407 roadPos2 = convertCartesianToRoadMap(pos2);
420 if ((roadPos1.first == roadPos2.first) && (roadPos1.second <= roadPos2.second)) {
422 distance = roadPos2.second - roadPos1.second;
427 MSRoute route(
"", newRoute,
false, 0, std::vector<SUMOVehicleParameter::Stop>());
428 distance = route.
getDistanceBetween(roadPos1.second, roadPos2.second, &roadPos1.first->getEdge(), &roadPos2.first->getEdge());