Example #1
0
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();
    }
Example #4
0
// 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();
    }