|
@@ -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);
|
|
|
}
|
|
|
}
|
|
@@ -40,17 +40,26 @@ 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 );
|
|
|
+
|
|
|
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;
|
|
@@ -74,21 +83,51 @@ 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)
|
|
|
+ {
|
|
|
+ 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
|
|
|
+ {
|
|
|
+ auto markptr = Landmark_list::instance()->get(landmark_id);
|
|
|
+ if (markptr != nullptr)
|
|
|
+ {
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ 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);
|
|
|
+ Landmark_list::instance()->add(landmark_id, landmark);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (-1== id)
|
|
|
+ {
|
|
|
+ Landmark_list::instance()->add(map);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
-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;
|
|
|
- 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);
|
|
@@ -99,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);
|
|
@@ -120,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;
|
|
|
}
|