/**
* 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();
}