Kvwmap ref.php
Aus kvwmap
Version vom 1. Dezember 2010, 14:05 Uhr von Rahn (Diskussion | Beiträge)
<? define('CACHEPATH', '/www/kvwmap/cache/'); # Pfad, in dem die gecachten Bildern gespeichert werden define('MAPFILE', 'kvwmap_ref.map'); # verwendete Mapdatei function owsProxy() { # prüft zunächst ob ein Bild schon mal abgefragt wurde # wenn ja, liefert der Dienst dieses Bild aus # wenn nicht wird der ows-respone neu erzeugt # Parameter und Werte in Kleinschreibung zurückgeben $wms_param=getKvpsToLower($_REQUEST); $formvars = $wms_param; # Folgendes bezieht sich nur auf getMap Anfragen # alle anderen Operationen werden als ganz normale OWS-Requests abgearbeitet. if ($wms_param['request']=='getmap') { # Dateiformat zuweisen $imageformat=$wms_param['format']; # Dateiendung zuweisen $imageextention=substr(strstr($imageformat,'/'),1); # z.B. macht aus image/png png # eindeutigen Dateinamen erzeugen aus bbox Parameter $bbox=explode(',',$wms_param['bbox']); $box=$bbox[0].','.$bbox[1].','.$bbox[2].','.$bbox[3]; $zoomstufe=round(log(720/($bbox[2]-$bbox[0]),2)); $sw=round($bbox[0],1).','.round($bbox[1],1); $tmpfile = CACHEPATH. $wms_param['layers'].'_'. $zoomstufe.'-'. $sw.'_'. $wms_param['width'].'x'. $wms_param['height'].'.'.$imageextention; # Prüfen ob die Datei schon existiert if(file_exists($tmpfile)) { # Datei existiert schon, Ausgeben des Bildes an den Browser ob_end_clean(); header('content-type:'.$imageformat); echo file_get_contents($tmpfile); } else { createBufferOWSResponse(300, $tmpfile, $formvars); } } else { createOWSResponse($formvars); } } function createBufferOWSResponse($pixelbuffer, $tmpfile, $formvars){ # Angabe in Pixeln, wie groß der Buffer sein soll, tempfile $width = $formvars['width']; $height = $formvars['height']; # Parameter um Buffer erweitern $buffer = $pixelbuffer/$formvars['width']; $bbox = explode(',', $formvars['bbox']); $extent_width = $bbox[2] - $bbox[0]; $extent_buffer = $extent_width * $buffer; $formvars['width'] = $formvars['width'] + 2*$pixelbuffer; $formvars['height'] = $formvars['height'] + 2*$pixelbuffer; $bbox[0] = $bbox[0] - $extent_buffer; $bbox[1] = $bbox[1] - $extent_buffer; $bbox[2] = $bbox[2] + $extent_buffer; $bbox[3] = $bbox[3] + $extent_buffer; $formvars['bbox'] = $bbox[0].','.$bbox[1].','.$bbox[2].','.$bbox[3]; # GetMap-Response erzeugen $map = ms_newMapObj(MAPFILE); $requestobject = ms_newOwsRequestObj(); $params = array_keys($formvars); for($i = 0; $i < count($formvars); $i++){ $requestobject->setParameter($params[$i],$formvars[$params[$i]]); } ms_ioinstallstdouttobuffer(); $map->owsdispatch($requestobject); $contenttype = ms_iostripstdoutbuffercontenttype(); ob_end_clean(); //Ausgabepuffer leeren (sonst funktioniert header() nicht) ob_start(); if ($contenttype == 'image/png'){ header('Content-type: image/png'); } if ($contenttype == 'image/jpeg'){ header('Content-type: image/jpeg'); } ms_iogetStdoutBufferBytes(); $contents = ob_get_contents(); ob_end_clean(); //Ausgabepuffer leeren (sonst funktioniert header() nicht) $image = imagecreatefromstring($contents); # Bild clippen $clippedimage = imagecreatetruecolor($width, $height); $white = imagecolorallocate($clippedimage, 255,255,255); imagefill($clippedimage, 0, 0, $white); imagecolortransparent($clippedimage, $white); ImageCopy($clippedimage, $image, 0, 0, $pixelbuffer, $pixelbuffer, $width, $height); if($contenttype == 'image/png'){ imagepng($clippedimage); if ($tmpfile != NULL) { imagepng($clippedimage, $tmpfile); } } elseif($contenttype == 'image/jpeg'){ imagejpeg($clippedimage); if ($tmpfile != NULL) { imagejpeg($clippedimage, $tmpfile); } } ob_end_flush(); ms_ioresethandlers(); } function createOWSResponse($formvars){ $map = ms_newMapObj(MAPFILE); $requestobject = ms_newOwsRequestObj(); $params = array_keys($formvars); for($i = 0; $i < count($formvars); $i++){ $requestobject->setParameter($params[$i],$formvars[$params[$i]]); } ms_ioinstallstdouttobuffer(); $map->owsdispatch($requestobject); $contenttype = ms_iostripstdoutbuffercontenttype(); ob_end_clean(); //Ausgabepuffer leeren (sonst funktioniert header() nicht) ob_start(); if ($contenttype == 'image/png'){ header('Content-type: image/png'); } ms_iogetStdoutBufferBytes(); ob_end_flush(); ms_ioresethandlers(); } function getKvpsToLower($kvps) { foreach ($kvps as $key => $value) { $param[strtolower($key)]=strtolower($value); } return $param; } dl('php_mapscript.so'); owsProxy(); ?>