From 8a2751f17e6e3060845a8c066c63623600eab602 Mon Sep 17 00:00:00 2001 From: Edmar Moretti Date: Tue, 16 Feb 2010 21:33:33 +0000 Subject: [PATCH] Conclusão do mashup OpenLayers --- classesjs/classe_arvoredetemas.js | 2 +- mashups/openlayers.css | 6 ++++++ mashups/openlayers.js.php | 499 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ mashups/openlayers.php | 368 ++++++++++++++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ mashups/openlayers.png | Bin 15204 -> 0 bytes menutemas/admin.db | Bin 66560 -> 0 bytes 6 files changed, 520 insertions(+), 355 deletions(-) create mode 100644 mashups/openlayers.js.php diff --git a/classesjs/classe_arvoredetemas.js b/classesjs/classe_arvoredetemas.js index 1674b30..6864930 100644 --- a/classesjs/classe_arvoredetemas.js +++ b/classesjs/classe_arvoredetemas.js @@ -118,7 +118,7 @@ i3GEO.arvoreDeTemas = { Tipo: {Numeric} */ - FATORESTRELA: "1", + FATORESTRELA: "50", /* Propriedade: INCLUISISTEMAS diff --git a/mashups/openlayers.css b/mashups/openlayers.css index 321beda..bad79c8 100644 --- a/mashups/openlayers.css +++ b/mashups/openlayers.css @@ -82,6 +82,12 @@ background-position:-377px 0; .olControlEditingToolbar .capturaItemActive { background-position:-377px -28px; } +.olControlEditingToolbar .procuraItemInactive { +background-position:-406px 0; +} +.olControlEditingToolbar .procuraItemActive { +background-position:-406px -28px; +} diff --git a/mashups/openlayers.js.php b/mashups/openlayers.js.php new file mode 100644 index 0000000..bc718a5 --- /dev/null +++ b/mashups/openlayers.js.php @@ -0,0 +1,499 @@ +$i = function(id){return document.getElementById(id);}; +navn = false; +//seta as variáveis navn e navm +var navn = false; +var navm = false; +var app = navigator.appName.substring(0,1); +if (app==='N'){navn=true;}else{navm=true;} + +OpenLayers.ImgPath = "../pacotes/openlayers/img/" +OpenLayers.Lang.setCode("pt-BR"); +i3GEOOL = { + ol_mma: new OpenLayers.Layer.WMS( + "Base cartográfica", + "http://mapas.mma.gov.br/cgi-bin/mapserv?map=/opt/www/html/webservices/baseraster.map&", + {layers:'baseraster',SRS:'EPSG:4291'} + ), + ol_wms: new OpenLayers.Layer.WMS.Untiled( + "OpenLayers WMS", + "http://labs.metacarta.com/wms/vmap0", + {layers: 'basic'} + ), + jpl_wms: new OpenLayers.Layer.WMS( + "NASA Global Mosaic", + "http://t1.hypercube.telascience.org/cgi-bin/landsat7", + {layers: "landsat7"} + ), + layergrafico: new OpenLayers.Layer.Vector("Edição"), + layersIniciais: , + botoes: , + mapa: new OpenLayers.Map('i3geoMapa', { + controls: [ + + ], + numZoomLevels: , + maxExtent: new OpenLayers.Bounds() + }), + inicia: function(){ + i3GEOOL.jpl_wms.setVisibility(false); + i3GEOOL.ol_wms.setVisibility(false); + i3GEOOL.mapa.addLayers([ + i3GEOOL.ol_mma, + i3GEOOL.ol_wms, + i3GEOOL.jpl_wms, + i3GEOOL.layersIniciais, + i3GEOOL.layergrafico + ]); + i3GEOOL.mapa.zoomToMaxExtent(); + i3GEOOL.coordenadas(); + i3GEOOL.criaJanelaBusca(); + i3GEOOL.criaJanelaAtivaTema(); + i3GEOOL.criaBotoes(i3GEOOL.botoes); + }, + layersLigados: function(){ + var layers = i3GEOOL.mapa.layers; + var nlayers = layers.length; + var ins = new Array(); + for(i=0;iLat: "+d[1]; + } + catch(e){ + if(typeof(console) !== 'undefined'){console.error(e);} + } + }); + } + }, + criaJanelaBusca: function(){ + var layers = i3GEOOL.layersLigados(); + var nlayers = layers.length; + var combo = ""; + var ins = "
Tema:
"+combo; + ins += "
Item:
"; + ins += "
Procurar por:
"; + ins += "

"; + ins += "
Resultado:
"; + YAHOO.namespace("procura.container"); + YAHOO.procura.container.panel = new YAHOO.widget.Panel("panelprocura", {zIndex:2000, iframe:false, width:"250px", visible:false, draggable:true, close:true } ); + YAHOO.procura.container.panel.setHeader("Encontre no mapa"); + YAHOO.procura.container.panel.setBody(ins); + YAHOO.procura.container.panel.setFooter(""); + YAHOO.procura.container.panel.render(document.body); + YAHOO.procura.container.panel.center(); + document.getElementById("i3GEOOLbotaoBusca").onclick = function(){ + var layer = i3GEOOL.layerAtivo(); + var item = document.getElementById("i3GEOOLbuscaItem").value; + var palavra = document.getElementById("i3GEOOLpalavraBusca").value; + if(item == "" || palavra == "") + {alert("Escolha o item e o texto de busca");return;} + i3GEOOL.busca(layer,item,palavra,"i3GEOOLcomboresultado"); + }; + document.getElementById("i3GEOOLlistaTemasBusca").onchange = function(){ + i3GEOOL.ativaTema(this.value); + document.getElementById("i3GEOOLcomboitens").innerHTML = "..."; + i3GEOOL.listaItens(i3GEOOL.layerAtivo(),"i3GEOOLcomboitens","i3GEOOLbuscaItem"); + }; + }, + criaJanelaAtivaTema: function(){ + var layers = i3GEOOL.layersLigados(); + var nlayers = layers.length; + var combo = ""; + YAHOO.namespace("temaativo.container"); + YAHOO.temaativo.container.panel = new YAHOO.widget.Panel("paneltemaativo", {zIndex:2000, iframe:false, width:"250px", visible:false, draggable:true, close:true } ); + YAHOO.temaativo.container.panel.setHeader("Tema ativo"); + YAHOO.temaativo.container.panel.setBody(combo); + YAHOO.temaativo.container.panel.setFooter(""); + YAHOO.temaativo.container.panel.render(document.body); + YAHOO.temaativo.container.panel.center(); + document.getElementById("i3GEOOLlistaTemasAtivos").onchange = function(){ + if(botaoIdentifica){ + botaoIdentifica.layers = [i3GEOOL.layersLigados()[this.value]]; + } + }; + }, + ativaTema: function(id){ + document.getElementById("i3GEOOLlistaTemasAtivos").value = id; + }, + layerAtivo: function(){ + var id = document.getElementById("i3GEOOLlistaTemasAtivos").value; + return i3GEOOL.layersLigados()[id]; + }, + listaItens: function(layer,idonde,idobj){ + if(!layer){return;} + if(!layer.params){return;} + var u = layer.url+"&request=describefeaturetype&service=wfs&version=1.0.0"; + u += "&typename="+layer.params.LAYERS; + document.body.style.cursor="wait"; + document.getElementById("i3geoMapa").style.cursor = "wait"; + OpenLayers.Request.issue({ + method: "GET", + url: u, + callback: function(retorno){ + document.body.style.cursor="default"; + document.getElementById("i3geoMapa").style.cursor = "default"; + var fromgml = new OpenLayers.Format.WFSDescribeFeatureType({ + geometryName: "msGeometry" + }); + var gml = fromgml.read(retorno.responseText); + var prop = gml.featureTypes[0].properties; + var nprop = prop.length; + var itens = new Array(); + var combo = ""; + document.getElementById(idonde).innerHTML = combo; + + }, + failure: function(){ + document.body.style.cursor="default"; + document.getElementById("i3geoMapa").style.cursor = "default"; + alert("Erro"); + } + }) + }, + busca: function(layer,item,palavra,onde){ + document.body.style.cursor="wait"; + document.getElementById("i3geoMapa").style.cursor = "wait"; + var u = layer.url+"&request=getfeature&service=wfs&version=1.0.0"; + u += "&OUTPUTFORMAT=gml2&typename="+layer.params.LAYERS; + u += "&filter="+item+"*"+palavra+"*"; + document.body.style.cursor="wait"; + document.getElementById("i3geoMapa").style.cursor = "wait"; + document.getElementById(onde).innerHTML = "..."; + OpenLayers.Request.issue({ + method: "GET", + url: u, + callback: function(retorno){ + document.body.style.cursor="default"; + document.getElementById("i3geoMapa").style.cursor = "default"; + var fromgml = new OpenLayers.Format.GML({ + geometryName: "msGeometry" + }); + var gml = fromgml.read(retorno.responseText); + var ngml = gml.length; + var ins = ""; + document.getElementById(onde).innerHTML = ins; + }, + failure: function(){ + document.body.style.cursor="default"; + document.getElementById("i3geoMapa").style.cursor = "default"; + alert("Erro"); + } + }) + }, + zoomPara: function(bbox){ + var b = new OpenLayers.Bounds.fromString(bbox); + i3GEOOL.mapa.zoomToExtent(b); + }, + mostraLegenda: function(){ + var layers = i3GEOOL.layersLigados(); + var nlayers = layers.length; + var ins = ""; + for(i=0;i
"; + } + var w = window.open() + w.document.write(ins) + w.document.close(); + }, + captura: function(lonlat){ + var layers = [i3GEOOL.layerAtivo()]; + var u = layers[0].url+"&request=getfeature&service=wfs&version=1.0.0"; + u += "&OUTPUTFORMAT=gml2&typename="+layers[0].params.LAYERS; + u += "&filter=Geometry"+lonlat+""; + document.body.style.cursor="wait"; + document.getElementById("i3geoMapa").style.cursor = "wait"; + OpenLayers.Request.issue({ + method: "GET", + url: u, + callback: function(retorno){ + document.body.style.cursor="default"; + document.getElementById("i3geoMapa").style.cursor = "default"; + var fromgml = new OpenLayers.Format.GML({ + geometryName: "msGeometry" + }); + var gml = fromgml.read(retorno.responseText); + i3GEOOL.layergrafico.addFeatures(gml); + }, + failure: function(){ + document.body.style.cursor="default"; + document.getElementById("i3geoMapa").style.cursor = "default"; + alert("Erro"); + } + }) + }, + criaBotoes: function(botoes){ + var sketchSymbolizers = { + "Point": { + pointRadius: 4, + graphicName: "square", + fillColor: "white", + fillOpacity: 1, + strokeWidth: 1, + strokeOpacity: 1, + strokeColor: "#333333" + }, + "Line": { + strokeWidth: 3, + strokeOpacity: 1, + strokeColor: "#666666", + strokeDashstyle: "dash" + }, + "Polygon": { + strokeWidth: 2, + strokeOpacity: 1, + strokeColor: "#666666", + fillColor: "white", + fillOpacity: 0.3 + } + }; + var style = new OpenLayers.Style(); + style.addRules([ + new OpenLayers.Rule({symbolizer: sketchSymbolizers}) + ]); + var styleMap = new OpenLayers.StyleMap({"default": style}); + + var adiciona = false; + var controles = new Array(); + var panel = new OpenLayers.Control.Panel({ + displayClass: "olControlEditingToolbar noprint" + }); + if(botoes.procura==true){ + var button = new OpenLayers.Control.Button({ + displayClass: "procura", + trigger: function(){YAHOO.procura.container.panel.show();}, + title: "Procurar" + }); + controles.push(button); + var adiciona = true; + } + if(botoes.pan==true){ + controles.push(new OpenLayers.Control.Navigation({title: "Deslocar",displayClass:"pan"})); + var adiciona = true; + } + if(botoes.zoombox==true){ + controles.push(new OpenLayers.Control.ZoomBox({displayClass: "zoombox",title: "Zoom"})); + var adiciona = true; + } + if(botoes.zoomtot==true){ + var button = new OpenLayers.Control.Button({ + displayClass: "zoomtot", + trigger: function(){i3GEOOL.mapa.zoomToMaxExtent();}, + title: "Ajusta extensão" + }); + controles.push(button); + var adiciona = true; + } + if(botoes.legenda==true){ + var button = new OpenLayers.Control.Button({ + displayClass: "legenda", + trigger: function(){i3GEOOL.mostraLegenda();}, + title: "Legenda" + }); + controles.push(button); + var adiciona = true; + } + if(botoes.distancia==true){ + var button = new OpenLayers.Control.Measure( + OpenLayers.Handler.Path, + { + handlerOptions: {layerOptions: {styleMap: styleMap}}, + persist: true, + displayClass: "distancia", + title: "Distância" + } + ); + button.events.on({ + "measure": function(event){ + var units = event.units; + var measure = event.measure; + alert("Distância: " + measure.toFixed(3) + " " + units); + }, + }); + controles.push(button); + var adiciona = true; + } + if(botoes.area==true){ + var button = new OpenLayers.Control.Measure( + OpenLayers.Handler.Polygon, + { + handlerOptions: {layerOptions: {styleMap: styleMap}}, + persist: true, + displayClass: "area", + title: "Área" + } + ); + button.events.on({ + "measure": function(event){ + var units = event.units; + var measure = event.measure; + alert("Área: " + measure.toFixed(3) + " " + units + " quadrados"); + }, + }); + controles.push(button); + var adiciona = true; + } + if(botoes.identifica==true){ + botaoIdentifica = new OpenLayers.Control.WMSGetFeatureInfo({ + maxFeatures:1, + infoFormat:'text/plain', //'application/vnd.ogc.gml', + layers: [i3GEOOL.layerAtivo()], + queryVisible: true, + title: "Identificar", + displayClass: "identifica", + eventListeners: { + getfeatureinfo: function(event) { + var lonlat = i3GEOOL.mapa.getLonLatFromPixel(event.xy); + var lonlattexto = "
captura
"; + i3GEOOL.mapa.addPopup(new OpenLayers.Popup.FramedCloud( + "chicken", + i3GEOOL.mapa.getLonLatFromPixel(event.xy), + null, + lonlattexto+"
"+event.text+"
", + null, + true + )); + }, + activate: function(){ + YAHOO.temaativo.container.panel.show(); + } + } + }); + //button.events.register("getfeatureinfo", this, showInfo); + controles.push(botaoIdentifica); + var adiciona = true; + } + if(botoes.linha==true){ + button = new OpenLayers.Control.DrawFeature( + i3GEOOL.layergrafico, + OpenLayers.Handler.Path, + { + displayClass: "linha", + title: "digitalizar linha" + } + ); + controles.push(button); + var adiciona = true; + } + if(botoes.ponto==true){ + button = new OpenLayers.Control.DrawFeature( + i3GEOOL.layergrafico, + OpenLayers.Handler.Point, + { + displayClass: "ponto", + title: "digitalizar ponto" + } + ); + controles.push(button); + var adiciona = true; + } + if(botoes.poligono==true){ + button = new OpenLayers.Control.DrawFeature( + i3GEOOL.layergrafico, + OpenLayers.Handler.Polygon, + { + displayClass: "poligono", + title: "digitalizar polígono" + } + ); + controles.push(button); + var adiciona = true; + } + if(botoes.edita==true){ + button = new OpenLayers.Control.ModifyFeature( + i3GEOOL.layergrafico, + { + displayClass: "edita", + title: "edita elemento" + } + ); + controles.push(button); + var adiciona = true; + } + //botao de seleção + if(botoes.apaga==true){ + button = new OpenLayers.Control.SelectFeature( + i3GEOOL.layergrafico, + { + displayClass: "selecao", + title: "seleciona elemento", + clickout: true, + toggle: true, + multiple: false, + hover: false, + toggleKey: "ctrlKey", // ctrl key removes from selection + multipleKey: "shiftKey", // shift key adds to selection + box: false + } + ); + controles.push(button); + var adiciona = true; + } + if(botoes.apaga==true){ + var button = new OpenLayers.Control.Button({ + displayClass: "apaga", + trigger: function(){ + if(i3GEOOL.layergrafico.selectedFeatures.length > 0){ + var x = window.confirm("Exclui os elementos selecionados?"); + if(x) + {i3GEOOL.layergrafico.removeFeatures(i3GEOOL.layergrafico.selectedFeatures);} + } + else + {alert("Selecione pelo menos um elemento");} + }, + title: "Apaga selecionados" + }); + controles.push(button); + var adiciona = true; + } + // + //adiciona o painel ao mapa se alguma op��o foi inserida + // + if(adiciona == true){ + panel.addControls(controles); + i3GEOOL.mapa.addControl(panel); + } + } +}; + \ No newline at end of file diff --git a/mashups/openlayers.php b/mashups/openlayers.php index ef69e9b..1c1baca 100644 --- a/mashups/openlayers.php +++ b/mashups/openlayers.php @@ -90,7 +90,7 @@ if(!isset($botoes)){ $objBotoes[] = "'poligono':true"; $objBotoes[] = "'edita':true"; $objBotoes[] = "'apaga':true"; - $objBotoes[] = "'captura':false"; + $objBotoes[] = "'procura':true"; } else{ $botoes = str_replace(" ",",",$botoes); @@ -120,8 +120,8 @@ else{ {$objBotoes[] = "'edita':true";} if(in_array("apaga",$botoes)) {$objBotoes[] = "'apaga':true";} - if(in_array("captura",$botoes)) - {$objBotoes[] = "'captura':false";} + if(in_array("procura",$botoes)) + {$objBotoes[] = "'procura':false";} } $botoes = "{".implode(",",$objBotoes)."}"; // @@ -187,6 +187,7 @@ Parâmetros: edita apaga captura + procura Para ver a lista de códigos de temas, que podem ser utilizados no parâmetro 'temas', acesse: lista de temas. Os códigos são mostrados em vermelho. @@ -202,363 +203,22 @@ Parâmetros: + + + + + - - +
+
- + \ No newline at end of file diff --git a/mashups/openlayers.png b/mashups/openlayers.png index d7e8c3d..3d88830 100644 Binary files a/mashups/openlayers.png and b/mashups/openlayers.png differ diff --git a/menutemas/admin.db b/menutemas/admin.db index 674bfae..b8f2f96 100644 Binary files a/menutemas/admin.db and b/menutemas/admin.db differ -- libgit2 0.21.2