Tree putSubFolder(Tree folder, Tree path, Tree item) { if (isNil(path)) { //return putFolder(folder, item); return addToFolder(folder, item); } else { Tree subfolder = getFolder(folder, hd(path)); if (isUiFolder(subfolder)) { return putFolder(folder, putSubFolder(subfolder, tl(path), item)); } else { return putFolder(folder, makeSubFolderChain(path, item)); } } }
void KmlGenerator::putIsoContours(const std::string &interpolatorName) { const unsigned int nData = std::min(maxDataProcessed, sensorData.nMeasures); const std::vector<IsoContourList<double,4u,float>> &interpIsocontours = isocontours.at(interpolatorName); putFolder("Isocontours", "Data isocontours (" + interpolatorName + ")", false, false); unsigned int j = 0; for(const auto &temporalIsocontours : interpIsocontours) { unsigned int i = 1; for(auto isocontour = std::next(temporalIsocontours.begin()); isocontour != temporalIsocontours.end(); ++isocontour) { auto prev = std::prev(isocontour); putColorPolygons("Isocontour level " + std::to_string(i++), "Min value: " + std::to_string(isocontour->lowerValue) + " mg/m³\n" "Max value: " + std::to_string(isocontour->upperValue) + " mg/m³", "IsoContour_", ColorMultiLine<double,4u>(isocontour->lines, isocontour->color), ColorMultiLine<double,4u>(prev->lines, prev->color), false, sensorData.getTime(j), sensorData.getTime(j+1, true), ABSOLUTE ); } j++; } endFolder(); skipLine(); }
void KmlGenerator::putIsoLines(const std::string &interpolatorName) { const unsigned int nData = std::min(maxDataProcessed, sensorData.nMeasures); const std::vector<IsoLineList<double,4u,float>> &interpIsolines = isolines.at(interpolatorName); putFolder("Isolines", "Data isolines (" + interpolatorName + ")", false, true); unsigned int j = 0; for(const auto &temporalIsolines : interpIsolines) { unsigned int i = 1; for(const auto &isoline : temporalIsolines) { putColorLineStrings("Isolines level " + std::to_string(i++), "Isovalue: " + std::to_string(isoline.value) + " mg/m³", "IsoLine_", isoline.lines, defaultVisibleInterpolatorId.compare(interpolatorName) == 0, sensorData.getTime(j), sensorData.getTime(j+1, true) ); } j++; } endFolder(); skipLine(); }
// crée une chaine de dossiers correspondant à path et contenant in fine elem Tree makeSubFolderChain(Tree path, Tree elem) { if (isNil(path)) { return elem; } else { return putFolder(uiFolder(hd(path)), makeSubFolderChain(tl(path),elem)); } }
void KmlGenerator::putStations() { putFolder("Stations", "Station locations", false, true); for (unsigned int i = 0; i < sensorData.nStations; i++) { putPlaceMark(*sensorData.stationNames[i], sensorData.stationDescription(i,getCurrentIndentLevel()+2), "StationStyle", sensorData.x[i], sensorData.y[i], 0.0, CLAMP_TO_GROUND); } endFolder(); skipLine(); }
void KmlGenerator::putInterpolatedDataOverlays(const std::string &interpolatorName) { const unsigned int nData = std::min(maxDataProcessed, sensorData.nMeasures); putFolder("Interpolation results", "Data Overlays ("+interpolatorName+")", false, true); for (unsigned int i = 0; i < nData; i++) { putGroundOverlay("Data"+std::to_string(i), 0u, CLAMP_TO_GROUND, sensorData.bbox, 0.0, groundOverlayFolder+groundOverlayPrefix+interpolatorName+"_"+std::to_string(i)+"."+groundOverlayImgExt, defaultVisibleInterpolatorId.compare(interpolatorName) == 0, sensorData.getTime(i), sensorData.getTime(i+1, true) ); } endFolder(); skipLine(); }
void KmlGenerator::putScreenOverlays(const std::string &interpolatorName) { const unsigned int nData = std::min(maxDataProcessed, sensorData.nMeasures); putFolder("GUI", "Screen Overlays (" + interpolatorName + ")", false, true); for (unsigned int i = 0; i < nData; i++) { putScreenOverlay("Color scale " + std::to_string(i), "", Offset(0.0f, 0.0f), Offset(0.1f, 0.15f), Offset(0.0f, 400, PIXELS), Offset(), 0.0f, 3, screenOverlayFolder+screenOverlayPrefix+interpolatorName+"_"+std::to_string(i)+"."+screenOverlayImgExt, defaultVisibleInterpolatorId.compare(interpolatorName) == 0, sensorData.getTime(i), sensorData.getTime(i+1, true) ); } endFolder(); skipLine(); }
void KmlGenerator::generateKmlFile() { putKmlHeader(); // Styles definition putStationStyle(); putIsoLineStyles(); putIsoContourStyles(); // Initial camera position putInitialView(); // Station placemarks putStations(); unsigned int k = 0; for(const auto &interpolator : interpData) { const std::string &interpolatorName = interpolator.first; putFolder(interpolatorName, "Interpolator "+std::to_string(k)+": "+interpolatorName, false, false); // Ground overlays folder putInterpolatedDataOverlays(interpolatorName); // Ground overlays putScreenOverlays(interpolatorName); // Isolines and contours putIsoLines(interpolatorName); putIsoContours(interpolatorName); endFolder(); k++; } putKmlFooter(); }