Mini-curso MapServer Avançado PHP/MapScript

Documentos relacionados
Introdução ao Mapserver

AULA 1 Iniciando o uso do TerraView

OFICINA USO DO I3GEO. Levindo Cardoso Medeiros.

INTRODUÇÃO WORKCAD NA ENGENHARIA DE PRODUÇÃO

MANUAL DO PVP SUMÁRIO

AJAX no GASweb. Mas e afinal, para que usamos o AJAX?

Fluxo de trabalho do Capture Pro Software: Indexação de OCR e separação de documentos de código de correção

Aprendendo a Usar o ArcExplorer

Tutorial WEB CONTENT MANAGEMENT [WCM] Obtenha benefícios a partir das aplicações customizadas da ADMT.

1 - INTRODUÇÃO 2 - CONCEITOS BÁSICOS ARCPAD

AULA 1 Iniciando o Uso do TerraView

a) Crie 3 novos layers: margem (neste exemplo foi utilizada cor 30), vp e cotas.

4 O Workflow e a Máquina de Regras

ANDRÉ APARECIDO DA SILVA APOSTILA BÁSICA SOBRE O POWERPOINT 2007

AULA 6 - Operações Espaciais

Status. Barra de Título. Barra de Menu. Barra de. Ferramentas Padrão. Caixa de nomes. Barra de. Ferramentas de Formatação. Indicadores de Coluna

Fluxo de trabalho do Capture Pro Software: Indexação de código de barras e separação de documentos

MANUAL DE SUPORTE. Controle de Suporte. Este manual descreve as funcionalidades do controle de suporte.

PORTAL DE COMPRAS SÃO JOSÉ DO RIO PRETO

Palavras-chave: i3geo, gvsig, Mapserver, integração, plugin. Contato: ou

Introdução ao PHP. Prof. Késsia Marchi

O ArcMap permite a você criar, visualizar, consultar, editar, compor e publicar mapas.

Manual do Publicador. Wordpress FATEA Sistema de Gerenciamento de Conteúdo Web

Iniciando o ArcView 3.2

PTR 2355/2389 Princípios de Geoprocessamento. Atividade Prática: Laboratório SIG

DOCUMENTAÇÃO DO FRAMEWORK - versão 2.0

ftp://ftp.cr-df.rnp.br/pub/netinfo/training/rnp/kit-bsb/html/guia.zip novembro 1996 Tutorial - Autoria em World Wide Web

UNIVERSIDADE FEDERAL RURAL DO RIO DE JANEIRO IA Departamento de Solos CPGA-CIÊNCIA DO SOLO IA AGRICULTURA DE PRECISÃO

1 - Crie um novo documento no ArcMap. Com o programa aberto, selecione o Dataframe Layers

ÍNDICE... 2 POWER POINT Abas... 7 Salvando Arquivos... 8 Abrindo um arquivo LAYOUT E DESIGN... 13

Introdução Padrões OGC Instalação Configuração Formatos de Saída Aplicação AGENDA

Despachante Express - Software para o despachante documentalista veicular DESPACHANTE EXPRESS MANUAL DO USUÁRIO VERSÃO 1.1

CRIANDO TEMPLATES E LEGENDAS

Desenvolvimento de aplicação web com framework JavaServer Faces e Hibernate

2.0.0.X. Storage Client. TecnoSpeed. Tecnologia da Informação. Manual do Storage Client

Personalizações do mysuite

AULA 5 Manipulando Dados Matriciais: Grades e Imagens. 5.1 Importando Grades e Imagens Interface Simplificada

Manual do Usuário. Sumário. 1. Introdução Utilização do site Mapa de Vitória Aplicativos Downloads...

WEBGIS Sistema Informativo Territorial

Microsoft Office PowerPoint 2007

KalumaFin. Manual do Usuário

Scriptlets e Formulários

Apresentando o Sistema GeoOffice GPS Profissional

Tutorial Mapa-Temático

Importação de arquivos Raster e Vetorial no Terraview

Conceitos Iniciais MARCEL SANTOS SILVA

BANCO DE DADOS GEOGRÁFICOS

Acesso ao Servidor de Mapas (ARCMAP)

WebServices (Serviços Web) João Araujo

Tutorial 3 Dataframe layers Dataframe

O que há de novo. Audaces Idea

Programação de Computadores - I. Profª Beatriz Profº Israel

JobScheduler Empresa: Assunto: Responsável: Dados de Contato: Suporte: Comercial: Financeiro:

OpenJUMP. Pontos fracos do OpenJUMP

Guia de Início Rápido

GeoMafra SIG Municipal

TUTORIAL DO ACCESS PASSO A PASSO. I. Criar um Novo Banco de Dados. Passos: 1. Abrir o Access 2. Clicar em Criar um novo arquivo

MAPA - Orientações. Conteúdo desse documento:

Utilizando Janelas e Frames

Android e Bancos de Dados

AULA 3 Ferramentas de Análise Básicas

Resumo. Maria Bernadete Barison apresenta aulas práticas sobre RETAS em Desenho Geométrico. Geométrica vol.1 n.1d RETAS CAD

Primeiro contato com JavaScript

Omega Tecnologia Manual Omega Hosting

II Torneio de Programação em LabVIEW

Manual do Painel Administrativo

Mapas. Visualização de informação geográfica; Consulta e edição (mediante permissões) de informação geográfica;

SUMÁRIO Acesso ao sistema... 2 Atendente... 3

Introdução. História. Como funciona

GeoMafra Portal Geográfico

MANUAL DO USUÁRIO. Software de Imagem via Celular (isic) baseado no sistema operacional Symbian

Manual marketing v

Repeater no GASweb. Regiões

Manual WebAdmin News

PROGRAMAÇÃO WEB DO LADO DO CLIENTE

Atualização De Mapas GPS Apontador. 1º Acessar site: 2º Selecione o Idioma para Português no seu canto direito.

Listando itens em ComboBox e gravando os dados no Banco de Dados MySQL.

MANUAL USUÁRIO AUDATEX WEB

AMBIENTE. FORMULÁRIO: é a janela do aplicativo apresentada ao usuário. Considere o formulário como a sua prancheta de trabalho.

Professor: Macêdo Firmino Disciplina: Sistemas Operacionais de Rede

Procedimentos para Instalação do Sisloc

ÍNDICE... 2 INTRODUÇÃO... 4

Acessando a Plataforma de Rastreamento

CorelDRAW UM PROGRAMA DE DESIGN

VERSÃO 1 PRELIMINAR MÓDULO 3 - PRESENCIAL

Boas Práticas de Desenvolvimento Seguro

Programação Web com Webdev 19 Julio Cesar Pedroso Conteúdo

MULTIACERVO - VERSÃO 18.* MANUAL PARA CONVERSÃO DA VERSÃO 17.* PARA 18.*

FCT Faculdade de Ciências e Tecnologia Serviço Técnico de Informática STI SGCD Sistema Gerenciador de Conteúdos Dinâmicos

MARCOS GEODÉSICOS / REFERÊNCIAS DE NÍVEL

4ª aba do cadastro: Mapa Orientações para upload de shapefiles

PROMOB ARCH PRIMEIROS PASSOS

Manual de Atualização Versão

Guia de Início Rápido

Trabalho GA - Editor de Cenário Parallax

Construtor de sites SoftPixel GUIA RÁPIDO - 1 -

UNIVERSIDADE TECNOLOGIA FEDERAL DO PARANÁ. Owncloud SERVIÇO DE COMPARTILHAMENTO EM NUVEM. Manual

Transcrição:

Mini-curso MapServer Avançado PHP/MapScript Carlos Henrique Bughi bughi@univali.br Laboratório de Computação Aplicada G10 Centro de Ciências Tecnológicas da Terra e do Mar Universidade do Vale do Itajaí 1

PHP/MapScript Agenda Sobre o G10 Introdução ao PHP/MapScript O que é Porque usar Estrutura Requisitos PHP Conceitos básicos Programação OO Acessando PostGreSQL AJAX Modelo de objetos PHP/MapScript Modelando a aplicação Requisitos do sistema Diagrama de classes Codificando a aplicação 2

Laboratório de Computação Aplicada G10 Histórico e Características Início das atividades: 2001 Áreas: Engenharia Ambiental Ciências da Computação Oceanografia Geografia Linhas de Pesquisa: Desenvolvimento de sistemas de informação e apoio à decisão com suporte geoespacial 3

Laboratório de Computação Aplicada G10 Histórico e Características Equipe atual: 1 Doutor 1 Mestre 2 Mestrandos 6 Técnicos 12 Graduandos 4

Laboratório de Computação Aplicada G10 Histórico e Características Infra-estrutura (80m2): 4 Servidores 6 Workstations 20 PCs 4 Notebooks 5

Laboratório de Computação Aplicada G10 6

Laboratório de Computação Aplicada G10 Histórico e Características 42 Projetos Troféu FINEP de Inovação Tecnológica Etapa Sul 2003 Etapa Sul 2006 Finalista do Prêmio Empreendedorismo Guia do Estudante - 2005 7

Laboratório de Computação Aplicada G10 Histórico e Características Projetos em desenvolvimento Projeto TAMAR SITAMAR SEAP/PR RASTRO e COB Porto de Itajaí Sistema de Informação Ambiental MMA/SRH Censo Gestão de Recursos Hídricos MMA/FNMA Pesca Responsável 8

Laboratório de Computação Aplicada G10 Foco: 9

Introdução ao PHP/MapScript 10

PHP/MapScript Definição O PHP/MapScript é um módulo desenvolvido para a linguagem de script PHP que permite o uso de funções e classes existentes no Mapserver (desenvolvido utilizando a linguagem C); Desenvolvido e mantido pela DM Solutions Group, atualmente encontra-se na versão 4.8.1 (03/01/06); Permite aliar as facilidades de uma linguagem de programação com as funcionalidades SIG do MapServer; 11

PHP/MapScript Definição 12

PHP/MapScript Porque usar O PHP/MapScript permite fazer coisas que o MapServer CGI não consegue: Criação de layers dinâmicas; Navegação customizada; Classificação de layers em tempo real; Maior capacidade de pesquisa; Suporte à leitura e gravação de shapefiles; Manipulação dinâmica de definições do arquivo MapFile; Liberdade para a criação de lógica e algoritmos complexos; 13

PHP/MapScript Requisitos Para utilizar o PHP/MapScript, alguns requisitos básicos são necessários: Conhecimento do MapServer CGI e da estrutura do MapFile; Conhecimento da linguagem PHP; Seguindo as últimas tendências, conhecimento em AJAX para a construção de aplicações com PHP/MapScript mais eficientes e amigáveis ao usuário final; 14

Estrutura do MapFile QUERYMAP WEB SYMBOL 0..1 0..1 0..* PROJECTION REFERENCE_MAP 0..1 MAP 0..1 0..1 GRID SCALEBAR 0..1 0..1 0..* LAYER 0..1 LEGEND 0..* FEATURE 1..* CLASS 0..1 0..1 LABEL 0..1 0..* STYLE 15

Estrutura do MapFile Objetos MapFile Map: Objeto mestre do MapFile Web: Define parâmetros para uma interface web Layer: Descreve as camadas utilizadas para fazer o mapa Class: Define classes temáticas para uma camada; Label: Define formatos de fonte e apresentação de textos; Style: Mantém parâmetros para simbolização Parâmetros da requisição (para testes com CGI): Mode: Modo de operação do MapServer (map) Map: Caminho para o arquivo MapFile 16

Estrutura do MapFile Criação do mapfile para o sistema em PHP/MapScript Layers vetoriais brasil.shp capitais.shp eixo_geo.shp lote_geo.shp quadra_geo.shp via_geo.shp Layers raster Rectifyikonos_mini.tif Obtendo informações sobre o Shapefile: ogrinfo.exe -al fid 0 arqshape.shp 17

Estrutura do MapFile Criação do mapfile para o sistema em PHP/MapScript Limites do mapa -47.886453-15.809809-47.848327-15.786974 Imagem para o mapa de referência dados/referencia.png 18

Construindo uma aplicação WebGIS com PHP/MapScript Definindo os requisitos do sistema 19

Requisitos Requisitos contemplados Pan Zoom in pontual Zoom in por seleção Zoom out Retorno aos limites originais Pesquisa pontual Pesquisa por seleção Mapa de referência dinâmico Listagem dinâmica de camadas Cálculo de distância 20

Arquitetura Requisição AJAX Cliente Web (Navegador) Servidor HTTP Motor PHP Resposta index.html rotinas.js Mapscript requisicao principal.css MapFile 21

Estrutura de arquivos e diretórios Pasta app1 (dentro de htdocs) 22

Arquivos lado cliente index.html 23

Arquivos lado cliente principal.css: arquivo de definição de estilos Referenciado no index.html através de: <link rel="stylesheet" href="estilos/principal.css" type="text/css"/> 24

Arquivos lado cliente rotinas.js Variáveis globais: btnacao: define a ação atual requisicaoacao: define a ação passada para a requisição requisicaoparametros: define parâmetros adicionais passados para a requisição Valores possíveis Valores possíveis btnacao 1 zoomin 2 zoomout 3 query 4 reset 5 distancia 6 pan 7 inserirmarco requisicaoacao iniciarsistema retornarlimite mudarstatuscamada realizarzoomporselecao realizarzoompontual realizarpesquisaporselecao realizarpesquisapontual inserirmarco inserirpontodistancia cancelardistancia 25

Arquivos lado cliente rotinas.js Variáveis do mapa: limite: limites do mapa separados por vírgula (retornado pelo servidor); largurapadrao: largura da imagem (deve ser definido direto no arquivo); alturapadrao: altura da imagem (deve ser definido direto no arquivo); Variáveis de seleção: offsetx e offsety: armazenam o clique inicial do mapa; minx, miny, maxx e maxy: armazenam as coordenadas da seleção; arrastando: status da seleção, arrastando = true indica que uma seleção está em andamento; 26

Arquivos lado cliente rotinas.js Métodos: inicia(): chamado no evento onload() do elemento body, realiza a primeira requisição ao servidor; iniciabtn(): define as imagens desabilitadas de cada botão; selecionabtnacao(acao): define a imagem habilitada para o botão definido pelo argumento acao; criaajax(): retorna o objeto XMLHttpRequest; enviarequisicao(): realiza uma requisição em segundo plano utilizando Ajax; codificaxml(xmldoc): analisa XML de retorno decidindo, através da ação, qual método deve ser chamado; 27

Arquivos lado cliente rotinas.js Métodos: montarmapa(xmldoc): atualiza o mapa principal, a imagem de referência, a imagem de escala, os limites do mapa de acordo com os valores existentes no arquivo xmldoc; montarcamadas(xmldoc): Cria a lista de camadas de acordo com os valores existentes do arquivo xmldoc; atualizarcamadas(xmldoc): atualiza a visibilidade das camadas do sistema; montarresultado(xmldoc): Cria uma lista com os resultados de uma pesquisa; ocultarresultado(): oculta elemento DIV contendo a lista de resultados da pesquisa; 28

Arquivos lado cliente rotinas.js Métodos: mudastatuscamada(camada): envia requisição com a camada que terá o status alterado; aguardar(mostrar): mostra ou oculta o elemento DIV com a mensagem aguarde ; montardistancia(xmldoc): atualiza o mapa principale os dados de distância de acordo com os valores existentes no arquivo xmldoc; cancelardistancia(): envia uma solicitação para limpar os pontos de cálculo de distância; 29

Arquivos lado cliente rotinas.js Métodos: iniciamovimento(e): função associada ao evento onmousedown do DIV mapa responsável por iniciar o processo de seleção de uma área no mapa; movimentamouse(e): função associada ao evento onmousemove do DIV mapa responsável por desenhar o DIV de seleção e mostrar as coordenadas do mapa; levantamouse(e): função associada ao evento onmouseup do DIV mapa responsável por obter as coordenadas finais da seleção e realizar a requisição para zoom ou pesquisa; pixelparageo(x,y, largura,altura,limite): Converte píxel para coordenada geográfica; decimaistogms(grau): converte de grau decimal para grau, minuto e segundo; 30

Estrutura dos arquivos XML trocados pelo sistema 31

Documentos XML Retorno da ação iniciarsistema 32

Documentos XML Retorno das ações retornarlimite, realizarzoompontual, realizarzoomporselecao, mudarstatuscamada 33

Documentos XML Retorno das ações realizarpesquisapontual e realizarpesquisaporselecao 34

Definindo o esqueleto da nossa classe Mapscript.php 35

Classe MapScript Classe MapScript: responsável pela integração entre o sistema e o MapServer; Atributos: private $mapfileusuario: indica o arquivo MapFile utilizado para a sessão do usuário; private $limiteatual: indica os limites do mapa; private $objmapa: objeto mapobj; const MAPFILEORIGINAL: indica o arquivo MapFile padrão, deve ser informado pelo programador; const LIMITEORIGINAL: indica os limites iniciais do mapa, deve ser informado pelo programador; 36

Classe MapScript Métodos: CONSTRUCT($mapfile = null, $limite = null) Construtor da classe MapScript, se os parâmetros $mapfile e $limite não forem informados serão utilizados os valores das constantes MAPFILEORIGINAL e LIMITEORIGINAL; public retornamapfile() Salva arquivo MapFile para a sessão do usuário; public retornaimagemescala() Salva imagem da escala e retorna o caminho; public retornaimagemmapa() Salva imagem do mapa e retorna o caminho; 37

Classe MapScript Métodos: public retornaimagemreferencia () Salva imagem de referência dinâmica e retorna o caminho; public alterastatuscamada($camada) Inverte status da camada passada por parâmetro public realizazoompontual ($x, $y, $direcao) Realiza zoom pontual na coordenada $x e $y; Direção: 2 zoom in (2 vezes) -2 zoom out (2 vezes) 1 pan 38

Classe MapScript Métodos: public realizazoomporselecao ($minx,$miny, $maxx, $maxy) Realiza zoom na seleção definida por $minx, $miny, $maxx e $maxy; public retornaraoslimitesoriginais () Ajusta os limites do mapa conforme definido na constante LIMITEORIGINAL; private alteralimite($limite) Altera os limites do mapa para o definido pela variável $limite; 39

Classe MapScript Métodos: public retornalimite() Retorna os limites atuais do mapa; public realizapesquisapontual ($x, $y, $camada) Realiza pesquisa pontual (coordenada $x e $y) na layer definida pela variável $camada; Retorna documento XML contendo o resultado da pesquisa; public realizapesquisaporselecao ($minx, $miny, $maxx, $maxy, $camada) Realiza pesquisa espacial na layer $camada através do polígono defino pelas variáveis $minx, $miny, $maxx, $maxy; Retorna documento XML contendo o resultado da pesquisa; 40

Classe MapScript Métodos: private montarxmlpesquisa ($objlayer) Constrói documento XML de pesquisa segundo resultados do objeto $objlayer; Retorna o documento; public retornacamadas ($classificar=true) Constrói documento XML contendo a relação das camadas existentes; Se $classificar for igual a false então não é inserido os dados de classificação (útil para ajuste de status); Retorna o documento; 41

Classe MapScript Métodos: private pixelparageox ($x) Retorna valor em coordenada do mapa de um valor $x em píxel; private pixelparageoy ($y) Retorna valor em coordenada do mapa de um valor $y em píxel; Os métodos utilizados para calcular distância serão apresentados mais adiante; 42

Estrutura do PHP/MapScript 43

Modelo de objetos do PHP/MapScript 44

Entendendo a estrutura do MapScript mapobj (objeto do mapa) Construtor: ms_newmapobj($mapfile); Membros da classe: Tabela 10, página 22; Métodos da classe: páginas 23 a 33; Métodos utilizados pelo sistema: int save(string filename) Salva o estado do objeto map atual em um arquivo. Retorna -1 em caso de erro. Use caminhos absolutos. Se um caminho relativo for usado, então ele será relativo ao local do MapFile. imageobj drawscalebar() Renderiza a barra de escala e retorna o manuseamento em um objeto image. 45

Entendendo a estrutura do MapScript mapobj (objeto do mapa) imageobj draw() Renderiza o mapa e retorna o manuseamento em um objeto image. imageobj drawscalebar() Renderiza a barra de escala e retorna o manuseamento em um objeto image. mapobj clone() Retorna o handle para um novo mapobj que é um clone do mapobj atual. Todos os parâmetros do mapobj são copiados para o novo mapobj. Retorna NULL em caso de erro. 46

Entendendo a estrutura do MapScript mapobj (objeto do mapa) layerobj getlayerbyname(string layer_name) Retorna um layerobj de um mapa dado um nome de um layer. Retorna FALSE se o layer não existir. void zoompoint(int nzoomfactor, pointobj opixelpos, int nimagewidth, int nimageheight, rectobj ogeorefext) Faz zoom para uma posição XY. Os parâmetros são: Zoom factor: valores positivos aumentam o zoom, valores negativos diminuem o zoom. Fator 1 centraliza. Pixel position (pointobj): coordenadas x, y do click com (0,0) no canto superior-esquerdo. Width: largura da imagem atual em pixel. Height: altura da imagem atual em pixel. Georef extent (rectobj): extents georeferenciados atuais. MaxGeoref extent (rectobj): (opcional) extent georeferenciado máximo. Se provido então será impossível fazer zoom para fora desses extents. 47

Entendendo a estrutura do MapScript mapobj (objeto do mapa) void zoomrectangle(rectobj opixelext, int nimagewidth, int nimageheight, rectobj ogeorefext) Ajusta os extents do mapa para os extents passados. Os parâmetros são: opixelext (rect object): Extents em pixel, com (0,0) no canto superior-esquerdo; Width: largura em pixel da imagem atual Height: altura em pixel da imagem atual Georef extent (rectobj): extents georeferenciados atual. 48

Entendendo a estrutura do MapScript mapobj (objeto do mapa) void setextent(double minx, double miny, double maxx, double maxy) Ajusta os extents do mapa (no sistema de referência definido no MapFile). array getlayersdrawingorder() Retorna um array contendo os índices dos layers na ordem que eles serão desenhados. layerobj getlayer(int index) Retorna um layerobj da layer informada pelo index (0=primeira layer) 49

Entendendo a estrutura do MapScript layerobj (objeto da layer) Objetos layerobj podem ser retornados pelo mapobj; Construtor: ms_newlayerobj ($mapobj [, layerobj]); Membros da classe: Tabela 7, página 12; Métodos da classe: páginas 13 a 20; Métodos utilizados pelo sistema: int set(string property_name, new_value) Ajusta um novo valor à uma propriedade de um objeto. Retorna -1 em caso de erro. 50

Entendendo a estrutura do MapScript layerobj (objeto da layer) int querybypoint(pointobj point, int mode, double buffer) Pesquisa no layer em uma localização pontual especificada em coordenadas do mapa georeferenciado (não em pixels). A pesquisa é feita em todos os shapes que fazem parte de uma CLASSE que contém um valor TEMPLATE ou qualquer classe de um layer que contenha um valor LAYER TEMPLATE. O modo é MS_SINGLE ou MS_MULTIPLE dependendo do número de resultados que você quer. Passar buffer <=0 opta-se pelas tolerâncias ajustadas no arquivo map (em pixels) mas você pode usar um buffer especificado em unidade do mapa. Retorna MS_SUCCESS se shapes foram encontrados ou MS_FAILURE se nada foi encontrado ou se algum outro erro ocorreu. 51

Entendendo a estrutura do MapScript layerobj (objeto da layer) int querybyrect(rectobj rect) Pesquisa no layer usando um retângulo especificado em coordenadas do mapa georeferenciado (i.e. não em pixels). A pesquisa é feita em todos os shapes que fazem parte de uma CLASSE que contém um valor TEMPLATE ou qualquer classe de um layer que contenha um valor LAYER TEMPLATE. Retorna MS_SUCCESS se shapes foram encontrados ou MS_FAILURE se nada foi encontrado ou se algum outro erro ocorreu. 52

Entendendo a estrutura do MapScript layerobj (objeto da layer) int getnumresults() Retorna o número de resultados do layer na última pesquisa. int getmetadata(string name) Busca uma entrada de metadado em um layer por nome. Retorna "" se nenhuma entrada combina com o nome. Perceba que a busca é caso sensitivo. int open() Abre o layer para uso com o getshape(). Retorna MS_SUCCESS/MS_FAILURE. 53

Entendendo a estrutura do MapScript layerobj (objeto da layer) resultcachememberobj getresult(int index) Retorna um objeto resultcachememberobj com os índices de um objeto layer Parâmetro index varia de 0 à numresults-1. Retorna um objeto válido ou FALSE(0) se o index é inválido. shapeobj getshape(int tileindex, int shapeindex) Recupera um shapeobj de um layer pelo seu índice. tileindex é usado apenas para shapefiles indexados (você recebe ele de um resultcachememberobj retornado por um getresult() por instância). Simplesmente passe tileindex = -1 para outras fontes de dados. 54

Entendendo a estrutura do MapScript layerobj (objeto da layer) voidclose() Fecha o layer aberto anteriormente com open(). boolean isvisible() Retorna MS_TRUE ou MS_FALSE dependendo se a layer está visível no mapa. classobj getclass(int classindex) Retorna um classobj da layer dada um valor de index (0=primeira classe); Para descobrir o total de classes, utilize layerobj->numclasses; 55

Entendendo a estrutura do MapScript layerobj (objeto da layer) int addfeature(shapeobj shape) Adiciona uma nova feature em um layer. Retorna -1 em caso de erro. 56

Entendendo a estrutura do MapScript RectObj (objeto que define um retângulo) Podem estar embutidos em outros objetos ou criados a partir do construtor; Construtor: RectObj ms_newrectobj() Membros da classe: Tipo de dado double double double double Nome minx miny maxx maxy 57

Entendendo a estrutura do MapScript RectObj (objeto que define um retângulo) Métodos da classe: int set(string property_name, new_value) Ajusta um novo valor à propriedade de um objeto. Retorna -1 em caso de erro. void setextent(double minx, double miny, double maxx, double maxy) Ajusta os extents do retângulo. int draw(mapobj map, layerobj layer, imageobj img, int class_index, string text) Desenha um retângulo individual usando layer. O class_index é usado para classificar o retângulo baseado nas classes definidas para o layer. A string text é usada para anotar o retângulo. Retorna MS_SUCCESS/MS_FAILURE. 58

Entendendo a estrutura do MapScript RectObj (objeto que define um retângulo) double fit(int width, int height) Ajusta o extents do retângulo para se encaixar na largura/altura especificada. int project(projectionobj dentro, projectionobj fora) Projeta o retângulo da projeção "dentro" (primeiro argumento) para a projeção "fora" (segundo argumento). Retorna MS_SUCCESS/MS_FAILURE. void free() Destrói os recursos usados por um objeto rect. 59

Entendendo a estrutura do MapScript PointObj (objeto que define um ponto) Construtor: Point = ms_newpointobj(); Membros da classe: Tipo de dado double Nome x Observações double y double double z m Usado para arquivos shape 3D. Ajuste para zero para outros tipos. Usado apenas para arquivos shape medidos. Ajuste para zero para outros tipos. 60

Entendendo a estrutura do MapScript PointObj (objeto que define um ponto) Métodos da classe: int setxy(double x, double y [, double m]) Ajusta os valores das coordenadas X,Y. O terceiro parâmetro m é usado apenas para medição de shape files e não é obrigatório. Retorna 0 em caso de sucesso, -1 caso contrário. int setxyz(double x, double y, double z [, double m]) Ajusta os valores das coordenadas X,Y e Z. O quarto parâmetro m é usado apenas para medição de shape files e não é obrigatório. Retorna 0 em caso de sucesso, -1 caso contrário. int draw(mapobj map, layerobj layer, imageobj img, int class_index, string text) Desenha o ponto individual usando layer. A classe_index é usado para classificar o ponto baseado nas classes definidas no layer. A string text é usada para anotar o ponto. Retorna MS_SUCCESS/MS_FAILURE. 61

Entendendo a estrutura do MapScript PointObj (objeto que define um ponto) double distancetopoint(pointobj popoint) Calcula a distância entre dois pontos. double distancetoline(pointobject p1, pointobject p2) Calcula a distância entre um ponto e uma linha definida por dois pontos passados por argumento. double distancetoshape(shapeobj shape) Calcula a menor distância entre um ponto e um shape. int project(projectionobj dentro, projectionobj fora) Projeta o ponto da projeção de "dentro" (primeiro argumento) à projeção "fora" (segundo argumento). Retorna MS_SUCCESS/MS_FAILURE. void free() Libera todos os recursos usados pelo objeto. 62

Entendendo a estrutura do MapScript LineObj (objeto que define uma linha) Construtor: LineObj = ms_newlineobj() ; Membros da classe: Tipo de dado Int Nome numpoints Observações Somente leitura 63

Entendendo a estrutura do MapScript LineObj (objeto que define uma linha) Métodos da classe: int add(pointobj ponto) Adiciona um ponto ao fim da linha. int addxy(double x, double y [, double m]) Adiciona um ponto ao fim da linha. O terceiro parâmetro m é usado apenas para shapefiles medidos. Não é obrigatório. int addxyz(double x, double y, double z [, double m]) Adiciona um ponto ao fim da linha. O quarto parâmetro m é usado apenas para shapefiles medidos. Não é obrigatório. 64

Entendendo a estrutura do MapScript LineObj (objeto que define uma linha) PointObj point(int i) Retorna a referência para o ponto número i. A referência é válida apenas durante a vida do lineobj que contém o ponto. int project(projectionobj in, projectionobj out) Projeta a linha desde a projeção "in" (primeiro argumento) até a projeção "out" (segundo argumento). Retorna MS_SUCCESS/MS_FAILURE. void free() Destrói os recursos usados pelo objeto linha. 65

Entendendo a estrutura do MapScript ShapeObj (objeto que define um shape) Construtor: ShapeObj = ms_newshapeobj(int type) ; Membros da classe: Tipo de dado string Nome text Observações int classindex int int int int rectobj int array type numlines index tileindex bounds numvalues values Somente leitura Somente leitura Somente leitura Somente leitura Somente leitura Somente leitura Somente leitura 66

Entendendo a estrutura do MapScript ShapeObj (objeto que define um shape) Métodos da classe:páginas 43 a 46; Método utilizados pelo sistema: int add(lineobj line) Adiciona uma linha no shape. 67

Entendendo a estrutura do MapScript ClassObj (objeto que define uma classe) Pode ser retornado por uma classe LayerObj; Construtor: classobj ms_newclassobj(layerobj layer, classobj class) Membros da classe: Tabela 1, página 4; Métodos da classe: Páginas 4 a 6; Método utilizado pelo sistema: imageobj createlegendicon(int width, int height) Desenha o ícone da legenda e retorna um novo objeto imageobj. 68

Entendendo a estrutura do MapScript StyleObj (objeto que define um estilo) Instâncias de styleobj estão sempre embutidas dentro de classobj. Construtor: styleobj ms_newstyleobj(classobj class, styleobj style) Membros da classe: Tabela 21, página 47; 69

Entendendo a estrutura do MapScript StyleObj (objeto que define um estilo) Métodos da classe: int set(string property_name, new_value) Ajusta um novo valor à propriedade de um objeto. Retorna -1 em caso de erro. styleobj clone() Retorna uma cópia do estilo. 70

Realizando pesquisa Por atributo: int querybyattributes(string qitem, string qstring, int mode) Pesquisa no layer por shapes que fazem intersecção com os atuais extents do mapa. O parâmetro qitem é o item (atributo) no qual a pesquisa é realizada e o parâmetro qstring é a expressão a ser procurada. A query é realizada em todos os shapes que fazem parte de uma CLASSE que contém um valor TEMPLATE ou qualquer classe de um layer que contenha um valor LAYER TEMPLATE. 71

Realizando pesquisa Espacial: int querybyfeatures(int slayer) Realiza um conjunto de pesquisas baseadas em um conjunto de resultados anteriores de outro layer. Atualmente os resultados devem ser baseados em layers de poligonos. Retorna MS_SUCCESS se shapes foram encontrados ou MS_FAILURE se nada foi encontrado ou se algum outro erro ocorreu. 72

Realizando pesquisa Espacial: int querybyshape(shapeobj shape) Pesquisa no layer baseado em um único shape, sendo que o shape deve ser um polígono. Retorna MS_SUCCESS se shapes foram encontrados ou MS_FAILURE se nada foi encontrado ou se algum outro erro ocorreu. 73

Liberando pesquisa Para liberar o resultado de uma pesquisa, utiliza-se o método freequery do objeto map: void freequery(layerindex) Libera um resultado de uma pesquisa em um layer especificado; Se o layerindex for -1, todas as pesquisas no layer serão liberadas; 74

Entendendo a estrutura do MapScript Exemplo de uso do PHP/MapScript Retornando uma imagem do mapa: 75

Construindo a aplicação 76

Alterações no arquivo MapFile Definir todas as referências a arquivos a partir da raiz; /var/www/html/ Inserir no objeto Metadata das layers que poderão ser pesquisadas: "pesquisa" "1" "campos" "QUADRAS,RA Tamanho da imagem de saída Width600 Height 540 77

Codificando o script requisicao.php 78

Codificando o script Mapscript.php 79