Banco de Dados Geográficos/Criando e utilizando um Banco de Dados Geográficos

Para se utilizar um Banco de Dados Geográficos, é preciso ter acesso a um Sistema Gerenciador de Banco de Dados (SGBD) que manipule ou tenha uma extensão que consiga manipular bancos de dados geográficos. No exemplo a seguir, será utilizado como exemplo o SGBD PostgreeSQL com a extensão PostGIS - uma ferramenta completa e de código aberto para manipulação de Bancos de Dados Geográficos, utilizando os comandos na linguagem SQL, que é a padrão para bancos de dados relacionais.

O PostGIS suporta alguns tipos de dados, além dos tipos padrões já descritos, para tornar mais eficiente o armazenamento dos dados de forma mais arrumada e simples possível, para que os dados ocupem menos espaço e torne as pesquisas mais rápidas. Os tipos de dados são:

  • Ponto (Point) - determinado por dois valores, com sintaxe: (x, y);
  • Linha (Linestring) - representada por pares de pontos, com sintaxe ((x1, y1), (x2, y2));
  • Caixa (Box) - também representada por pares de pontos, que definem dois pontos opostos da caixa, como as duas extremidades da reta diagonal da caixa. Sua sintaxe é: ((x1, y1), (x2, y2));
  • Caminho (Path) - é definido por um conjunto de pontos que se encontram, formando um conjunto de retas. Sua sintaxe é: ((x1, y1), ... , (xn, yn));
  • Polígono (Polygon) - é definido por um conjunto de pontos que representam os vértices de uma forma geométrica fechada. Sua sintaxe é: ((x1, y1), ... , (xn, yn));
  • Círculo (Circle) - é representado por um ponto central e um valor, que corresponde ao raio do círculo. Sua sintaxe é: ((x, y), r);
  • Coleção Geométrica (GeometryCollection) - permite criar e armazenar diversas representações ao mesmo tempo, com sintaxe: (Point(x1, y1), Circle((x2, y2), r)).

Será utilizado um pequeno exemplo para a demonstração de como o SQL interage com o PostGIS e como são usados os comandos. Será criado um banco de dados sobre ponto de interesse gerais.

Passo 1: Criar Banco de DadosEditar

Um simples comando que cria facilmente o Banco de Dados:

CREATE DATABASE pontos_interesse

Passo 2: É preciso criar uma tabela de referênciasEditar

A tabela é criada em cima de um SRS, ou Spatial Reference System (Sistema de Referência Espacial), um sistema local, regional ou global que contêm componentes que descrevem diversos parâmetros geográficos, definindo um sistema de coordenadas espaciais em um mapa.

Campos:

1. srid		//Chave única de verificação SRS                                                                                                               2. auth_name 	//Nome do padrão utilizado                                                                                                      3. auth_srid	//Valor do SRS                                                                                                              4. srtext	//Representação em texto da SRS                                                                                                                          5. proj4text 	//Identificador da livraria a utilizar

SQL:

CREATE TABLE spatial_ref_sys(                                                                                                                                             srid INTEGER NOT NULL PRIMARY KEY,                                                                                                                 auth_name VARCHAR(256),                                                                                                                           auth_srid INTEGER,                                                                                                                                        srtext VARCHAR(2048),                                                                                                                                      proj4text VARCHAR(2048)                                                                                                                                    )


Passo 3: É preciso criar uma tabela geométricaEditar

Campos:

1. f_table_catalog		//Nome do catálogo onde está a informação do banco de dados                                                                                                               2. f_table_schema         	//Nome do esquema do banco de dados                                                                                                   3. f_table_name           	// Nome da tabela geométrica                                                                                                                             4. f_geometry_column    	//Nome da coluna geométrica                                                                                                                                     5. coord_dimension        	//Dimensão especial da coluna (2, 3 ou 4)                                                                                                         6. srid                   	//Chave estrangeira, id da coordenada geométrica referente ao registro nesta tabela                                                                            7. type                  	//Tipo do objeto, por exemplo "POINT"

SQL:

CREATE TABLE geometry_columns(                                                                                                                                            f_table_catalog VARCHAR(256) NOT NULL,                                                                                                                f_table_schema VARCHAR(256) NOT NULL,                                                                                                                           f_table_name VARCHAR(256) NOT NULL,                                                                                                                                        f_geometry_column VARCHAR(256) NOT NULL,                                                                                                                                      coord_dimension INTEGER NOT NULL,                                                                                                                                                                             srid INTEGER NOT NULL,                                                                                                                                                   type VARCHAR(30) NOT NULL                                                                                                                                    )


Passo 4: É preciso criar uma tabela espacialEditar

4.1 Criar uma tabela normalEditar

Campos:

1. id				//Identificador único do registro                                                                                                               2. nome        			//Nome do ponto                                                                                                  3. descricao           	        // Descrição do ponto                                                                                                                             

SQL:

CREATE TABLE pontos_interesse(                                                                                                                                            id int4 NOT NULL PRIMARY KEY,                                                                                                               nome VARCHAR(25),                                                                                                                           descricao VARCHAR(1000)                                                                                                                                                                                                                                                                            )

4.2 Criar a coluna geográficaEditar

Esquema para criação da coluna:

AddGeometryColumn(                                                                                                                                                                     <schema_name>,                                                                                                                                                                                            <table_name>,                                                                                                                                                                                                                      <column_name>,                                                                                                                                                                                                                    <srid>,                                                                                                                                                                                                                                               <type>,                                                                                                                                                      <dimension>                                                                                                                                                                  )

SQL:

SELECT AddGeometryColumn(‘public’, ‘pontos_interesse’,‘geom’, 3763, ‘POINT’, 0);

Passo 5: Inserir registro na TabelaEditar

Ao inserir e fazer uma busca com SQL no banco, é possível perceber que a linguagem já se assemelha um pouco mais ao SQL isolado, sendo mais fácil de ser entendido por quem já tem um certo conhecimento de Bancos de Dados.

SQL:

INSERT INTO pontos_interesse (geom, nome, descricao)                                                                                                                                               VALUES (ST_GeomFromText(‘POINT(‐7.845 39.58)’, 2963), ‘Lisboa’, “Capital Portuguesa”);

Passo 6: Resgatar registro da Tabela

SQL:

SELECT id, geom, nome FROM pontos_interesse;

O retorno será uma tabela com um registro, que será:

id	|	geom		|	nome                                                                                                                                                                       ------------------------------------------------                                                                                                                                                                  1	| POINT(‐7.845 39.58)	| Lisboa

Logo, neste exemplo foi criado um banco de dados geográfico e uma tabela de dados geográficos que armazena pontos, foi inserido um dado na tabela e foi feita uma busca por este dado, retornando o resultado desejado.