2020-03-19 06:22:59 +01:00
|
|
|
#ifndef MAP_H
|
|
|
|
#define MAP_H
|
|
|
|
|
2020-06-11 09:11:52 +02:00
|
|
|
#include <vector>
|
2020-03-19 06:22:59 +01:00
|
|
|
|
|
|
|
typedef struct Point{
|
|
|
|
float lat;
|
|
|
|
float lon;
|
|
|
|
} Point;
|
|
|
|
|
|
|
|
typedef struct Polygon{
|
|
|
|
float lat_min;
|
|
|
|
float lat_max;
|
|
|
|
float lon_min;
|
|
|
|
float lon_max;
|
|
|
|
|
2020-06-11 09:11:52 +02:00
|
|
|
std::vector<Point> points;
|
2020-03-19 06:22:59 +01:00
|
|
|
int numPoints;
|
|
|
|
|
|
|
|
Polygon() {
|
|
|
|
lat_min = 180.0f;
|
|
|
|
lon_min = 180.0f;
|
|
|
|
lat_max = -180.0f;
|
|
|
|
lon_max = -180.0f;
|
|
|
|
numPoints = 0;
|
|
|
|
}
|
|
|
|
} Polygon;
|
|
|
|
|
|
|
|
typedef struct QuadTree{
|
|
|
|
float lat_min;
|
|
|
|
float lat_max;
|
|
|
|
float lon_min;
|
|
|
|
float lon_max;
|
|
|
|
|
2020-06-11 09:11:52 +02:00
|
|
|
std::vector<Polygon> polygons;
|
2020-03-19 06:22:59 +01:00
|
|
|
|
|
|
|
struct QuadTree *nw;
|
|
|
|
struct QuadTree *sw;
|
|
|
|
struct QuadTree *ne;
|
|
|
|
struct QuadTree *se;
|
|
|
|
|
|
|
|
QuadTree() {
|
|
|
|
lat_min = 180.0f;
|
|
|
|
lon_min = 180.0f;
|
|
|
|
lat_max = -180.0f;
|
|
|
|
lon_max = -180.0f;
|
|
|
|
|
|
|
|
nw = NULL;
|
|
|
|
sw = NULL;
|
|
|
|
ne = NULL;
|
|
|
|
se = NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
~QuadTree() {
|
|
|
|
if(nw != NULL) {
|
|
|
|
delete nw;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(sw != NULL) {
|
|
|
|
delete nw;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(ne != NULL) {
|
|
|
|
delete nw;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(ne != NULL) {
|
|
|
|
delete nw;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} QuadTree;
|
|
|
|
|
|
|
|
class Map {
|
|
|
|
|
|
|
|
public:
|
|
|
|
QuadTree root;
|
|
|
|
|
2020-06-11 09:11:52 +02:00
|
|
|
bool QTInsert(QuadTree *tree, Polygon *polygon, int depth);
|
|
|
|
std::vector<Polygon> getPolysRecursive(QuadTree *tree, float screen_lat_min, float screen_lat_max, float screen_lon_min, float screen_lon_max);
|
|
|
|
std::vector<Polygon> getPolys(float screen_lat_min, float screen_lat_max, float screen_lon_min, float screen_lon_max);
|
2020-03-19 06:22:59 +01:00
|
|
|
|
|
|
|
Map();
|
|
|
|
|
|
|
|
int mapPoints_count;
|
|
|
|
float *mapPoints;
|
|
|
|
};
|
|
|
|
#endif
|