t
This commit is contained in:
parent
508cf7238e
commit
a5175799ba
137
main.cpp
137
main.cpp
@ -1,3 +1,5 @@
|
|||||||
|
#include "rapidxml.hpp"
|
||||||
|
|
||||||
#include <GL/glut.h>
|
#include <GL/glut.h>
|
||||||
|
|
||||||
#include <experimental/filesystem>
|
#include <experimental/filesystem>
|
||||||
@ -20,6 +22,65 @@ struct Point {
|
|||||||
|
|
||||||
static std::vector<std::vector<Point> > tracks;
|
static std::vector<std::vector<Point> > tracks;
|
||||||
|
|
||||||
|
bool ParseFile(std::vector<std::vector<Point>> &out_tracks,
|
||||||
|
const std::string &file_and_path)
|
||||||
|
{
|
||||||
|
std::ifstream ifs(file_and_path);
|
||||||
|
if(!ifs.is_open())
|
||||||
|
{
|
||||||
|
std::cerr << "Couldn't open " << file_and_path << "." << std::endl;
|
||||||
|
return -2;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string line = "";
|
||||||
|
bool first = true;
|
||||||
|
float diff_lat, diff_lon, diff_ele;
|
||||||
|
std::vector<Point> track;
|
||||||
|
while(std::getline(ifs, line))
|
||||||
|
{
|
||||||
|
// get starting position of field NAME
|
||||||
|
auto lat = line.find("lat=\"");
|
||||||
|
if(lat == std::string::npos)
|
||||||
|
continue;
|
||||||
|
// get ending position of field DATA
|
||||||
|
auto lat_to = line.find("\"", lat);
|
||||||
|
if(lat_to == std::string::npos)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// get starting position of field NAME
|
||||||
|
auto lon = line.find("lon=\"", lat_to);
|
||||||
|
if(lon == std::string::npos)
|
||||||
|
continue;
|
||||||
|
// get ending position of field DATA
|
||||||
|
auto lon_to = line.find("\"", lon);
|
||||||
|
if(lon_to == std::string::npos)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
auto ele = line.find("<ele>", lon_to);
|
||||||
|
if(ele == std::string::npos)
|
||||||
|
continue;
|
||||||
|
auto ele_to = line.find("</ele>", ele);
|
||||||
|
if(ele_to == std::string::npos)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
Point p;
|
||||||
|
try {
|
||||||
|
p.lat = std::atof(line.substr(lat + 5, lat_to).c_str()) * 200;
|
||||||
|
p.lon = std::atof(line.substr(lon + 5, lon_to).c_str()) * 200;
|
||||||
|
p.ele = std::atof(line.substr(ele + 5, ele_to).c_str()) * 0.1;
|
||||||
|
} catch (const std::exception &e) {
|
||||||
|
std::cerr << "Error in file " << file_and_path
|
||||||
|
<< ", line \"" << line << "\"."
|
||||||
|
<< std::endl;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
track.push_back(p);
|
||||||
|
}
|
||||||
|
out_tracks.push_back(track);
|
||||||
|
ifs.close();
|
||||||
|
}
|
||||||
|
|
||||||
// TODO(dev):
|
// TODO(dev):
|
||||||
// As per https://www.opengl.org/resources/libraries/glut/spec3/node11.html
|
// As per https://www.opengl.org/resources/libraries/glut/spec3/node11.html
|
||||||
// "Therefore, GLUT programs should not assume the window was created at the specified size or position.
|
// "Therefore, GLUT programs should not assume the window was created at the specified size or position.
|
||||||
@ -135,80 +196,14 @@ int main(int argc, char *argv[])
|
|||||||
files.push_back(entry.path().string());
|
files.push_back(entry.path().string());
|
||||||
}
|
}
|
||||||
|
|
||||||
float file_diff_lat = -8;
|
|
||||||
float file_diff_lon = -8;
|
|
||||||
for(auto file : files)
|
for(auto file : files)
|
||||||
{
|
{
|
||||||
std::ifstream ifs(file);
|
// NOTE(dev): OLD:
|
||||||
if(!ifs.is_open())
|
if(!ParseFile(tracks, file))
|
||||||
{
|
return -3; // couldn't parse file
|
||||||
std::cerr << "Couldn't open " << file << "." << std::endl;
|
|
||||||
return -2;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string line = "";
|
// NOTE(dev): NEW:
|
||||||
bool first = true;
|
// TODO(dev): Xml Parser
|
||||||
float diff_lat, diff_lon, diff_ele;
|
|
||||||
std::vector<Point> track;
|
|
||||||
while(std::getline(ifs, line))
|
|
||||||
{
|
|
||||||
// get starting position of field NAME
|
|
||||||
auto lat = line.find("lat=\"");
|
|
||||||
if(lat == std::string::npos)
|
|
||||||
continue;
|
|
||||||
// get ending position of field DATA
|
|
||||||
auto lat_to = line.find("\"", lat);
|
|
||||||
if(lat_to == std::string::npos)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
// get starting position of field NAME
|
|
||||||
auto lon = line.find("lon=\"", lat_to);
|
|
||||||
if(lon == std::string::npos)
|
|
||||||
continue;
|
|
||||||
// get ending position of field DATA
|
|
||||||
auto lon_to = line.find("\"", lon);
|
|
||||||
if(lon_to == std::string::npos)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
auto ele = line.find("<ele>", lon_to);
|
|
||||||
if(ele == std::string::npos)
|
|
||||||
continue;
|
|
||||||
auto ele_to = line.find("</ele>", ele);
|
|
||||||
if(ele_to == std::string::npos)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
Point p;
|
|
||||||
try {
|
|
||||||
p.lat = std::atof(line.substr(lat + 5, lat_to).c_str()) * 200;
|
|
||||||
p.lon = std::atof(line.substr(lon + 5, lon_to).c_str()) * 200;
|
|
||||||
p.ele = std::atof(line.substr(ele + 5, ele_to).c_str()) * 0.1;
|
|
||||||
} catch (const std::exception &e) {
|
|
||||||
std::cerr << "Error in file " << file << ", line \"" << line << "\"." << std::endl;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(first)
|
|
||||||
{
|
|
||||||
first = false;
|
|
||||||
diff_lat = p.lat;
|
|
||||||
diff_lon = p.lon;
|
|
||||||
diff_ele = p.ele;
|
|
||||||
}
|
|
||||||
|
|
||||||
p.lat -= diff_lat + file_diff_lat;
|
|
||||||
p.lon -= diff_lon + file_diff_lon;
|
|
||||||
p.ele -= diff_ele;
|
|
||||||
track.push_back(p);
|
|
||||||
}
|
|
||||||
tracks.push_back(track);
|
|
||||||
file_diff_lat += 4;
|
|
||||||
if(file_diff_lat > 5)
|
|
||||||
{
|
|
||||||
file_diff_lat = -8;
|
|
||||||
file_diff_lon += 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
ifs.close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_ALPHA | GLUT_MULTISAMPLE);
|
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_ALPHA | GLUT_MULTISAMPLE);
|
||||||
|
Loading…
Reference in New Issue
Block a user