48 #ifdef CHECK_MEMORY_LEAKS
50 #endif // CHECK_MEMORY_LEAKS
56 using namespace traci;
65 std::string warning =
"";
180 if (inputStorage.
readInt() != 2) {
193 if (inputStorage.
readInt() != 3) {
210 std::pair<MSLane*, SUMOReal>
212 std::pair<MSLane*, SUMOReal> result;
213 std::vector<std::string> allEdgeIds;
217 for (std::vector<std::string>::iterator itId = allEdgeIds.begin(); itId != allEdgeIds.end(); itId++) {
219 for (std::vector<MSLane*>::const_iterator itLane = allLanes.begin(); itLane != allLanes.end(); itLane++) {
220 const SUMOReal newDistance = (*itLane)->getShape().distance(pos);
221 if (newDistance < minDistance) {
222 minDistance = newDistance;
223 result.first = (*itLane);
228 result.second = result.first->getShape().nearest_position_on_line_to_point2D(pos,
false);
239 if (laneIndex < 0 || laneIndex >= (
int)edge->
getLanes().size()) {
243 if (pos < 0 || pos > lane->
getLength()) {
254 std::pair<MSLane*, SUMOReal> roadPos;
262 switch (srcPosType) {
273 cartesianPos.
set(x, y);
282 std::string roadID = inputStorage.
readString();
286 cartesianPos = geoPos = getLaneChecking(roadID, laneIdx, pos)->getShape().positionAtLengthPosition(pos);
296 "Source position type not supported");
302 switch (destPosType) {
311 roadPos = convertCartesianToRoadMap(cartesianPos);
315 tmpResult.
writeString(roadPos.first->getEdge().getID());
317 const std::vector<MSLane*> lanes = roadPos.first->getEdge().getLanes();
318 tmpResult.
writeUnsignedByte((
int)distance(lanes.begin(), find(lanes.begin(), lanes.end(), roadPos.first)));
347 "Destination position type not supported");
369 std::pair<const MSLane*, SUMOReal> roadPos1;
370 std::pair<const MSLane*, SUMOReal> roadPos2;
377 std::string roadID = inputStorage.
readString();
379 roadPos1.first = getLaneChecking(roadID, inputStorage.
readUnsignedByte(), roadPos1.second);
380 pos1 = roadPos1.first->getShape().positionAtLengthPosition(roadPos1.second);
395 roadPos1 = convertCartesianToRoadMap(pos1);
407 std::string roadID = inputStorage.
readString();
409 roadPos2.first = getLaneChecking(roadID, inputStorage.
readUnsignedByte(), roadPos2.second);
410 pos2 = roadPos2.first->getShape().positionAtLengthPosition(roadPos2.second);
425 roadPos2 = convertCartesianToRoadMap(pos2);
438 std::vector<const MSEdge*> edges;
441 if ((roadPos1.first == roadPos2.first)
442 && (roadPos1.second <= roadPos2.second)) {
443 distance = roadPos2.second - roadPos1.second;
445 router.
compute(&roadPos1.first->getEdge(), &roadPos2.first->getEdge(), NULL,
449 &roadPos1.first->getEdge(), &roadPos2.first->getEdge());