|
@@ -4,11 +4,11 @@
|
|
|
#include "log.h"
|
|
|
|
|
|
|
|
|
-Landmark_list * Landmark_list::instance()
|
|
|
-{
|
|
|
- static Landmark_list lm_list;
|
|
|
- return &lm_list;
|
|
|
-}
|
|
|
+//Landmark_list * Landmark_list::instance()
|
|
|
+//{
|
|
|
+// static Landmark_list lm_list;
|
|
|
+// return &lm_list;
|
|
|
+//}
|
|
|
void Landmark_list::init_mapDirection()
|
|
|
{
|
|
|
const char * sql = "select map_direction_id, map_id, north_angle from dat_map_direction;";
|
|
@@ -29,7 +29,7 @@ void Landmark_list::init_mapDirection()
|
|
|
DBRes.GetField( "north_angle",north_angle, Error );
|
|
|
|
|
|
std::shared_ptr<map_direction> md = std::make_shared<map_direction>(map_id,north_angle);
|
|
|
- m_map.insert({map_id,md});
|
|
|
+ m_map_direction.insert({map_id,md});
|
|
|
log_info("map_direction.....mapid:%d,north:%d",map_id,north_angle);
|
|
|
}
|
|
|
}
|
|
@@ -55,11 +55,11 @@ void Landmark_list::init_landmarkInfo(int id/*=-1*/)
|
|
|
YADB::CDBResultSet DBRes;
|
|
|
sDBConnPool.Query(sql.c_str(),DBRes,Error);
|
|
|
int nCount = DBRes.GetRecordCount( Error );
|
|
|
- std::lock_guard<std::mutex> lock(m_mutex);
|
|
|
+
|
|
|
if (nCount > 0)
|
|
|
{
|
|
|
log_info( "init_landmark_info. The record count=%d\n", nCount );
|
|
|
-
|
|
|
+ std::unordered_map<int, std::shared_ptr<LandmarkInfo>> map;
|
|
|
while ( DBRes.GetNextRecod(Error) )
|
|
|
{
|
|
|
int landmark_id = 0;
|
|
@@ -85,63 +85,49 @@ void Landmark_list::init_landmarkInfo(int id/*=-1*/)
|
|
|
point p(x,y,z);
|
|
|
std::shared_ptr<LandmarkInfo> landmark = std::make_shared<LandmarkInfo>(p, landmark_id, name, map_id, area_id);
|
|
|
if (-1 == id)
|
|
|
- {
|
|
|
- m_v.push_back(landmark);
|
|
|
+ {
|
|
|
+ map.insert(std::make_pair(landmark_id, landmark));
|
|
|
+ //m_v.push_back(landmark);
|
|
|
log_info("landmark ......id:%d,name:%s,mapid:%d,area_id:%d,x:%.2f,y:%.2f,z:%.2f", landmark_id, name.c_str(), map_id, area_id, x, y, z);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- bool befind = false;
|
|
|
- for (size_t i = 0; i < m_v.size(); i++)
|
|
|
+ auto markptr = Landmark_list::instance()->get(landmark_id);
|
|
|
+ if (markptr != nullptr)
|
|
|
{
|
|
|
- if (m_v[i]->landmark_id==id)
|
|
|
- {
|
|
|
- m_v[i]->set(p);
|
|
|
- m_v[i]->landmark_id = landmark_id;
|
|
|
- m_v[i]->landmark_name = name;
|
|
|
- m_v[i]->map_id = map_id;
|
|
|
- m_v[i]->area_id = area_id;
|
|
|
- befind = true;
|
|
|
- log_info("update landmark ......id:%d,name:%s,mapid:%d,area_id:%d,x:%.2f,y:%.2f,z:%.2f", landmark_id, name.c_str(), map_id, area_id, x, y, z);
|
|
|
- break;
|
|
|
- }
|
|
|
+ markptr->set(p);
|
|
|
+ markptr->landmark_id = landmark_id;
|
|
|
+ markptr->landmark_name = name;
|
|
|
+ markptr->map_id = map_id;
|
|
|
+ markptr->area_id = area_id;
|
|
|
+ log_info("update landmark ......id:%d,name:%s,mapid:%d,area_id:%d,x:%.2f,y:%.2f,z:%.2f", landmark_id, name.c_str(), map_id, area_id, x, y, z);
|
|
|
}
|
|
|
- if (!befind)
|
|
|
+ else
|
|
|
{
|
|
|
log_info("add landmark ......id:%d,name:%s,mapid:%d,area_id:%d,x:%.2f,y:%.2f,z:%.2f", landmark_id, name.c_str(), map_id, area_id, x, y, z);
|
|
|
- m_v.push_back(landmark);
|
|
|
+ Landmark_list::instance()->add(landmark_id, landmark);
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-void Landmark_list::remove_landmarkInfo(int id)
|
|
|
-{
|
|
|
- std::lock_guard<std::mutex> lock(m_mutex);
|
|
|
- std::vector<std::shared_ptr<LandmarkInfo>>::iterator it_s = m_v.begin();
|
|
|
- while (it_s!= m_v.end())
|
|
|
- {
|
|
|
- if ((*it_s)->landmark_id == id)
|
|
|
+ if (-1== id)
|
|
|
{
|
|
|
- m_v.erase(it_s);
|
|
|
- log_info("delete landmark ......id:%d,name:%s", (*it_s)->landmark_id, (*it_s)->landmark_name);
|
|
|
- break;
|
|
|
+ Landmark_list::instance()->add(map);
|
|
|
}
|
|
|
- it_s++;
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
|
|
|
-std::tuple<int,int,double> Landmark_list::get(int mapid ,int areaid,const point &pt)
|
|
|
+std::tuple<int,int,double> Landmark_list::get_landmark(int mapid ,int areaid,const point &pt)
|
|
|
{
|
|
|
int32_t id = -1;
|
|
|
double dis = DBL_MAX;
|
|
|
point p;
|
|
|
- std::lock_guard<std::mutex> lock(m_mutex);
|
|
|
- for(const auto &lm : m_v)
|
|
|
+ auto m_v = Landmark_list::instance()->m_map;
|
|
|
+ auto it_s = m_v.begin();
|
|
|
+ while(it_s!=m_v.end())
|
|
|
{
|
|
|
+ auto lm = it_s->second;
|
|
|
if(lm->area_id == areaid)
|
|
|
{
|
|
|
double tmp = pt.dist(*lm);
|
|
@@ -152,6 +138,7 @@ std::tuple<int,int,double> Landmark_list::get(int mapid ,int areaid,const point
|
|
|
p=*lm;
|
|
|
}
|
|
|
}
|
|
|
+ it_s++;
|
|
|
}
|
|
|
if(id==-1)
|
|
|
return std::make_tuple(0,0,0);
|
|
@@ -173,8 +160,8 @@ DIRECTION_TYPE Landmark_list::GetDirectionType(point card_point, point landmark_
|
|
|
y_offset = 0;
|
|
|
|
|
|
std::shared_ptr<map_direction> pMapDirectoryInfo = nullptr;
|
|
|
- auto it = m_map.find(map_id);
|
|
|
- if(it == m_map.end())
|
|
|
+ auto it = m_map_direction.find(map_id);
|
|
|
+ if(it == m_map_direction.end())
|
|
|
{
|
|
|
return NODIRECTORY;
|
|
|
}
|