File "pmaplayer.phtml"
Full path: /www/map/mapserver-extensions/pmapper-4.2.0/incphp/map/pmaplayer.phtml
File size: 3.76 KiB (3855 bytes)
MIME-type: text/x-php
Charset: utf-8
<?php
class PMapLayer
{
protected $map;
protected $layername;
protected $layer;
protected $layertype;
/**
* Class constructor
* @param object $map map object
* @param string $layername name of layer
* @return void
*/
public function __construct($map, $layername)
{
$this->map = $map;
$this->layername = $layername;
$this->layer = $map->getLayerByName($layername);
$this->layertype = $this->layer->type;
//pm_logDebug(3, $map->getAllLayerNames(), "all layers");
}
/**
* Return extent of layer as array
* @param bool $inMapProjection define if extent shall be returned in map projection
* @return object extent with minx, miny, maxx, maxy properties
*/
public function getLayerExtent($inMapProjection)
{
// PostgIS layers
if ($this->layer->connectiontype == 6) {
$data = trim($this->layer->data);
$dataList1 = preg_split("/\s/", $data);
$dataList2 = preg_split("/using/i", $data);
$geomFld = array_shift($dataList1);
// use filter for layer extent
$filter = trim($this->layer->getFilterString());
if (!$filter) $filter = "TRUE";
$sql = "select xmin(extent) as minx, ymin(extent) as miny, xmax(extent) as maxx, ymax(extent) as maxy
from (SELECT extent($geomFld) " . substr($dataList2[0], strlen($geomFld)) . "WHERE $filter) as bar";
pm_logDebug(3, $sql, "P.MAPPER-DEBUG: pmaplayer.phtml/getLayerExtent() - SQL for PG layer extent");
// load DLL on Win if required
if (PHP_OS == "WINNT" || PHP_OS == "WIN32") {
if (! extension_loaded('pgsql')) {
if( function_exists( "dl" ) ) {
dl('php_pgsql.dll');
} else {
error_log("P.MAPPER ERROR: This version of PHP does support the 'dl()' function. Please enable 'php_pgsql.dll' in your php.ini");
return false;
}
}
}
$connString = $this->layer->connection;
if (!($connection = pg_Connect($connString))){
error_log ("P.MAPPER: Could not connect to database");
error_log ("P.MAPPER: PG Connection error: " . pg_last_error($connection));
exit();
}
$qresult = pg_query ($connection, $sql);
if (!$qresult) error_log("P.MAPPER: PG Query error for : $query" . pg_result_error($qresult));
$pgE = pg_fetch_object($qresult);
$layerExt = ms_newRectObj();
$layerExt->setextent($pgE->minx, $pgE->miny, $pgE->maxx, $pgE->maxy);
} else {
$layerExt = @$this->layer->getExtent();
// Raster layers (no extent function available, so take map extent)
if (!$layerExt) {
$layerExt = $this->map->extent;
}
pm_logDebug(3, $this->layer->type, "pmap layerInfo");
}
// if layer projection != map projection, reproject layer extent
if ($inMapProjection) {
$mapProjStr = $this->map->getProjection();
$layerProjStr = $this->layer->getProjection();
if ($mapProjStr && $layerProjStr && $mapProjStr != $layerProjStr) {
$mapProjObj = ms_newprojectionobj($mapProjStr);
$layerProjObj = ms_newprojectionobj($layerProjStr);
$layerExt->project($layerProjObj, $mapProjObj);
}
}
pm_logDebug(3, $layerExt, "pmap layerExt");
return $layerExt;
}
}
?>