"; $outfile = fopen($dlFileName, "w"); curl_setopt($ch, CURLOPT_FILE, $outfile); curl_setopt($ch, CURLOPT_HEADER, 0); curl_exec($ch); $mimetype = curl_getinfo($ch,CURLINFO_CONTENT_TYPE); curl_close($ch); fclose($outfile); if(!(strpos($mimetype,'png') === false)) { $image = imagecreatefrompng($dlFileName); } elseif(!(strpos($mimetype,'gif') === false)) { $image = imagecreatefromgif($dlFileName); } elseif (!(strpos($mimetype,'jpeg') === false)) { $image = imagecreatefromjpeg($dlFileName); } return $image; } function renderImage($mapbook, $layers_json, $mapImageWidth, $mapImageHeight, $extent, $sketches=array()) { global $CONFIGURATION; $mapserverUrl = $CONFIGURATION['mapserver_url']; $server = 'http://'.$_SERVER['HTTP_HOST']; if((int)$_SERVER['SERVER_PORT'] != 80) { $server = $server . ':' . $_SERVER['SERVER_PORT']; } $path_components = explode('/', $_SERVER['SCRIPT_NAME']); array_pop($path_components); # Remove script name array_pop($path_components); # Remove the php directory reference $serverRoot = implode('/', $path_components).'/'; $urls = array(); for($i = 0; $i < sizeof($layers_json['order']); $i++) { $source_name = $layers_json['order'][$i]; $source = getMapSource($mapbook, $source_name); $url = ''; if($source->getAttribute('type') == 'wms') { $url = $layers_json[$source_name]['url']; if(substr($url, sizeof($url)-2, 1) != '?') { $url = $url.'?'; } $url = $url . 'SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&EXCEPTIONS=application%2Fvnd.ogc.se_inimage'; # See if we specify the format in the params... if($layers_json[$source_name]['params']['format']) { $format = $layers_json[$source_name]['params']['format']; unset($layers_json[$source_name]['params']['format']); } else if($layers_json[$source_name]['params']['FORMAT']) { $format = $layers_json[$source_name]['params']['FORMAT']; unset($layers_json[$source_name]['params']['FORMAT']); } else { $format = 'image/jpeg'; } $url = $url . '&FORMAT='.$format; $url = $url . '&WIDTH='.$mapImageWidth; $url = $url . '&HEIGHT='.$mapImageHeight; $url = $url . '&BBOX='.implode(',', $extent); $url = $url . '&LAYERS='.implode(',', $layers_json[$source_name]['layers']); } else if($source->getAttribute('type') == 'mapserver') { $mapfile = $source->getElementsByTagName('file')->item(0)->nodeValue; if($mapfile[0] == '.') { $mapfile = $CONFIGURATION['root'].$mapfile; } if($layers_json[$source_name]['url']) { $url = $layers_json[$source_name]['url']; } else { $url = $mapserverUrl; } $url = $url . '?map=' . $mapfile; $url = $url . '&mode=map'; $url = $url . '&mapsize=' . $mapImageWidth . '+' . $mapImageHeight; $url = $url . '&mapext=' . implode('+', $extent); $url = $url . '&layers=' . implode('+', $layers_json[$source_name]['layers']); } if(substr($url,0,4) == 'http') { # Do nothing as this url is absolute enough or our purposes. } else if($url[0] == '/') { $url = $server . $url; } else if($url[0] == '.') { $url = $server . $serverRoot . substr($url, 1, sizeof($url)); } else { $url = $server . $serverRoot . $url; } foreach($layers_json[$source_name]['params'] as $k=>$v) { $url = $url . '&' . $k . '=' . $v; } array_push($urls, $url); } $printImage = imagecreatetruecolor($mapImageWidth, $mapImageHeight); $colorWhite = imagecolorallocate($printImage, 255, 255, 255); imagefill($printImage, 0, 0, $colorWhite); $urls = array_reverse($urls); for($i = 0; $i < sizeof($urls); $i++) { $image = getImage($urls[$i]); ImageCopyResized($printImage, $image, 0,0,0,0, $mapImageWidth, $mapImageHeight, ImageSX($image), ImageSY($image)); } # now add the sketches on top of the map... for($i = 0; $i < sizeof($sketches); $i++) { #print $sketches[$i]['wkt']; $sketch_map = ms_newMapObj('print/print_shape.map'); $sketch_map->setExtent($extent[0], $extent[1], $extent[2], $extent[3]); $sketch_map->setSize($mapImageWidth, $mapImageHeight); $shape = ms_shapeObjFromWKT($sketches[$i]['wkt']); if($shape->{type} == MS_SHAPE_POLYGON) { $layer = $sketch_map->getLayerByName('poly-draw'); $class = $layer->getClass(0); $st_fill = $class->getStyle(0); if($sketches[$i]['fill']) { $c = translateColor($sketches[$i]['fill']); $st_fill->color->setRGB($c[0], $c[1], $c[2]); } else { $st_fill->color->setRGB(255,255,255); } $st_border = $class->getStyle(1); if($sketches[$i]['stroke']) { $c = translateColor($sketches[$i]['stroke']); $st_border->outlinecolor->setRGB($c[0], $c[1], $c[2]); } else { $st_border->outlinecolor->setRGB(255,0,0); } $layer->addFeature($shape); } elseif($shape->{type} == MS_SHAPE_POINT) { $layer = $sketch_map->getLayerByName('point-draw'); $class = $layer->getClass(0); $st = $class->getStyle(0); if($sketches[$i]['fill']) { $c = translateColor($sketches[$i]['fill']); $st->color->setRGB($c[0], $c[1], $c[2]); } else { $st->color->setRGB(255,255,255); } if($sketches[$i]['stroke']) { $c = translateColor($sketches[$i]['stroke']); $st->outlinecolor->setRGB($c[0], $c[1], $c[2]); } else { $st->outlinecolor->setRGB(255,0,0); } $layer->addFeature($shape); } elseif($shape->{type} == MS_SHAPE_LINE) { $layer = $sketch_map->getLayerByName('line-draw'); $class = $layer->getClass(0); $st = $class->getStyle(0); if($sketches[$i]['stroke']) { $c = translateColor($sketches[$i]['stroke']); $st->color->setRGB($c[0], $c[1], $c[2]); } else { $st->color->setRGB(255,255,255); } $layer->addFeature($shape); } # $layer = $sketch_map->getLayer(0); $sketches_image = $sketch_map->prepareImage(); $sketches_image = $sketch_map->draw(); $sketches_image->saveImage('/tmp/out.gif'); $image = ImageCreateFromGif('/tmp/out.gif'); # ImageCopyResized($printImage, $image, 0,0,0,0, $mapImageWidth, $mapImageHeight, $mapImageWidth, $mapImageHeight); #ImageSX($image), ImageSX($image)); ImageCopyMerge($printImage, $image, 0, 0, 0, 0, $mapImageWidth, $mapImageHeight, (float)$sketches[$i]['opacity']*100); } return $printImage; } # returns a 3 element array containing r,g,b as integers between 0 and 255 function translateColor($color) { $basic_colors = array('aqua' => array(0,255,255), 'black' => array(0,0,0), 'blue' => array(0,0,255), 'fuchsia' => array(255,0,255), 'gray' => array(128,128,128), 'grey' => array(128,128,128), 'green' => array(0,128,0), 'lime' => array(0,255,0), 'maroon' => array(128,0,0), 'navy' => array(0,0,128), 'olive' => array(128,128,0), 'purple' => array(128,0,128), 'red' => array(255,0,0), 'silver' => array(192,192,192), 'teal' => array(0,128,128), 'white' => array(255,255,255), 'yellow' => array(255,255,0)); if($basic_colors[$color]) { return $basic_colors[$color]; } # Six character hex code if(preg_match('/\#....../', $color)) { $r = substr($color, 1,2); $g = substr($color, 3,2); $b = substr($color, 5,2); return array(hexdec($r), hexdec($g), hexdec($b)); # Three character hex code } elseif (preg_match('/\#.../', $color)) { $r = substr($color, 1,1); $g = substr($color, 2,1); $b = substr($color, 3,1); $r = $r.$r; $g = $g.$g; $b = $b.$b; return array(hexdec($r), hexdec($g), hexdec($b)); # CSS RGB } elseif (preg_match('/rgb\(.+\)/', $color)) { } } ?>