Commit e0a21a3909d0df150be82d8cdb53dd718e2d7174
1 parent
c8f5d953
Exists in
master
and in
7 other branches
Adicionada a análise de cluster
Showing
1 changed file
with
161 additions
and
66 deletions
Show diff stats
classesphp/classe_analise.php
@@ -132,76 +132,29 @@ $limitepontos - "TRUE"|"FALSE" limita o resultado ao limite geográfico dos ponto | @@ -132,76 +132,29 @@ $limitepontos - "TRUE"|"FALSE" limita o resultado ao limite geográfico dos ponto | ||
132 | Include: | 132 | Include: |
133 | <class.palette.php> | 133 | <class.palette.php> |
134 | */ | 134 | */ |
135 | - function analiseDistriPt($locaplic,$dir_tmp,$R_path,$numclasses,$tipo,$cori,$corf,$tmpurl,$sigma="",$limitepontos="TRUE") | 135 | + function analiseDistriPt($locaplic,$dir_tmp,$R_path,$numclasses,$tipo,$cori,$corf,$tmpurl,$sigma="",$limitepontos="TRUE",$tema2="") |
136 | { | 136 | { |
137 | - $prjMapa = $this->mapa->getProjection(); | ||
138 | - $prjTema = $this->layer->getProjection(); | ||
139 | - $layerPt = $this->layer; | ||
140 | - $layerPt->set("tolerance",0); | ||
141 | - $layerPt->set("template","none.htm"); | ||
142 | - $nomefinal = nomeRandomico(); | ||
143 | - $nomearq = $this->diretorio."/".$nomefinal; | ||
144 | - $itemspt = pegaItens($layerPt); | ||
145 | - $existesel = "nao"; | ||
146 | - if (file_exists(($this->arquivo)."qy")) | ||
147 | - {$this->mapa->loadquery(($this->arquivo)."qy");} | ||
148 | - if ($layerPt->getNumresults() > 0){$existesel = "sim";} | ||
149 | - if ($existesel == "nao") | ||
150 | - {$layerPt->queryByrect($this->mapa->extent);} | ||
151 | - $res_count = $layerPt->getNumresults(); | ||
152 | - $pontos = array(); | ||
153 | - //pega um shape especifico | ||
154 | - $layerPt->open(); | ||
155 | - if (($prjTema != "") && ($prjMapa != $prjTema)) | 137 | + // |
138 | + //pega os dados do tema dois para as funções que o utilizam | ||
139 | + // | ||
140 | + $dados1 = $this->gravaCoordenadasPt($this->nome,$limitepontos); | ||
141 | + $nomearq = $dados1["prefixoarquivo"]; | ||
142 | + $dimx = $dados1["dimx"]; | ||
143 | + $dimy = $dados1["dimy"]; | ||
144 | + if (isset($tema2) && $tema2 != "") | ||
156 | { | 145 | { |
157 | - $projInObj = ms_newprojectionobj($prjTema); | ||
158 | - $projOutObj = ms_newprojectionobj($prjMapa); | ||
159 | - } | ||
160 | - for ($i = 0; $i < $res_count; $i++) | ||
161 | - { | ||
162 | - $result = $layerPt->getResult($i); | ||
163 | - $shp_index = $result->shapeindex; | ||
164 | - $shape = $layerPt->getshape(-1, $shp_index); | ||
165 | - $lineo = $shape->line(0); | ||
166 | - $pt = $lineo->point(0); | ||
167 | - if (($prjTema != "") && ($prjMapa != $prjTema)) | ||
168 | - { | ||
169 | - $pt->project($projInObj, $projOutObj); | ||
170 | - } | ||
171 | - $pontos[] = $pt->x." ".$pt->y."\n"; | ||
172 | - $pontosx[] = $pt->x; | ||
173 | - $pontosy[] = $pt->y; | 146 | + $dados2 = $this->gravaCoordenadasPt($tema2,$limitepontos); |
147 | + $nomearq2 = $dados2["prefixoarquivo"]; | ||
148 | + $dimx2 = $dados2["dimx"]; | ||
149 | + $dimy2 = $dados2["dimy"]; | ||
174 | } | 150 | } |
175 | - $layerPt->close(); | ||
176 | - //grava o arquivo com os pontos em x | ||
177 | - $f = fopen($nomearq."x","w"); | ||
178 | - foreach ($pontosx as $pt) | ||
179 | - {fwrite($f,$pt."\n");} | ||
180 | - fclose($f); | ||
181 | - //grava o arquivo com os pontos em y | ||
182 | - $f = fopen($nomearq."y","w"); | ||
183 | - foreach ($pontosy as $pt) | ||
184 | - {fwrite($f,$pt."\n");} | ||
185 | - fclose($f); | ||
186 | - if ($limitepontos == "TRUE") | ||
187 | - { | ||
188 | - $xi = (min($pontosx)); | ||
189 | - $xf = (max($pontosx)); | ||
190 | - $yi = (min($pontosy)); | ||
191 | - $yf = (max($pontosy)); | ||
192 | - } | ||
193 | - else | ||
194 | - { | ||
195 | - $ext = $this->mapa->extent; | ||
196 | - $xi = $ext->minx; | ||
197 | - $xf = $ext->maxx; | ||
198 | - $yi = $ext->miny; | ||
199 | - $yf = $ext->maxy; | ||
200 | - } | ||
201 | - $dimx = "c(".$xi.",".$xf.")"; | ||
202 | - $dimy = "c(".$yi.",".$yf.")"; | ||
203 | switch ($tipo) | 151 | switch ($tipo) |
204 | { | 152 | { |
153 | + //cluster espacial | ||
154 | + case "cluster": | ||
155 | + $this->mapaCluster($nomearq,$nomearq2,$dimx,$dimy,$dir_tmp,$R_path,$locaplic); | ||
156 | + return "ok"; | ||
157 | + break; | ||
205 | //delaunay e voronoi | 158 | //delaunay e voronoi |
206 | case "deldir": | 159 | case "deldir": |
207 | $this->mapaDeldir($nomearq,$dir_tmp,$R_path,$locaplic); | 160 | $this->mapaDeldir($nomearq,$dir_tmp,$R_path,$locaplic); |
@@ -390,6 +343,61 @@ $locaplic - Onde fica o I3Geo. | @@ -390,6 +343,61 @@ $locaplic - Onde fica o I3Geo. | ||
390 | $r = executaR($rcode,$dir_tmp,$R_path); | 343 | $r = executaR($rcode,$dir_tmp,$R_path); |
391 | } | 344 | } |
392 | /* | 345 | /* |
346 | +function: mapaCluster | ||
347 | + | ||
348 | +Gera um mapa de cluster. | ||
349 | + | ||
350 | +Executa script R para gerar os dados. | ||
351 | + | ||
352 | +parameters: | ||
353 | +$arqpt - Prefixo dos arquivos em disco com os pontos. | ||
354 | + | ||
355 | +$dimx - Range em x no formato R c(-54,-53). | ||
356 | + | ||
357 | +$dimy - Range em y no formato R c(-25,-23). | ||
358 | + | ||
359 | +$dir_tmp - Diretório temporário do mapserver. | ||
360 | + | ||
361 | +$R_path - Onde fica o R. | ||
362 | + | ||
363 | +$locaplic - Onde fica o I3Geo. | ||
364 | + | ||
365 | +$sigma - Bandwidth for kernel smoother in "smooth" option. | ||
366 | +*/ | ||
367 | + function mapaCluster($arqpt,$arqpt2,$dimx,$dimy,$dir_tmp,$R_path,$locaplic) | ||
368 | + { | ||
369 | + $gfile_name = nomeRandomico(20); | ||
370 | + $rcode[] = 'dadosx<-scan("'.$arqpt.'x")'; | ||
371 | + $rcode[] = 'dadosy<-scan("'.$arqpt.'y")'; | ||
372 | + $rcode[] = 'dadosx2<-scan("'.$arqpt2.'x")'; | ||
373 | + $rcode[] = 'dadosy2<-scan("'.$arqpt2.'y")'; | ||
374 | + $rcode[] = 'd1<-data.frame(cbind(dadosx,dadosy))'; | ||
375 | + $rcode[] = 'names(d1)<-(c("x","y"))'; | ||
376 | + $rcode[] = 'd2<-data.frame(cbind(dadosx2,dadosy2))'; | ||
377 | + $rcode[] = 'names(d2)<-(c("col1","col2"))'; | ||
378 | + $rcode[] = 'd2<-as.matrix.data.frame(d2)'; | ||
379 | + if (strtoupper(substr(PHP_OS, 0, 3) == 'WIN')) | ||
380 | + { | ||
381 | + $lib = '.libPaths("'.$locaplic.'/pacotes/rlib/win")'; | ||
382 | + if(file_exists($locaplic.'/pacotes/rlib/win')) | ||
383 | + $rcode[] = $lib; | ||
384 | + } | ||
385 | + else | ||
386 | + { | ||
387 | + if(file_exists($locaplic."/pacotes/rlib/linux")) | ||
388 | + { | ||
389 | + $lib = '.libPaths("'.$locaplic.'/pacotes/rlib/linux")'; | ||
390 | + $rcode[] = $lib; | ||
391 | + } | ||
392 | + } | ||
393 | + $rcode[] = 'library(spatclus)'; | ||
394 | + $rcode[] = 'RES <- clus(d1,d2,limx='.$dimx.',limy='.$dimy.',eps=0.2)'; | ||
395 | + //var_dump($rcode); | ||
396 | + $r = executaR($rcode,$dir_tmp,$R_path,$gfile_name); | ||
397 | + return "ok"; | ||
398 | + } | ||
399 | + | ||
400 | +/* | ||
393 | function: mapaKernel | 401 | function: mapaKernel |
394 | 402 | ||
395 | Gera um mapa de kernel. | 403 | Gera um mapa de kernel. |
@@ -1291,7 +1299,7 @@ $locaplic - Localização do I3geo. | @@ -1291,7 +1299,7 @@ $locaplic - Localização do I3geo. | ||
1291 | {$mapt = ms_newMapObj($locaplic."\\aplicmap\\novotema.map");} | 1299 | {$mapt = ms_newMapObj($locaplic."\\aplicmap\\novotema.map");} |
1292 | else | 1300 | else |
1293 | {$mapt = ms_newMapObj($locaplic."/aplicmap/novotema.map");} | 1301 | {$mapt = ms_newMapObj($locaplic."/aplicmap/novotema.map");} |
1294 | - $novolayer = criaLayer($this->mapa,MS_LAYER_POINT,MS_DEFAULT,("Centróide (".$nomecentroide.")"),$metaClasse="SIM"); | 1302 | + $novolayer = criaLayer($this->mapa,MS_LAYER_POINT,MS_DEFAULT,("Centróide (".$nomeCentroides.")"),$metaClasse="SIM"); |
1295 | $novolayer->set("data",$nomeshp.".shp"); | 1303 | $novolayer->set("data",$nomeshp.".shp"); |
1296 | $novolayer->setmetadata("DOWNLOAD","SIM"); | 1304 | $novolayer->setmetadata("DOWNLOAD","SIM"); |
1297 | $novolayer->set("template","none.htm"); | 1305 | $novolayer->set("template","none.htm"); |
@@ -2030,6 +2038,93 @@ $operacao - Tipo de análise. | @@ -2030,6 +2038,93 @@ $operacao - Tipo de análise. | ||
2030 | return($novonomelayer); | 2038 | return($novonomelayer); |
2031 | } | 2039 | } |
2032 | /* | 2040 | /* |
2041 | +function: gravaCoordenadasPt | ||
2042 | + | ||
2043 | +Lê as coordenadas de um tema pontual e grava em arquivos. | ||
2044 | + | ||
2045 | +Essa função é utilizada nas opções que utilizam o R para cálculos e necessitam ler as coordenadas dos pontos. | ||
2046 | + | ||
2047 | +Parameters: | ||
2048 | + | ||
2049 | +tema - nome do tema com os pontos | ||
2050 | + | ||
2051 | +limitepontos - FALSE para considerar a extensão geográfica do mapa atual e TRUE para considerar como limite as ocorrências pontuais do tema | ||
2052 | + | ||
2053 | +return: | ||
2054 | + | ||
2055 | +array com as dimensões em x e y e nome dos arquivos com x e y gerados. | ||
2056 | +*/ | ||
2057 | +function gravaCoordenadasPt($tema,$limitepontos="TRUE") | ||
2058 | +{ | ||
2059 | + $prjMapa = $this->mapa->getProjection(); | ||
2060 | + $layerPt = $this->mapa->getlayerbyname($tema); | ||
2061 | + $prjTema = $layerPt->getProjection(); | ||
2062 | + $layerPt->set("tolerance",0); | ||
2063 | + $layerPt->set("template","none.htm"); | ||
2064 | + $nomefinal = nomeRandomico(); | ||
2065 | + $nomearq = $this->diretorio."/".$nomefinal; | ||
2066 | + $itemspt = pegaItens($layerPt); | ||
2067 | + $existesel = "nao"; | ||
2068 | + if (file_exists(($this->arquivo)."qy")) | ||
2069 | + {$this->mapa->loadquery(($this->arquivo)."qy");} | ||
2070 | + if ($layerPt->getNumresults() > 0){$existesel = "sim";} | ||
2071 | + if ($existesel == "nao") | ||
2072 | + {$layerPt->queryByrect($this->mapa->extent);} | ||
2073 | + $res_count = $layerPt->getNumresults(); | ||
2074 | + $pontos = array(); | ||
2075 | + //pega um shape especifico | ||
2076 | + $layerPt->open(); | ||
2077 | + if (($prjTema != "") && ($prjMapa != $prjTema)) | ||
2078 | + { | ||
2079 | + $projInObj = ms_newprojectionobj($prjTema); | ||
2080 | + $projOutObj = ms_newprojectionobj($prjMapa); | ||
2081 | + } | ||
2082 | + for ($i = 0; $i < $res_count; $i++) | ||
2083 | + { | ||
2084 | + $result = $layerPt->getResult($i); | ||
2085 | + $shp_index = $result->shapeindex; | ||
2086 | + $shape = $layerPt->getshape(-1, $shp_index); | ||
2087 | + $lineo = $shape->line(0); | ||
2088 | + $pt = $lineo->point(0); | ||
2089 | + if (($prjTema != "") && ($prjMapa != $prjTema)) | ||
2090 | + { | ||
2091 | + $pt->project($projInObj, $projOutObj); | ||
2092 | + } | ||
2093 | + $pontos[] = $pt->x." ".$pt->y."\n"; | ||
2094 | + $pontosx[] = $pt->x; | ||
2095 | + $pontosy[] = $pt->y; | ||
2096 | + } | ||
2097 | + $layerPt->close(); | ||
2098 | + //grava o arquivo com os pontos em x | ||
2099 | + $f = fopen($nomearq."x","w"); | ||
2100 | + foreach ($pontosx as $pt) | ||
2101 | + {fwrite($f,$pt."\n");} | ||
2102 | + fclose($f); | ||
2103 | + //grava o arquivo com os pontos em y | ||
2104 | + $f = fopen($nomearq."y","w"); | ||
2105 | + foreach ($pontosy as $pt) | ||
2106 | + {fwrite($f,$pt."\n");} | ||
2107 | + fclose($f); | ||
2108 | + if ($limitepontos == "TRUE") | ||
2109 | + { | ||
2110 | + $xi = (min($pontosx)); | ||
2111 | + $xf = (max($pontosx)); | ||
2112 | + $yi = (min($pontosy)); | ||
2113 | + $yf = (max($pontosy)); | ||
2114 | + } | ||
2115 | + else | ||
2116 | + { | ||
2117 | + $ext = $this->mapa->extent; | ||
2118 | + $xi = $ext->minx; | ||
2119 | + $xf = $ext->maxx; | ||
2120 | + $yi = $ext->miny; | ||
2121 | + $yf = $ext->maxy; | ||
2122 | + } | ||
2123 | + $dimx = "c(".$xi.",".$xf.")"; | ||
2124 | + $dimy = "c(".$yi.",".$yf.")"; | ||
2125 | + return array("dimx"=>$dimx,"dimy"=>$dimy,"arqx"=>($nomearq."x"),"arqy"=>($nomearq."y"),"prefixoarquivo"=>$nomearq); | ||
2126 | +} | ||
2127 | +/* | ||
2033 | function unserializeGeo | 2128 | function unserializeGeo |
2034 | 2129 | ||
2035 | Deserializa um arquivo de geometrias. | 2130 | Deserializa um arquivo de geometrias. |