public function decorate() { $overview_url = $_REQUEST["overview_url"]; $o_url = new stripRequest($overview_url); $width = $this->conf->width; $height = $this->conf->height; $res = $this->pdf->objPdf->k * ($this->conf->res_dpi / 72); $o_url->set('width', intval($width * $res)); $o_url->set('height', intval($height * $res)); $o_url->set('bbox', $this->pdf->adjustBbox($this->conf, explode(",", $o_url->get('BBOX')), $o_url->get('srs'))); $overview_url = $o_url->url; $urls = $_REQUEST["map_url"]; $array_urls = explode("___", $urls); //problem with false in some map_urls see http/plugins/mb_metadata_wmcPreview.php //exchange array_urls with array_urls without false entries - it depends on the scale hints - if not visible the map_url is false! $newArray_urls = array(); for ($i = 0; $i < count($array_urls); $i++) { if ($array_urls[$i] != 'false') { $newArray_urls[] = $array_urls[$i]; } } $array_urls = $newArray_urls; $this->pdf->logWmsRequests("overview", $array_urls); $myURL = new stripRequest($array_urls[0]); $myURL->set('bbox', $this->pdf->getMapExtent()); if ($this->angle != 0) { if (class_exists('weldOverview2PNG_rotate')) { $rotatedExtent = $this->rotatePoints(explode(",", $this->pdf->getMapExtent()), intval($this->angle)); for ($i == 0; $i < count($rotatedExtent); $i++) { $e = new mb_notice("mbOverviewDecorator: rotated extent: " . implode("|", $rotatedExtent[$i])); } $i = new weldOverview2PNG_rotate($overview_url, $myURL->url, $this->filename, $rotatedExtent); } else { $i = new weldOverview2PNG($overview_url, $myURL->url, $this->filename); $e = new mb_warning("mbOverviewDecorator: no rotation possible."); } } else { $i = new weldOverview2PNG($overview_url, $myURL->url, $this->filename); } $this->pdf->objPdf->Image($this->filename, $this->conf->x_ul, $this->conf->y_ul, $width, $height, 'png'); $this->pdf->unlink($this->filename); }
function loadpng($imgurl) { $obj = new stripRequest($imgurl); $x = new connector($imgurl); // $f = $obj->get("format"); $im = @imagecreatefromstring($x->file); if (!$im) { $im = false; $e = new mb_exception("weldMaps2PNG: unable to load image: " . $imgurl); } return $im; }
function weldMaps2PNG_rotate($urls, $filename, $angle, $encode = true) { if (!$urls || $urls == "") { $e = new mb_exception("weldMaps2PNG_rotate: no maprequests delivered"); } $url = explode("___", $urls); $obj1 = new stripRequest($url[0]); $width = $obj1->get("width"); $height = $obj1->get("height"); //calculate rotated dimensions $neededWidth = round(abs(sin(deg2rad($angle)) * $height) + abs(cos(deg2rad($angle)) * $width)); $neededHeight = round(abs(sin(deg2rad($angle)) * $width) + abs(cos(deg2rad($angle)) * $height)); //modify requests for ($i = 0; $i < count($url); $i++) { $obj = new stripRequest($url[$i]); $obj->set("width", $neededWidth); $obj->set("height", $neededHeight); $map_extent = $obj->get("BBOX"); $coord = split(",", $map_extent); $coord = $this->enlargeExtent($coord, $width, $height, $neededWidth, $neededHeight); $obj->set("BBOX", implode(",", $coord)); $url[$i] = $obj->url; } //get image $urls = implode("___", $url); $this->weldMaps2PNG($urls, $filename, $encode); //rotate image $imagick = new Imagick(); $imagick->readImage($filename); $imagick->rotateImage(new ImagickPixel(), $angle); //get the new dimensions $imgWidth = $imagick->getImageWidth(); $imgHeight = $imagick->getImageHeight(); //crop empty areas $imagick->cropImage($width, $height, ($imgWidth - $width) / 2, ($imgHeight - $height) / 2); //write modified image $imagick->writeImage(); $image = imagecreatefrompng($filename); imagepng($image, $filename); }
function getImage($imageTyp_imp, $outputKind = '') { $imageTyp = ""; $imageTyp = $imageTyp_imp; if ($imageTyp == 'jpg') { $imageTyp = 'jpeg'; } if (!$this->urls || $this->urls == "") { $e = new mb_exception("weldMaps2Image: no maprequests delivered"); } $obj1 = new stripRequest($this->urls[0]); $width = $obj1->get("width"); $height = $obj1->get("height"); $wms_srs = $obj1->get("srs"); $wms_bbox = $obj1->get("bbox"); $wms_format = $obj1->getFormat(); $image = imagecreatetruecolor($width, $height); $white = ImageColorAllocate($image, 255, 255, 255); ImageFilledRectangle($image, 0, 0, $width, $height, $white); for ($i = 0; $i < count($this->urls); $i++) { $obj = new stripRequest($this->urls[$i]); if ($imageTyp == 'geotiff') { $this->urls[$i] = $obj->setFormat($wms_format); } else { $this->urls[$i] = $obj->setFormat($imageTyp); } $this->urls[$i] = $obj->encodeGET(); $img = $this->loadImage($this->urls[$i]); if ($img != false) { imagecopy($image, $img, 0, 0, 0, 0, $width, $height); } else { $e = new mb_exception("weldMaps2Image: unable to load image: " . $this->urls[$i]); } } $filename = $this->array_file['dir'] . "/"; $timestamp = time(); $filenameOnly = $this->array_file['filename'] . md5($timestamp); if ($imageTyp == 'png') { $filenameOnly .= '.png'; $filename .= $filenameOnly; imagepng($image, $filename); $this->downloadLink($filenameOnly); } else { if ($imageTyp == 'jpeg') { $filenameOnly .= '.jpeg'; $filename .= $filenameOnly; imagejpeg($image, $filename); $this->downloadLink($filenameOnly); } else { if ($imageTyp == 'geotiff') { $filenameOnly .= '.' . $wms_format; $filename .= $filenameOnly; if ($wms_format == 'png') { imagepng($image, $filename); } else { if ($wms_format == 'jpeg') { imagejpeg($image, $filename); } else { $e = new mb_exception("weldMaps2Image: unable to generate temp-Image for getiff: " . $filename); } } // gdal_translate... $wms_bbox = str_replace(',', ' ', $wms_bbox); $filename_tif = str_replace($wms_format, 'tif', $filenameOnly); $tmp_dir = $this->array_file['dir'] . "/"; $array_bbox = explode(" ", $wms_bbox); $wms_bbox = $array_bbox[0] . " " . $array_bbox[3] . " " . $array_bbox[2] . " " . $array_bbox[1]; /* * @security_patch exec done * Added escapeshellcmd() */ $cmd = "gdal_translate -a_srs " . $wms_srs . " -a_ullr " . $wms_bbox . " " . $tmp_dir . $filenameOnly . " " . $tmp_dir . $filename_tif; exec(escapeshellcmd($cmd)); $this->downloadLink($filename_tif); } else { } } } }
function makeRealWorld2mapPos($url, $rw_posx, $rw_posy) { $obj = new stripRequest($url); $width = $obj->get("width"); $height = $obj->get("height"); #$e = new mb_exception("weld_url: ".$url); #$e = new mb_exception("w: ".$width."height".$height); $arrayBBox = explode(",", $obj->get("BBOX")); $minX = $arrayBBox[0]; $minY = $arrayBBox[1]; $maxX = $arrayBBox[2]; $maxY = $arrayBBox[3]; #$e = new mb_exception("------- minx: ".$minX." miny:".$minY." maxx:".$maxX." maxy:".$maxY."----------"); $xtentx = $maxX - $minX; $xtenty = $maxY - $minY; $pixPos_x = ($rw_posx - $minX) / $xtentx * $width; $pixPos_y = ($maxY - $rw_posy) / $xtenty * $height; $pixPos = array($pixPos_x, $pixPos_y); return $pixPos; }
public function decorate() { $urls = $_REQUEST["map_url"]; $array_urls = explode("___", $urls); //problem with false in some map_urls see http/plugins/mb_metadata_wmcPreview.php //exchange array_urls with array_urls without false entries $newArray_urls = array(); for ($i = 0; $i < count($array_urls); $i++) { if ($array_urls[$i] != 'false') { $newArray_urls[] = $array_urls[$i]; } } $array_urls = $newArray_urls; $e = new mb_notice("print/classes/mbMapDecorator.php: array_urls[0]: " . $array_urls[0]); $width = $this->conf->width; $height = $this->conf->height; $res = $this->pdf->objPdf->k * ($this->res_dpi / 72); $myURL = new stripRequest($array_urls[0]); $e = new mb_notice("mbMapDecorator: original bbox: " . $myURL->get('BBOX')); if (isset($_REQUEST["coordinates"]) && $_REQUEST["coordinates"] != "") { $mapPdfBbox = $_REQUEST["coordinates"]; } else { $mapPdfBbox = $myURL->get('BBOX'); } $e = new mb_notice("mbMapDecorator: coordinates: " . $mapPdfBbox); $this->pdf->setMapInfo($this->conf->x_ul, $this->conf->y_ul, $width, $height, $this->pdf->adjustBbox($this->conf, explode(",", $mapPdfBbox), $myURL->get('srs'))); $e = new mb_notice("mbMapDecorator: adjusted bbox: " . $this->pdf->getMapExtent()); for ($i = 0; $i < count($array_urls); $i++) { $m = new stripRequest($array_urls[$i]); $m->set('width', intval($width * $res)); $m->set('height', intval($height * $res)); $m->set('bbox', $this->pdf->getMapExtent()); $array_urls[$i] = $m->url; } $this->pdf->logWmsRequests("maps", $array_urls); if ($this->angle != 0) { if (class_exists('weldMaps2PNG_rotate')) { $i = new weldMaps2PNG_rotate(implode("___", $array_urls), $this->filename, $this->angle, false); } else { $i = new weldMaps2PNG(implode("___", $array_urls), $this->filename, false); $e = new mb_warning("mbMapDecorator: no rotation possible."); } } else { $i = new weldMaps2PNG(implode("___", $array_urls), $this->filename, false); } $this->pdf->objPdf->Image($this->filename, $this->conf->x_ul, $this->conf->y_ul, $width, $height, 'png'); /* show coordinates ... */ if ($this->conf->coords == 1) { $coord = mb_split(",", $this->pdf->getMapExtent()); $myMinx = substr(round($coord[0]), 0, 4) . "" . substr(round($coord[0]), 4, 3) . " m Ost"; $myMiny = substr(round($coord[1]), 0, 4) . "" . substr(round($coord[1]), 4, 3) . " m Nord"; $myMaxx = substr(round($coord[2]), 0, 4) . "" . substr(round($coord[2]), 4, 3) . " m Ost"; $myMaxy = substr(round($coord[3]), 0, 4) . "" . substr(round($coord[3]), 4, 3) . " m Nord"; $this->pdf->objPdf->setTextColor(0, 0, 0); $this->pdf->objPdf->setFont($this->conf->coords_font_family, "", $this->conf->coords_font_size); #RotatedText($x, $y, $txt, $angle) $this->pdf->objPdf->RotatedText($this->conf->x_ul - 2, $this->conf->y_ul + $height, $myMinx, 90); $this->pdf->objPdf->Text($this->conf->x_ul, $this->conf->y_ul + $height + 3.5, $myMiny); $this->pdf->objPdf->RotatedText($this->conf->x_ul + $width + 2, $this->conf->y_ul, $myMaxx, 270); $this->pdf->objPdf->Text($this->conf->x_ul + $width - $this->pdf->objPdf->GetStringWidth($myMaxy), $this->conf->y_ul - 2, $myMaxy); } $this->pdf->unlink($this->filename); }
/** * Helper function to generate temporary images for each URL * * @param <string> a single URL which represents a maprequest */ function loadpng($imgurl) { $obj = new stripRequest($imgurl); $f = $obj->get("format"); /** * react on format * @todo create switch? * @todo handle as reg-exp? * @todo instanciate $im as false or null? */ if (mb_strtolower($f) == 'image/png' || mb_strtolower($f) == 'png') { $im = @ImageCreateFromPNG($imgurl); } if (mb_strtolower($f) == 'image/jpeg' || mb_strtolower($f) == 'jpeg') { $im = @ImageCreateFromJPEG($imgurl); } if (mb_strtolower($f) == 'image/gif' || mb_strtolower($f) == 'gif') { $im = @ImageCreateFromGIF($imgurl); } if (!$im) { $im = false; $e = new mb_exception("weldMaps2PNG: unable to load image: " . $imgurl); } // return the temporary image return $im; }
if (count($array_permanentImage) > 0) { $permanentImage = $array_permanentImage[0]; if ($permanentImage == 'false') { $permanentImage = ''; } $permanentImage_x = $array_permanentImage[1]; $permanentImage_y = $array_permanentImage[2]; $permanentImage_width = $array_permanentImage[3]; $permanentImage_height = $array_permanentImage[4]; $pdf->addPngFromFile($permanentImage, $permanentImage_x + $mapOffset_left, $mapOffset_bottom + $map_height - $permanentImage_y - $permanentImage_height, $permanentImage_width, $permanentImage_height); } } if ($overview === true) { // analyse overview url and draw rectangle with position $o_url = new stripRequest($overview_url); $overview_width = round($o_url->get("width")); $overview_height = round($o_url->get("height")); if ($factor > 1) { $o_url->set('width', intval($o_url->get('width')) * 4); $o_url->set('height', intval($o_url->get('height')) * 4); if (in_array($o_url->get('map'), $highqualitymapfiles)) { $o_url->set('map', preg_replace("/\\.map/", "_4.map", $o_url->get('map'))); $overview_url = $o_url->url; } } if ($matching == true) { $overview_url = preg_replace($pattern, $replacement, $overview_url); } if ($size == "A4" && $format == "portrait") { $overview_left = $a4p_overviewOffset_left; $overview_bottom = $a4p_overviewOffset_bottom;