[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