Você está na página 1de 7

Mapas temticos

gerados com PHP


Por Raquel Dezidrio Souto
O artigo mostra como programar em PHP para gerao de mapas temticos atravs de um exemplo prtico.
Diversos sistemas de informaes geogrficas j foram desenvolvidos e oferecem o recurso de gerao de
mapas temticos. Entretanto, o tempo gasto no aprendizado do funcionamento de tais sistemas pode ser
economizado se forem seguidos os passos simples disponveis nesse breve tutorial.
A linguagem PHP tem uma biblioteca de funes muito til, mas ainda pouca usada a GDLib, biblioteca de exibio grfica (em
ingls: Graphics Display Library). A GDLib tem sido utilizada principalmente em aplicaes de gerao de grficos, mas seu
potencial para desenvolvimento de mapas digitais grande e no deve ser negligenciado. Leia a apresentao da biblioteca GDLib
contida no site oficial do PHP:
O PHP no est limitado a criar apenas sada em HTML. Ele tambm pode ser usado para criar e manipular arquivos de imagem
em uma diversidade de formatos, incluindo gif, png, jpg, wbmp, e xpm. E ainda mais convenietemente, o PHP pode enviar streams
de sada de imagem diratamente para o browser. Voc precisar compilar o PHP com a biblioteca GD de imagens de funes para
isto funcionar. O PHP e GD tambm podem requerer outras bibliotecas, dependendo dos formatos de imagens com os quais voc
queira trabalhar. [1]
Todas as funes grficas da biblioteca GDLib possuem descrio detalhada no site oficial do PHP [2] e o leitor pode fazer uso do
mesmo para consultas eventuais durante o desenvolvimento do projeto. Abaixo so listadas as funes utilizadas nesse tutorial e a
respectiva descrio da sintaxe.
1) ImageCreate Cria uma nova imagem;
ImageCreate ( int $width , int $height )
Onde: $width = largura em pixels; $height = altura em pixels.
2) ImageColorAllocate - Aloca uma cor em uma varivel;
imagecolorallocate ( resource $image , int $red , int $green , int $blue )
Onde: $image = imagem criada com imagecreate; $red, $green e $blue = cdigos RGB para vermelho (R), verde (G) e azul (B).
3) Imagerectangle Desenha um retngulo sem preenchimento;
Imagerectangle ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )
Onde: $image = imagem criada com imagecreate; $x1,$y1 = coordenada superior esquerda; $x2,$y2 = coordenada inferior direita;
$color = identificador da cor da linha.
4) Imagefilledrectangle Desenha um retngulo preenchido;
imagefilledrectangle ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )
Onde: $image = imagem criada com imagecreate; $x1,$y1 = coordenada superior esquerda; $x2,$y2 = coordenada inferior direita;
$color = identificador da cor do preenchimento.
5) Imagepolygon Desenha um polgono sem preenchimento;
Imagepolygon ( resource $image , array $points , int $num_points , int $color )
Onde: $image = imagem criada com imagecreate; $points = matriz de vrtices do polgono; $num_points = nmero de vrtices do
polgono; $color = identificador da cor de preenchimento.
Exemplo de matriz: points[0] = x0, points[1] = y0, points[2] = x1, points[3] = y1, ...
6) Imagefilledpolygon Desenha um polgono preenchido;
Imagefilledpolygon ( resource $image , array $points , int $num_points , int $color )
Onde: $image = imagem criada com imagecreate; $points = matriz de vrtices do polgono; $num_points = nmero de vrtices do
polgono; $color = identificador da cor da linha.
7) Imagestring Desenha uma string horizontalmente;
Imagestring ( resource $image , int $font , int $x , int $y , string $string , int $color )
Onde: $image = imagem criada com imagecreate; $font = valores que podem variar de 1 a 5, dependendo do tamanho da fonte
(por default, a codificao latin2), onde nmeros maiores correspondem a fontes mais largas; $x = coordenda x superior
esquerda; $y = coordenada y superior esquerda; $string = string a ser desenhada; $color = identificador da cor da letra.
8) Imageline Desenha uma linha;
Imageline ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )
Onde: $image = imagem criada com imagecreate; $x1,$y1 = coordenadas de incio da linha; $x2,$y2 = coordenadas de fim da
linha; $color = identificador da cor da linha.
9) ImagePNG - Envia uma imagem PNG para o browser ou para um arquivo;
ImagePNG ( resource $image [, string $filename ] )
Onde: $image = imagem criada com imagecreate; $filename = se indicado o caminho, ser enviada a imagem para um arquivo.
10) Imagedestroy Destri uma imagem, liberando a memria associada a ela.
Imagedestroy ( resource $image )
Onde: $image = imagem criada com imagecreate.
O tutorial de programao de scripts em PHP para gerao de mapas temticos segue os passos bsicos listados a seguir. A
execuo demonstrada nesse artigo fundamenta-se no trabalho de classificao de municpios do Rio de Janeiro, onde foram
gerados mapas temticos que so visualizados diretamente no navegador [3].
1 . Preparao do PHP para execuo das funes grficas GD
Para comear a desenvolver projetos com GD, o programador deve estar atento compilao do PHP com a GDLib para que as
funes possam ser interpretadas corretamente. Alm disso, se precisar expandir os recursos da GD, o programador deve estar
atento instalao de outras bibliotecas. A lista bsica de bibliotecas a serem instaladas para que tenha mnimo de independncia
na programao segue adiante:
- GDLib - http://www.libgd.org/releases/
- Lib JPEG Para gerar imagens jpeg a partir de scripts PHP com GD - ftp://ftp.uu.net/graphics/jpeg.
- FreeType 2 - http://www.freetype.org.
No tutorial, a imagem a ser criada possui extenso PNG, que suportada em verses de GD superiores gd-1.6. Com relao a
outras extenses de imagens suportadas pela GD, observe que:
- GIF - Suportado apenas em verses do GD anteriores a gd-1.6. Suporte apenas para leitura est disponvel com o PHP 4.3.0 e a
biblioteca GD empacotada. Suporte para escrita est disponvel desde o PHP 4.3.9 e PHP 5.0.1.
- JPG - Quando compilando a biblioteca jpeg-v6b (antes de compilar o PHP) voc precisa usar a opo --enable-shared no passo
de configurao. Se voc no fizer, ir receber um erro dizendo libjpeg.(a|so) not found quando voc estiver no passo de
configurao para compilar o PHP.
- XPM - provavel que a biblioteca j esteja disponvel se o sistema tiver um ambiente X instalado.
Descomprima e instale os pacotes no diretrio de bibliotecas do seu sistema. Todos os trechos que esto entre colchetes devem
ser substitudos pelas informaes relativas sua instalao.
Instale o GD:
# cd [diretorio do pacote gd]
# ./configure --with-jpeg-dir=[caminho do diretorio da biblioteca Libjpeg] --
with-png-dir=[caminho do diretorio da biblioteca Libjpeg]
-- with-freetype-dir=[caminho do diretrio da biblioteca freetype]
# make
# make install WI!"#$%=yes WI!&'"#((=yes
Pare o servidor Apache se ele ainda estiver sendo executado:
# /usr/local/apache2/bin/apachectl stop
Recompile o PHP:
# ./configure - -with-ap)s* = [caminho do diretrio apxs] --ena+le-track-,ars --
with-mys-l --ena+le-ftp --with-.li+ --with-gd /with-jpeg-dir=[caminho do
diretrio da biblioteca jpeg] --with-png-dir=[caminho do diretrio da biblioteca
png] --with-freetype-dir=[caminho diretrio da biblioteca Freetype]
# make
# make install
Reinicie o Apache:
# /usr/local/apache*/+in/apachectl start
Execute a funo phpinfo( ) para verificar se as bibliotecas foram instaladas corretamente.
OBS: Muitos documentos na web versam sobre como compilar o PHP com GD. Outras configuraes de compilao so possveis
dependendo do servidor e/ou da verso das bibliotecas adquiridas e do PHP em uso. Aconselha-se que os pacotes de bibliotecas
sejam baixados e que procure um tutorial especfico na rede para a verso do Apache e do PHP que estiver utilizando, antes de
comear a instalao.
2 . Planejamento do projeto
Muitas aplicaes podem ser desenvolvidas com uso de mapas temticos. Atualmente a informao geogrfica tem lugar cada vez
maior nos projetos de Internet. Esse artigo apresenta o exemplo de uma classificao temtica realizada em 34 municpios do Rio
de Janeiro, envolvendo 22 temas. Para planejar o projeto, o programador deve ter em mente as necessidades de cada proposta. No
exemplo, as principais caractersticas levadas em conta foram as seguintes:
- Temas Como so muito temas, foi criada uma codificao para facilitar a busca em banco de dados;
- Unidade geogrfica de anlise utilizada Municipal.
- Meta-informaes Tambm armazenadas em banco de dados para exibio automtica Ttulos de mapas, descrio dos
temas, nomes dos municpios, nomes de fontes de dados etc.
3 . Planejamento do banco de dados
O tamanho e complexidade do banco de dados dependero das caractersticas do projeto. Aqui, apresentada uma estrutura de
banco de dados simplifica apenas para entendimento bsico do processamento de informaes na gerao de um mapa temtico,
com unidade geogrfica municipal. Daqui, poder ser personalizado e expandido, de acordo com cada projeto.
Tabelas:
- mun tabela com meta-informaes dos municpios. Campos: cod_mun (cdigo do municpio); nome (nome do municpio);
- temas tabela com meta-informaes dos temas adotados. Campos: cod_tema (cdigo de identificao do tema); desc_tema
(descrio do tema);
- fator tabela com os limites de intervalos de classes utilizados e com os valores mnimo e mximo de cada srie de dados
temticos. No exemplo, foram usadas trs classes, denominadas como alto impacto, mdio impacto e baixo impacto. Assim, a
tabela contm os campos: cod_tema (cdigo de identificao do tema), L1 (valor numrico do limite entre as classes baixo impacto
e mdio impacto), L2 ( valor numrico do limite entre as classes mdio impacto e alto impacto), min (valor numrico mnimo
encontrado na srie de dados de determinado tema), max (valor numrico mximo encontrado na srie de dados de determinado
tema).
Para armazenar os dados referentes a cada tema,deve ser criada uma tabela para cada qual, com os seguintes campos: cod_mun
(cdigo de identificao do municpio) e valor (valor numrico do tema referente a determinado municpio). Essa medida torna a
consulta de dados pelo programa de gerao do mapa digital mais gil.
4 . Programando o script de gerao dos mapas
O script de gerao do mapa deve estar puro, destinado exclusivamente a esse fim. Se o programador inserir o script em uma
pgina que j tem um cabealho HTML, incorrer em erro. O uso da funo include( ) do PHP tambm no permitido.
A estrutura do programa PHP para gerao de mapas digitais consiste das partes: 1) Cabealho do arquivo; 2) Conexo com o
banco de dados; 3) Definio das cores; 4) Desenho da moldura do mapa; 5) Desenho do Ttulo e do rodap; 6) Desenho da
legenda; 7) Desenho dos polgonos e 8) Gerao, exibio e destruio da imagem. A seguir, os trechos do cdigo que
correspondem a cada item e a explicao. Todos os trechos que esto em negrito devem ser substitudos com informaes
referentes ao seu projeto.
1) Cabealho do arquivo
header012ontent-type3image/png145
6cod = cdigo do tema que serve de base para esse mapa5
6im = Image2reate0890,65045 //2ria78o da imagem.
2) Conexo com o banco de dados
6con = mys-l"connect 01endereo do host do banco de dados19 1usurio19 1senha145
6d+ = nome do banco de dados5
mys-l"select"d+ 06d+45
6ta+ = 6cod5 //seleciona a ta+ela correpondente ao tema em -uest8o.
3) Definio das cores
//cores da legenda
//cor amarela
6cor":*[;<;]=24956cor":*[;=;]=24856cor":*[;>;]=1915
//cor ,erde
6cor":([;<;]=16556cor":([;=;]=20056cor":([;>;]=1655
//cor ,ermelha
6cor":?[;<;]=24456cor":?[;=;]=15056cor":?[;>;]=1505
//cor a.ul
6cor":@[;<;]=7956cor":@[;=;]=19156cor":@[;>;]=2325
//cor +ege do fundo
6cor":A[;<;]=24856cor":A[;=;]=24456cor":A[;>;]=2285
//aloca as cores
6cor:( = Image2olorBllocate06im9 6cor":([;<;]96cor":([;=;]96cor":([;>;]45
6cor:* = Image2olorBllocate06im9 6cor":*[;<;]96cor":*[;=;]96cor":*[;>;]45
6cor:? = Image2olorBllocate06im9 6cor":?[;<;]96cor":?[;=;]96cor":?[;>;]45
6cor:@ = Image2olorBllocate06im9 6cor":@[;<;]96cor":@[;=;]96cor":@[;>;]45
6cor:A = Image2olorBllocate06im9 6cor":A[;<;]96cor":A[;=;]96cor":A[;>;]45
6white = Image2olorBllocate06im9 *AA9 *AA9 *AA45
6+lack = Image2olorBllocate06im9 :9 :9 :45
4) Desenho da moldura do mapa
imagerectangle($im,5,5,880,640,$black);
5) Desenho do ttulo e do rodap
//Cscre,e o titulo
//$es-uisa o nome do indicador no +anco de dados
6result: = mys-l"-uery01DCEC2 desc"tema F<&% temas W!C<C cod"tema = ;6cod;14or
die 01Gao pude pes-uisar 1. mys-l"error0445
while 06row: = mys-l"fetch"array06result:44H
6desc"tema = 6row:[:]5
I
Imagestring06im96,20,4096desc"tema96+lack45
//Cscre,e o rodapJ
6string"fonte = 1Fonte: Atlas de Indicadores de Sustentabilidade para os
unic!pios "osteiros do #stado do $io de %aneiro, &rasil'15
imagestring06im93,20,57096string"fonte96+lack45
6string"end = 1(ttp:))***'i+ides'or,)atlas)-apas.ind'p(p, acessado e- 1 .
date01d14 . 1/1 . date01n14 . 1/1 . date01K145
imagestring06im93,20,59096string"end96+lack45
6string"mail = 1"ontacte a autora: $a/uel 0e1id2rio
3ra/uel'de1iderio4,-ail'co-515
imagestring06im93,20,61096string"mail96+lack45
6) Desenho da legenda
//2ria o +o) da legenda
Imagefilledrectangle06im9712,340,872,56096white45
//2ria a moldura do +o) da legenda
Imagerectangle06im9712,340,872,56096+lack45
//Cscre,e a pala,ra 1EC=CGLB1
6string = 1EC=CGLB15
imagestring06im95,765,35096string96+lack45
//2ria a linha -ue su+linha a legenda
ImageEine06im9 750, 370, 840, 3709 6+lack45
//$es-uisa os inter,alos das classes
6result: = mys-l"-uery01DCEC2 ma)9 min9 E(9 E* F<&% fator W!C<C cod"tema =
;6cod;14or die0MGao pude pes-uisar N. mys-l"error0445
while 06row: = mys-l"fetch"array06result:44H
6ma) = 6row:[:]5
6ma)"au) = 6ma)5
6ma) = 6ma) O :.:(::5
6min = 6row:[(]5
6min"e)i+e = 6min5
6min = 6min - :.:(::5
6E( = 6row:[*]5
6E("au) = 6E( O :.:::(5
6E* = 6row:[?]5
6E*"au) = 6E* O :.:::(5
I
//Lesenha os retangulos dos inter,alos
//Cscre,e o primeiro inter,alo
6string( = 1Impacto >ai)o15
6string(c = 101 . 6min"e)i+e . 1 - 1 . 6E( . 1415
imagestring06im95,748,39696string(96+lack45
imagestring06im93,748,41196string(c96+lack45
//Cscre,e o segundo inter,alo
6string* = 1Impacto %Jdio15
6string*c = 101 . 6E("au) . 1 - 1 . 6E* . 1415
imagestring06im95,748,45696string*96+lack45
imagestring06im93,748,47196string*c96+lack45
//Cscre,e o terceiro inter,alo
6string? = 1Impacto Blto15
6string?c = 101 . 6E*"au) . 1 - 1 . 6ma)"au) . 1415
imagestring06im95,748,51696string?96+lack45
imagestring06im93,748,53196string?c96+lack45
//Lesenha os -uadradinhos
imagefilledrectangle06im9720,400,740,42096cor:(45
imagerectangle06im9720,400,740,42096+lack45
imagefilledrectangle06im9720,460,740,48096cor:*45
imagerectangle06im9720,460,740,48096+lack45
imagefilledrectangle06im9720,520,740,54096cor:?45
imagerectangle06im9720,520,740,54096+lack45
7) Desenho dos polgonos
//2ria o poligono do mar
6,alues"mar = array0
0 67 5,
1 67 544,
2 67 5,
3 67 640,
4 67 880,
5 67 640,
6 67 880,
7 67 84,
8 67 736,
9 67 133,
10 67 739,
11 67 232,
12 67 500,
13 67 413,
14 67 430,
15 67 443,
16 67 380,
17 67 382,
18 67 340,
19 67 390,
20 67 286,
21 67 453,
22 67 215,
23 67 430,
24 67 151,
25 67 452,
26 67 120,
27 67 437,
28 67 49,
29 67 459,
30 67 5,
31 67 544,
45
6n"mar = (P5
//Lesenha o poligono do mar
imagefilledpolygon06im96,alues"mar96n"mar96cor:@45
imagepolygon06im96,alues"mar96n"mar96+lack45
//Lesenha o polQgono do municQpio ?( e atri+ui a cor
6cod"mun = ?(5
//$es-uisa o ,alor da medida para o municipio ...
6result?( = mys-l"-uery01DCEC2 ,alor F<&% 6ta+ W!C<C cod"mun = ;6cod"mun;14or
die 01Gao pude pes-uisar ...1 . mys-l"error0445
while 06row?( = mys-l"fetch"array06result?(44H
6,alor?( = 6row?([:]5
6,alor?("au) = 6,alor?(5
6,alor?( = num+er"format06,alor?(9*91.191.145
I
//Lefine o poligono para o municipio ?(
6,alues"?( = array0
: =R *S@9
( =R @*?9
* =R *SP9
? =R @*?9
@ =R *ST9
A =R @**9
P =R *SU9
T =R @**9
U =R *SS9
S =R @*(9
(: =R ?:P9
(( =R @*(9
(* =R ?:A9
(? =R @(*9
(@ =R ?:(9
(A =R @(*9
(P =R ?::9
(T =R @(?9
(U =R *ST9
(S =R @(?9
*: =R *SA9
*( =R @(@9
** =R *SA9
*? =R @(P9
*@ =R *S?9
*A =R @(P9
*P =R *S*9
*T =R @(T9
*U =R *S(9
*S =R @(U9
?: =R *S(9
?( =R @(S9
?* =R *S@9
?? =R @**9
?@ =R *S@9
?A =R @*?9
45
6n"?( = (U5
//esta em -ue inter,alo estV o ,alor recuperado para o municQpio
if 006,alor?( R 6min4WW06,alor?( X 6E(44H
imagefilledpolygon06im96,alues"?(96n"?(96cor:(45
I
if 006,alor?( R= 6E(4WW06,alor?( X= 6E*44H
imagefilledpolygon06im96,alues"?(96n"?(96cor:*45
I
if006,alor?( X= 6ma)4WW06,alor?( R 6E*44H
imagefilledpolygon06im96,alues"?(96n"?(96cor:?45
I
//Lesenha a +orda do poligono ?(
imagepolygon06im96,alues"?(96n"?(96+lack45
8) Gerao, exibio e destruio da imagem
Image$G=06im45
Imagedestroy06im45
Consideraes finais
Aqui s est descrito o trecho de cdigo de um dos municpios avaliados para fim de exemplificao. Para ver o cdigo PHP
utilizado na aplicao real que serviu de base para esse tutorial, visite: http://www.ivides.org/atlas/mapas_ind.php e clique no link
cdigo fonte do mapa.
Referncias e links sugeridos
[1] http://br2.php.net/manual/pt_BR/intro.image.php - Apresentao da GDLib no php.net.
[2] http://br2.php.net/manual/pt_BR/ref.image.php Lista das funes da GDLib no php.net.
[3] http://www.ivides.org/atlas/mapas_ind.php Atlas de Indicadores de Sustentabilidade para os Municpios Costeiros do Estado do
Rio de Janeiro.
Sobre a autora
Raquel Dezidrio Souto (raquel.deziderio@gmail.com) Bacharel em Oceanografia pela Universidade do Estado do Rio de Janeiro
(2005) e programadora PHP/MySQL, atuando desde 2004 em desenvolvimento de aplicaes administrativo-financeiras e
geocientficas. Atualmente seus principais projetos so: portal do Atlas de Indicadores de Sustentabilidade para os Municpios
Costeiros do Estado do Rio de Janeiro - http://www.ivides.org/atlas e portal do Instituto Virtual para o Desenvolvimento Sustentvel
- IVIDES.org - http://www.ivides.org. Procura por parceiros de atividades e coloca-se disposio para resolver dvidas geradas no
uso desse tutorial.

Você também pode gostar