Advertisement
Guest User

Untitled

a guest
Aug 17th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 4.20 KB | None | 0 0
  1. <?php
  2. function rio_maior_comprimento($arrayTrechos)
  3. {
  4.     if (count($arrayTrechos) > 1)
  5.     {
  6.         $arrayGID = array();
  7.         $i2_ant;
  8.  
  9.         for ($i = 0; $i < count($arrayTrechos); $i++)
  10.         {
  11.             for ($i2 = 0; $i2 < count($arrayTrechos); $i2++)
  12.             {
  13.                 if ($i != $i2)
  14.                 {
  15.                     if (($arrayTrechos[$i]['X_pnt_inicial'] == $arrayTrechos[$i2]['X_pnt_final']) && ($arrayTrechos[$i]['Y_pnt_inicial'] == $arrayTrechos[$i2]['Y_pnt_final']))
  16.                     {
  17.                         if (empty($i2_ant))
  18.                         {
  19.                             if ($i < $i2)
  20.                             {
  21.                                 array_push($arrayGID, $i);
  22.                                 array_push($arrayGID, $i2);
  23.                                 $i2_ant = $i2;
  24.                             }
  25.                         } else
  26.                         {
  27.                             if (( $i < $i2 ) && ( $i == $i2_ant ))
  28.                             {
  29.                                 array_push($arrayGID, $i);
  30.                                 array_push($arrayGID, $i2);
  31.                                 $i2_ant = $i2;
  32.                             }
  33.                         }
  34.                     }
  35.                 }
  36.             }
  37.         }
  38.  
  39. # retira valores duplicados
  40.        $arrayGID = array_unique($arrayGID);
  41.  
  42. # ordena
  43.        sort($arrayGID);
  44.  
  45. #print_r( $arrayGID );
  46.  
  47.         $arrayGIDsMaisCompTotal = array(gids => array(), comprimentoTotal => 0);
  48.  
  49.         foreach ($arrayGID as $valor)
  50.         {
  51.             array_push($arrayGIDsMaisCompTotal[gids], $arrayTrechos[$valor][gid]);
  52.             $arrayGIDsMaisCompTotal[comprimentoTotal] = $arrayGIDsMaisCompTotal[comprimentoTotal] + $arrayTrechos[$valor][comprimento];
  53.         }
  54.  
  55.         return $arrayGIDsMaisCompTotal;
  56.     } else
  57.     {
  58. #Arrays devem ser declarados antes de retornar
  59.        $arrayGIDsMaisCompTotal = array(gids => array($arrayTrechos[0][gid]), comprimentoTotal => $arrayTrechos[0][comprimento]);
  60.  
  61.         return $arrayGIDsMaisCompTotal;
  62.     }
  63. }
  64.  
  65. # Exemplo ADAPTADO do Array de Objetos do e-mail
  66. # Ex Apenas um trecho
  67. $arrayTrechos = array(0 => array(gid => 178, comprimento => 4304.33549546129, X_pnt_inicial => 259885, Y_pnt_inicial => 9193105, X_pnt_final => 261675, Y_pnt_final => 9196115));
  68.  
  69. # Exemplo ADAPTADO do Array de Objetos do e-mail
  70. # Ex Varios trechos
  71. $arrayTrechos_2 = array(
  72.     0 => array('gid' => 178, 'comprimento' => 4304.33549546129, 'X_pnt_inicial' => 259885, 'Y_pnt_inicial' => 9193105, 'X_pnt_final' => 261675, 'Y_pnt_final' => 9196115),
  73.     1 => array('gid' => 124, 'comprimento' => 1006.24891681028, 'X_pnt_inicial' => 261675, 'Y_pnt_inicial' => 9196115, 'X_pnt_final' => 262400, 'Y_pnt_final' => 9196695),
  74.     2 => array('gid' => 243, 'comprimento' => 7470.68109219034, 'X_pnt_inicial' => 262855, 'Y_pnt_inicial' => 9190095, 'X_pnt_final' => 261675, 'Y_pnt_final' => 9196115),
  75.     3 => array('gid' => 244, 'comprimento' => 1926.81240867132, 'X_pnt_inicial' => 262855, 'Y_pnt_inicial' => 9190095, 'X_pnt_final' => 264465, 'Y_pnt_final' => 9190755),
  76.     4 => array('gid' => 254, 'comprimento' => 1828.52813742386, 'X_pnt_inicial' => 264215, 'Y_pnt_inicial' => 9189275, 'X_pnt_final' => 262855, 'Y_pnt_final' => 9190095));
  77.  
  78. # Imprime o resultado usando a funcao
  79. print('<br/>--------Um Trecho----------<br/>');
  80. print_r(rio_maior_comprimento($arrayTrechos));   # Array ( [gids] => Array ( [0] => 178 ) [comprimentoTotal] => 4304.3354954613 )
  81.  
  82. print('<br/><br/>--------Varios Trechos----------<br/>');
  83. print_r(rio_maior_comprimento($arrayTrechos_2));   # Array ( [gids] => Array ( [0] => 124 [1] => 243 [2] => 254 ) [comprimentoTotal] => 10305.458146424 )
  84. # A funcao retorna um array em que:
  85. #  > O primeiro indice eh um Array contendo os GIDs das linhas(trechos) que formam o maior rio;
  86. #  > O segundo indice eh o Comprimento Total formado pela soma dos trechos.
  87. # Usando o ex do e-mail o resultado serah:
  88. # Array ( [gids] => Array ( [0] => 124 [1] => 243 [2] => 254 ) [comprimentoTotal] => 10305.458146424 )
  89. # > GIDs = 124, 243 e 254
  90. # > Comprimento Total = 10305.458146424
  91. # Dessa forma pode-se usar os GIDs para fazer uma consulta, "pintando" os trechos na tela. Ao mesmo tempo tem-se o comprimento total, resultado da soma dos trechos.
  92. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement