[OpenLayers-Users] How to print map area with openlayers

David Alda Fernandez de Lezea dalda at ikt.es
Tue May 4 07:16:00 EDT 2010


 
Hello,

I'm trying to make a tool like yours, indeed I asked this before but
nobody seemed to know the solution, but I'm not able to figure out how
to process the features data in php script. Can you please give me some
clues to solve the problem??

Another question I've got is that I see that you're just parsing Point
fetures. If I would want to parse polygons or lines how could I do it?
Do I have to use GeoJSON Syntax??

Thanks.

P.S. I'm a bit newbie, I know.

-----Mensaje original-----
De: users-bounces at openlayers.org [mailto:users-bounces at openlayers.org]
En nombre de guillaumev
Enviado el: lunes, 03 de mayo de 2010 23:59
Para: users at openlayers.org
Asunto: Re: [OpenLayers-Users] How to print map area with openlayers


Hi,

Just in case someone encounters the same problem (i. e. when moving the
map, it is printed in its initial position), I solved it by adding the
position of the viewport (map.layerContainerDiv.style.left and
map.layerContainerDiv.style.top), and then adding the left value of the
viewport to the $tile->x and the top value of the viewport to the
$tile->y in the calls to imagecopymerge_alpha.

Here is my full client code (I encapsulated the map object within an
object):

this.print = function(print_url, callback) {
		var size = this.map.getSize();
		var tiles = [];
		
		var nb_layers = this.map.layers.length;
		var layeri = 0;
		var nb_vector_layers = 0;
		var features = [];
		for (layeri = 0; layeri < nb_layers; layeri++) {
			// if the layer isn't visible at this range, or
is turned off, skip it
			var layer = this.map.layers[layeri];
			if (!layer.getVisibility()) continue;
			if (!layer.calculateInRange()) continue;
			if (layer.grid) {
				// iterate through their grid's tiles,
collecting each tile's extent and pixel location at this moment
				var grid_length = layer.grid.length;
				var row_length = 0;
				var tilerow = 0;
				var tilei = 0;
				for (tilerow = 0; tilerow < grid_length;
tilerow++) {
					row_length =
layer.grid[tilerow].length;
					tilei = 0;
					for (tilei = 0; tilei <
row_length; tilei++) {
						var tile     =
layer.grid[tilerow][tilei];
						var url      =
layer.getURL(tile.bounds);
						var position =
tile.position;
						var opacity  =
layer.opacity ? parseInt(100*layer.opacity) : 100;
						var bounds =
tile.bounds;
						tiles[tiles.length] =
{url:url, x:position.x, y:position.y, opacity:opacity,
bounds:{left:bounds.left, right: bounds.right, top:
bounds.top, bottom: bounds.bottom}};
					}
				}
			} else {
				// get the features of the layer
				var olFeatures = layer.features;
				var features_temp = [];
				var styles = {};
				var nb_features = layer.features.length;
				var featuresi = 0;
				var nextId = 1;
				for (var i = 0; i < nb_features; i++) {
					var feature = olFeatures[i];
					var style = feature.style ||
layer.style || layer.styleMap.createSymbolizer(feature,
feature.renderIntent);
					if(feature.geometry) {
						if
(feature.geometry.CLASS_NAME.search(/point$/i) >= 0) {
							var fpos =
this.map.getLayerPxFromLonLat(new OpenLayers.LonLat(feature.geometry.x,
feature.geometry.y));
							if(fpos != null)
{
	
features_temp[featuresi] = {type: 'point', x: fpos.x, y:fpos.y,
style: style};
	
featuresi++;
							}
						}
					}
				}
				features[nb_vector_layers] =
features_temp;
				nb_vector_layers++;
			}
					
		}

		// hand off the list to our server-side script, which
will do the heavy lifting
		var tiles_json = JSON.stringify(tiles);
		var features_json = JSON.stringify(features);
		var viewport_left =
parseInt(this.map.layerContainerDiv.style.left);
		var viewport_top =
parseInt(this.map.layerContainerDiv.style.top);
		var viewport = {top: viewport_top, left: viewport_left};
		var viewport_json = JSON.stringify(viewport);
		var scale = Math.round(this.map.getScale());
		
		OpenLayers.Request.POST(
		  { url:print_url,
		
data:OpenLayers.Util.getParameterString({width:size.w,height:size.h,scal
e:scale,viewport:
viewport_json,tiles:tiles_json,features:features_json}),
	
headers:{'Content-Type':'application/x-www-form-urlencoded'},
			callback: callback
		  }
		);
	}
--
View this message in context:
http://osgeo-org.1803224.n2.nabble.com/How-to-print-map-area-with-openla
yers-tp4901023p5000414.html
Sent from the OpenLayers Users mailing list archive at Nabble.com.
_______________________________________________
Users mailing list
Users at openlayers.org
http://openlayers.org/mailman/listinfo/users



More information about the Users mailing list