Snippets

Piotr Szrajber Geospatial Portal - PrintBase64

Created by Piotr Szrajber
/**
* Sample usage - grab base64 output and display it in internal WebBrowser surrounded with additional HTML
*/
printBase64({
    width: 640,
    height: 480,
    scaleDenominator: 2000,
    dpi: 96,
    format: "png"
}, function(data) {
    $GP.ui.browser.show({
        title: "Sample printout",
        html: `<html>
<body>
	<h1>This is a sample printout</h1>
	<img src="data:image/png;base64,${data}">
	<p>It can be supplemented with additional information</p>
</body></html>`
    })
});

/**
* Experimental base64 print - uses internal Geospatial Portal API
* It's PoC
* 2021-10-12 Piotr Szrajber <piotr.szrajber@hexagon.com>
*
* @param {Object} config config dict
* @param {Number} config.width
* @param {Number} config.height
* @param {Number} config.scaleDenominator
* @param {Number} config.dpi
* @param {String} config.format - works with PNG, I haven't tested it with other formats
* @param {Function} callback - function that has base64 encoded string as its first parameter
*/
function printBase64(config, callback) {
    var mapStateId = "map",
        mapState = $mapStateManager.findMapState(mapStateId),
        mapRange = mapState.get_mapRange(),
        width = config.width,
        height = config.height,
        scaleDenominator = config.scaleDenominator,
        dpi = config.dpi,
        options = {
            dpi: dpi,
            format: config.format,
            parameterValues: {
                resolution: dpi,
                format: config.format
            }
        };

    $sessionManager.checkSession(mapStateId, this, _printBase64,
            [mapStateId, mapRange, width, height, scaleDenominator, options, callback]);
}

function _printBase64(mapStateId, mapRange, width, height, scaleDenominator, options, callback) {
    if (!options) options = {};

    $mapStateManager.saveMapStates({
        addMeasurements: true
    });

    var wRatio = widthRatio <= 1 ? 1 : widthRatio,
        hRatio = heightRatio <= 1 ? 1 : heightRatio;
    var request = $webRequest.create({
        name: "Snapshot",
        query: {
            mapStateId: mapStateId,
            width: width,
            height: height,
            scaleDenominator: scaleDenominator,
            bbox: mapRange.serialize().join(","),
            widthRatio: wRatio,
            heightRatio: hRatio,
            dpi: options.dpi,
            mode: 1
        },
        body: {
            options: Sys.Serialization.JavaScriptSerializer.serialize(options)
        },
        includeMapStates: true,
        includeCRS: true,
        callback: function(o) {
            var data = o.get_responseData();
            callback(data);
        }
    });
    request.invoke();
}

Comments (0)

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.