numlayers; $dados = ""; for($i = 0; $i < $numlayers; $i ++) { $layern = $nmapa->getlayer ( $i ); $layern->set ( "status", MS_DEFAULT ); //error_reporting ( E_ALL ); if ($layern->classitem != "" && $layern->connectiontype == 7 && $layern->numclasses > 0 && $layern->getmetadata ( "wms_sld_body" ) == "") { $tipotemp = $layern->type; $tiporep = $layern->getmetadata ( "tipooriginal" ); $layern->set ( "type", MS_LAYER_POLYGON ); if ($tiporep == "linear") { $layern->set ( "type", MS_LAYER_LINE ); } if ($tiporep == "pontual") { $layern->set ( "type", MS_LAYER_POINT ); } $sld = $layern->generateSLD (); if ($sld != "") { $layern->setmetadata ( "wms_sld_body", str_replace ( '"', "'", $sld ) ); } $layern->set ( "type", $tipotemp ); } $layerAdicionado = ms_newLayerObj ( $mapa, $layern ); $pegarext = $layern->name; } zoomTema ( $pegarext, $mapa ); include_once ($_SESSION ["locaplic"] . "/classesphp/classe_atributos.php"); $t = new Atributos ( $mapa, $layern->name ); $r = $t->itensTexto (); $colunas = explode ( ";", $r ["itens"] ); $ncolunas = count ( $colunas ); $registros = $r ["valores"]; $nregistros = count ( $registros ); $error = ""; $error = ms_GetErrorObj (); $tab = ""; while ( $error && $error->code != MS_NOERR ) { $tab .= "
Error in %s: %s
"; $tab .= $error->routine; $tab .= $error->message; $error = $error->next (); } $tab .= "Registros em ISO-8859-1 são convertidos para UTF8
"; $tab .= "Registros: " . $nregistros; "
"; $tab .= "
Tempo leitura (s): "; $tab .= microtime ( true ) - $tempo; $tab .= ""; $tab .= ""; $tab .= ""; foreach ( $colunas as $co ) { $tab .= ""; } $tab .= ""; foreach ( $registros as $reg ) { $tab .= ""; $cc = explode ( ";", $reg ); foreach ( $cc as $c ) { if (mb_detect_encoding ( $c, 'UTF-8, ISO-8859-1' ) == "ISO-8859-1") { $c = utf8_encode ( $c ); } $tab .= ""; } $tab .= ""; } $tab .= "
" . $co . "
" . $c . "
"; $tab .= "
Tempo total (montagem da tabela) (s): "; $tab .= microtime ( true ) - $tempo; $tab .= ""; return $tab; } function testaMapaImg($tema) { global $versao, $base, $tempo; $dir_tmp = $_SESSION ["dir_tmp"]; $postgis_mapa = $_SESSION ["postgis_mapa"]; $locaplic = $_SESSION ["locaplic"]; $base = mapaBase ( $_SESSION ["locaplic"], $versao, $base ); $mapa = ms_newMapObj ( $base ); //error_reporting ( E_ALL ); ms_ResetErrorList (); $erroComplemento = ""; //verificacoes de compatibilidade Mapserver if($versao >= 7){ $teste = file_get_contents($tema); if (stripos($teste, 'ANNOTATION') !== false) { $erroComplemento .= " Verifique se o LAYER e do tipo ANNOTATION"; } if (stripos($teste, 'Cluster:FeatureCount') !== false) { $erroComplemento .= " Verifique se existe Cluster:FeatureCount e troque por Cluster_FeatureCount"; } } try { ms_newMapObj ( $tema ); } catch ( Exception $e ) { return array ( "imgMapa" => "", "imgLegenda" => "", "tempo" => (microtime ( true ) - $tempo), "erro" => "Objeto map nao pode ser criado. Erro fatal. ".$erroComplemento ); } if (@ms_newMapObj ( $tema )) { $nmapa = ms_newMapObj ( $tema ); } else { $erro = ""; $error = ms_GetErrorObj (); while ( $error && $error->code != MS_NOERR ) { $erro .= "
Error in %s: %s
\n"; $erro .= "
" . $error->routine; $erro .= "
" . $error->message; $error = $error->next (); } return array ( "imgMapa" => "", "imgLegenda" => "", "tempo" => (microtime ( true ) - $tempo), "erro" => $erro." ".$erroComplemento ); } \admin\php\funcoesAdmin\substituiConObj ( $mapa, $postgis_mapa ); \admin\php\funcoesAdmin\substituiConObj ( $nmapa, $postgis_mapa ); $numlayers = $nmapa->numlayers; $dados = ""; $simbolos = array (); for($i = 0; $i < $numlayers; $i ++) { $layern = $nmapa->getlayer ( $i ); $layern->set ( "status", MS_DEFAULT ); autoClassesLocal ( $layern, $nmapa ); //error_reporting ( E_ALL ); if ($layern->classitem != "" && $layern->connectiontype == 7 && $layern->numclasses > 0 && $layern->getmetadata ( "wms_sld_body" ) == "") { $tipotemp = $layern->type; $tiporep = $layern->getmetadata ( "tipooriginal" ); $layern->set ( "type", MS_LAYER_POLYGON ); if ($tiporep == "linear") { $layern->set ( "type", MS_LAYER_LINE ); } if ($tiporep == "pontual") { $layern->set ( "type", MS_LAYER_POINT ); } $sld = $layern->generateSLD (); if ($sld != "") { $layern->setmetadata ( "wms_sld_body", str_replace ( '"', "'", $sld ) ); } $layern->set ( "type", $tipotemp ); } // pega simbolos locais e aplica no novo mapa cloneInlineSymbolLocal ( $layern, $nmapa, $mapa ); $layerAdicionado = ms_newLayerObj ( $mapa, $layern ); corrigeLayerGridLocal ( $layerAdicionado,$mapa ); corrigeLayerGridLocal ( $layern, $layerAdicionado ); $pegarext = $layern->name; } zoomTema ( $pegarext, $mapa ); $mapa->setsize ( 500, 500 ); $sca = $mapa->scalebar; $sca->set ( "status", MS_OFF ); $objImagem = @$mapa->draw (); // corrige o titulo da legenda $numlayers = $mapa->numlayers; for($j = 0; $j < $numlayers; $j ++) { $l = $mapa->getlayer ( $j ); if ($l->type != 3 && $l->type != 4) { $nclass = $l->numclasses; for($i = 0; $i < $nclass; $i ++) { $classe = $l->getclass ( $i ); if ($classe->title === "") { $classe->title = $classe->name; } } } } $objImagemLegenda = @$mapa->drawLegend (); if (! $objImagem) { $error = ""; $erro = ""; $error = ms_GetErrorObj (); while ( $error && $error->code != MS_NOERR ) { $erro .= "
Error in %s: %s
"; $erro .= "
" . $error->routine; $erro .= "
" . $error->message; $error = $error->next (); } return array ( "imgMapa" => "", "imgLegenda" => "", "tempo" => (microtime ( true ) - $tempo), "erro" => $erro." ".$erroComplemento ); } if ($objImagem->imagepath == "") { return array ( "imgMapa" => "", "imgLegenda" => "", "tempo" => (microtime ( true ) - $tempo), "erro" => "Erro IMAGEPATH vazio. ".$erroComplemento ); } $nomec = ($objImagem->imagepath) . \admin\php\funcoesAdmin\nomeRandomico () . "teste.png"; $objImagem->saveImage ( $nomec ); $nomel = ($objImagemLegenda->imagepath) . \admin\php\funcoesAdmin\nomeRandomico () . "testel.png"; $objImagemLegenda->saveImage ( $nomel ); $erro = ""; $error = ""; $error = ms_GetErrorObj (); while ( $error && $error->code != MS_NOERR ) { $erro .= "
Error in %s: %s
"; $erro .= "
" . $error->routine; $erro .= "
" . $error->message; $error = $error->next (); } return array ( "imgMapa" => ($objImagem->imageurl) . basename ( $nomec ), "imgLegenda" => ($objImagemLegenda->imageurl) . basename ( $nomel ), "tempo" => (microtime ( true ) - $tempo), "erro" => $erro." ".$erroComplemento ); } function zoomTema($nomelayer, &$mapa) { $layer = $mapa->getlayerbyname ( $nomelayer ); if ($layer->data == "" && $layer->connection == "") { return; } $prjMapa = $mapa->getProjection (); $prjTema = $layer->getProjection (); $extatual = $mapa->extent; $ret = $layer->getmetadata ( "extensao" ); if ($layer->type > 2 && $ret == "") { return; } $ct = $layer->connectiontype; if (($ret == "") && ($ct != 1)) { return; } if ($ret == "") { $ret = $layer->getextent (); // reprojeta o retangulo if (($prjTema != "") && ($prjMapa != $prjTema)) { $projInObj = ms_newprojectionobj ( $prjTema ); $projOutObj = ms_newprojectionobj ( $prjMapa ); $ret->project ( $projInObj, $projOutObj ); } $extatual->setextent ( $ret->minx, $ret->miny, $ret->maxx, $ret->maxy ); } else { $ret = explode ( " ", $ret ); $extatual->setextent ( $ret [0], $ret [1], $ret [2], $ret [3] ); } } function autoClassesLocal(&$nlayer, $mapa, $locaplic = null) { $postgis_mapa = $_SESSION ["postgis_mapa"]; ; $substituicon = "nao"; if ($nlayer->connectiontype == MS_POSTGIS) { if ($nlayer->connection == " ") { $nlayer->set ( "connection", $postgis_mapa ); $substituicon = "sim"; } } // // gera classes automaticamente (temas vetoriais) if ($nlayer->getmetadata ( "classesitem" ) != "") { $itemnome = $nlayer->getmetadata ( "classesnome" ); $itemid = $nlayer->getmetadata ( "classesitem" ); $itemcor = $nlayer->getmetadata ( "classescor" ); $itemsimbolo = $nlayer->getmetadata ( "classesimbolo" ); $itemtamanho = $nlayer->getmetadata ( "classestamanho" ); $classeoriginal = $nlayer->getclass ( 0 ); // // pega a extensao geografica que devera ser utilizada // $prjMapa = $mapa->getProjection (); $prjTema = $nlayer->getProjection (); $ret = $nlayer->getmetadata ( "extensao" ); if ($ret == "") { $ret = $nlayer->getextent (); // reprojeta o retangulo if (($prjTema != "") && ($prjMapa != $prjTema)) { $projInObj = ms_newprojectionobj ( $prjTema ); $projOutObj = ms_newprojectionobj ( $prjMapa ); $ret->project ( $projInObj, $projOutObj ); } } else { $temp = explode ( " ", $ret ); $ret = ms_newRectObj (); $ret->setextent ( $temp [0], $temp [1], $temp [2], $temp [3] ); } // $sopen = $nlayer->open (); if ($sopen == MS_FAILURE) { return "erro"; } $status = $nlayer->whichShapes ( $ret ); $parametrosClasses = array (); if ($status == 0) { while ( $shape = $nlayer->nextShape () ) { $id = trim ( $shape->values [$itemid] ); if (! $parametrosClasses [$id]) { $nome = ""; if ($itemnome != "") $nome = trim ( $shape->values [$itemnome] ); $cor = ""; if ($itemcor != "") $cor = explode ( ",", trim ( $shape->values [$itemcor] ) ); if (count ( $cor ) != 3) $cor = explode ( " ", trim ( $shape->values [$itemcor] ) ); $tamanho = ""; if ($itemtamanho != "") $tamanho = trim ( $shape->values [$itemtamanho] ); $simbolo = ""; if ($itemsimbolo != "") $simbolo = trim ( $shape->values [$itemsimbolo] ); $parametrosClasses [$id] = array ( "nome" => $nome, "cor" => $cor, "tamanho" => $tamanho, "simbolo" => $simbolo ); } } $fechou = $nlayer->close (); // echo "
";var_dump($parametrosClasses);
			if (count ( $parametrosClasses ) > 0) {
				$ids = array_keys ( $parametrosClasses );
				for($i = 0; $i < count ( $parametrosClasses ); ++ $i) {
					$p = $parametrosClasses [$ids [$i]];
					// echo "
";var_dump($p);
					$nclasse = ms_newClassObj ( $nlayer, $classeoriginal );
					if ($p ["nome"] != "")
						$nclasse->set ( "name", $p ["nome"] );
					$estilo = $nclasse->getstyle ( 0 );
					if ($p ["cor"] != "") {
						$cor = $p ["cor"];
						$ncor = $estilo->color;
						if ($ncor == "")
							$ncor = $estilo->outlinecolor;
						$ncor->setrgb ( $cor [0], $cor [1], $cor [2] );
					}
					if ($p ["tamanho"] != "")
						$estilo->set ( "size", $p ["tamanho"] );
					if ($p ["simbolo"] != "")
						$estilo->set ( "symbolname", $p ["simbolo"] );
					$strE = "('[" . $itemid . "]'eq'" . $ids [$i] . "')";
					$nclasse->setexpression ( $strE );
				}
				$classeoriginal->set ( "status", MS_DELETE );
			}
		}
		if ($substituicon == "sim") {
			$nlayer->set ( "connection", " " );
		}
	}
	$pf = $nlayer->getmetadata ( "palletefile" );
	if ($pf != "") {
		if (! file_exists ( $pf )) {
			return;
		}
		$ps = $nlayer->getmetadata ( "palletesteps" );
		if ($ps == "")
			$ps = 8;
			//
			// pega os valores do arquivo
			//
		$rules = array ();
		$abre = fopen ( $pf, "r" );
		$paletteRules = array ();
		while ( ! feof ( $abre ) ) {
			$line = trim ( fgets ( $abre ) );
			$pos = strpos ( $line, "#" );
			if ($pos === false || $pos > 0) {
				$paletteEntry = explode ( " ", $line );
				$rules [] = array (
						"v0" => $paletteEntry [0],
						"v1" => $paletteEntry [1],
						"r0" => $paletteEntry [2],
						"g0" => $paletteEntry [3],
						"b0" => $paletteEntry [4],
						"r1" => $paletteEntry [5],
						"g1" => $paletteEntry [6],
						"b1" => $paletteEntry [7]
				);
			}
		}
		fclose ( $abre );
		foreach ( $rules as $rule ) {
			$delta = ceil ( ($rule ["v1"] - $rule ["v0"]) / $ps );
			$legenda = true;
			for($value = $rule ["v0"]; $value < $rule ["v1"]; $value += $delta) {
				$class = ms_newClassObj ( $nlayer );
				$style = ms_newStyleObj ( $class );
				if ($legenda) {
					$class->set ( name, round ( $value, 0 ) );
					$legenda = true;
				}
				$expression = "([pixel] > " . round ( $value, 0 ) . " AND [pixel] <= " . round ( $value + $delta, 0 ) . ")";
				$class->setExpression ( $expression );
				$rgb = getRGBpalleteLocal ( $rule, $value );
				$style->color->setRGB ( $rgb [0], $rgb [1], $rgb [2] );
			}
		}
	}
	return;
}
function getRGBpalleteLocal($rule, $value) {
	$escala = ($value - $rule ["v0"]) / ($rule ["v1"] - $rule ["v0"]);
	$r = $rule ["r0"] + round ( ($rule ["r1"] - $rule ["r0"]) * $escala, 0 );
	$g = $rule ["g0"] + round ( ($rule ["g1"] - $rule ["g0"]) * $escala, 0 );
	$b = $rule ["b0"] + round ( ($rule ["b1"] - $rule ["b0"]) * $escala, 0 );
	return array (
			$r,
			$g,
			$b
	);
}
function cloneInlineSymbolLocal($layern, $nmapa, $mapa) {
	$numclasses = $layern->numclasses;
	for($ci = 0; $ci < $numclasses; $ci ++) {
		$classe = $layern->getclass ( $ci );
		$numestilos = $classe->numstyles;
		for($ei = 0; $ei < $numestilos; $ei ++) {
			$estilo = $classe->getstyle ( $ei );
			if ($estilo->symbolname != "") {
				$nomesimbolo = $estilo->symbolname;
				$simbolo = $nmapa->getSymbolObjectById ( $nmapa->getSymbolByName ( $nomesimbolo ) );
				if ($simbolo->inmapfile == MS_TRUE || file_exists ( $nomesimbolo )) {
					$simbolon = new symbolObj ( $mapa, $nomesimbolo );
					$simbolon->set ( "inmapfile", MS_TRUE );

					$simbolon->setImagePath ( $simbolo->imagepath );
					$simbolon->setPoints ( $simbolo->getPointsArray () );
					// $simbolon->setPattern($simbolo->getPatternArray());
					$simbolon->set ( "type", $simbolo->type );
					// $simbolon->set("antialias",$simbolo->antialias);
					$simbolon->set ( "character", $simbolo->character );
					$simbolon->set ( "filled", $simbolo->filled );

					// $simbolon->set("font",$simbolo->font);
					// $simbolon->set("position",$simbolo->position);
					$simbolon->set ( "sizex", $simbolo->sizex );
					$simbolon->set ( "sizey", $simbolo->sizey );
					$simbolon->set ( "transparent", $simbolo->transparent );
					$simbolon->set ( "transparentcolor", $simbolo->transparentcolor );
					// $simbolon->set("anchorpoint",$simbolo->anchorpoint);
				}
			}
		}
	}
}
function corrigeLayerGridLocal($layerOrigem,$layerDestino){
	if($layerOrigem->connectiontype == MS_GRATICULE){
		ms_newgridobj($layerDestino);
		$layerDestino->grid->set("labelformat", $layerOrigem->grid->labelformat);
		$layerDestino->grid->set("mininterval", $layerOrigem->grid->mininterval);
		$layerDestino->grid->set("maxinterval", $layerOrigem->grid->maxinterval);
		$layerDestino->grid->set("minsubdivide", $layerOrigem->grid->minsubdivide);
		$layerDestino->grid->set("maxsubdivide", $layerOrigem->grid->maxsubdivide);
		$layerDestino->grid->set("minarcs", $layerOrigem->grid->minarcs);
		$layerDestino->grid->set("maxarcs", $layerOrigem->grid->maxarcs);
		//$layerDestino->updatefromstring("LAYER GRID LABELFORMAT '" . $layerOrigem->grid->labelformat . "' END END");
	}
}
?>