indicando que o tema apenas será mostrado em perfis específicos. Por exempo: ms_criamapa.php?perfil=usuário1
caminho - caminho para os programas que serão incluídos com "include". Ao chamar o programa ms_criamapa.php por meio de "include" é necessário especificar essa variável para indicar o caminho correto do i3geo.
pontos - lista de coordenadas x e y que serão adicionadas como pontos no mapa.
nometemapontos - nome do tema de pontos
linhas - lista de coordenadas x e y que serão adicionadas como linhas no mapa. As coordenadas de linhas diferentes devem ser separadas por ",", por exemplo: -54 -12 -50 -12,-50 -1 -50 -2 -50 -3
nometemalinhas - nome do tema de linhas
poligonos - lista de coordenadas x e y que serão adicionadas como polígonos no mapa. As coordenadas dos vértices de polígonos diferentes devem ser separadas por ",".
nometemapoligonos - nome do tema de polígonos
wkt - insere elementos no mapa com coordenadas definidas em wkt
nometemawkt - nome do tema em wkt
debug - ativa o retorno de mensagens de erro do PHP sim|nao
idioma - idioma da interface (veja os idiomas disponíveis em classe_idioma.js
kmlurl - url de um arquivo KML que será incluido no mapa. Válido apenas na interface google maps
Parâmetros utilizados para adicionar uma camada baseada em um wms
Testar com http://localhost/i3geo/ms_criamapa.php?url_wms=http://mapas.mma.gov.br/cgi-bin/mapserv?map=/opt/www/html/webservices/biorregioes.map&layer_wms=biomas&style_wms=default&nome_wms=Biomas do Brasil&srs_wms=epsg:4291&image_wms=image/png&versao_wms=1.1.1
url_wms - endereço
layer_wms - nome do layer
style_wms - estilo do layer
nome_wms - nome da camada (titulo)
srs_wms - código da projeção
image_wms - tipo de imagem disponível
versao_wms - versão do WMS
*/
/*
Section: Fluxo do código
*/
$tempo = microtime(1);
/*
Note: Verifica a variável $caminho
Essa variável deve ser definida em programas que utilizam o ms_criamapa.php via include.
Indica onde está o diretório i3geo para que os includes seguintes possam ser localizados.
$caminho é sempre colocada antes do nome dos arquivos que serão incçuídos, p.e.,
require_once ($caminho."classesphp/carrega_ext.php");
*/
if (!isset($caminho)){$caminho = "";}
if (!file_exists($caminho."classesphp/carrega_ext.php"))
{echo " Nao foi possivel localizar o diretório classephp. Provavelmente vc precisara definir a variavel $camino";exit;}
if (isset($_GET["caminho"]))
{$caminho = $_GET["caminho"];}
/*
Note: Carrega as extensões PHP
Carrega as extensões utilizadas no programa de inicialização.
A carga das extensões geralmente é necessária nas instalações windows (ms4w) ou quando as mesmas não são carregadas pela própria inicialização do PHP.
*/
include_once ($caminho."classesphp/carrega_ext.php");
/*
Note: Include dos arquivos PHP.
Inclui os programas php com funções utilizadas pelo ms_criamapa.php
*/
include_once ($caminho."classesphp/pega_variaveis.php");
include_once ($caminho."classesphp/funcoes_gerais.php");
include_once ($caminho."ms_configura.php");
if (!isset($debug))
{error_reporting(0);$debug="nao";}
else
{error_reporting(E_ALL);$debug="sim";}
/*
Define o cookie para o idioma da interface
*/
if(isset($idioma) && $idioma != "")
setcookie("i3geolingua", $idioma);
/*
Note: Prepara as variáveis que serão incluidas na seção
As variáveis vêm do arquivo ms_configura.php e são armazenadas em uma seção com nome específico para o i3geo.
*/
if (!isset($mapext)){$mapext="";}
$dir_tmp_ = $dir_tmp;
$temasdir_ = $temasdir;
$temasaplic_ = $temasaplic;
$locmapserv_ = $locmapserv;
$locaplic_ = $locaplic;
$locsistemas_ = $locsistemas;
$locidentifica_ = $locidentifica;
$R_path_ = $R_path;
$mapext_ = $mapext;
$locmapas_ = $locmapas;
$postgis_con_ = $postgis_con;
$srid_area_ = $srid_area;
$debug_ = $debug;
$ler_extensoes_ = $ler_extensoes;
$postgis_mapa_ = $postgis_mapa;
$tituloInstituicao_ = $tituloInstituicao;
$atlasxml_ = $atlasxml;
$expoeMapfile_ = $expoeMapfile;
$googleApiKey_ = $googleApiKey;
if(isset($kmlurl)){$kmlurl_ = $kmlurl;}
//
//se houver string de conexão para substituição
//o modo cgi não irá funcionar
//
if($postgis_mapa != "")
{$utilizacgi = "nao";}
if(!isset($perfil)){$perfil="";}
$perfil_ = $perfil;
$utilizacgi_ = $utilizacgi;
if ((isset($navegadoresLocais)) && ($navegadoresLocais != ""))
$navegadoresLocais_ = "sim";
else
$navegadoresLocais_ = "nao";
/*
Note: Inicia a seção
O i3geo inicia uma seção específica no servidor, denominada i3GeoPHP.
Se já houver uma seção aberta, em função de outro browser estar ativo, cria uma nova. Faz a cópia das variáveis definidas para itens da seção.
*/
session_name("i3GeoPHP");
session_start();
if (!isset($g_sid)){$g_sid="";}
if(isset($_SESSION["map_file"]) || $g_sid!="")
{session_regenerate_id();}
/*
Note: Aguarde
Monta a apresentação do aguarde.
Aqui é necessário verificar se $executa está definido
isso pq algumas aplicações podem ser prejudicadas caso o aguarde seja mostrado
*/
if (!isset($executa))
{mostraAguarde();}
$_SESSION["dir_tmp"] = $dir_tmp_;
$_SESSION["temasdir"] = $temasdir_;
$_SESSION["temasaplic"] = $temasaplic_;
$_SESSION["locmapserv"] = $locmapserv_;
$_SESSION["locaplic"] = $locaplic_;
$_SESSION["locsistemas"] = $locsistemas_;
$_SESSION["locidentifica"] = $locidentifica_;
$_SESSION["R_path"] = $R_path_;
$_SESSION["mapext"] = $mapext_;
$_SESSION["locmapas"] = $locmapas_;
$_SESSION["postgis_con"] = $postgis_con_;
$_SESSION["srid_area"] = $srid_area_;
$_SESSION["debug"] = $debug_;
$_SESSION["ler_extensoes"] = $ler_extensoes_;
$_SESSION["postgis_mapa"] = $postgis_mapa_;
$_SESSION["perfil"] = $perfil_;
$_SESSION["navegadoresLocais"] = $navegadoresLocais_;
$_SESSION["utilizacgi"] = $utilizacgi_;
$_SESSION["tituloInstituicao"] = $tituloInstituicao_;
$_SESSION["atlasxml"] = $atlasxml;
$_SESSION["expoeMapfile"] = $expoeMapfile;
$_SESSION["googleApiKey"] = $googleApiKey_;
if(isset($kmlurl_))
$_SESSION["kmlurl"] = $kmlurl_;
//rotina de segurança, ver http://shiflett.org/articles/the-truth-about-sessions
$fingerprint = 'I3GEOSEC' . $_SERVER['HTTP_USER_AGENT'];
$_SESSION['fingerprint'] = md5($fingerprint . session_id());
//
//pega todas as variáveis da sessão, mesmo as que foram definidas anteriormente
//
foreach(array_keys($_SESSION) as $k)
{eval("\$".$k."='".$_SESSION[$k]."';");}
$postgis_mapa = $postgis_mapa_;
/*
Note: Define os arquivos .map
Seleciona os arquivos mapfile que serão carregados como base conforme o tipo de sistema operacional.
A variável $base pode ser definida como um parâmetro na inicialização, caso contrário, é utilizado o padrão.
Os arquivos .map padrão são armazenados em i3geo/aplicmap.
O arquivo é lido conforma a característica do sistema operacional.
*/
if (strtoupper(substr(PHP_OS, 0, 3) == 'WIN'))
{
if (!isset($base) || $base == ""){$base = "geral1windows";}
$estadosl = "estadoslwindows";
}
else
{
if (!isset($base) || $base == ""){$base = "geral1";}
$estadosl = "estadosl";
}
if (file_exists($base))
{$mapdefault = ms_newMapObj($base);}
else
{$mapdefault = ms_newMapObj($temasaplic."/".$base.".map");}
/*
Note: Parâmetros adicionais.
Processa os parâmetros para a inicialização verificando se foram passados pela URL ou não.
*/
if (!isset($mapext))
{$mapext = $mapdefault->extent->minx." ".$mapdefault->extent->miny." ".$mapdefault->extent->maxx." ".$mapdefault->extent->maxy;}
if (!isset ($map_reference_image)) //arquivo com a imagem de referência
{$map_reference_image = $mapdefault->reference->image;}
if (!isset ($map_reference_extent)) //extensão geográfica da imagem do mapa de referência
{$map_reference_extent = $mapdefault->reference->extent->minx." ".$mapdefault->reference->extent->miny." ".$mapdefault->reference->extent->maxx." ".$mapdefault->reference->extent->maxy;}
if (!isset($interface))
{$interface = "geral.htm";}
/*
Note: Diretórios temporários
Cria os diretórios temporários que serão utilizados pelo i3geo para armazenar as imagens e outros dados.
*/
$diretorios = criaDirMapa($dir_tmp);
if(!$diretorios)
{echo "
Não foi poível criar os diretórios temporários em $dir_tmp.
";exit;}
$_SESSION["mapdir"] = $diretorios[1];
$_SESSION["imgdir"] = $diretorios[2];
criaIndex();
/*
Note: Cria os objetos map que serão processados
O arquivo definido em $base é lido como um objeto map. Esse objeto será processado para incluir novos layers e alterar outros parâmetros definidos pelo usuário.
*/
ms_ResetErrorList();
if (file_exists($base))
{
$map = ms_newMapObj($base);
$mapn = ms_newMapObj($base);
}
else
{
$map = ms_newMapObj($temasaplic."/".$base.".map");
$mapn = ms_newMapObj($temasaplic."/".$base.".map");
}
$error = ms_GetErrorObj();
while($error && $error->code != MS_NOERR)
{
printf("
Error in %s: %s
\n", $error->routine, $error->message);
$error = $error->next();
}
ms_ResetErrorList();
/*
Note: Incluí temas
Verifica a lista de temas da inicializacao, adicionando-os se necessário
*/
incluiTemasIniciais();
$error = ms_GetErrorObj();
while($error && $error->code != MS_NOERR)
{
printf("
Error in %s: %s
\n", $error->routine, $error->message);
$error = $error->next();
}
ms_ResetErrorList();
/*
Note: Liga os temas definidos em $layers
*/
ligaTemas();
$error = ms_GetErrorObj();
while($error && $error->code != MS_NOERR)
{
printf("
Error in %s: %s
\n", $error->routine, $error->message);
$error = $error->next();
}
ms_ResetErrorList();
/*
Note: Aplica ao mapa os parâmetros passados pela URL
*/
if (isset($map_reference_image))
{$mapn->reference->set("image",$map_reference_image);}
$extr = $mapn->reference->extent;
if (isset($map_reference_extent))
{
$temp = explode(" ",$map_reference_extent);
foreach ($temp as $t)
{
if ($t != "")
{$newext[] = $t;}
}
if (count($newext) == 4)
{$extr->setextent($newext[0], $newext[1], $newext[2], $newext[3]);}
}
$ext = $mapn->extent;
$newext = array();
if ((isset($mapext)) && ($mapext != ""))
{
$temp = explode(" ",$mapext);
foreach ($temp as $t)
{
if ($t != "")
{$newext[] = $t;}
}
if (count($newext) == 4)
{$ext->setextent($newext[0], $newext[1], $newext[2], $newext[3]);}
}
$error = ms_GetErrorObj();
while($error && $error->code != MS_NOERR)
{
printf("
Error in %s: %s
\n", $error->routine, $error->message);
$error = $error->next();
}
ms_ResetErrorList();
/*
Note: Configura os endereços corretos no mapfile.
Altera as propriedades imagepath e imageurl corrigindo os caminhos padrão conforme o diretório criado para armazenar o mapa de trabalho.
*/
$protocolo = explode("/",$_SERVER['SERVER_PROTOCOL']);
$w = $mapn->web;
$atual = $w->imagepath;
$w->set("imagepath",$atual.$diretorios[2]."/");
$atual = $w->imageurl;
$w->set("imageurl",$atual.$diretorios[2]."/");
$salvo = $mapn->save($diretorios[0]);
$_SESSION["imgurl"] = strtolower($protocolo[0])."://".$_SERVER['HTTP_HOST'].$atual.$diretorios[2]."/";
$_SESSION["tmpurl"] = strtolower($protocolo[0])."://".$_SERVER['HTTP_HOST'].$atual;
/*
Note: Faz o include de um programa se tiver sido passado pela URL (parâmetro &executa)
Nessa altura do processo, a variável $tmpfname guarda o nome do mapfile que será utilizado pelo i3geo.
Esse mapfile pode ser modificado pelo programa que será incluido.
*/
$tmpfname = $diretorios[0];
$_SESSION["map_file"] = $diretorios[0];
$_SESSION["mapext"] = $mapext;
if (isset($executa))
{
if (file_exists($executa))
{include_once ($executa);}
if (function_exists($executa))
{eval($executa."();");}
}
$error = ms_GetErrorObj();
while($error && $error->code != MS_NOERR)
{
printf("
Error in %s: %s
\n", $error->routine, $error->message);
$error = $error->next();
}
ms_ResetErrorList();
/*
Note: Inclui uma camada de pontos utilizando os parâmetros passados pela URL
*/
if (isset($wkt))
{insereWKTUrl();}
$error = ms_GetErrorObj();
while($error && $error->code != MS_NOERR)
{
printf("
Error in %s: %s
\n", $error->routine, $error->message);
$error = $error->next();
}
ms_ResetErrorList();
if (isset($pontos))
{inserePontosUrl();}
$error = ms_GetErrorObj();
while($error && $error->code != MS_NOERR)
{
printf("
Error in %s: %s
\n", $error->routine, $error->message);
$error = $error->next();
}
ms_ResetErrorList();
/*
Note: Inclui uma camada de linhas utilizando os parâmetros passados pela URL
*/
if (isset($linhas))
{insereLinhasUrl();}
$error = ms_GetErrorObj();
while($error && $error->code != MS_NOERR)
{
printf("
Error in %s: %s
\n", $error->routine, $error->message);
$error = $error->next();
}
ms_ResetErrorList();
/*
Note: Inclui uma camada de polígonos utilizando os parâmetros passados pela URL
*/
if (isset($poligonos))
{inserePoligonosUrl();}
/*
Note: inclui um tema wms se for o caso
Verifica os parâmetros WMS e adiciona uma camada se for o caso
*/
if(isset($url_wms))
{incluiTemaWms();}
$error = ms_GetErrorObj();
while($error && $error->code != MS_NOERR)
{
printf("
Error in %s: %s
\n", $error->routine, $error->message);
$error = $error->next();
}
ms_ResetErrorList();
//
//se vc quiser parar o script aqui, para verificar erros, descomente a linha abaixo
//
//exit
/*
Note: Adapta os dados de cada layer.
Faz alterações em cada layer caso sejam necessárias.
*/
$mapa = ms_newMapObj($tmpfname);
$path = $mapa->shapepath;
for($i=0;$i<($mapa->numlayers);++$i)
{
$layer = $mapa->getLayer($i);
$ok = true;
if ($layer->connection == "")
{
$ok = false;
$d = $layer->data;
if((file_exists($d)) || (file_exists($d.".shp")))
{$ok = true;}
else
{
if((file_exists($path."/".$d)) || (file_exists($path."/".$d.".shp")))
{$ok = true;}
}
}
if ($ok == false)
{$layer->set("status",MS_OFF);}
}
$mapa->save($tmpfname);
/*
Note: Obtem o IP do usuário e registra no banco de dados.
Essa função pode ser comentada sem prejuízos ao funcionamento do I3Geo.
Só opera corretamente se a rotina de registro tiver sido configurada corretamente.
*/
require_once($caminho."ms_registraip.php");
/*
Note: Gera a url para abrir o mapa
interface = arquivo html que será aberto
*/
if ($interface != "mashup")
{
if (count(explode(".php",$interface)) > 1)
{
if (file_exists($caminho."aplicmap/".$interface))
{include_once($caminho."aplicmap/".$interface);}
else
{include_once($interface);}
exit;
}
else
{
echo "
Tempo de processamento no servidor em segundos: ".((microtime(1) - $tempo))."";
if (file_exists($caminho."aplicmap/".$interface))
{$urln = $caminho."aplicmap/".$interface."?".session_id();}
else
{$urln = $interface."?".session_id();}
//header("Location:".$urln);
echo "";
}
}
//////////////////////////////////////////////////////////////////////////////
//funções
/////////////////////////////////////////////////////////////////////////////
/*
Function: ligaTemas
Liga os temas definidos na variável $layers
*/
function ligaTemas()
{
global $layers,$mapn;
if (isset($layers))
{
$layers = str_replace(','," ",$layers);
$lista = explode(" ", $layers);
foreach ($lista as $l)
{
if ($l == "")
{continue;}
if(@$mapn->getLayerByName($l))
{$layern = $mapn->getLayerByName($l);$layern->set("status",MS_DEFAULT);}
$grupos = $mapn->getLayersIndexByGroup($l);
if(count($grupos) > 0)
{
for ($i = 0;$i < count($grupos);++$i)
{
$layern = $mapn->getLayer($grupos[$i]);
if(strtolower($layern->group) == strtolower($l))
{
$layern->set("status",MS_DEFAULT);
}
}
}
}
}
}
/*
Function: incluiTemasIniciais
Inclui os temas definidos na variável $temasa
*/
function incluiTemasIniciais()
{
global $temasa,$estadosl,$temasaplic,$temasdir,$mapn;
if (!isset($temasa)){$temasa = $estadosl;}
$temasa = str_replace(','," ",$temasa);
$alayers = explode(" ",$temasa);
$existeraster = false;
foreach ($alayers as $arqt)
{
$arqtemp = "";
$arqt = trim($arqt);
if ($arqt == "")
{continue;}
if (file_exists($arqt))
{$arqtemp = $arqt;}
if ((strtoupper(substr(PHP_OS, 0, 3) == 'WIN')) && (file_exists($temasaplic."\\".$arqt.".map")))
{$arqtemp = $temasaplic."\\".$arqt.".map";}
elseif (file_exists($temasaplic."/".$arqt.".map"))
{$arqtemp = $temasaplic."/".$arqt.".map";}
if ((strtoupper(substr(PHP_OS, 0, 3) == 'WIN')) && (file_exists($temasdir."\\".$arqt.".map")))
{$arqtemp = $temasdir."\\".$arqt.".map";}
elseif (file_exists($temasdir."/".$arqt.".map"))
{$arqtemp = $temasdir."/".$arqt.".map";}
if ($arqtemp == "")
{echo "
Impossível acessar tema $arqtemp";}
else
{
if (!@ms_newMapObj($arqtemp))
{echo "
Problemas com a camada $arqtemp
";}
else
{
$maptemp = @ms_newMapObj($arqtemp);
for($i=0;$i<($maptemp->numlayers);++$i)
{
$layern = $maptemp->getLayer($i);
if($layern->type == MS_LAYER_RASTER)
{$existeraster = true;}
if ($layern->name == "estadosl")
{$layern->set("data",$temasaplic."/dados/estados.shp");}
$layern->setmetadata("NOMEORIGINAL",$layern->name);
autoClasses(&$layern,$mapn);
ms_newLayerObj(&$mapn, $layern);
}
}
}
}
//
//muda para RGB para melhorar o desenho da imagem raster
//
if($existeraster)
{
$of = &$mapn->outputformat;
$of->set("imagemode",MS_IMAGEMODE_RGB);
}
}
/*
Function: criaIndex
Cria os arquivos vazios index.htm e index.html nos diretórios temporários
*/
function criaIndex()
{
global $dir_tmp,$diretorios;
if (!file_exists($dir_tmp."/index.htm"))
{
$f = fopen($dir_tmp."/index.htm",x);
fclose($f);
$f = fopen($dir_tmp."/index.html",x);
fclose($f);
$f = fopen($dir_tmp."/".$diretorios[1]."/index.html",x);
fclose($f);
$f = fopen($dir_tmp."/".$diretorios[1]."/index.htm",x);
fclose($f);
$f = fopen($dir_tmp."/".$diretorios[2]."/index.html",x);
fclose($f);
$f = fopen($dir_tmp."/".$diretorios[2]."/index.htm",x);
fclose($f);
}
if (!file_exists($dir_tmp."/index.htm"))
{
echo "Erro. Não foi possível gravar no diretório temporário";
exit;
}
}
/*
Function: MostraAguarde
Mostra a mensagem de aguarde
Globals:
$interface
$caminho
$mensagemInicia
$tituloInstituicao
*/
function mostraAguarde()
{
global $interface,$caminho,$mensagemInicia,$tituloInstituicao;
if (!isset($interface))
{
echo "";
echo "".$tituloInstituicao."";
echo '';
echo ''.$mensagemInicia.'
Aguarde...preparando o mapa
';
echo '';
echo " |
";
echo " | ";
echo " | ";
echo " | ";
echo "
";
echo '';
}
}
/*
Function: insereWKTUrl
Insere elementos no mapa a partir de uma string definida em wkt
Globals:
$wkt - string no formato wkt
$nometemawkt - nome do tema que será criado
*/
function insereWKTUrl()
{
global $wkt,$nometemawkt,$dir_tmp,$imgdir,$tmpfname,$locaplic;
include_once "pacotes/phpxbase/api_conversion.php";
if (!isset($nometemapontos))
{$nometemapontos="WKT";}
if ($nometemapontos == "")
{$nometemapontos="WKT";}
//
//cria o shape file
//
$shape = ms_shapeObjFromWkt($wkt);
$tipol = $shape->type;
if($tipol == 0){$tipol = 3;}
$nomeshp = $dir_tmp."/".$imgdir."/wkts";
// cria o dbf
$def = array();
$items = array("COORD");
foreach ($items as $ni)
{$def[] = array($ni,"C","254");}
xbase_create($nomeshp.".dbf", $def);
$dbname = $nomeshp.".dbf";
$db=xbase_open($dbname,2);
if ($tipol == 1)
{$novoshpf = ms_newShapefileObj($nomeshp, MS_SHP_ARC);}
if ($tipol == 3)
{$novoshpf = ms_newShapefileObj($nomeshp, MS_SHP_MULTIPOINT);}
if ($tipol == 2)
{$novoshpf = ms_newShapefileObj($nomeshp, MS_SHP_POLYGON);}
$reg[] = "";
$novoshpf->addShape($shape);
xbase_add_record($db,$reg);
$novoshpf->free();
xbase_close($db);
//adiciona o layer
$mapa = ms_newMapObj($tmpfname);
$layer = ms_newLayerObj($mapa);
$layer->set("name","wktins");
$layer->set("data",$nomeshp);
$layer->setmetadata("tema",$nometemawkt);
$layer->setmetadata("classe","sim");
$layer->set("type",$shape->type);
$layer->set("status",MS_DEFAULT);
$classe = ms_newClassObj($layer);
$estilo = ms_newStyleObj($classe);
if($shape->type == 0)
{
$estilo->set("symbolname","ponto");
$estilo->set("size",6);
}
if($shape->type == 1)
{
$estilo->set("symbolname","linha");
$estilo->set("size",3);
}
if($shape->type == 2)
{$layer->set("transparency","50");}
$cor = $estilo->color;
$cor->setRGB(255,0,0);
$salvo = $mapa->save($tmpfname);
}
/*
Function: inserePontosUrl
Insere um tema do tipo ponto
Globals:
$pontos - lista de coordenadas x,y
$nometemapontos - nome do tema que será criado
*/
function inserePontosUrl()
{
global $pontos,$nometemapontos,$dir_tmp,$imgdir,$tmpfname,$locaplic;
include_once "pacotes/phpxbase/api_conversion.php";
if (!isset($nometemapontos))
{$nometemapontos="Pontos";}
if ($nometemapontos == "")
{$nometemapontos="Pontos";}
//
//cria o shape file
//
$tipol = MS_SHP_POINT;
$nomeshp = $dir_tmp."/".$imgdir."/pontosins";
// cria o dbf
$def = array();
$items = array("COORD");
foreach ($items as $ni)
{$def[] = array($ni,"C","254");}
xbase_create($nomeshp.".dbf", $def);
$dbname = $nomeshp.".dbf";
$db=xbase_open($dbname,2);
$novoshpf = ms_newShapefileObj($nomeshp, $tipol);
$pontos = explode(" ",trim($pontos));
if(count($pontos) == 0)
$pontos = explode(",",trim($pontos));
foreach ($pontos as $p)
{if (is_numeric($p)){$pontosn[] = $p;}}
$pontos = $pontosn;
for ($ci = 0;$ci < count($pontos);$ci=$ci+2)
{
$reg = array();
$reg[] = $pontos[$ci]." ".$pontos[$ci+1];
$shape = ms_newShapeObj($tipol);
$linha = ms_newLineObj();
$linha->addXY($pontos[$ci],$pontos[$ci+1]);
$shape->add($linha);
$novoshpf->addShape($shape);
xbase_add_record($db,$reg);
}
$novoshpf->free();
xbase_close($db);
//adiciona o layer
$mapa = ms_newMapObj($tmpfname);
$layer = ms_newLayerObj($mapa);
$layer->set("name","pontoins");
$layer->set("data",$nomeshp);
$layer->setmetadata("tema",$nometemapontos);
$layer->setmetadata("classe","sim");
$layer->setmetadata("ATLAS","nao");
$layer->set("type",MS_LAYER_POINT);
$layer->set("status",MS_DEFAULT);
$classe = ms_newClassObj($layer);
$estilo = ms_newStyleObj($classe);
$estilo->set("symbolname","ponto");
$estilo->set("size",6);
$cor = $estilo->color;
$cor->setRGB(255,0,0);
$salvo = $mapa->save($tmpfname);
}
/*
Function: insereLinhasUrl
Insere um tema do tipo linear
As linhas devem ter os pontos separados por espaços e cada linha separada por vírgula
Globals:
$linhas - lista de coordenadas
$nometemalinhas - nome do tema que será criado
*/
function insereLinhasUrl()
{
global $linhas,$nometemalinhas,$dir_tmp,$imgdir,$tmpfname,$locaplic;
include_once "pacotes/phpxbase/api_conversion.php";
if (!isset($nometemalinhas))
{$nometemalinhas="Linhas";}
if ($nometemalinhas == "")
{$nometemalinhas="Linhas";}
//
//cria o shape file
//
$tipol = MS_SHP_ARC;
$nomeshp = $dir_tmp."/".$imgdir."/linhains";
// cria o dbf
$def = array();
$items = array("COORD");
foreach ($items as $ni)
{$def[] = array($ni,"C","254");}
xbase_create($nomeshp.".dbf", $def);
$dbname = $nomeshp.".dbf";
$db=xbase_open($dbname,2);
$novoshpf = ms_newShapefileObj($nomeshp, $tipol);
$linhas = explode(",",trim($linhas));
$pontosLinhas = array(); //guarda os pontos de cada linha em arrays
foreach ($linhas as $l)
{
$tempPTs = explode(" ",trim($l));
$temp = array();
foreach ($tempPTs as $p)
if (is_numeric($p)){$temp[] = $p;}
$pontosLinhas[] = $temp;
}
foreach ($pontosLinhas as $ptsl)
{
$linhas = $ptsl;
$shape = ms_newShapeObj($tipol);
$linha = ms_newLineObj();
$reg = array();
$reg[] = "";
for ($ci = 0;$ci < count($linhas);$ci=$ci+2)
{
$linha->addXY($linhas[$ci],$linhas[$ci+1]);
$shape->add($linha);
}
$novoshpf->addShape($shape);
xbase_add_record($db,$reg);
}
$novoshpf->free();
xbase_close($db);
//adiciona o layer
$mapa = ms_newMapObj($tmpfname);
$layer = ms_newLayerObj($mapa);
$layer->set("name","linhains");
$layer->set("data",$nomeshp);
$layer->setmetadata("tema",$nometemalinhas);
$layer->setmetadata("classe","sim");
$layer->setmetadata("ATLAS","nao");
$layer->set("type",MS_LAYER_LINE);
$layer->set("status",MS_DEFAULT);
$classe = ms_newClassObj($layer);
$estilo = ms_newStyleObj($classe);
$estilo->set("symbolname","linha");
$estilo->set("size",3);
$cor = $estilo->color;
$cor->setRGB(255,0,0);
$salvo = $mapa->save($tmpfname);
}
/*
Function: inserePoligonosUrl
Insere um tema poligonal.
Os polígonos devem ter os pontos separados por espaços e cada polígono separado por vírgula
Globals:
$poligonos - lista de coordenadas
$nometemapoligonos - nome do tema que será criado
*/
function inserePoligonosUrl()
{
global $poligonos,$nometemapoligonos,$dir_tmp,$imgdir,$tmpfname,$locaplic;
include_once "pacotes/phpxbase/api_conversion.php";
if (!isset($nometemapoligonos))
{$nometemapoligonos="Poligonos";}
if ($nometemapoligonos == "")
{$nometemapoligonos="Poligonos";}
//
//cria o shape file
//
$tipol = MS_SHP_POLYGON;
$nomeshp = $dir_tmp."/".$imgdir."/poligonosins";
// cria o dbf
$def = array();
$items = array("COORD");
foreach ($items as $ni)
{$def[] = array($ni,"C","254");}
xbase_create($nomeshp.".dbf", $def);
$dbname = $nomeshp.".dbf";
$db=xbase_open($dbname,2);
$novoshpf = ms_newShapefileObj($nomeshp, $tipol);
$linhas = explode(",",trim($poligonos));
$pontosLinhas = array(); //guarda os pontos de cada linha em arrays
foreach ($linhas as $l)
{
$tempPTs = explode(" ",trim($l));
$temp = array();
foreach ($tempPTs as $p)
if (is_numeric($p)){$temp[] = $p;}
$pontosLinhas[] = $temp;
}
foreach ($pontosLinhas as $ptsl)
{
$linhas = $ptsl;
$shape = ms_newShapeObj($tipol);
$linha = ms_newLineObj();
$reg = array();
$reg[] = "";
for ($ci = 0;$ci < count($linhas);$ci=$ci+2)
{
$linha->addXY($linhas[$ci],$linhas[$ci+1]);
}
$shape->add($linha);
$novoshpf->addShape($shape);
xbase_add_record($db,$reg);
}
$novoshpf->free();
xbase_close($db);
//adiciona o layer
$mapa = ms_newMapObj($tmpfname);
$layer = ms_newLayerObj($mapa);
$layer->set("name","linhains");
$layer->set("data",$nomeshp);
$layer->setmetadata("tema",$nometemapoligonos);
$layer->setmetadata("classe","sim");
$layer->setmetadata("ATLAS","nao");
$layer->set("type",MS_LAYER_POLYGON);
$layer->set("transparency","50");
$layer->set("status",MS_DEFAULT);
$classe = ms_newClassObj($layer);
$estilo = ms_newStyleObj($classe);
//$estilo->set("symbolname","linha");
//$estilo->set("size",3);
$cor = $estilo->color;
$cor->setRGB(255,0,0);
$salvo = $mapa->save($tmpfname);
}
/*
Function: incluiTemaWms
*/
function incluiTemaWms()
{
global $nome_wms,$url_wms,$layer_wms,$style_wms,$srs_wms,$image_wms,$versao_wms,$tmpfname,$locaplic;
include_once ($locaplic."/classesphp/classe_mapa.php");
if(!$nome_wms)
{$nome = $layer_wms." ".$style_wms;}
else
$nome = $nome_wms;
$m = new Mapa($tmpfname);
$m->adicionatemawms($layer_wms,$url_wms,$style_wms,$srs_wms,$image_wms,$locaplic,"",$versao_wms,$nome,"","","","","nao","text/plain","");
$salvo = $m->salva($tmpfname);
}
?>