Я написал функцию в TRACI Client для запроса SUMO (сервера TRACI) для получения текущей позиции автомобиля, который я получаю исправить в системе координат XY. Теперь я хочу изменить эту полученную позицию XY на широту и долготу. Я закодирован в соответствии с документацией, имеющейся в http://www.sumo.dlr.de/wiki/TraCI/Simulation_Value_Retrieval#Command_0x82:_Position_Conversion , но я получаю ошибку !!. Пожалуйста, обратите внимание на кодОшибка в преобразовании позиции транспортного средства (координаты XY в широту и долготу) в SUMO от клиента C++ TRACI
TraCITestClient::Position TraCITestClient::getPosition()
{
send_commandGetVariable(0xa4, 0x42, "veh1");
tcpip::Storage inMsg;
try {
std::string acknowledgement;
check_resultState(inMsg, 0xa4, false, &acknowledgement);
} catch (tcpip::SocketException& e) {
pos.x = -1;
pos.y = -1;
return pos;
}
check_commandGetResult(inMsg, 0xa4, -1, false);
// report result state
try {
int variableID = inMsg.readUnsignedByte();
std::string objectID = inMsg.readString();
int valueDataType = inMsg.readUnsignedByte();
pos.x = inMsg.readDouble();
pos.y = inMsg.readDouble();
} catch (tcpip::SocketException& e) {
std::stringstream msg;
msg << "Error while receiving command: " << e.what();
errorMsg(msg);
pos.x = -1;
pos.y = -1;
return pos;
}
//till here i am getting correct value in pos.x and pos.y
// now i want to convert these XY coordinates to actual Lat Long
tcpip::Storage* tmp = new tcpip::Storage;
tmp->writeByte(TYPE_COMPOUND);
tmp->writeInt(2);
tmp->writeDouble(pos.x);
tmp->writeDouble(pos.y);
tmp->writeByte(TYPE_UBYTE);
tmp->writeUnsignedByte(POSITION_LON_LAT);
send_commandGetVariable(0x82, 0x58, "veh1",tmp); //**here i am getting error**
tcpip::Storage inMsgX;
try {
std::string acknowledgement;
check_resultState(inMsgX, 0x82, false, &acknowledgement);
} catch (tcpip::SocketException& e) {
return pos;
}
check_commandGetResult(inMsgX, 0x82, -1, false);
// report result state
try {
int variableID = inMsgX.readUnsignedByte();
std::string objectID = inMsgX.readString();
int valueDataType = inMsgX.readUnsignedByte();
pos.x = inMsgX.readDouble();
pos.y = inMsgX.readDouble();
} catch (tcpip::SocketException& e) {
std::stringstream msg;
msg << "Error while receiving command: " << e.what();
errorMsg(msg);
return pos;
}
return pos;
}
Так ошибка я получаю на SUMO Сервер: Ошибка: TCPIP :: Хранение :: readIsSafe: хочу прочитать 823066624 байт из памяти, но только 20 оставшихся бросить курить (по ошибке).
Большое спасибо, я буквально пытался изобретать колеса, я запутался в командах. Большое спасибо, привет! – Vickey