UNPKG

2.85 kBJavaScriptView Raw
1// NOCOMPILE
2goog.require('ol.Map');
3goog.require('ol.View');
4goog.require('ol.control');
5goog.require('ol.format.WKT');
6goog.require('ol.layer.Tile');
7goog.require('ol.layer.Vector');
8goog.require('ol.source.OSM');
9goog.require('ol.source.Vector');
10
11var raster = new ol.layer.Tile({
12 source: new ol.source.OSM()
13});
14
15var format = new ol.format.WKT();
16var feature = format.readFeature(
17 'POLYGON((10.689697265625 -25.0927734375, 34.595947265625 ' +
18 '-20.1708984375, 38.814697265625 -35.6396484375, 13.502197265625 ' +
19 '-39.1552734375, 10.689697265625 -25.0927734375))');
20feature.getGeometry().transform('EPSG:4326', 'EPSG:3857');
21
22var vector = new ol.layer.Vector({
23 source: new ol.source.Vector({
24 features: [feature]
25 })
26});
27
28
29var map = new ol.Map({
30 layers: [raster, vector],
31 target: 'map',
32 controls: ol.control.defaults({
33 attributionOptions: {
34 collapsible: false
35 }
36 }),
37 view: new ol.View({
38 center: [0, 0],
39 zoom: 2
40 })
41});
42
43
44var dims = {
45 a0: [1189, 841],
46 a1: [841, 594],
47 a2: [594, 420],
48 a3: [420, 297],
49 a4: [297, 210],
50 a5: [210, 148]
51};
52
53var loading = 0;
54var loaded = 0;
55
56var exportButton = document.getElementById('export-pdf');
57
58exportButton.addEventListener('click', function() {
59
60 exportButton.disabled = true;
61 document.body.style.cursor = 'progress';
62
63 var format = document.getElementById('format').value;
64 var resolution = document.getElementById('resolution').value;
65 var dim = dims[format];
66 var width = Math.round(dim[0] * resolution / 25.4);
67 var height = Math.round(dim[1] * resolution / 25.4);
68 var size = /** @type {ol.Size} */ (map.getSize());
69 var extent = map.getView().calculateExtent(size);
70
71 var source = raster.getSource();
72
73 var tileLoadStart = function() {
74 ++loading;
75 };
76
77 var tileLoadEnd = function() {
78 ++loaded;
79 if (loading === loaded) {
80 var canvas = this;
81 window.setTimeout(function() {
82 loading = 0;
83 loaded = 0;
84 var data = canvas.toDataURL('image/png');
85 var pdf = new jsPDF('landscape', undefined, format);
86 pdf.addImage(data, 'JPEG', 0, 0, dim[0], dim[1]);
87 pdf.save('map.pdf');
88 source.un('tileloadstart', tileLoadStart);
89 source.un('tileloadend', tileLoadEnd, canvas);
90 source.un('tileloaderror', tileLoadEnd, canvas);
91 map.setSize(size);
92 map.getView().fit(extent);
93 map.renderSync();
94 exportButton.disabled = false;
95 document.body.style.cursor = 'auto';
96 }, 100);
97 }
98 };
99
100 map.once('postcompose', function(event) {
101 source.on('tileloadstart', tileLoadStart);
102 source.on('tileloadend', tileLoadEnd, event.context.canvas);
103 source.on('tileloaderror', tileLoadEnd, event.context.canvas);
104 });
105
106 map.setSize([width, height]);
107 map.getView().fit(extent);
108 map.renderSync();
109
110}, false);