
#ifndef __MAPDATACONTAINER_H
#define __MAPDATACONTAINER_H

namespace iwear
{
    namespace sensor
    {
	namespace location
	{
/**
 * The MapData represents all the data needed to draw a map. MapMetaData is
 * something like streets etc. that do not have any special locatable location.
 *
 * Since in the database might be the data of a whole city, this data object
 * only has some part of the available data and needs to reload, which we call
 * here "moving the window".
 * The window in this case is the area of the data which we want to have
 * available. This should always be quite greater than whats displayed, since
 * we dont want to constantly reload data from database.
 * We "forget" the data thats not needed any more if the total amount of data
 * exceeds a certain limit.
 */

/*
 * Notes:
 *
 * - Need a list with all wlan locations (for wlan information)
 * - Need a list with all "normal" locations (without wlan information)
 * - Need a list with all the other "nice" meta data like streets etc.
 * - all the locations should have some connection to those in the wlan locator
 *   so we can smoothly display them on the map. Should we do this by the dbid
 *   ? perhaps, it should be a unique identifier...
 */
class MapDataContainer
{
private:
protected:
    /**
     * Thats our window.
     */
    double ul_lat;
    double ul_lon;

    double lr_lat;
    double lr_lon;

    /**
     * This maps the locations we know and keep by their database ID.
     */
    map<uint32_t,Location*> loc_map;
    /**
     * This maps the WLAN locations we know by their database ID.
     */
    map<uint32_t,IWWLocation*> wloc_map;
    map<uint32_t,MapData*> map_map; 

    multimap<double,Location*> lat_map;
public:
};

}
}
}
#endif
