void Map::load(const char *mapFile) { TiXmlDocument XMLdoc(mapFile); if (XMLdoc.LoadFile()) { TiXmlElement *e_mapName, *e_width, *e_height, *e_levelTotal, *e_tileDes, *e_tile; e_mapName = XMLdoc.FirstChildElement( "mapName" ); if( e_mapName ) { this->mapName = e_mapName->GetText(); } e_width = XMLdoc.FirstChildElement( "width" ); if( e_width ) { this->width = atoi( e_width->GetText() ); } e_height = XMLdoc.FirstChildElement( "height" ); if( e_height ) { this->height = atoi( e_height->GetText() ); } e_levelTotal = XMLdoc.FirstChildElement( "levelTotal" ); if( e_levelTotal ) { this->levelTotal = atoi( e_levelTotal->GetText() ); } e_tile = XMLdoc.FirstChildElement( "tile" ); while( e_tile ) { Tile tmptile; tmptile.chipSetName = e_tile->Attribute("chipSetName"); tmptile.tileID = atoi(e_tile->Attribute("tileID")); tmptile.srcX = (float)atof(e_tile->Attribute("srcX")); tmptile.srcY = (float)atof(e_tile->Attribute("srcY")); tmptile.width = atoi(e_tile->Attribute("width")); tmptile.height = atoi(e_tile->Attribute("height")); tmptile.rotation = atoi(e_tile->Attribute("rotation")); tmptile.level = atoi(e_tile->Attribute("level")); tmptile.terrainType = atoi(e_tile->Attribute("terrainType")); this->tiles.push_back(tmptile); e_tile = e_tile->NextSiblingElement("tile"); } e_tileDes = XMLdoc.FirstChildElement( "tileDes" ); while(e_tileDes) { std::pair<unsigned int, std::pair<float, float> > tmptile; tmptile.first = atoi( e_tileDes->Attribute("tileID") ); tmptile.second.first = (float)atof( e_tileDes->Attribute("desX") ); tmptile.second.second = (float)atof( e_tileDes->Attribute("desY") ); this->tileDestionations.push_back( tmptile ); e_tileDes = e_tileDes->NextSiblingElement("tileDes"); } } }
uint32 All_RoadSegment::AnalysisSegment() { uint32 firstSegId = 0; //open XML TiXmlDocument XMLdoc("./config/DE_Airport_ParamConfig.xml"); if(!XMLdoc.LoadFile()) { cout<<"fail to load config file"<<endl; return 0; } TiXmlElement* root = XMLdoc.RootElement(); TiXmlElement* segment; //segnumber segment = root->FirstChildElement(); segmentnum = stringToNum<uint32>(segment->GetText()); segment = segment->NextSiblingElement(); int index = -1; int insert_idex; while(NULL != segment) { RoadSegment *p_seg_t = new RoadSegment; //segID TiXmlElement* nextElement = segment->FirstChildElement(); p_seg_t->segId = stringToNum<uint16>(nextElement->GetText()); if(-1 == index)//first segment {firstSegId = p_seg_t->segId;} //segType nextElement = nextElement->NextSiblingElement(); p_seg_t->segType = stringToNum<uint32>(nextElement->GetText()); //lanenum nextElement = nextElement->NextSiblingElement(); p_seg_t->laneNum = stringToNum<uint32>(nextElement->GetText()); //lineNum nextElement = nextElement->NextSiblingElement(); p_seg_t->lineNum = stringToNum<uint32>(nextElement->GetText()); //gpspoint number nextElement = nextElement->NextSiblingElement(); p_seg_t->pointNum = stringToNum<uint32>(nextElement->GetText()); //point element index = p_seg_t->pointNum; while(index) { Segmentpoint *p_point_t = new Segmentpoint; index--; nextElement = nextElement->NextSiblingElement(); TiXmlElement* pointElement = nextElement->FirstChildElement(); //point ID p_point_t->pointId = stringToNum<uint32>(pointElement->GetText()); pointElement = pointElement->NextSiblingElement(); //point type p_point_t->point_type = stringToNum<uint32>(pointElement->GetText()); pointElement = pointElement->NextSiblingElement(); //connect segmentID p_point_t->conn_segId = stringToNum<uint32>(pointElement->GetText()); pointElement = pointElement->NextSiblingElement(); //gps p_point_t->point.lat = stringToNum<double>(pointElement->GetText()); pointElement = pointElement->NextSiblingElement(); p_point_t->point.lon = stringToNum<double>(pointElement->GetText()); pointElement = pointElement->NextSiblingElement(); //inert lane and sort insert_idex = p_seg_t->insertPoint(p_point_t); p_seg_t->_segpoint.insert(p_seg_t->_segpoint.begin()+insert_idex , *p_point_t); } //check gps point if(!p_seg_t->CheckPointId()) return false; //lane element index = p_seg_t->laneNum; while(index) { Segmentlane *p_lane_t = new Segmentlane; index--; nextElement = nextElement->NextSiblingElement(); TiXmlElement* laneElement = nextElement->FirstChildElement(); //laneID p_lane_t->laneId = stringToNum<uint32>(laneElement->GetText()); laneElement = laneElement->NextSiblingElement(); //start position p_lane_t->start_pos.lat = stringToNum<double>(laneElement->GetText()); laneElement = laneElement->NextSiblingElement(); p_lane_t->start_pos.lon = stringToNum<double>(laneElement->GetText()); laneElement = laneElement->NextSiblingElement(); //stop position p_lane_t->end_pos.lat = stringToNum<double>(laneElement->GetText()); laneElement = laneElement->NextSiblingElement(); p_lane_t->end_pos.lon = stringToNum<double>(laneElement->GetText()); laneElement = laneElement->NextSiblingElement(); //direction p_lane_t->derection = stringToNum<uint32>(laneElement->GetText()); laneElement = laneElement->NextSiblingElement(); //merge left p_lane_t->merge_left = stringToNum<uint32>(laneElement->GetText()); laneElement = laneElement->NextSiblingElement(); //merge right p_lane_t->merge_right = stringToNum<uint32>(laneElement->GetText()); laneElement = laneElement->NextSiblingElement(); //left line p_lane_t->leftlineID = stringToNum<uint32>(laneElement->GetText()); laneElement = laneElement->NextSiblingElement(); //right line p_lane_t->rightlineID = stringToNum<uint32>(laneElement->GetText()); laneElement = laneElement->NextSiblingElement(); //inert lane and sort insert_idex = p_seg_t->insertLane(p_lane_t); p_seg_t->_seglane.insert(p_seg_t->_seglane.begin()+insert_idex , *p_lane_t); } //check lane if(!p_seg_t->CheckLaneId()) return false; //line element index = p_seg_t->lineNum; while(index) { Segmentline *p_line_t = new Segmentline; index--; nextElement = nextElement->NextSiblingElement(); TiXmlElement* lineElement = nextElement->FirstChildElement(); //line ID p_line_t->lineId = stringToNum<uint32>(lineElement->GetText()); lineElement = lineElement->NextSiblingElement(); //line type p_line_t->linetype = stringToNum<uint32>(lineElement->GetText()); lineElement = lineElement->NextSiblingElement(); //connection segID p_line_t->connSegID = stringToNum<uint32>(lineElement->GetText()); lineElement = lineElement->NextSiblingElement(); //connection lineID p_line_t->connLineID = stringToNum<uint32>(lineElement->GetText()); lineElement = lineElement->NextSiblingElement(); //insert line and sort insert_idex = p_seg_t->insertLine(p_line_t); p_seg_t->_segline.insert(p_seg_t->_segline.begin()+insert_idex , *p_line_t); } //check line if(!p_seg_t->CheckLineId()) return false; //insert segment and sort insert_idex = insertSegment(p_seg_t); _roadsegment.insert(_roadsegment.begin()+insert_idex , *p_seg_t); //point to next segmen segment = segment->NextSiblingElement(); } //check segment if(!CheckSegmentID()) return false; return firstSegId; }