_filter=
Exemplo de filtro
http://localhost/i3geo/ogc.php?map_layer__lbiomashp_filter=(('[CD_LEGENDA]'='CAATINGA'))&tema=_lbiomashp&SRS=EPSG:4618&WIDTH=500&HEIGHT=500&BBOX=-76.5125927,-39.3925675209,-29.5851853,9.49014852081&FORMAT=image/png&service=wms&version=1.1.0&request=getmap&layers=_lbiomashp
no caso de camadas Postgis basta usar map_layer__lbiomashp_filter=cd_legenda='CAATINGA'
Exemplos:
ogc.php?temas=biomashp&format=application/openlayers&bbox=-54,-14,-50,-10
ogc.php?lista=temas
ogc.php?tema=bioma
ogc.php?tema=/var/www/i3geo/aplicmap/geral1debianv6.map&layers=mundo
*/
$_GET = array_merge($_GET,$_POST);
//
//caso nenhum parametros tenha sido enviado
//
if(count($_GET) == 0){
$tipo="metadados";
$_GET["REQUEST"] = "getCapabilities";
$_GET["request"] = "getCapabilities";
$_GET["SERVICE"] = "WMS";
}
//
//compatibiliza chamadas fora do padrao
//
if(isset($_GET["outputFormat"]) && $_GET["outputFormat"] != ""){
$_GET["OUTPUTFORMAT"] = $_GET["outputFormat"];
}
if(isset($_GET["outputformat"]) && $_GET["outputformat"] != ""){
$_GET["OUTPUTFORMAT"] = $_GET["outputformat"];
}
$cache = true;
//require_once(dirname(__FILE__)."/classesphp/carrega_ext.php");
include(dirname(__FILE__)."/ms_configura.php");
include(dirname(__FILE__)."/classesphp/pega_variaveis.php");
include(dirname(__FILE__)."/classesphp/funcoes_gerais.php");
//
//imprime na tela a ajuda
//
if(isset($ajuda)){
ogc_imprimeAjuda();
exit;
}
//
//pega os enderecos para compor a url de chamada do gerador de web services
//
$protocolo = explode("/",$_SERVER['SERVER_PROTOCOL']);
$protocolo = $protocolo[0];
$protocolo1 = strtolower($protocolo) . '://'.$_SERVER['SERVER_NAME'];
$protocolo = strtolower($protocolo) . '://'.$_SERVER['SERVER_NAME'] .":". $_SERVER['SERVER_PORT'];
$urli3geo = str_replace("/ogc.php","",$protocolo.$_SERVER["PHP_SELF"]);
//
//imprime na tela a lista de temas disponiveis
//
if(isset($lista) && $lista != ""){
include_once(dirname(__FILE__)."/classesphp/classe_menutemas.php");
if($lista == "temas"){
ogc_imprimeListaDeTemas();
}
if($lista == "temaswfs"){
ogc_imprimeListaDeTemasWfs();
}
exit;
}
//
//define um nome para o mapfile caso a origem seja o sistema de metadados estatisticos
//
if(isset($id_medida_variavel) && $id_medida_variavel != ""){
$tema = "ogcmetaestat".$id_medida_variavel;
}
//
//compatibiliza variaveis
//
if(!isset($tema) && isset($layers)){
$tema = $layers;
}
if(!isset($tema) && isset($LAYERS)){
$tema = $LAYERS;
}
if(!isset($tema) && isset($temas)){
$tema = $temas;
}
if(isset($typeName)){
$typename = $typeName;
}
if(!isset($tema) && isset($typename)){
$tema = $typename;
}
//
//garante que layers possam ser especificados de diferentes maneiras
//
$_GET["layers"] = $tema;
$_GET["LAYERS"] = $tema;
$layers = $tema;
//
//verifica o OUTPUTFORMAT e o cache de arquivo
//
if(!empty($OUTPUTFORMAT)){
carregaCacheArquivo();
}
//
//para o caso da requisicao kml
//
if(strtolower($OUTPUTFORMAT) == "kml" || strtolower($OUTPUTFORMAT) == "kmz"){
$urln = "pacotes/kmlmapserver/kmlservice.php?request=kmz&map=".$tema."&typename=".$tema;
header("Location:".$urln);
exit;
}
//
//usa o epsg correto ao inves do apelido inventado pelo Google
//
if($_GET["SRS"] == "EPSG:900913" || $_GET["srs"] == "EPSG:900913"){
$_GET["SRS"] = "EPSG:3857";
$_GET["srs"] = "EPSG:3857";
}
if(!isset($_GET["srs"]) && !isset($_GET["SRS"])){
$_GET["srs"] = "EPSG:4326";
$_GET["SRS"] = "EPSG:4326";
}
//
//trata geojson da mesma forma que json
//
if(strtolower($OUTPUTFORMAT) == "geojson"){
$OUTPUTFORMAT = "json";
}
//
//recupera um mapa salvo no banco de administracao
//
if(!empty($restauramapa)){
restauraMapaSalvo();
}
//
//para operar como o Geoserver, abre o openlayers
//
if(isset($format) && strtolower($format) == "application/openlayers"){
$urln = dirname($_SERVER["PHP_SELF"])."/mashups/openlayers.php?layers=".$layers."&mapext=".$bbox."&botoes=pan,zoombox,zoomtot,identifica";
//echo $urln;exit;
if(!headers_sent()){
header("Location:".$urln);
}
else{
echo "";
}
//exit....
}
//
//pega a versao do Mapserver
//
error_reporting(0);
$versao = versao();
$versao = $versao["principal"];
$req = ms_newowsrequestobj();
$tipo = "";
if(isset($_GET["sld"]) || isset($_GET["filter"])){
$cache = false;
}
//
//inclui todos os parametros na requisicao e aproveita para verificar getcapabilities
//
foreach ($_GET as $k=>$v){
$req->setParameter(strtoupper($k), $v);
if(strtolower($v) == "getcapabilities"){
$tipo = "metadados";
$cache = false;
}
}
//
//cria uma lista de epsgs para o getcapabilities
//
$req->setParameter("srsName",$req->getValueByName("SRS"));
$listaepsg = $req->getValueByName("SRS")." EPSG:4618 EPSG:4291 EPSG:4326 EPSG:22521 EPSG:22522 EPSG:22523 EPSG:22524 EPSG:22525 EPSG:29101 EPSG:29119 EPSG:29120 EPSG:29121 EPSG:29122 EPSG:29177 EPSG:29178 EPSG:29179 EPSG:29180 EPSG:29181 EPSG:29182 EPSG:29183 EPSG:29184 EPSG:29185";
if(isset($version) && !isset($VERSION)){
$VERSION = $version;
}
if(!isset($VERSION)){
$req->setParameter("VeRsIoN","1.1.1");
}
//
//nome do mapfile que ficara em cache
//
$agora = intval(time() / 1000);
//acrescenta ao nome a indicacao do tipo de TMS
if(isset($_GET["tms"])){
$agora .= "tms";
}
if(isset($_GET["Z"]) && isset($_GET["X"])){
$agora .= "google";
}
//
//se o outputformat for definido, evita o cahce de arquivo
//o mesmo se existir filtro para o layer
//
if(isset($_GET["OUTPUTFORMAT"]) || !empty($_GET["map_layer_".$tema."_filter"])){
$_GET["DESLIGACACHE"] = "sim";
}
if(isset($_GET["DESLIGACACHE"]) && $_GET["DESLIGACACHE"] == "sim"){
$agora = time();
$cache = false;
}
$nomeMapfileTmp = $dir_tmp."/ogc_".md5(implode("",$_GET))."_".$agora.".map";
//essa variavel e usada para definir se a imagem final gerada devera ser cortada ou nao
$cortePixels = 0;
if(file_exists($nomeMapfileTmp) && $tipo == ""){
$oMap = ms_newMapobj($nomeMapfileTmp);
}
else{
if(empty($ogcwsmap)){
$oMap = ms_newMapobj($locaplic."/aplicmap/ogcwsv".$versao.".map");
}
else{
$oMap = ms_newMapobj($ogcwsmap);
}
$proto = "http" . ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on") ? "s" : "") . "://";
$server = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME'];
$or = $urli3geo."/ogc.php";
if((isset($tema)) && ($tema != "") && ($tipo=="metadados")){
$or = $or."?tema=".$tema."&";
}
//
//parametros no nível maior
//
$oMap->setmetadata("ows_onlineresource",$or);
$oMap->setmetadata("wms_onlineresource",$or);
$oMap->setmetadata("wms_title",$tituloInstituicao." - i3geo");
$oMap->setmetadata("wfs_title",$tituloInstituicao." - i3geo");
$oMap->setmetadata("wms_attribution_logourl_format","image/png");
$oMap->setmetadata("wms_attribution_logourl_height","56");
$oMap->setmetadata("wms_attribution_logourl_width","85");
$oMap->setmetadata("wms_attribution_logourl_href",$urli3geo."/imagens/i3geo.png");
$oMap->setmetadata("wms_attribution_onlineresource",$urli3geo);
$oMap->setmetadata("wms_attribution_title",$tituloInstituicao);
$oMap->setmetadata("ows_enable_request","*");
//parametro mandatario
if($oMap->getmetadata("wms_srs") == ""){
$oMap->setmetadata("wms_srs","EPSG:4326");
}
$e = $oMap->extent;
$extensaoMap = ($e->minx)." ".($e->miny)." ".($e->maxx)." ".($e->maxy);
//gera o mapa
if ($tema != ""){
$listatema = explode(" ",$tema);
//para o caso do tema ser um arquivo mapfile existente em uma pasta qualquer
//$temai3geo = true indica que o layer será buscado na pasta i3geo/temas
$temai3geo = true;
//FIXME nao aceita gvp quando o caminho e completo
if(file_exists($_GET["tema"]) && !isset($id_medida_variavel)){
$nmap = ms_newMapobj($_GET["tema"]);
$temai3geo = false;
$nmap->setmetadata("ows_enable_request","*");
}
foreach ($listatema as $tx){
$extensao = ".map";
if($temai3geo == true && file_exists($locaplic."/temas/".$tx.".php")){
$extensao = ".php";
}
if($temai3geo == true && file_exists($locaplic."/temas/".$tx.".gvp")){
$extensao = ".gvp";
}
if($extensao == ".map"){
//cria o mapfile com base no sistema de metadados estatisticos
//verifica se o id_medida_variavel existe no mapfile e nao foi passado como um parametro
if(!isset($id_medida_variavel) && $temai3geo == true){
$nmap = ms_newMapobj($locaplic."/temas/".$tx.".map");
$l = $nmap->getlayer(0);
$teste = $l->getmetadata("METAESTAT_ID_MEDIDA_VARIAVEL");
if($teste != "" && $l->data == ""){
$id_medida_variavel = $teste;
}
}
if(isset($id_medida_variavel)){
$temai3geo = false;
include("admin/php/classe_metaestat.php");
$m = new Metaestat();
$m->nomecache = "ogcmetaestat".$id_medida_variavel;
$mapfileMetaestat = $m->mapfileMedidaVariavel($id_medida_variavel,"",1,"","","","","","",true);
$nmap = ms_newMapobj($mapfileMetaestat["mapfile"]);
$nmap->setmetadata("ows_enable_request","*");
$req->setParameter("LAYERS", "ogcmetaestat".$id_medida_variavel);
}
if($temai3geo == true){
$nmap = ms_newMapobj($locaplic."/temas/".$tx.".map");
$nmap->setmetadata("ows_enable_request","*");
}
if($temai3geo == false || empty($layers)){
$ts = $nmap->getalllayernames();
$nmap->setmetadata("ows_enable_request","*");
}
else{
$ts = explode(",",str_replace(" ",",",$layers));
}
foreach ($ts as $t){
$l = $nmap->getlayerbyname($t);
$permite = $l->getmetadata("permiteogc");
if(strtolower($permite) != "nao"){
//necessário pq o mapfile pode ter todos os layers como default
if($temai3geo == false){
$l->set("status",MS_OFF);
}
/*
if($cache == true && strtolower($l->getmetadata('cache')) == 'sim' && $tipo == '' && count($tema) == 1){
carregaCacheImagem($_GET['BBOX'],$tx,$_GET['WIDTH'],$_GET['HEIGHT'],$cachedir);
}
*/
$l->setmetadata("ows_title",pegaNome($l));
$l->setmetadata("ows_srs",$listaepsg);
$l->set("group","");
//essa linha é necessária pq as vezes no mapfile não tem nenhum layer com o nome igual ao nome do mapfile
if(count($ts)==1 && $temai3geo == true){
$l->set("name",$tx);
}
$l->setmetadata("gml_include_items","all");
$l->set("template","none.htm");
$l->set("dump",MS_TRUE);
$l->setmetadata("WMS_INCLUDE_ITEMS","all");
$l->setmetadata("WFS_INCLUDE_ITEMS","all");
if(file_exists($locaplic."/temas/miniaturas/".$t.".map.mini.png")){
$mini = $proto.$server.dirname($_SERVER['PHP_SELF'])."/temas/miniaturas/".$t.".map.mini.png";
$l->setmetadata("wms_attribution_logourl_format","image/png");
$l->setmetadata("wms_attribution_logourl_height","50");
$l->setmetadata("wms_attribution_logourl_width","50");
$l->setmetadata("wms_attribution_logourl_href",$mini);
}
if($l->type == MS_LAYER_RASTER && $l->numclasses > 0){
$c = $l->getclass(0);
if($c->name == ""){
$c->name = " ";
}
}
//inclui extensao geografica
$extensao = $l->getmetadata("EXTENSAO");
if($extensao == ""){
$extensao = $extensaoMap;
}
$l->setmetadata("wms_extent",$extensao);
if (!empty($postgis_mapa)){
if ($l->connectiontype == MS_POSTGIS){
$lcon = $l->connection;
if (($lcon == " ") || ($lcon == "") || (in_array($lcon,array_keys($postgis_mapa)))){
//
//o metadata CONEXAOORIGINAL guarda o valor original para posterior substituição
//
if(($lcon == " ") || ($lcon == "")){
$l->set("connection",$postgis_mapa);
$l->setmetadata("CONEXAOORIGINAL",$lcon);
}
else{
$l->set("connection",$postgis_mapa[$lcon]);
$l->setmetadata("CONEXAOORIGINAL",$lcon);
}
}
}
}
autoClasses($l,$oMap);
if($versao > 5){
$pr = $l->getProcessing();
if(!in_array("LABEL_NO_CLIP=True",$pr)){
$l->setprocessing("LABEL_NO_CLIP=True");
}
if(!in_array("POLYLINE_NO_CLIP=True",$pr)){
$l->setprocessing("POLYLINE_NO_CLIP=True");
}
}
//
//verifica se existem parametros de substituicao passados via url
//
$parametro = $_GET["map_layer_".$l->name."_filter"];
//echo $parametro;exit;
if(!empty($parametro)){
$l->setfilter($parametro);
$cache = false;
}
ms_newLayerObj($oMap, $l);
//$req->setParameter("LAYERS", "mundo");
}
}
}
if($extensao == ".php"){
include_once($locaplic."/temas/".$tx.".php");
eval($tx."(\$oMap);");
}
if($extensao == ".gvp"){
include_once($locaplic."/pacotes/gvsig/gvsig2mapfile/class.gvsig2mapfile.php");
$gm = new gvsig2mapfile($locaplic."/temas/".$tx.".gvp");
$gvsigview = $gm->getViewsNames();
foreach($gvsigview as $gv){
$dataView = $gm->getViewData($gv);
$oMap = $gm->addLayers($oMap,$gv,$dataView["layerNames"]);
}
$numlayers = $oMap->numlayers;
$lys = array();
//$layers[] = "default";
for ($i=0;$i < $numlayers;$i++){
$l = $oMap->getlayer($i);
$l->setmetadata("gml_include_items","all");
$l->set("dump",MS_TRUE);
$l->setmetadata("WMS_INCLUDE_ITEMS","all");
$l->setmetadata("WFS_INCLUDE_ITEMS","all");
$l->setmetadata("ows_srs",$listaepsg);
$l->setmetadata("ows_title",$l->getmetadata("TEMA"));
$l->set("status",MS_OFF);
$lys[] = $l->name;
if(file_exists($locaplic."/temas/miniaturas/".$tx.".map.mini.png")){
$mini = $proto.$server.dirname($_SERVER['PHP_SELF'])."/temas/miniaturas/".$tx.".map.mini.png";
$l->setmetadata("wms_attribution_logourl_format","image/png");
$l->setmetadata("wms_attribution_logourl_height","50");
$l->setmetadata("wms_attribution_logourl_width","50");
$l->setmetadata("wms_attribution_logourl_href",$mini);
}
if($l->type == MS_LAYER_RASTER && $l->numclasses > 0){
$c = $l->getclass(0);
if($c->name == ""){
$c->name = " ";
}
}
//inclui extensao geografica
$extensao = $l->getmetadata("EXTENSAO");
if($extensao == ""){
$extensao = $extensaoMap;
}
$l->setmetadata("wms_extent",$extensao);
//
//numero de pixels que serao considerados para corte da imagem no caso de cache ativo e tema de pontos
//
if ($l->getmetadata("cortepixels") != ""){
$cortePixels = $l->getmetadata("cortepixels");
}
}
$req->setParameter("LAYERS", implode(",",$lys));
$req->setParameter("STYLES", "");
}
}
}
else{
$intervalo = "0,5000";
$conta = 0;
$int = explode(",",$intervalo);
$codigosTema = array();
if(empty($perfil)){
$perfil = "";
}
include("classesphp/classe_menutemas.php");
$m = new Menutemas("",$perfil,$locaplic,$urli3geo);
$menus = $m->pegaListaDeMenus();
foreach ($menus as $menu){
$grupos = $m->pegaListaDeGrupos($menu["idmenu"],$listasistemas="nao",$listasgrupos="sim");
foreach($grupos as $grupo){
if(strtolower($grupo["ogc"]) == "sim"){
foreach($grupo["subgrupos"] as $sgrupo){
if(strtolower($sgrupo["ogc"]) == "sim"){
$lts = $m->pegaListaDeTemas($grupo["id_n1"],$sgrupo["id_n2"],$menu["idmenu"]);
foreach($lts as $t){
if(strtolower($t["ogc"]) == "sim"){
$codigosTema[] = array("tema"=>$t["tid"],"fonte"=>$t["link"]);
}
}
}
}
}
}
}
foreach($codigosTema as $c){
$codigoTema = $c["tema"];
if(file_exists($locaplic."/temas/".$codigoTema.".map")){
if (@ms_newMapobj($locaplic."/temas/".$codigoTema.".map")){
$nmap = ms_newMapobj($locaplic."/temas/".$codigoTema.".map");
$nmap->setmetadata("ows_enable_request","*");
$ts = $nmap->getalllayernames();
foreach ($ts as $t){
if ($oMap->getlayerbyname($t) == ""){
$l = $nmap->getlayerbyname($t);
$extensao = $l->getmetadata("EXTENSAO");
if($extensao == ""){
$extensao = $extensaoMap;
}
$l->setmetadata("wms_extent",$extensao);
$l->setmetadata("ows_title",pegaNome($l));
$l->setmetadata("ows_srs",$listaepsg);
$l->set("status",MS_OFF);
$l->setmetadata("gml_include_items","all");
$l->set("dump",MS_TRUE);
$l->setmetadata("WMS_INCLUDE_ITEMS","all");
$l->setmetadata("WFS_INCLUDE_ITEMS","all");
if($l->getmetadata("ows_metadataurl_href") == ""){
$l->setmetadata("ows_metadataurl_href",$c["fonte"]);
$l->setmetadata("ows_metadataurl_type","TC211");
$l->setmetadata("ows_metadataurl_format","text/html");
}
if(file_exists($locaplic."/temas/miniaturas/".$t.".map.mini.png")){
$mini = $proto.$server.dirname($_SERVER['PHP_SELF'])."/temas/miniaturas/".$t.".map.mini.png";
$l->setmetadata("wms_attribution_logourl_format","image/png");
$l->setmetadata("wms_attribution_logourl_height","50");
$l->setmetadata("wms_attribution_logourl_width","50");
$l->setmetadata("wms_attribution_logourl_href",$mini);
}
//
//numero de pixels que serao considerados para corte da imagem no caso de cache ativo e tema de pontos
//
if ($l->getmetadata("cortepixels") != ""){
$cortePixels = $l->getmetadata("cortepixels");
}
cloneInlineSymbol($l,$nmap,$oMap);
ms_newLayerObj($oMap, $l);
}
}
}
else{
echo "Erro no arquivo ".$locaplic."/temas/".$codigoTema.".map
";
$error = ms_GetErrorObj();
while($error && $error->code != MS_NOERR){
printf("
Error in %s: %s
\n", $error->routine, $error->message);
$error = $error->next();
}
}
}
}
}
//
//a imagem do mapa recebera a legenda
//
if((isset($legenda)) && (strtolower($legenda) == "sim")){
$leg = $oMap->legend;
$leg->set("status",MS_EMBED);
}
$oMap->setSymbolSet($locaplic."/symbols/".basename($oMap->symbolsetfilename));
$oMap->setFontSet($locaplic."/symbols/".basename($oMap->fontsetfilename));
//
//caso seja download ou json ou csv
//
processaOutputformatMapfile();
$oMap->save($nomeMapfileTmp);
$oMap = ms_newMapobj($nomeMapfileTmp);
}
if(ob_get_contents ()){
ob_end_clean();
}
//
//verifica se a requisicao e do tipo TMS.
//
//
//calcula a extensao geografica com base no x,y,z em requisisoes TMS
//quando for do tipo tms $_GET["tms"] contem os parametros do tile
//essa rotina faz um exit ao final
//o cache tms so fucniona se houver apenas uma camada no mapa
//tms e usado basicamente por mashup ou openlayers
//
if(isset($_GET["tms"])){
$temp = explode("/",$_GET["tms"]);
$z = $temp[2];
$x = $temp[3];
$y = str_replace(".png","",$temp[4]);
$n = pow(2,$z+1);
$lon1 = $x / $n * 360.0 - 180.0;
$lon2 = ($x+1) / $n * 360.0 - 180.0;
$n = pow(2,$z);
$lat1 = $y / $n * 180.0 - 90.0;
$lat2 = ($y+1) / $n * 180.0 - 90.0;
//essa funcao termina o processo se a imagem existir
if($cache == true){
carregaCacheImagem($cachedir,$nomeMapfileTmp,$_GET["tms"]);
}
$layer0 = $oMap->getlayer(0);
//
//numero de pixels que serao considerados para corte da imagem no caso de cache ativo e tema de pontos
//
if ($layer0->getmetadata("cortepixels") != ""){
$cortePixels = $layer0->getmetadata("cortepixels");
}
//se nao existir, salva a imagem
//echo $lon1." ".$lat1." ".$lon2." ".$lat2;exit;
$oMap->setsize(256,256);
$oMap->setExtent($lon1,$lat1,$lon2,$lat2);
$layer0->set("status",MS_DEFAULT);
//
//se o layer foi marcado para corte altera os parametros para ampliar o mapa
//antes de gerar a imagem
//
if($cortePixels > 0){
//$oMap->prepareImage();
$escalaInicial = $oMap->scaledenom;
$extensaoInicial = $oMap->extent;
$wh = 256+($cortePixels*2);
$oMap->setsize($wh,$wh);
$ponto = new pointObj();
$ponto->setxy(($wh/2),($wh/2));
$oMap->zoomScale($escalaInicial, $ponto, $wh, $wh, $extensaoInicial);
}
$img = $oMap->draw();
if($img->imagepath == ""){
exit;
}
if($cache == true){
salvaCacheImagem($cachedir,$nomeMapfileTmp,$_GET["tms"]);
}
renderNocacheTms();
}
//
//verifica se a chamada do servico e do tipo TILE no padrao do Google
//
if(isset($_GET["Z"]) && isset($_GET["X"])){
$x = $_GET["X"];
$y = $_GET["Y"];
$z = $_GET["Z"];
$layer0 = $oMap->getlayer(0);
//
//numero de pixels que serao considerados para corte da imagem no caso de cache ativo e tema de pontos
//
if ($layer0->getmetadata("cortepixels") != ""){
$cortePixels = $layer0->getmetadata("cortepixels");
}
if($cache == true){
carregaCacheImagem($cachedir,$nomeMapfileTmp,"/googlemaps/$layer0->name/$z/$x/$y");
}
$n = pow(2,$z);
$lon1 = $x / $n * 360.0 - 180.0;
$lat2 = rad2deg(atan(sinh(pi() * (1 - 2 * $y / $n))));
$x++;
$y++;
$lon2 = $x / $n * 360.0 - 180.0;
$lat1 = rad2deg(atan(sinh(pi() * (1 - 2 * $y / $n))));
$x--;
$y--;
$projInObj = ms_newprojectionobj("proj=latlong,a=6378137,b=6378137");
$projOutObj = ms_newprojectionobj("proj=merc,a=6378137,b=6378137,lat_ts=0.0,lon_0=0.0,x_0=0.0,y_0=0,k=1.0,units=m");
$poPoint1 = ms_newpointobj();
$poPoint1->setXY($lon1, $lat1);
$poPoint1->project($projInObj, $projOutObj);
$poPoint2 = ms_newpointobj();
$poPoint2->setXY($lon2, $lat2);
$poPoint2->project($projInObj, $projOutObj);
$oMap->setsize(256,256);
$oMap->setExtent($poPoint1->x,$poPoint1->y,$poPoint2->x,$poPoint2->y);
$oMap->getlayer(0)->set("status",MS_DEFAULT);
$oMap->setProjection("proj=merc,a=6378137,b=6378137,lat_ts=0.0,lon_0=0.0,x_0=0.0,y_0=0,k=1.0,units=m");
$layer0->setProjection("proj=latlong,a=6378137,b=6378137");
//
//se o layer foi marcado para corte altera os parametros para ampliar o mapa
//antes de gerar a imagem
//
if($cortePixels > 0){
//$oMap->prepareImage();
$escalaInicial = $oMap->scaledenom;
$extensaoInicial = $oMap->extent;
$wh = 256+($cortePixels*2);
$oMap->setsize($wh,$wh);
$ponto = new pointObj();
$ponto->setxy(($wh/2),($wh/2));
$oMap->zoomScale($escalaInicial, $ponto, $wh, $wh, $extensaoInicial);
}
$img = $oMap->draw();
if($img->imagepath == ""){
exit;
}
if($cache == true){
salvaCacheImagem($cachedir,$nomeMapfileTmp,"/googlemaps/$layer0->name/$z/$x/$y");
}
renderNocacheTms();
}
if(strtolower($req->getValueByName("REQUEST")) == "getlegendgraphic"){
$l = $oMap->getlayer(0);
if($req->getValueByName("LAYER") == ""){
$req->setParameter("LAYER",$l->name);
}
//muda o title se for vazio
$nclass = $l->numclasses;
for($i=0;$i<$nclass;$i++){
$classe = $l->getclass($i);
if($classe->title === ""){
$classe->title = $classe->name;
}
}
if($req->getValueByName("FORMAT") == ""){
$req->setParameter("FORMAT","image/png");
}
$legenda = $oMap->legend;
$legenda->set("status",MS_ON);
$l->set("minscaledenom",0);
$l->set("maxscaledenom",0);
if($req->getValueByName("FORMAT") == "text/html"){
//$req->setParameter("FORMAT","image/png");
$l = $oMap->getlayerbyname($req->getValueByName("LAYER"));
$l->set("status",MS_DEFAULT);
//remove offset de simbolos pontuais
$nclass = $l->numclasses;
for($cc = 0; $cc < $nclass; $cc++){
$classe = $l->getclass($cc);
if($classe->numstyles > 0){
$estilo = $classe->getstyle(0);
if($estilo->symbolname != "" && file_exists($estilo->symbolname)){
$estilo->set("offsetx",0);
$estilo->set("offsety",0);
}
}
}
$legenda->set("template",$locaplic."/aplicmap/legendaOgc.html");
$tmparray["my_tag"] = "value_of_my_tag";
if($leg = @$oMap->processlegendtemplate($tmparray)){
if (function_exists("mb_convert_encoding")){
$leg = mb_convert_encoding($leg,"UTF-8","ISO-8859-1");
}
echo $leg;
exit;
}
}
}
if(strtolower($req->getValueByName("REQUEST")) == "getfeature"){
$l = $oMap->getlayer(0);
if($req->getValueByName("TYPENAME") == "" || $req->getValueByName("TYPENAME") == "undefined"){
$req->setParameter("TYPENAME",$l->name);
}
if($l->getProjection() == "" ){
$l->setProjection("proj=latlong,a=6378137,b=6378137");
}
if(strtolower($req->getValueByName("SRS")) == "epsg:900913"){
$req->setParameter("SRS","EPSG:3857");
}
}
if(strtolower($req->getValueByName("REQUEST")) == "getfeatureinfo"){
$l = $oMap->getlayer(0);
$req->setParameter("LAYERS",$l->name);
$req->setParameter("QUERY_LAYERS",$l->name);
if(strtolower($req->getValueByName("SRS")) == "epsg:900913"){
$req->setParameter("SRS","EPSG:3857");
$_GET["SRS"] = "EPSG:3857";
}
}
ms_ioinstallstdouttobuffer();
//
//verifica parametro outputformat e ajusta a requisicao
//
if(strtolower($req->getValueByName("REQUEST")) == "getmap" && $req->getValueByName("format") == ""){
$req->setParameter("format","image/png");
}
if(strtolower($req->getValueByName("REQUEST")) == "getfeatureinfo" && $_GET["info_format"] == "text/xml"){
$req->setParameter("info_format","application/vnd.ogc.gml");
}
//json conforme cesium
if(strtolower($req->getValueByName("REQUEST")) == "getfeatureinfo" && $_GET["info_format"] == "application/json"){
getfeatureinfoJson();
exit;
}
$oMap->owsdispatch($req);
$contenttype = ms_iostripstdoutbuffercontenttype();
if(strtolower($request) == "getcapabilities"){
header('Content-Disposition: attachment; filename=getcapabilities.xml');
}
if(!isset($OUTPUTFORMAT)){
header("Content-type: $contenttype");
}
//precisa limpar o cabecalho
if(strtolower($OUTPUTFORMAT) == "geojson" || strtolower($OUTPUTFORMAT) == "json"){
ms_iostripstdoutbuffercontentheaders();
//grava em disco
$arq = $dir_tmp."/".$tema.".json";
$contents = ms_iogetstdoutbufferstring();
file_put_contents($arq,$contents);
//envia para download
header("Content-type: application/json; subtype=geojson");
ms_iogetStdoutBufferBytes();
ms_ioresethandlers();
exit;
}
if(strtolower($OUTPUTFORMAT) == "shape-zip"){
//grava em disco
$arq = $dir_tmp."/".$tema."_shapefile.zip";
$contents = ms_iogetstdoutbufferstring();
file_put_contents($arq,$contents);
//envia para download
header('Content-Disposition: attachment; filename='.$tema.'_shapefile.zip');
ms_iogetStdoutBufferBytes();
ms_ioresethandlers();
exit;
}
if(strtolower($OUTPUTFORMAT) == "csv"){
ms_iostripstdoutbuffercontentheaders();
//grava em disco
$arq = $dir_tmp."/".$tema.$ows_geomtype.".csv";
$contents = ms_iogetstdoutbufferstring();
file_put_contents($arq,$contents);
//envia para download
header('Content-Disposition: attachment; filename='.$tema.$ows_geomtype.'.csv');
header("Content-type: text/csv");
ms_iogetStdoutBufferBytes();
ms_ioresethandlers();
exit;
}
$buffer = ms_iogetStdoutBufferBytes();
ms_ioresethandlers();
//
//funções
//
function ogc_pegaListaDeMenus(){
global $perfil,$locaplic,$urli3geo;
if(!isset($perfil)){
$perfil = "";
}
$m = new Menutemas("",$perfil,$locsistemas,$locaplic,"",$urli3geo);
foreach($m->pegaListaDeMenus() as $menu)
{
$menus[] = $urli3geo."/admin/xmlmenutemas.php?id_menu=".$menu["idmenu"];
}
return $menus;
}
function ogc_imprimeAjuda(){
echo "
Construtor de web services do I3Geo.
"; echo "Esse programa usa os arquivos mapfiles existentes em
"; echo "i3geo/temas para gerar web services OGC.
"; echo "Para escolher um tema, utilize:
"; echo "ogc.php?lista=temas - para listar os temas disponíveis
"; echo "Para usar esse web service voce pode usar o parametro &tema=,
"; echo "ou seja,http://[host]/i3geo/ogc.php?tema=[codigo do tema]
"; echo "no lugar do codigo pode ser especificado um arquivo mapfile qualquer. "; echo "Nesse caso, deve ser digitado o caminho completo no servidor
"; echo "Utilize o sistema de administracao do i3Geo para configurar quais os temas da pasta i3geo/temas podem ser utilizados.
"; echo "Utilize o parametro restauramapa para indicar o ID de um mapa salvo no banco
"; echo "de dados de administracao para utiliza-lo como um WMS"; } function ogc_imprimeListaDeTemas(){ global $urli3geo,$perfil,$locaplic; $m = new Menutemas("",$perfil,$locaplic,$urli3geo); $menus = $m->pegaListaDeMenus(); echo 'WMS '; echo "Lista de temas por grupos e subgrupos e endereços de acesso aos dados por meio de Web Services WMS (os códigos dos temas estão em vermelho)
"; $imprimir = ""; foreach ($menus as $menu){ $grupos = $m->pegaListaDeGrupos($menu["idmenu"],$listasistemas="nao",$listasgrupos="sim"); foreach($grupos as $grupo){ if(!empty($grupo["ogc"]) && strtolower($grupo["ogc"]) == "sim"){ $imprimegrupo = "".texto2iso($grupo["nome"]).""; foreach($grupo["subgrupos"] as $sgrupo){ if(strtolower($sgrupo["ogc"]) == "sim"){ $imprimesubgrupo = $sgrupo["nome"]; $lts = $m->pegaListaDeTemas($grupo["id_n1"],$sgrupo["id_n2"],$menu["idmenu"]); foreach($lts as $t){ if(strtolower($t["ogc"]) == "sim"){ $imprimir .= texto2iso($imprimegrupo)."->".texto2iso($imprimesubgrupo)."
"; $imprimir .= " "; $imprimir .= "".$t["tid"].""; $imprimir .= " - ".texto2iso($t["nome"])." "; $imprimir .= " Getcapabilities"; $imprimir .= " GetMap "; if($t["link"] != " ") $imprimir .= " fonte"; $imprimir .= "
"; } } } } } } } echo $imprimir.""; } function ogc_imprimeListaDeTemasWfs(){ global $urli3geo,$perfil,$locaplic; $m = new Menutemas("",$perfil,$locaplic,$urli3geo); $menus = $m->pegaListaDeMenus(); echo 'WFS '; echo "Lista de temas por grupos e subgrupos e endereços de acesso aos dados por meio de Web Services WFS (os códigos dos temas estão em vermelho)
"; $imprimir = ""; foreach ($menus as $menu){ $grupos = $m->pegaListaDeGrupos($menu["idmenu"],$listasistemas="nao",$listasgrupos="sim"); foreach($grupos as $grupo){ if(strtolower($grupo["ogc"]) == "sim"){ $imprimegrupo = "".$grupo["nome"].""; foreach($grupo["subgrupos"] as $sgrupo){ if(strtolower($sgrupo["ogc"]) == "sim"){ $imprimesubgrupo = $sgrupo["nome"]; $lts = $m->pegaListaDeTemas($grupo["id_n1"],$sgrupo["id_n2"],$menu["idmenu"]); foreach($lts as $t){ if(strtolower($t["ogc"]) == "sim" && strtolower($t["down"]) !== "nao"){ $imprimir .= $imprimegrupo."->".$imprimesubgrupo."
"; $imprimir .= " "; $imprimir .= "".$t["tid"].""; $imprimir .= " - ".$t["nome"]." "; $imprimir .= " Getcapabilities"; $imprimir .= " Getfeature "; if($t["link"] != " ") $imprimir .= " fonte"; $imprimir .= "
"; } } } } } } } echo $imprimir.""; } function carregaCacheImagem($cachedir,$map,$tms){ global $dir_tmp; if($cachedir == ""){ $nome = $dir_tmp."/cache".$tms; } else{ $nome = $cachedir.$tms; } if(file_exists($nome)){ header('Content-Length: '.filesize($nome)); header('Content-Type: image/png'); header('Cache-Control: max-age=3600, must-revalidate'); header('Expires: ' . gmdate('D, d M Y H:i:s', time()+24*60*60) . ' GMT'); header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($nome)).' GMT', true, 200); $etag = md5_file($nome); header('Etag: '.$etag); readfile($nome); exit; } } function salvaCacheImagem($cachedir,$map,$tms){ global $img,$dir_tmp,$cortePixels; if($cachedir == ""){ $nome = $dir_tmp."/cache".$tms; } else{ $nome = $cachedir.$tms; } @mkdir(dirname($nome),0777,true); chmod(dirname($nome),0777); $img->saveImage($nome); // //corta a imagem gerada para voltar ao tamanho normal // if($cortePixels > 0){ $img = imagecreatefrompng($nome); $imgc = imagecreate(256,256); imagesavealpha($imgc, true); // Fill the image with transparent color $color = imagecolorallocatealpha($imgc,0x00,0x00,0x00,127); imagefill($imgc, 0, 0, $color); imagecopy($imgc, $img, 0 , 0 , $cortePixels , $cortePixels , 256, 256); imagepng($imgc,$nome); } chmod($nome,0777); header('Content-Length: '.filesize($nome)); header('Content-Type: image/png'); header('Cache-Control: max-age=3600, must-revalidate'); header('Expires: ' . gmdate('D, d M Y H:i:s', time()+24*60*60) . ' GMT'); header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($nome)).' GMT', true, 200); readfile($nome); exit; } function texto2iso($texto){ if (function_exists("mb_convert_encoding")){ if (mb_detect_encoding($texto,"UTF-8",true)){ $texto = mb_convert_encoding($texto,"ISO-8859-1","UTF-8"); } } return $texto; } function nomeRand($n=10) { $nomes = ""; $a = 'azertyuiopqsdfghjklmwxcvbnABCDEFGHIJKLMNOPQRSTUVWXYZ'; $max = 51; for($i=0; $i < $n; ++$i) { $nomes .= $a{mt_rand(0, $max)}; } return $nomes; } function renderNocacheTms(){ global $img,$i3georendermode,$dir_tmp,$cortePixels; if($i3georendermode == 1 && $cortePixels == 0){ ob_clean(); header('Content-Type: image/png'); $img->saveImage(); exit; } if($i3georendermode == 1 && $cortePixels > 0){ $i3georendermode = 0; } $nomer = $dir_tmp."/temp".nomeRand().".png"; $img->saveImage($nomer); // //corta a imagem gerada para voltar ao tamanho normal // if($cortePixels > 0){ $img = imagecreatefrompng($nomer); $imgc = imagecreate(256,256); imagecopy( $imgc, $img, 0 , 0 , $cortePixels , $cortePixels , 256, 256 ); imagepng($imgc,$nomer); } if($i3georendermode == 0 || !isset($i3georendermode)){ header('Content-Length: '.filesize($nomer)); header('Content-Type: image/png'); header('Cache-Control: max-age=3600, must-revalidate'); header('Expires: ' . gmdate('D, d M Y H:i:s', time()+24*60*60) . ' GMT'); header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($nomer)).' GMT', true, 200); readfile($nomer); } if($i3georendermode == 2){ ob_clean(); header('Cache-Control: public, max-age=22222222'); header('Expires: ' . gmdate('D, d M Y H:i:s', time()+48*60*60) . ' GMT'); header("X-Sendfile: $nomer"); header("Content-type: image/png"); } } function getfeatureinfoJson(){ global $req, $oMap; $req->setParameter("info_format","application/vnd.ogc.gml"); $oMap->owsdispatch($req); ms_iostripstdoutbuffercontentheaders(); ob_clean(); $r = ms_iogetstdoutbufferstring(); //$r = converteenc($r); $nome = $oMap->getlayer(0)->name; $xml = simplexml_load_string($r); $json = json_encode($xml); $r = json_decode($json,TRUE); $propriedades = $r[$nome."_layer"]; $propriedades = $propriedades[$nome."_feature"]; $propriedades = converteenc(json_encode($propriedades)); $propriedades = json_decode($propriedades); $n = array(); $n[] = array ( "type" => "FeatureCollection", "features" => array( array( "type"=>"Feature", "id" => "", "geometry" => array(), "properties" => array( $propriedades ), "geometry_name" => "" ) ) ); header("Content-type: application/json"); $json = json_encode($n[0]); //verifica a substituicao de alias $itens = $oMap->getlayer(0)->getmetadata("ITENS"); // itens $itensdesc = $oMap->getlayer(0)->getmetadata("ITENSDESC"); // descrição dos itens $itens = explode(",",$itens); $itensdesc = explode(",",converteenc($itensdesc)); $n = count($itens); for($i = 0; $i < $n; $i++){ $json = str_ireplace($itens[$i],$itensdesc[$i],$json); } echo $json; } function processaOutputformatMapfile(){ global $OUTPUTFORMAT, $oMap, $tema, $ows_geomtype; if(strtolower($OUTPUTFORMAT) == "shape-zip"){ $l = $oMap->getlayer(0); $n = $l->name; $oMap->selectOutputFormat("shape-zip"); $oMap->outputformat->setOption("STORAGE", "filesystem"); $oMap->outputformat->setOption("FORM", "zip"); $oMap->outputformat->setOption("FILENAME", $tema."_shapefile.zip"); $l->setmetadata("wfs_getfeature_formatlist","shape-zip"); } if(strtolower($OUTPUTFORMAT) == "csv"){ $l = $oMap->getlayer(0); $n = $l->name."-csv"; $oMap->selectOutputFormat("csv"); $oMap->outputformat->setOption("STORAGE", "filesystem"); $oMap->outputformat->setOption("FILENAME", $tema.$ows_geomtype.".csv"); $oMap->outputformat->setOption("FORM", "simple"); if(isset($ows_geomtype) && $ows_geomtype != ""){ $oMap->outputformat->setOption("LCO:GEOMETRY", $ows_geomtype); } $l->setmetadata("wfs_getfeature_formatlist","csv"); } if(strtolower($OUTPUTFORMAT) == "geojson" || strtolower($OUTPUTFORMAT) == "json"){ $l = $oMap->getlayer(0); $oMap->selectOutputFormat("geojson"); $l->setmetadata("wfs_getfeature_formatlist","geojson"); } } function carregaCacheArquivo(){ global $dir_tmp, $tema, $OUTPUTFORMAT, $ows_geomtype; if(strtolower($OUTPUTFORMAT) == "shape-zip"){ $arq = $dir_tmp."/".$tema."_shapefile.zip"; if(file_exists($arq)){ header('Content-Disposition: attachment; filename='.$tema.'_shapefile.zip'); readfile($arq); exit; } } if(strtolower($OUTPUTFORMAT) == "csv"){ $arq = $dir_tmp."/".$tema.$ows_geomtype.".csv"; if(file_exists($arq)){ header('Content-Disposition: attachment; filename='.$tema.$ows_geomtype.'.csv'); header("Content-type: text/csv"); readfile($arq); exit; } } if(strtolower($OUTPUTFORMAT) == "geojson" || strtolower($OUTPUTFORMAT) == "json"){ $arq = $dir_tmp."/".$tema.".json"; if(file_exists($arq)){ header("Content-type: application/json; subtype=geojson"); readfile($arq); exit; } } } function restauraMapaSalvo(){ global $restauramapa, $dir_tmp, $tema; $xbase = restauraMapaAdmin($restauramapa,$dir_tmp); $m = ms_newMapObj($xbase); $w = $m->web; $w->set("imagepath",dirname($w->imagepath)."/"); $w->set("imageurl",dirname($w->imageurl)."/"); //apaga algumas camadas $l = $m->getlayerbyname("rosadosventos"); if($l != ""){ $l->set("status",MS_DELETE); } $l = $m->getlayerbyname("copyright"); if($l != ""){ $l->set("status",MS_DELETE); } $m->save($xbase); //$fundo = $xbase; $tema = $xbase; $_GET["tema"] = $xbase; $_GET["layers"] = ""; $l = $m->getlayer(0); $_GET["LAYERS"] = $l->name; } function converteenc($texto){ if (!mb_detect_encoding($texto,"UTF-8",true)){ $texto = mb_convert_encoding($texto,"UTF-8","ISO-8859-1"); } return $texto; } ?>