gm3d-gui/src/init_obs.cpp
2019-09-05 12:22:21 +08:00

61 lines
1.6 KiB
C++

#include "gm3d.h"
int GM3D::InitObs(char* obs_para){
obspoint temp_obs;
string temp_str;
stringstream temp_ss;
double x,y;
double xmin,xmax,ymin,ymax;
double xs,xe,ys,ye,eleva,dx,dy;
//按格式解析参数 初始化观测位置 用于正演计算
if (7 == sscanf(obs_para,"%lf/%lf/%lf/%lf/%lf/%lf/%lf",&xs,&dx,&xe,&ys,&dy,&ye,&eleva)){
xmin = MIN(xs,xe); xmax = MAX(xs,xe);
ymin = MIN(ys,ye); ymax = MAX(ys,ye);
x = xs;
while(x >= xmin && x <= xmax){
y = ys;
while(y >= ymin && y <= ymax){
temp_obs.id = obs_p_.size();
temp_obs.x = x; temp_obs.y = y; temp_obs.z = -1.0*eleva;
temp_obs.val = temp_obs.dev = 0.0;
obs_p_.push_back(temp_obs);
y += dy;
}
x += dx;
}
}
//解析失败 按文件读入 用于反演使用或者正演计算
else{
ifstream infile;
if (open_infile(infile,obs_para)) return -1;
while(getline(infile,temp_str)){
if (*(temp_str.begin()) == '#') continue;
else{
//按每行3个数据解析 初始化为用于正演的观测点
if (3 == sscanf(temp_str.c_str(),"%lf %lf %lf",&temp_obs.y,&temp_obs.x,&temp_obs.z)){
temp_obs.z *= -1.0;
temp_obs.id = obs_p_.size();
temp_obs.val = temp_obs.dev = 0.0;
obs_p_.push_back(temp_obs);
}
else{
cerr << BOLDYELLOW << "ignored ==> " << RESET << "wrong input: " << temp_str << endl;
continue;
}
}
}
infile.close();
}
if (obs_p_.empty()){
cerr << BOLDRED << "error ==> " << RESET << "fail to initial observations with the parameter: " << obs_para << endl;
return -1;
}
else{
obs_num_ = obs_p_.size();
}
return 0;
}