void GeoMapper::mapData() { const std::vector<GeoLib::Point*> *points (this->_geo_objects.getPointVec(this->_geo_name)); GeoLib::Station* stn_test = dynamic_cast<GeoLib::Station*>((*points)[0]); bool is_borehole(false); if (stn_test != nullptr && static_cast<GeoLib::StationBorehole*>((*points)[0])->type() == GeoLib::Station::StationType::BOREHOLE) is_borehole = true; double min_val(0), max_val(0); if (_mesh) { GeoLib::AABB<GeoLib::Point> bounding_box (_mesh->getNodes().begin(), _mesh->getNodes().end()); min_val = bounding_box.getMinPoint()[2]; max_val = bounding_box.getMaxPoint()[2]; } size_t nPoints (points->size()); if (!is_borehole) { for (unsigned j=0; j<nPoints; ++j) { GeoLib::Point* pnt ((*points)[j]); (*pnt)[2] = (_grid) ? this->getMeshElevation((*pnt)[0],(*pnt)[1], min_val, max_val) : this->getDemElevation((*pnt)[0],(*pnt)[1]); } } else { for (unsigned j=0; j<nPoints; ++j) { GeoLib::Point* pnt ((*points)[j]); double offset = (_grid) ? (this->getMeshElevation((*pnt)[0],(*pnt)[1], min_val, max_val) - (*pnt)[2]) : (this->getDemElevation((*pnt)[0],(*pnt)[1]) - (*pnt)[2]); GeoLib::StationBorehole* borehole = static_cast<GeoLib::StationBorehole*>(pnt); const std::vector<GeoLib::Point*> layers = borehole->getProfile(); size_t nLayers = layers.size(); for (unsigned k=0; k<nLayers; ++k) { GeoLib::Point* layer_pnt = layers[k]; (*layer_pnt)[2] = (*layer_pnt)[2] + offset; } } } }
/* // all boreholes to GMS which each borehole in a single file void StationIO::writeBoreholesToGMS(const std::vector<GeoLib::Point*> *stations) { //std::vector<std::string> soilID(1); std::vector<std::string> soilID = readSoilIDfromFile("d:/BodeTimeline.txt"); for (std::size_t i=0; i<stations->size(); i++) StationIO::writeBoreholeToGMS(static_cast<GeoLib::StationBorehole*>((*stations)[i]), std::string("Borehole-" + static_cast<GeoLib::StationBorehole*>((*stations)[i])->getName() + ".txt"), soilID); StationIO::writeSoilIDTable(soilID, "SoilIDReference.txt"); } */ void GMSInterface::writeBoreholesToGMS(const std::vector<GeoLib::Point*>* stations, const std::string &filename) { std::ofstream out( filename.c_str(), std::ios::out ); //std::vector<std::string> soilID = readSoilIDfromFile("d:/BodeTimeline.txt"); // write header out << "name" << "\t" << std::fixed << "X" << "\t" << "Y" << "\t" << "Z" << "\t" << "soilID" << "\n"; for (std::size_t j = 0; j < stations->size(); j++) { GeoLib::StationBorehole* station = static_cast<GeoLib::StationBorehole*>((*stations)[j]); std::vector<GeoLib::Point*> profile = station->getProfile(); std::vector<std::string> soilNames = station->getSoilNames(); //std::size_t idx = 0; std::string current_soil_name(""); std::size_t nLayers = profile.size(); for (std::size_t i = 1; i < nLayers; i++) { if ( (i > 1) && (soilNames[i].compare(soilNames[i - 1]) == 0) ) continue; //idx = getSoilID(soilID, soilNames[i]); current_soil_name = soilNames[i]; out << station->getName() << "\t" << std::fixed << (*(profile[i - 1]))[0] << "\t" << (*(profile[i - 1]))[1] << "\t" << (*(profile[i - 1]))[2] << "\t" << current_soil_name/*idx*/ << "\n"; } out << station->getName() << "\t" << std::fixed << (*(profile[nLayers - 1]))[0] << "\t" << (*(profile[nLayers - 1]))[1] << "\t" << (*(profile[nLayers - 1]))[2] << "\t" << current_soil_name << "\n"; // this line marks the end of the borehole } out.close(); //GMSInterface::writeSoilIDTable(soilID, "d:/SoilIDReference.txt"); }
void GeoMapper::mapData(MeshLib::Mesh const*const mesh) { const std::vector<GeoLib::Point*> *points (this->_geo_objects.getPointVec(this->_geo_name)); GeoLib::Station* stn_test = dynamic_cast<GeoLib::Station*>((*points)[0]); bool is_borehole(false); if (stn_test != NULL && static_cast<GeoLib::StationBorehole*>((*points)[0])->type() == GeoLib::Station::BOREHOLE) is_borehole = true; size_t nPoints (points->size()); if (!is_borehole) { for (unsigned j=0; j<nPoints; ++j) { GeoLib::Point* pnt ((*points)[j]); (*pnt)[2] = (_grid) ? this->getMeshElevation((*pnt)[0],(*pnt)[1], mesh) : this->getDemElevation((*pnt)[0],(*pnt)[1]); } } else { for (unsigned j=0; j<nPoints; ++j) { GeoLib::Point* pnt ((*points)[j]); double offset = (_grid) ? (this->getMeshElevation((*pnt)[0],(*pnt)[1], mesh) - (*pnt)[2]) : (this->getDemElevation((*pnt)[0],(*pnt)[1]) - (*pnt)[2]); GeoLib::StationBorehole* borehole = static_cast<GeoLib::StationBorehole*>(pnt); const std::vector<GeoLib::Point*> layers = borehole->getProfile(); size_t nLayers = layers.size(); for (unsigned k=0; k<nLayers; ++k) { GeoLib::Point* layer_pnt = layers[k]; (*layer_pnt)[2] = (*layer_pnt)[2] + offset; } } } }