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 | 132 | Include: |
133 | 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 | 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 | 158 | //delaunay e voronoi |
206 | 159 | case "deldir": |
207 | 160 | $this->mapaDeldir($nomearq,$dir_tmp,$R_path,$locaplic); |
... | ... | @@ -390,6 +343,61 @@ $locaplic - Onde fica o I3Geo. |
390 | 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 | 401 | function: mapaKernel |
394 | 402 | |
395 | 403 | Gera um mapa de kernel. |
... | ... | @@ -1291,7 +1299,7 @@ $locaplic - Localização do I3geo. |
1291 | 1299 | {$mapt = ms_newMapObj($locaplic."\\aplicmap\\novotema.map");} |
1292 | 1300 | else |
1293 | 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 | 1303 | $novolayer->set("data",$nomeshp.".shp"); |
1296 | 1304 | $novolayer->setmetadata("DOWNLOAD","SIM"); |
1297 | 1305 | $novolayer->set("template","none.htm"); |
... | ... | @@ -2030,6 +2038,93 @@ $operacao - Tipo de análise. |
2030 | 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 | 2128 | function unserializeGeo |
2034 | 2129 | |
2035 | 2130 | Deserializa um arquivo de geometrias. | ... | ... |