From 65891b1400e0ece8603590dbd7e700f98ee9fe74 Mon Sep 17 00:00:00 2001 From: Edmar Moretti Date: Fri, 4 Jul 2008 14:52:25 +0000 Subject: [PATCH] Inclusão de novos metadados, no nível de layer, para geração automática de classes. Em funcoes_gerais.php foi criada uma nova função que deve sempre ser usada nos programas que adicionam novos temas. --- classesphp/classe_mapa.php | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ classesphp/funcoes_gerais.php | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ geraminiatura.php | 1 + mobile/inicia.php | 2 +- ms_criamapa.php | 1 + ogc.php | 1 + temas/bioma.map | 44 ++++++-------------------------------------- testamapfile.php | 5 ++++- 8 files changed, 185 insertions(+), 40 deletions(-) diff --git a/classesphp/classe_mapa.php b/classesphp/classe_mapa.php index 243ec8c..61c874e 100644 --- a/classesphp/classe_mapa.php +++ b/classesphp/classe_mapa.php @@ -741,6 +741,83 @@ $random - indica se os nomes dos novos layers serão modificados ou nao foreach ($novosnomes as $n) { $nlayer = $nmap->getlayerbyname($n); + autoClasses(&$nlayer,$this->mapa); + // + //cria as classes com base em atributos + // + /* + 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 o número de ocorrências de itemid + // + $nlayer->open(); + $status = $nlayer->whichShapes($this->mapa->extent); + $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);
+								}
+							}
+						}
+						*/
 						//
 						//muda para RGB para melhorar o desenho da imagem raster
 						//
diff --git a/classesphp/funcoes_gerais.php b/classesphp/funcoes_gerais.php
index 230e9ef..38ed471 100644
--- a/classesphp/funcoes_gerais.php
+++ b/classesphp/funcoes_gerais.php
@@ -1842,4 +1842,98 @@ function ixml($no,$nome)
 {
 	return mb_convert_encoding($no->$nome,"HTML-ENTITIES","auto");
 }
+function autoClasses(&$nlayer,$mapa)
+{
+	if($nlayer->getmetadata("classesitem") == "")
+	{return;}
+	$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]);
+	}
+	//	
+	$nlayer->open();
+	$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);
+		}
+	}
+	return;
+}
 ?>
\ No newline at end of file
diff --git a/geraminiatura.php b/geraminiatura.php
index 014e44d..699f8bb 100644
--- a/geraminiatura.php
+++ b/geraminiatura.php
@@ -104,6 +104,7 @@ function verifica($map)
 			$layern = $nmapa->getLayerByName($teman);
 			$layern->set("status",MS_DEFAULT);
 			ms_newLayerObj($mapa, $layern);
+			autoClasses(&$layern,$mapa);
 			if ($layern->data == "")
 			$dados = $layern->connection;
 			else
diff --git a/mobile/inicia.php b/mobile/inicia.php
index a2325e4..910ee0c 100644
--- a/mobile/inicia.php
+++ b/mobile/inicia.php
@@ -58,7 +58,7 @@ function iniciamobile()
 	$eb->set("style",0);
 	$eb->set("position",MS_LL);
 	$cornb = $eb->backgroundcolor;
-	$n = explode(",",$bcor);
+	//$n = explode(",",$bcor);
 	$cornb->setrgb(255,0,0);
 	$mapa->save($tmpfname);
 	//$tipo = "inicia";
diff --git a/ms_criamapa.php b/ms_criamapa.php
index a127549..f55021e 100644
--- a/ms_criamapa.php
+++ b/ms_criamapa.php
@@ -568,6 +568,7 @@ function incluiTemasIniciais()
 					if ($layern->name == "estadosl")
 					{$layern->set("data",$temasaplic."/dados/estados.shp");}
 					$layern->setmetadata("NOMEORIGINAL",$layern->name);
+					autoClasses(&$layern,$mapn);
 					ms_newLayerObj(&$mapn, $layern);
 				}
 			}	
diff --git a/ogc.php b/ogc.php
index 7e0542a..ad239f6 100644
--- a/ogc.php
+++ b/ogc.php
@@ -176,6 +176,7 @@ if ($tipo == "")
 					}
 				}
 			}
+			autoClasses(&$l,$oMap);
 			ms_newLayerObj($oMap, $l);
 		}
 	}
diff --git a/temas/bioma.map b/temas/bioma.map
index a55f689..e0b1bc2 100644
--- a/temas/bioma.map
+++ b/temas/bioma.map
@@ -5,10 +5,7 @@ LAYER
   TYPE Polygon
   STATUS OFF
   TEMPLATE "none.htm"
-  CONNECTIONTYPE postgis
-  CONNECTION "user=geodados password=geodados dbname=geodados host=10.1.1.36 port=5432"
-#CONNECTION ""
-  DATA "the_geom FROM (select * FROM brasil.brareg1) as foo USING UNIQUE gid USING SRID=4291"
+  DATA "c:\ms4w\apache\htdocs\geodados\brasil\vegetacao\biomas.shp"
   METADATA
 	ITENS "cd_legenda"
 	ITENSDESC "Nome"
@@ -16,43 +13,14 @@ LAYER
   	CLASSE "SIM"
       ESCALA "5000000"
 	EXTENSAO "-75.233614607 -33.7515829981 -27.592958622 5.272156"
+	CLASSESNOME "CD_LEGENDA"
+	CLASSESITEM "ID"
+	CLASSESCOR "COR"
+	CLASSESSIMBOLO ""
+	CLASSESTAMANHO ""
   END
-  TRANSPARENCY 80
   CLASS
-    Name 'Amazônia'
-    EXPRESSION ('[id]'eq '1')
-    COLOR 255 255 204
-    OUTLINECOLOR 50 50 50
-        END  # CLASS
-  CLASS
-    Name 'Caatinga'
-    EXPRESSION ('[id]'eq '2')
-    COLOR 232 220 201
     OUTLINECOLOR 50 50 50
   END  # CLASS
-  CLASS
-    Name 'Cerrado'
-    EXPRESSION ('[id]'eq '3')
-    COLOR 244 214 0
-    OUTLINECOLOR 50 50 50
-  END  # CLASS
-  CLASS
-    Name 'Pantanal'
-    EXPRESSION ('[id]'eq '6')
-    COLOR 200 200 241
-    OUTLINECOLOR 50 50 50
-  END  # CLASS
-  CLASS
-    Name 'Pampa'
-    EXPRESSION ('[id]'eq '5')
-    COLOR 143 189 192
-    OUTLINECOLOR 50 50 50
-  END  # CLASS
-  CLASS
-    Name 'Mata Atlântica'
-    EXPRESSION ('[id]'eq '4')
-    COLOR 218 255 216
-    OUTLINECOLOR 50 50 50
-  END  # CLASS				
 END
 END
\ No newline at end of file
diff --git a/testamapfile.php b/testamapfile.php
index bc144dd..d22ac6f 100644
--- a/testamapfile.php
+++ b/testamapfile.php
@@ -123,7 +123,9 @@ function verifica($map)
 		else
 		{$mapa = ms_newMapObj("aplicmap/geral1.map");}
 		if(@ms_newMapObj($tema))
-		{$nmapa = ms_newMapObj($tema);}
+		{
+			$nmapa = ms_newMapObj($tema);
+		}
 		else
 		{
 			echo "erro no arquivo $map 
"; @@ -135,6 +137,7 @@ function verifica($map) { $layern = $nmapa->getLayerByName($teman); $layern->set("status",MS_DEFAULT); + autoClasses(&$layern,$nmapa); ms_newLayerObj($mapa, $layern); if ($layern->data == "") $dados = $layern->connection; -- libgit2 0.21.2