[Commits] r1524 - in sandbox/ahocevar/playground/ux/Printing: examples ux/data

commits at geoext.org commits at geoext.org
Mon Nov 30 14:09:45 CET 2009


Author: ahocevar
Date: 2009-11-30 14:09:44 +0100 (Mon, 30 Nov 2009)
New Revision: 1524

Modified:
   sandbox/ahocevar/playground/ux/Printing/examples/Printing.js
   sandbox/ahocevar/playground/ux/Printing/ux/data/PrintProvider.js
Log:
added layer encoders

Modified: sandbox/ahocevar/playground/ux/Printing/examples/Printing.js
===================================================================
--- sandbox/ahocevar/playground/ux/Printing/examples/Printing.js	2009-11-30 10:49:07 UTC (rev 1523)
+++ sandbox/ahocevar/playground/ux/Printing/examples/Printing.js	2009-11-30 13:09:44 UTC (rev 1524)
@@ -3,7 +3,7 @@
 Ext.onReady(function() {
 
     printProvider = new GeoExt.ux.data.PrintProvider({
-        autoLoad: false,
+        url: "/geoserver/pdf",
         listeners: {
             loadcapabilities: function() {
                 console.log(printProvider.capabilities);

Modified: sandbox/ahocevar/playground/ux/Printing/ux/data/PrintProvider.js
===================================================================
--- sandbox/ahocevar/playground/ux/Printing/ux/data/PrintProvider.js	2009-11-30 10:49:07 UTC (rev 1523)
+++ sandbox/ahocevar/playground/ux/Printing/ux/data/PrintProvider.js	2009-11-30 13:09:44 UTC (rev 1524)
@@ -2,7 +2,7 @@
 
 GeoExt.ux.data.PrintProvider = Ext.extend(Ext.util.Observable, {
     
-    url: "/geoserver/pdf/",
+    url: null,
     
     capabilities: null,
     
@@ -48,5 +48,152 @@
             },
             scope: this
         });
+    },
+    
+    printPage: function(config) {
+        var map =  config.map instanceof GeoExt.MapPanel ? mapPanel.map : map;
+        var layers = [];
+        Ext.each(map.layers, function(layer){
+            var enc = this.encodeLayer(layer);
+            enc && layers.push[enc];
+        }, this);
+        var printCommand = {
+            pages: [{
+                center: config.center,
+                mapTitle: config.title,
+                comment: config.comment,
+                scale: config.scale,
+                rotation: config.rotation
+            }],
+            dpi: config.dpi,
+            units: map.baseLayer.units,
+            srs: map.baseLayer.projection.getCode(),
+            layers: [],
+            layout: config.layout
+        };
+    },
+    
+    encodeLayer: function(layer) {
+        var encLayer;
+        for(var c in GeoExt.data.PrintProvider.encode) {
+            if(layer instanceof OpenLayers.Layer[c]) {
+                encLayer = GeoExt.data.PrintProvider.encode[c](layer);
+                break;
+            }
+        }
+        return (encLayer && encLayer.type) ? encLayer : null;
     }
+    
 });
+
+GeoExt.data.PrintProvider.encode = {
+    "WMS": function(layer){
+        var enc = Ext.apply(GeoExt.data.PrintProvider.encode["HTTPRequest"](layer), {
+            type: 'WMS',
+            layers: [layer.params.LAYERS].join(",").split(","),
+            format: layer.params.FORMAT,
+            styles: [layer.params.STYLES].join(",").split(",")
+        });
+        var param;
+        for (var p in layer.params) {
+            param = p.toLowerCase();
+            if (!layer.DEFAULT_PARAMS[param] &&
+                            "layers,width,height,srs".indexOf(param) == -1) {
+                enc.customParams[p] = layer.params[p];
+            }
+        }
+        return enc;
+    },
+    "OSM": function(layer) {
+        return Ext.apply(GeoExt.data.PrintProvider.encode["TileCache"](layer), {
+            type: 'Osm',
+            baseURL: enc.baseURL.substr(0, enc.baseURL.indexOf("$")),
+            extension: "png"
+        });
+    },
+    "TileCache": function(layer) {
+        return Ext.apply(GeoExt.data.PrintProvider.encode["HTTPRequest"](layer), {
+            type: 'TileCache',
+            layer: layer.layername,
+            maxExtent: layer.maxExtent.toArray(),
+            tileSize: [layer.tileSize.w, layer.tileSize.h],
+            extension: layer.extension,
+            resolutions: layer.serverResolutions || layer.resolutions
+        });
+    },
+    "HTTPRequest": function(layer) {
+        var a = document.createElement(a);
+        a.href = layer.url instanceof Array ? layer.url[0] : layer.url;
+        return {
+            baseURL: a.href, // reading a.href returns an absolute url
+            opacity: (layer.opacity != null) ? layer.opacity : 1.0,
+            singleTile: layer.singleTile,
+            customParams: {}
+        };
+    },
+    "Image": function(layer) {
+        var a = document.createElement(a);
+        a.href = layer.getURL(layer.extent);
+        return {
+            type: 'Image',
+            baseURL: a.href, // // reading a.href returns an absolute url
+            opacity: (layer.opacity != null) ? layer.opacity : 1.0,
+            extent: layer.extent.toArray(),
+            pixelSize: [layer.size.w, layer.size.h],
+            name: layer.name
+        };
+    },
+    "Vector": function(layer) {
+        var encFeatures = [];
+        var encStyles = {};
+        var features = layer.features;
+        var featureFormat = new OpenLayers.Format.GeoJSON();
+        var styleFormat = new OpenLayers.Format.JSON();
+        var nextId = 1;
+        var a = document.createElement("a");
+        var feature, style, styleDict, dictKey, dictItem;
+        for(var i=0, len=features.length; i<len; ++i) {
+            feature = features[i];
+            style = feature.style || layer.style ||
+                layer.styleMap.createSymbolizer(feature, feature.renderIntent);
+            dictKey = styleFormat.write(style);
+            dictItem = styleDict[dictKey];           
+            if (dictItem) {
+                //this style is already known
+                styleName = dictItem;
+            } else {
+                //new style
+                styleDict[dictKey] = styleName = nextId++;
+                if (style.externalGraphic) {
+                    //Make the URLs absolute
+                    a.href = style.externalGraphic;
+                    encStyles[styleName] = Ext.apply({
+                        externalGraphic: a.href
+                    }, style);
+                } else {
+                    encStyles[styleName] = style;
+                }
+            }
+            var featureGeoJson = featureFormat.extract.feature.call(
+                featureFormat, feature);
+
+            featureGeoJson.properties = OpenLayers.Util.extend({
+                _gx_style: styleName
+            }, featureGeoJson.properties);
+
+            encFeatures.push(featureGeoJson);
+        }
+
+        return {
+            type: 'Vector',
+            styles: encStyles,
+            styleProperty: '_gx_style',
+            geoJson: {
+                type: featureCollection,
+                features: encFeatures
+            },
+            name: olLayer.name,
+            opacity:  (olLayer.opacity != null) ? olLayer.opacity : 1.0
+        };
+    }
+};
\ No newline at end of file



More information about the Commits mailing list