Commit cad328a447ea553a8fb587251e286c80444f1b91

Authored by Edmar Moretti
1 parent 8075909f

Inclusão da ferramenta para cálculo de centro médio e centro médio ponderado

admin/admin.db
No preview for this file type
classesjs/classe_analise.js
... ... @@ -153,6 +153,15 @@ i3GEO.analise = {
153 153 {i3GEO.util.dialogoFerramenta("i3GEO.analise.dialogo.pontoempoligono()","pontoempoligono","pontoEmPoligono");}
154 154 },
155 155 /*
  156 + Function: centromassa
  157 +
  158 + Abre a janela de diálogo da ferramenta centro médio
  159 + */
  160 + centromassa: function(){
  161 + if(typeof(i3GEOF.centromassa) === 'undefined')
  162 + {i3GEO.util.dialogoFerramenta("i3GEO.analise.dialogo.centromassa()","centromassa","centromassa");}
  163 + },
  164 + /*
156 165 Function: nptPol
157 166  
158 167 Abre a janela de diálogo da ferramenta nptpol
... ...
classesjs/classe_configura.js
... ... @@ -131,6 +131,7 @@ i3GEO.configura = {
131 131 { id:"omenudataAnalise7",text: $trad("u12"), url: "javascript:i3GEO.analise.dialogo.nptPol()" },
132 132 { id:"omenudataAnalise8",text: $trad("u13"), url: "javascript:i3GEO.analise.dialogo.pontoempoligono()" },
133 133 { id:"omenudataAnalise9",text: $trad("u14"), url: "javascript:i3GEO.analise.dialogo.pontosdistri()" },
  134 + { id:"omenudataAnalise9a",text: $trad("u28"), url: "javascript:i3GEO.analise.dialogo.centromassa()" },
134 135 { id:"omenudataAnalise10",text: '<span style=color:gray;text-decoration:underline; ><b>'+$trad("u24")+'</b></span>',url: "#"},
135 136 { id:"omenudataAnalise11",text: $trad("u25"), url: "javascript:i3GEO.analise.dialogo.dissolve()" },
136 137 { id:"omenudataAnalise12",text: '<span style=color:gray;text-decoration:underline; ><b>'+$trad("u27")+'</b></span>',url: "#"},
... ...
classesjs/dicionario.js
... ... @@ -395,6 +395,13 @@ en:&quot;Others&quot;,
395 395 es:"Otros",
396 396 it:"Altri"
397 397 }],
  398 +"u28": [
  399 +{
  400 +pt: "Centro médio",
  401 +en:"Centro médio",
  402 +es:"Centro médio",
  403 +it:"Centro médio"
  404 +}],
398 405 //arvore com a lista de temas
399 406 "t1": [
400 407 {
... ...
classesjs/dicionario_ajuda.js
... ... @@ -794,6 +794,15 @@ g_traducao_ajuda = {
794 794 pt:"Mostra os comentários existentes sobre o tema e permite ao usuário inserir novos",
795 795 complemento:"Para entar com um comentário, o usuário precisa ser autenticado em alguma das redes sociais compatíveis com a rotina de login disponível no i3Geo",
796 796 apijs:"i3GEO.tema.dialogo.comentario()"
  797 + },
  798 + "94": {
  799 + titulo: "Centro médio",
  800 + diretorio:"i3geo/ferramentas/centromassa",
  801 + categoria:"3",
  802 + pt:"O centro médio é uma medida da distribuição de um conjunto de pontos. Sendo definido por Gerardi & Silva (1980) como: o ponto que minimiza a soma das distâncias quadráticas a todos os outros pontos do plano",
  803 + complemento:"Mais detalhes em http://www.criminologia-rsm.org/LinkClick.aspx?fileticket=XT%2BDy%2BNyrZM%3D&tabid=484&mid=1614",
  804 + tela:"ferramentas/nptpol/exemplo.htm",
  805 + apijs:"i3GEO.analise.dialogo.centromassa()"
797 806 }
798 807 }
799 808 };
... ...
classesphp/classe_analise.php
... ... @@ -1314,6 +1314,90 @@ nome do layer criado com o buffer.
1314 1314 return($novolayer->name);
1315 1315 }
1316 1316 /*
  1317 +function: centroMassa
  1318 +
  1319 +Calcula o centro médio.
  1320 +
  1321 +Se "item" for diferente de vazio, calcula o centro médio ponderado baseado no item
  1322 +
  1323 +Parametros:
  1324 +
  1325 +$item {string} - (opcional) Item q será utilizado para ponderar os valores.
  1326 +*/
  1327 + function centroMassa($item="")
  1328 + {
  1329 + if(!$this->layer){return "erro";}
  1330 + set_time_limit(180);
  1331 + //para manipular dbf
  1332 + if(file_exists($this->locaplic."/pacotes/phpxbase/api_conversion.php"))
  1333 + include_once($this->locaplic."/pacotes/phpxbase/api_conversion.php");
  1334 + else
  1335 + include_once "../pacotes/phpxbase/api_conversion.php";
  1336 + error_reporting(E_ALL);
  1337 + $nomeCentro = nomeRandomico();
  1338 + $nomeshp = $this->diretorio."/".$nomeCentro;
  1339 + //pega os shapes selecionados
  1340 + carregaquery($this->arquivo,&$this->layer,&$this->mapa);
  1341 + if($this->layer->getNumresults() == 0)
  1342 + {$this->layer->querybyrect($this->mapa->extent);}
  1343 + $sopen = $this->layer->open();
  1344 + if($sopen == MS_FAILURE){return "erro";}
  1345 + $this->layer->open();
  1346 + $res_count = $this->layer->getNumresults();
  1347 + $shapes = array();
  1348 + $pondera = 1;
  1349 + $xs = 0;
  1350 + $ys = 0;
  1351 + for ($i = 0; $i < $res_count; ++$i)
  1352 + {
  1353 + $result = $this->layer->getResult($i);
  1354 + $shp_index = $result->shapeindex;
  1355 + $shape = $this->layer->getfeature($shp_index,-1);
  1356 + if($item != "")
  1357 + {$pondera = $shape->values[$item];}
  1358 + $pt = $shape->line(0)->point(0);
  1359 + $xs += ($pt->x * $pondera);
  1360 + $ys += ($pt->y * $pondera);
  1361 + }
  1362 + $fechou = $this->layer->close();
  1363 + //gera o novo arquivo shape file
  1364 + // cria o shapefile
  1365 + $novoshpf = ms_newShapefileObj($nomeshp, MS_SHP_POINT);
  1366 + // cria o dbf
  1367 + $def[] = array("id","C","254");
  1368 + if(!function_exists("dbase_create"))
  1369 + {$db = xbase_create($nomeshp.".dbf", $def);xbase_close($db);}
  1370 + else
  1371 + {$db = dbase_create($nomeshp.".dbf", $def);dbase_close($db);}
  1372 + //acrescenta os pontos no novo shapefile
  1373 + $dbname = $nomeshp.".dbf";
  1374 + $db=xbase_open($dbname,2);
  1375 + $reg[] = "";
  1376 +
  1377 + $shp = ms_newShapeObj(MS_SHP_POINT);
  1378 + $linha = ms_newLineObj();
  1379 + $linha->addXY(($xs / $res_count),($ys / $res_count));
  1380 + $shp->add($linha);
  1381 + $novoshpf->addShape($shp);
  1382 +
  1383 + xbase_add_record($db,$reg);
  1384 + $novoshpf->free();
  1385 + xbase_close($db);
  1386 + //adiciona no mapa atual o novo tema
  1387 + $novolayer = criaLayer($this->mapa,MS_LAYER_POINT,MS_DEFAULT,("Centróide (".$nomeCentro.")"),$metaClasse="SIM");
  1388 + $novolayer->set("data",$nomeshp.".shp");
  1389 + $novolayer->setmetadata("DOWNLOAD","SIM");
  1390 + $novolayer->set("template","none.htm");
  1391 + $novolayer->setmetadata("TEMALOCAL","SIM");
  1392 + $classe = $novolayer->getclass(0);
  1393 + $estilo = $classe->getstyle(0);
  1394 + $estilo->set("size","12");
  1395 + //limpa selecao
  1396 + if (file_exists($this->qyfile))
  1397 + {unlink ($this->qyfile);}
  1398 + return("ok");
  1399 + }
  1400 +/*
1317 1401 function: criaCentroide
1318 1402  
1319 1403 Gera centroide dos elementos selecionados de um tema.
... ... @@ -1394,6 +1478,7 @@ $locaplic - Localização do I3geo.
1394 1478 {unlink ($this->qyfile);}
1395 1479 return("ok");
1396 1480 }
  1481 +
1397 1482 /*
1398 1483 function: gradeDePontos
1399 1484  
... ...
classesphp/mapa_controle.php
... ... @@ -484,7 +484,7 @@ Salva o mapa acrescentando um novo layer com os pontos.
484 484 case "CRIACENTROIDE":
485 485 include_once("classe_analise.php");
486 486 copiaSeguranca($map_file);
487   - $m = new Analise($map_file,$tema,$locaplic);
  487 + $m = new Analise($map_file,$tema,$locaplic,$ext);
488 488 if($interface == "googlemaps")
489 489 {
490 490 $projMapa = $m->mapa->getProjection();
... ... @@ -496,6 +496,29 @@ Salva o mapa acrescentando um novo layer com os pontos.
496 496 $m->salva();
497 497 break;
498 498 /*
  499 +Valor: CENTROMASSA
  500 +
  501 +Calcula o centro médio de uma distribuição de pontos.
  502 +
  503 +Salva o mapa acrescentando um novo layer com o ponto.
  504 +
  505 +<Analise->centroMassa>
  506 +*/
  507 + case "CENTROMASSA":
  508 + include_once("classe_analise.php");
  509 + copiaSeguranca($map_file);
  510 + $m = new Analise($map_file,$tema,$locaplic,$ext);
  511 + if($interface == "googlemaps")
  512 + {
  513 + $projMapa = $m->mapa->getProjection();
  514 + $m->mapa->setProjection("init=epsg:4291");
  515 + }
  516 + $retorno = $m->centroMassa($item);
  517 + if($interface == "googlemaps")
  518 + {$m->mapa->setProjection($projMapa);}
  519 + $m->salva();
  520 + break;
  521 +/*
499 522 Valor: ANALISEDISTRIPT
500 523  
501 524 Gera análise de distribuição de pontos.
... ...
ferramentas/centromassa/exemplo.htm 0 → 100644
... ... @@ -0,0 +1,13 @@
  1 +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2 +<html>
  3 +<head>
  4 +<script type="text/javascript" src="../../classesjs/i3geo.js"></script>
  5 +</head>
  6 +<body name="ancora" id="i3geo" class=yui-skin-sam >
  7 +<script type="text/javascript">
  8 +i3GEO.configura.locaplic = i3GEO.util.protocolo()+"://"+window.location.host+"/i3geo";
  9 +i3GEO.parametros.mapfile = "x"
  10 +i3GEO.analise.dialogo.nptPol()
  11 +</script>
  12 +</body>
  13 +</html>
0 14 \ No newline at end of file
... ...
ferramentas/centromassa/index.js.php 0 → 100644
... ... @@ -0,0 +1,230 @@
  1 +<?php error_reporting(0);if(extension_loaded('zlib')){ob_start('ob_gzhandler');} header("Content-type: text/javascript"); ?>
  2 +/*jslint plusplus:false,white:false,undef: false, rhino: true, onevar: true, evil: true */
  3 +/*
  4 +Title: Centro de massa
  5 +
  6 +Calcula o centro médio e centro médio ponderado de um conjunto de pontos
  7 +
  8 +Veja:
  9 +
  10 +<i3GEO.analise.centromassa>
  11 +
  12 +Arquivo:
  13 +
  14 +i3geo/ferramentas/centromassa/index.js.php
  15 +
  16 +Licenca:
  17 +
  18 +GPL2
  19 +
  20 +i3Geo Interface Integrada de Ferramentas de Geoprocessamento para Internet
  21 +
  22 +Direitos Autorais Reservados (c) 2006 Ministério do Meio Ambiente Brasil
  23 +Desenvolvedor: Edmar Moretti edmar.moretti@mma.gov.br
  24 +
  25 +Este programa é software livre; você pode redistribuí-lo
  26 +e/ou modificá-lo sob os termos da Licença Pública Geral
  27 +GNU conforme publicada pela Free Software Foundation;
  28 +
  29 +Este programa é distribuído na expectativa de que seja útil,
  30 +porém, SEM NENHUMA GARANTIA; nem mesmo a garantia implícita
  31 +de COMERCIABILIDADE OU ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA.
  32 +Consulte a Licença Pública Geral do GNU para mais detalhes.
  33 +Você deve ter recebido uma cópia da Licença Pública Geral do
  34 +GNU junto com este programa; se não, escreva para a
  35 +Free Software Foundation, Inc., no endereço
  36 +59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
  37 +*/
  38 +if(typeof(i3GEOF) === 'undefined'){
  39 + i3GEOF = [];
  40 +}
  41 +/*
  42 +Classe: i3GEOF.centromassa
  43 +*/
  44 +i3GEOF.centromassa = {
  45 + /*
  46 + Variavel: aguarde
  47 +
  48 + Estilo do objeto DOM com a imagem de aguarde existente no cabeçalho da janela.
  49 + */
  50 + aguarde: "",
  51 + /*
  52 + Function: inicia
  53 +
  54 + Inicia a ferramenta. É chamado por criaJanelaFlutuante
  55 +
  56 + Parametro:
  57 +
  58 + iddiv {String} - id do div que receberá o conteudo HTML da ferramenta
  59 + */
  60 + inicia: function(iddiv){
  61 + try{
  62 + $i(iddiv).innerHTML += i3GEOF.centromassa.html();
  63 + i3GEOF.centromassa.t0();
  64 + }
  65 + catch(erro){alert(erro);}
  66 + },
  67 + /*
  68 + Function: html
  69 +
  70 + Gera o código html para apresentação das opções da ferramenta
  71 +
  72 + Retorno:
  73 +
  74 + String com o código html
  75 + */
  76 + html:function(){
  77 + var ins = '';
  78 + ins += '<div style="background-color:#F2F2F2;top:0px;left:0px;display:block;width:98%;" id="i3GEOcentromassaresultado" >';
  79 + ins += '</div>';
  80 + ins += '<div style="top:10px;left:0px;display:block;width:98%;color:red" id="i3GEOcentromassafim" >';
  81 + ins += '</div>';
  82 + return ins;
  83 + },
  84 + /*
  85 + Function: criaJanelaFlutuante
  86 +
  87 + Cria a janela flutuante para controle da ferramenta.
  88 + */
  89 + criaJanelaFlutuante: function(){
  90 + var minimiza,cabecalho,janela,divid,temp,titulo;
  91 + //cria a janela flutuante
  92 + titulo = "Centro de massa <a class=ajuda_usuario target=_blank href='" + i3GEO.configura.locaplic + "/ajuda_usuario.php?idcategoria=3&idajuda=94' >&nbsp;&nbsp;&nbsp;</a>";
  93 + cabecalho = function(){};
  94 + minimiza = function(){
  95 + i3GEO.janela.minimiza("i3GEOF.centromassa");
  96 + };
  97 + janela = i3GEO.janela.cria(
  98 + "400px",
  99 + "250px",
  100 + "",
  101 + "",
  102 + "",
  103 + titulo,
  104 + "i3GEOF.centromassa",
  105 + false,
  106 + "hd",
  107 + cabecalho,
  108 + minimiza
  109 + );
  110 + divid = janela[2].id;
  111 + i3GEOF.centromassa.aguarde = $i("i3GEOF.centromassa_imagemCabecalho").style;
  112 + i3GEOF.centromassa.inicia(divid);
  113 + },
  114 + t0: function()
  115 + {
  116 + var ins = "<p class='paragrafo'>O centro médio é uma opera&ccedil;&atilde;o que resulta em um novo tema contendo o ponto que indica o centro de equilíbrio de uma distribuição.</p>";
  117 + ins += "<p class='paragrafo'>Para gerar o cálculo &eacute; necess&aacute;rio que no mapa exista pelo menos um tema de pontos. Se não houverem elementos selecionados, será considerada a extensão geográfica.</p>";
  118 + i3GEO.util.proximoAnterior("","i3GEOF.centromassa.t1()",ins,"i3GEOFgradeDePontost0","i3GEOcentromassaresultado");
  119 + },
  120 + t1: function(){
  121 + var ins = "<p class='paragrafo' >Tema contendo os pontos:<br>";
  122 + ins += "<div style='text-align:left;' id='i3GEOcentromassaDivPontos' ></div><br>";
  123 + ins += "<p class='paragrafo' >Utilizar o seguinte item para ponderar os valores:<br>";
  124 + ins += "<div id=i3GEOondeItens style='text-align:left;display:block' ></div>"
  125 + i3GEO.util.proximoAnterior("i3GEOF.centromassa.t0()","i3GEOF.centromassa.t2()",ins,"i3GEOF.centromassa.t1","i3GEOcentromassaresultado");
  126 + i3GEOF.centromassa.comboTemasPontos();
  127 + },
  128 + t2: function(){
  129 + var ins = "<p class='paragrafo'>O tema com o centro ser&aacute; adicionado ao mapa atual.";
  130 + ins += "<br><br><input id=i3GEOcentromassabotao1 type='buttom' value='Calcular' />";
  131 + i3GEO.util.proximoAnterior("i3GEOF.centromassa.t1()","",ins,"i3GEOF.centromassa.t2","i3GEOcentromassaresultado");
  132 + new YAHOO.widget.Button(
  133 + "i3GEOcentromassabotao1",
  134 + {onclick:{fn: i3GEOF.centromassa.calcula}}
  135 + );
  136 + },
  137 + /*
  138 + Function: calcula
  139 +
  140 + Faz o cálculo
  141 +
  142 + Veja:
  143 +
  144 + <centromassa>
  145 + */
  146 + calcula: function(){
  147 + try{
  148 + if(i3GEOF.centromassa.aguarde.visibility === "visible")
  149 + {return;}
  150 + i3GEOF.centromassa.aguarde.visibility = "visible";
  151 + var p,
  152 + cp,
  153 + fim = function(retorno){
  154 + if (retorno.data==undefined )
  155 + {$i("i3GEOcentromassafim").innerHTML = "<p class='paragrafo' >Erro. A operação demorou muito.";}
  156 + else
  157 + {i3GEO.atualiza();}
  158 + i3GEOF.centromassa.aguarde.visibility = "hidden";
  159 + },
  160 + ext;
  161 + if(i3GEO.Interface.ATUAL === "googlemaps")
  162 + {ext = i3GEO.Interface.googlemaps.bbox();}
  163 + else
  164 + {ext = i3GEO.parametros.mapexten;}
  165 + p = i3GEO.configura.locaplic+"/classesphp/mapa_controle.php?g_sid="+i3GEO.configura.sid+"&funcao=centromassa&tema="+$i("i3GEOFcentromassaPontos").value+"&item="+$i("i3GEOFcentromassaItem").value+"&ext="+ext;
  166 + cp = new cpaint();
  167 + cp.set_response_type("JSON");
  168 + cp.call(p,"centromassa",fim);
  169 + }
  170 + catch(e){$i("i3GEOcentromassafim").innerHTML = "<p class='paragrafo' >Erro. "+e;i3GEO.janela.fechaAguarde();i3GEOF.centromassa.aguarde.visibility = "hidden";}
  171 + },
  172 + /*
  173 + Function: comboTemasPontos
  174 +
  175 + Cria um combo com a lista de temas pontuais
  176 +
  177 + Veja:
  178 +
  179 + <i3GEO.util.comboTemas>
  180 + */
  181 + comboTemasPontos: function(){
  182 + i3GEO.util.comboTemas(
  183 + "i3GEOFcentromassaPontos",
  184 + function(retorno){
  185 + $i("i3GEOcentromassaDivPontos").innerHTML = retorno.dados;
  186 + $i("i3GEOcentromassaDivPontos").style.display = "block";
  187 + if ($i("i3GEOFcentromassaPontos")){
  188 + $i("i3GEOFcentromassaPontos").onchange = function(){
  189 + $i("i3GEOondeItens").style.display = "block";
  190 + $i("i3GEOondeItens").innerHTML = "Aguarde...";
  191 + i3GEO.mapa.ativaTema($i("i3GEOcentromassaPontos").value);
  192 + i3GEOF.centromassa.comboItens();
  193 + };
  194 + }
  195 + if(i3GEO.temaAtivo !== ""){
  196 + $i("i3GEOFcentromassaPontos").value = i3GEO.temaAtivo;
  197 + $i("i3GEOondeItens").style.display = "block";
  198 + $i("i3GEOondeItens").innerHTML = "Aguarde...";
  199 + i3GEOF.centromassa.comboItens();
  200 + }
  201 + },
  202 + "i3GEOcentromassaDivPontos",
  203 + "",
  204 + false,
  205 + "pontos"
  206 + );
  207 + },
  208 + /*
  209 + Function: comboItens
  210 +
  211 + Cria um combo para escolha de um item do tema
  212 +
  213 + Veja:
  214 +
  215 + <i3GEO.util.comboItens>
  216 +
  217 + */
  218 + comboItens: function(){
  219 + i3GEO.util.comboItens(
  220 + "i3GEOFcentromassaItem",
  221 + $i("i3GEOFcentromassaPontos").value,
  222 + function(retorno){
  223 + $i("i3GEOondeItens").innerHTML = retorno.dados;
  224 + $i("i3GEOondeItens").style.display = "block";
  225 + },
  226 + "i3GEOondeItens"
  227 + );
  228 + },
  229 +};
  230 +<?php error_reporting(0);if(extension_loaded('zlib')){ob_end_flush();}?>
0 231 \ No newline at end of file
... ...
symbols/rosa200.png

41.2 KB | W: | H:

41.2 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin