TerraPHP: Extensão PHP da Biblioteca TerraLib TERRALIB DEVELOPMENT TEAM Gilberto Ribeiro de Queiroz - gribeiro(at)dpi.inpe.br Image Processing Division, National Institute for Space Research (INPE), São José dos Campos, Brazil Resumo. O TerraPHP é uma extensão da linguagem PHP, construída no topo da biblioteca TerraLib, para facilitar o desenvolvimento de aplicativos Web de visualização e consulta a bancos de dados geográficos. Este documento apresenta as funcionalidades disponíveis nesta extensão e exemplos de como construir tais aplicações em PHP. Também é mostrado como instalar e configurar o ambiente do TerraPHP no sistema operacional Linux. 1. Introdução A World Wide Web [01], abreviadamente Web, se tornou uma das mídias mais importantes e preferidas para disseminação de informações. Ela evoluiu de simples páginas com conteúdo estático para páginas com conteúdos dinâmicos, extraídos, principalmente, de Sistemas Gerenciadores de Bancos de Dados (SGBDs) [02]. Para atender à necessidade de construção destas páginas (com conteúdo dinâmico), diversas tecnologias emergiram no final da década passada e, entre elas, pode-se citar: Common Gateway Interface (CGI) [03], Active Server Pages (ASP) [04], Java Server Pages (JSP) [05] e Hypertext Preprocessor (PHP) [06]. Nesta década, a demanda pela disseminação de dados geográficos, tem motivado os principais fornecedores de Sistemas de Informação Geográficas (SIG) [07] a investirem em ferramentas para ...
TERRALIBDEVELOPMENTTEAMGilberto Ribeiro de Queiroz - gribeiro(at)dpi.inpe.br Image Processing Division, National Institute for Space Research (INPE), São José dos Campos, Brazil Resumo. O TerraPHP é uma extensão da linguagem PHP, construída no topo da biblioteca TerraLib, para facilitar o desenvolvimento de aplicativos Web de visualização e consulta a bancos de dados geográficos. Este documento apresenta as funcionalidades disponíveis nesta extensão e exemplos de como construir tais aplicações em PHP. Também é mostrado como instalar e configurar o ambiente do TerraPHP no sistema operacional Linux. 1. Introdução A World Wide Web [01], abreviadamente Web, se tornou uma das mídias mais importantes e preferidas para disseminação de informações. Ela evoluiu de simples páginas com conteúdo estático para páginas com conteúdos dinâmicos, extraídos, principalmente, de Sistemas Gerenciadores de Bancos de Dados (SGBDs) [02]. Para atender à necessidade de construção destas páginas (com conteúdo dinâmico), diversas tecnologias emergiram no final da década passada e, entre elas, pode-se citar: Common Gateway Interface (CGI) [03], Active Server Pages (ASP) [04], Java Server Pages (JSP) [05] e Hypertext Preprocessor (PHP) [06]. Nesta década, a demanda pela disseminação de dados geográficos, tem motivado os principais fornecedores de Sistemas de Informação Geográficas (SIG) [07] a investirem em ferramentas para construção de aplicações que forneçam acesso a esses tipos de dados via Web. A forma mais comum de publicação de dados geográficos neste tipo de mídia é através de mapas em formato de imagem PNG [08] ou JPEG [09]. Existem dois tipos principais de aplicações que utilizam esta forma de disseminação: ·Aplicações dedicadas: uma aplicação específica é desenvolvida com alguma onde tecnologia que permita a construção de mapas sob demanda. Neste tipo de aplicação os usuários podem interagir realizando operações dezoom e apontamento sobre a imagem dos mapas embutidos nas páginas exibidas pelos navegadores Web. ·Servidores de mapas: aplicações servidoras de informações geográficas que são possuem uma interface bem definida para que aplicações clientes possam solicitar recursos (dados geográficos). O Open GIS fornece especificações para essa classe de aplicação, entre elas, as especificações WMS [10] e WFS [11]. Entre as tecnologias de software livre para desenvolvimento de aplicações Web tradicionais, o PHP ocupa uma posição de destaque. Por se tratar de uma linguagem simples e extensível, o número de desenvolvedores adeptos tem se tornado cada vez maior. Com o objetivo de difundir o uso de geotecnologias, nós desenvolvemos uma extensão para o PHP, chamada TerraPHP. Esta extensão é baseada na biblioteca TerraLib [12] e acrescenta funcionalidades básicas de construção de aplicativos geográficos ao PHP. O presente documento está organizado da seguinte forma: a Seção 2 apresenta como configurar e instalar manualmente a extensão em ambiente Linux; a Seção 3 ensina a utilizar o script terraphpInstall, para realizar a instalação automática da extensão; a Seção 4 apresenta as
funcionalidades disponíveis do TerraPHP; e a Seção 5 mostra como construir aplicações utilizando a extensão. No final do documento encontra-se um apêndice com algumas mensagens de erro e as possíveis causas. 2. Instalação e Configuração Manual do TerraPHP no Linux Nesta seção é apresentado como instalar e configurar manualmente o ambiente de desenvolvimento no sistema Linux (Sistemas RedHat, Mandrake e Conectiva). A próxima seção apresenta uma forma alternativa (scriptde instalação automática). 2.1 Bibliotecas Auxiliares Para compilar a extensão TerraPHP serão necessárias as seguintes bibliotecas: ·zlibversão 1.2.2, disponível em: http://www.gzip.org/zlib. ·libpngversão 1.2.8 disponível em: http://www.libpng.org/pub/png. ·IJG JPEG libraryversão 6 disponível em: http://www.ijg.org. ·libgdversão 2.0.33 disponível em: http://www.boutell.com/gd. ·lib FreeTypeversão 2.1.9 disponível em: http://sourceforge.net/projects/freetype. As distribuições Linux já acompanham estas bibliotecas e as versões citadas, não são obrigatórias, porém, correspondem às utilizadas em nossos experimentos. 2.2 Servidor de Banco de Dados MySQL Instalar a versão 4.1.12 disponível em http://www.mysql.com: ·Criação do usuário e grupo mysql (caso não existam no sistema): groupaddmysql useradd-g mysql -c "MySQL Server" -d /usr/local/mysql s /bin/bash mysql -·Instalação esetupinicial do mysql: cd/usr/local tarxzf /tmp/soft/mysql-standard-4.1.12-pc-linux-i686.tar.gz ln-s mysql-standard-4.1.12-pc-linux-i686 mysql cdmysql scripts/mysql install db _ _ chown .-R root chown-R mysql data chgrp-R mysql . ·Inicialização no boot (arquivo mysql disponível no site do TerraPHP): cpmysql /etc/init.d
chownroot /etc/init.d/mysql chmod744 /etc/init.d/mysql chkconfig--level 2345 mysql on servicemysql start ·Senha de root do MySQL: /usr/local/mysql/bin/mysqladmin-u root password new-password
2.3 Biblioteca TerraLib e TerraView Os códigos fonte da biblioteca TerraLib e do aplicativo TerraView encontram-se disponíveis para download em http://www.terralib.org ou por meio do servidor CVS. 1. do diretório “ cvs dentroCriar um diretório chamado terralib/root e alterar o _ diretório corrente: cd/root _ mkdirterralib cvs _ cdterralib cvs2.Obter os arquivos fontes do TerraView e TerraLib a partir do CVS: ·Logar no servidor CVS: cvsd :pserver:anonymous@cvs.dpi.inpe.br:/home/terralib login ·Baixar o diretóriosrc: cvs -d :pserver:anonymous@cvs.dpi.inpe.br:/home/terralib co src ·Baixar o diretórioterralibx: cvs-d :pserver:anonymous@cvs.dpi.inpe.br:/home/terralib co terralibx ·Baixar o diretórioaplicativos: cvs-d :pserver:anonymous@cvs.dpi.inpe.br:/home/terralib co aplicativos ·Baixar o diretórioextensions: cvs-d :pserver:anonymous@cvs.dpi.inpe.br:/home/terralib co extensions 3.Compilar a biblioteca TerraLib: ·Entrar no diretório terralibx/shapelib e executar make; ·Entrar no diretório terralibx/tiff e executar make; ·Entrar no diretório terralibx/terralib e executar make; ·Entrar no diretório terralibx/stat e executar make; ·Entrar no diretório terralibx/image_processing e executar make; 4.Compilar o aplicativo TerraView: ·Entrar no diretório aplicativos/terraView/linux e executar make.
·término, você poderá copiar o arquivo binário terraView para o diretórioApós o /usr/local/bin.5.Compilar a biblioteca TerraManager: ·Entrar no diretório extensions/terramanager/terramanagerx/terramanager ·Essa é biblioteca base da extensão TerraPHP. ·Antes de executar o make, você deverá criar o arquivo Makefile através do comando qmake. Aqui, você deverá informar quais osdrivers bancos de dados deseja de habilitar. Se você deseja habilitar odriver servidor MySQL, a seguinte linha do deverá ser executada: qmakeTE DATABASE OPTION=HAS MYSQL _ _ _ Se desejar mais de umdriver, pode-se usar espaço para separar uma das seguintes opções: HAS POSTGRESQL, HAS_OCI, HAS_MYSQL: _ _ _ _ _ qmakeTE DATABASE OPTION=HAS MYSQL HAS POSTGRESQL ·Depois é só executar o comando make. 6.diretório atual para ele e criarCriar o diretório /usr/local/lib/teralib, alterar o linkssimbólicos para as bibliotecas geradas na etapa anterior: mkdirbli/usrl/colal/bit/rearcdsr/uoc/ll/lat/biarrebil _ lns /root/terralib cvs/terralibx/terralib/*so* . _ lns /root/terralib cvs/terralibx/tiff/*so* . _ lns /root/terralib cvs/terralibx/shapelib/*so* . _ lns /root/terralib cvs/terralibx/stat/*so* . _ _ lns /root/terralib cvs/terralibx/image processing/*so* . _ _ lns /root/terralib cvs/terralibx/image processing/*so* . lns /root/terralib cvs/extensons/terramanager/terramanagerx/terrama _ nager/ *so* . 7.Criar o diretório "/usr/local/include/terralib", alterar o diretório atual para ele e então criarlinkssimbólicos para os arquivos de cabeçalho da TerraLib: lns /root/terralib cvs/src/terralib/kernel/*.h . _ ln-s /root/terralib cvs/src/terralib/functions/*.h . _ ln-s /root/terralib cvs/src/terralib/stat/*.h . _ ln-s /root/terralib cvs/src/terralib/application/*.h . _ _ ln-s /root/terralib cvs/src/terralib/application/qt/*.h . ln-s /root/terralib cvs/src/terralib/drivers/MySQL/*.h . _ _ ln-s /root/terralib cvs/extensions/terramanager/src/*.h .
2.4 Servidor HTTP Apache Instalar a versão 1.3.33 disponível em http://www.apache.org/: 1.usuário e grupo apache (caso não existam no sistema):Criação do groupaddapache useradd-g apache -c "Apache Server" -d /usr/local/apache -s /bin/false apache 2.Compilação e instalação: cd/tmp/soft tarxzf apache 1.3.31.tar.gz _ cdapache 1.3.31 _ ./configure--enable-module=so make make install 3.Inicialização noboot(arquivo httpd disponível no site do TerraPHP): cphttpd /etc/init.d chownroot /etc/init.d/httpd chmod744 /etc/init.d/httpd chkconfig--level 2345 httpd on 4.Configuração do apache editar oarquivo /usr/local/apache/conf/httpd.conf: ·Para o apache interpretar a extensão php, coloque em httpd.conf, logo após a linha AddType application/x-tar .tgz: AddTypeapplication/x-httpd-php .php ·Para o apache interpretar index.php, coloque em httpd.conf na linha DirectoryIndex index.html: DirectoryIndexindex.html index.php 5.NÃOinicializar o serviçohttpdpor enquanto.
2.6 Extensão TerraPHP Existem duas formas de instalar a extensão TerraPHP: interno ao PHP ou como módulo externo. 2.6.1 Construindo o TerraPHP junto com o PHP Descompactar a versão 4.3.11 disponível em http://www.php.net: cd/tmp/softtarxzf php-4.3.11.tar.gz cdphp-4.3.11
1.Entrar no diretório “extda raiz de diretórios do PHP e criar o diretório dentro terraweb: cdext mkdirterraweb cdterraweb2.Criarlinkspara arquivos da extensão TerraPHP: lns /root/terralib cvs/extensions/terraphp/src/config.m4 . _ lns /root/terralib cvs/extensions/terraphp/src/php terraweb.h . _ _ ln-s /root/terralib cvs/extensions/terramanager/src/terraweb.cpp . _ 3.Compilação e instalação do PHP: cd../.. ./buildconf--force ./configure--with-apxs=/usr/local/apache/bin/apxs --enable-magic-quotes --enable-track-vars --enable-calendar --with-gettext --with-xml --with-gd --with-freetype-dir=/usr --enable-gd-native-ttf --enable-gd-imgstrttf --with-zlib --enable-ftp --enable-debugger --enable-inline-optimization --enable-memory-limit --enable-posix --enable-session --without-kerberos --enable-trans-sid --enable-safe-mode --with-exec-dir=/usr/bin--with-terraweb--with-mysql=/usr/local/mysql --with-pgsql=/usr/local/pgsqlmake make install cpphp.ini-dist /usr/local/lib/php.iniservicehttpd start Os flagsqlysoc/l/mal-qs=lu/rsw-ti-hyme --with-pgsql=/usr/local/pgsql indicam que as extensões PostgreSQL e MySQL do PHP também deverão ser habilitadas. Nessa linha do configure você deverá habilitar os módulos de bancos compatíveis com osdriversselecionados durante a compilação do TerraManager. 2.6.2 Construindo o TerraPHP como um módulo externo (Recomendado) Se vocênãopossui o PHP instalado, deverá descompactar a versão 4.3.11 disponível em http://www.php.net e realizar a instalação descrita a seguir: cd/tmp/softtarxzf php-4.3.11.tar.gz cdphp-4.3.11
1.Entrar no diretório “extda raiz de diretórios do PHP e criar o diretório dentro terraweb: cdext mkdirterraweb cdterraweb2.Criarlinkspara arquivos da extensão TerraPHP: lns /root/terralib cvs/extensions/terraphp/src/config.m4 . _ lns _ _ /root/terralib cvs/extensions/terraphp/src/php terraweb.h . ln-s _ /root/terralib cvs/extensions/terramanager/src/terraweb.cpp . 3.Compilação e instalação do PHP: cd../.. ./buildconf--force ./configure--with-apxs=/usr/local/apache/bin/apxs --enable-magic-quotes --enable-track-vars --enable-calendar --with-gettext --with-xml --with-gd --with-freetype-dir=/usr --enable-gd-native-ttf --enable-gd-imgstrttf --with-zlib --enable-ftp --enable-debugger --enable-inline-optimization --enable-memory-limit --enable-posix --enable-session --without-kerberos --enable-trans-sid --enable-safe-mode --with-exec-dir=/usr/bin ----with-mysql=/usr/local/mysql --with-pgsql=/usr/local/pgsql make make install cpphp.ini-dist /usr/local/lib/php.iniA linha do configure acimanãodeve incluir diretivaebw-ti-rrwa-het. Se você já possui o PHP instalado, basta criar uma pasta terraweb e seguir os passos do item 2 (criando oslinkssimbólicos para os arquivos da extensão). Dirigindo-se à pastaterraweb, onde estão os fontes da extensão TerraPHP, podemos iniciar a construção do módulo terraweb.so. 1.Digite o seguinte comando na pasta da extensão: phpize O comando acima irá gerar os arquivos necessários para a compilação do módulo terraweb.so. 2.Em seguida execute: ./configure with-terraweb 3.Compilando a extensão: make 4.Se tudo ocorreu bem, basta copiar o módulo terraweb.so que deverá ter sido criado na pasta modules para o diretório /usr/local/lib/php/extensions.
Após a criação da extensão é importante alterar o arquivo php.ini (geralmente em /usr/local/lib) e acrescentar o caminho onde os módulos do PHP serão encontrados (/usr/local/lib/php/extensions) além de habilitar a extensão terraweb.so. Depois disso, é só reiniciar o servidor Apache e seguir as dicas da seção de teste da instalação. 3. Instalação e Configuração Automáticas do TerraPHP no Linux Outra forma de realizar a instalação da extensão TerraPHP é através de scripts que encontram-se disponíveis no site do TerraPHP. Você deverá baixar o arquivozipcontendo estes scripts (terrainstallx.zip). Descompacte este arquivo em um diretório apropriado, como por exemplo: /root/terraphpinstall. Os seguintes arquivos (scripts) deverão ser encontrados neste diretório: te_main_install, te_install_apa _ _g te_install_terralib, che, te install d, te_install_terramanager, te install terraphp, te_install terraview _ _ _ Ajuste o privilégio de execução para os arquivos de script se necessário (chmod 700 te_*deverá estar logado como usuário root para realizar a instalação. Executando o). Você comando:./te main install, será exibida uma tela como a da Figura 1. _ _
Figura 1 Tela principal de instalação Aqui você terá a opção de instalar cada um dos componentes necessários à extensão TerraPHP. Inicie a instalação através da opção 7 se você não possuir a biblioteca GD instalada. Neste caso, você terá que editar o arquivo te_install_gd e configurar a linha que indica o pacote onde se encontram os fontes da GD: _ _ TE GD SRC="gd-2.0.33.tar.gz"
TE GD SRC DIR="gd-2.0.33" _ _ _ A GD pode ser obtida no site http://www.boutell.com/gd/ e o arquivo com os fontes deverá ser colocado na pasta dos scripts de instalação.TE_GD_SRC_DIRindica o prefixo do pacote a ser instalado (omite-se a extensão .tar.gz). Se você não possuir o servidor Apache instalado, poderá escolher a opção 6. Assim como no caso da GD, você deverá baixar os fontes do Apache (http://apache.org) e editar o arquivo te_install_apache:TE APACHE SRC="apache 1.3.33.tar.gz" _ _ _ TE APACHE SRC DIR="apache 1.3.33" _ _ _ _ _ _ _ TE APACHE START SCRIPT="httpd" Se você optou por instalar o Apache a partir dos fontes, deverá ter em mãos o scripthttpdde inicialização do servidor. No site do TerraPHP você encontra um script padrão que pode ser utilizado (basta copiar para a pasta dos scripts de instalação). A opção 5, instalação do servidor MySQL, somente será necessária se você não possuir um servidor de bancos de dados ao qual tenha acesso. Não é um requisito obrigatório para instalação do TerraPHP. No caso de optar por instalar, edite o arquivo te_install_mysql: TE MYSQL SRC="mysql-standard-4.1.12-pc-linux-gnu-i686.tar.gz" _ _ TE MYSQL SRC DIR="mysql-standard-4.1.12-pc-linux-gnu-i686" _ _ _ TE MYSQL START SCRIPT="mysql" _ _ _ Indique o nome do pacote com os binários do servidor (disponíveis em http://www.mysql.com) e tenha em mãos o script de inicialização do servidor (disponível no site do TerraPHP). Tanto o arquivo com o binário quanto o scriptmysqldeverão ser copiados para a pasta onde se encontram os scripts de instalação do TerraPHP. Se você não possuir o PHP instalado, deverá editar o arquivo te_install_terraphp antes de prosseguir com as outras opções de instalação (1 a 4): TE PHP OPTIONS="--with-mysql=/usr/local/mysql " _ _ _ _ TE PHP SRC="php-4.3.11.tar.gz" _ _ _ TE PHP SRC DIR="php-4.3.11" _ _ PTIONS irá indicar q os módulos do PHP você deseja A variávelTE PHP Ouais habilitar. Por padrão, será habilitado somente o módulo MySQL. No caso da instalação do TerraManager, que é utilizado pela extensão TerraPHP, é necessário indicar quais os drivers de bancos de dados deverão estar presentes na extensão TerraPHP. Edite o arquivo te_install_terramanager e configure a seguinte variável: _ _ _ DATABASE 2 USE="HAS POSTGRESQL" Caso deseje instalar outrosdriversusar espaço para separar uma das seguintes, pode-se opções: HAS_POSTGRESQL, HAS_OCI, HAS MYSQL. _ Após configurar o script de instalação do TerraManager (te_install_terramanager), podemos iniciar a instalação dos módulos TerraLib (opções 1 a 4). Inicie instalando a própria
TerraLib. Caso você não tenha os fontes da TerraLib, não se preocupe, os scripts darão a possibilidade de baixar esses módulos automaticamente através do CVS, desde que você esteja conectado a Internet. Se você já possui os fontes da TerraLib, o script irá solicitar que você indique o caminho onde eles se encontram. Depois, basta seguir as instruções fornecidas pelo script (2 a 4). Após a execução dos passos 1 a 4, você deverá ter a extensão instalada. Siga para a próxima seção para testar se a extensão foi corretamente instalada. 4. Testando a Instalação do TerraPHP Se a extensão do TerraPHP foi instalada corretamente, podemos verificar se ela aparece na descrição dos módulos do PHP, montando um simples script que execute o comando phpinfo. 01<? 02phpinfo(); 03?>
Script phpinfo.php Este programa deverá exibir uma página como a mostrada na Figura 2:
.Rolando a página podemos ver os módulos instalados no PHP, inclusive o TerraPHP, denominado de TerraWeb. A Figura 3 ilustra o texto que deverá ser apresentado caso a extensão TerraPHP esteja habilitada.