|
@@ -40,13 +40,22 @@ void Landmark_list::init_from_db()
|
|
|
init_mapDirection();
|
|
|
}
|
|
|
|
|
|
-void Landmark_list::init_landmarkInfo()
|
|
|
+void Landmark_list::init_landmarkInfo(int id/*=-1*/)
|
|
|
{
|
|
|
- const char * sql = "select landmark_id, name, map_id, area_id, x, y, z from dat_landmark;";
|
|
|
+ std::string sql = "select landmark_id, name, map_id, area_id, x, y, z from dat_landmark";
|
|
|
+ if (-1 == id)
|
|
|
+ {
|
|
|
+ sql += ";";
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ sql += " WHERE landmark_id=" + std::to_string(id) +";";
|
|
|
+ }
|
|
|
std::string Error;
|
|
|
YADB::CDBResultSet DBRes;
|
|
|
- sDBConnPool.Query(sql,DBRes,Error);
|
|
|
+ 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 );
|
|
@@ -74,19 +83,63 @@ void Landmark_list::init_landmarkInfo()
|
|
|
double z = 0;
|
|
|
DBRes.GetField( "z",z, Error );
|
|
|
point p(x,y,z);
|
|
|
- std::shared_ptr<LandmarkInfo> landmark = std::make_shared<LandmarkInfo>(p,landmark_id,name,map_id,area_id);
|
|
|
- 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);
|
|
|
+ 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);
|
|
|
+ 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++)
|
|
|
+ {
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!befind)
|
|
|
+ {
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ 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)
|
|
|
+ {
|
|
|
+ m_v.erase(it_s);
|
|
|
+ log_info("delete landmark ......id:%d,name:%s", (*it_s)->landmark_id, (*it_s)->landmark_name);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ it_s++;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
std::tuple<int,int,double> Landmark_list::get(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)
|
|
|
{
|
|
|
if(lm->area_id == areaid)
|