16.2. Lesson: Modelo de Feição Simples
Como podemos armazenar e representar feições geográficas em um banco de dados? Nesta lição nós vamos cobrir uma abordagem, o modelo de feição simples, tal como definido pela OGC.
O objetivo desta lição: saber o que é o Modelo SFS e como usá-lo.
16.2.1. O que é OGC
O Open Geospatial Consortium (OGC) é uma organização internacional voluntária de padrões de consenso, originada em 1994. Na OGC, mais do que 370 organizações comerciais, governamentais, sem fins lucrativos e de pesquisa em todo o mundo colaboram em um processo de consenso aberto, encorajando o desenvolvimento e implementação de padrões para conteúdos e serviços geoespaciais, processamento de dados SIG e compartilhamento de dados. * - * Wikipedia
16.2.2. Qual é o modelo SFS
O modelo Simple Feature for SQL (SFS) é uma maneira não topológica de armazenar dados geoespaciais em um banco de dados e define as funções para acesso, operação e construção desses dados.
O modelo define dados geoespaciais dos tipos ponto, linha e polígono (e agregações deles para multi-objetos).
For further information, have a look at the OGC Simple Feature for SQL standard.
16.2.3. Adicionar um campo de geometria para a tabela
Vamos adicionar um campo de ponto à nossa tabela de pessoas:
alter table people add column the_geom geometry;
16.2.4. Adicione uma restrição com base no tipo de geometria
Você vai notar que o tipo de campo da geometria não especifica implicitamente o tipo de geometria para o campo - para isso precisamos de uma restrição:
alter table people
add constraint people_geom_point_chk
check(st_geometrytype(the_geom) = 'ST_Point'::text
OR the_geom IS NULL);
Isso adiciona uma restrição à tabela para que ela só aceite uma geometria do tipo ponto ou um valor nulo.
16.2.5. Try Yourself
Crie uma nova tabela chamada “cities” e crie algumas colunas apropriadas, incluindo um campo de geometria para armazenar os polígonos (os limites da cidade). Certifique-se de que tenha uma restrição forçando as geometrias a serem polígonos.
Resposta
create table cities (id serial not null primary key,
name varchar(50),
the_geom geometry not null);
alter table cities
add constraint cities_geom_point_chk
check (st_geometrytype(the_geom) = 'ST_Polygon'::text );
16.2.6. Preencher a tabela geometry_columns
Neste ponto, você também deve adicionar uma entrada na tabela geometry_columns
:
insert into geometry_columns values
('','public','people','the_geom',2,4326,'POINT');
Por Quê? geometry_columns é usado em certas aplicações para se certificar que as tabelas no banco de dados contém dados de geometria.
Nota
Se a instrução INSERT
acima causar um erro, execute esta consulta primeiro:
select * from geometry_columns;
Se a coluna f_table_name contiver o valor people, essa tabela já foi registrada e você não precisará fazer mais nada.
O valor 2
se refere ao número de dimensões; neste caso, duas: X e Y.
O valor 4326 refere-se à projeção que estamos usando; neste caso, WGS 84, que é referido pelo número 4326 (ver discussão anterior sobre a EPSG).
Try Yourself
Insira um registro apropriado, para sua nova camada “cities”, em geometry_columns.
Resposta
insert into geometry_columns values
('','public','cities','the_geom',2,4326,'POLYGON');
16.2.7. Adicionar registro geometria para a tabela usando SQL
Agora que nossas tabelas estão ativadas geograficamente, podemos armazenar geometrias nelas:
insert into people (name,house_no, street_id, phone_no, the_geom)
values ('Fault Towers',
34,
3,
'072 812 31 28',
'SRID=4326;POINT(33 -33)');
Nota
Na nova entrada acima, você precisará especificar qual projeção (SRID) que deseja usar. Isso porque você entrou com a geometria do novo ponto usando um texto simples, o que não adiciona automaticamente as informações de projeção corretas. Obviamente, o novo ponto precisa usar o mesmo SRID que o conjunto de dados que está sendo adicionado, então você precisa especificá-lo.
Se neste momento você estivesse usando uma interface gráfica, por exemplo, especificar a projeção para cada ponto seria feito automaticamente. Em outras palavras, você geralmente não precisa se preocupar sobre como usar a projeção correta para cada ponto que você deseja adicionar se você já tiver especificado-a para esse conjunto de dados, como fizemos anteriormente.
Agora provavelmente é um bom momento para abrir o QGIS e tentar ver a sua tabela people. Além disso, devemos tentar editar / adicionar / excluir registros e, em seguida, executar consultas ao banco de dados para ver como os dados foram alterados.
Para colocar uma camada PostGIS no QGIS, utilize a opção de menu
ou o botão na barra de ferramentas:A seguinte caixa de diálogo abrirá:
Clique no botão Novo para abrir esta caixa de diálogo:
Em seguida, defina uma nova conexão, por exemplo:
Name: myPG
Service:
Host: localhost
Port: 5432
Database: address
User:
Password:
Para ver se o QGIS encontrou o banco de dados address e se o seu nome de usuário e senha estão corretos, clique em Testar Conexão. Se funcionar, marque as opções Salvar nome do usuário e Salvar Senha. Em seguida, clique OK para criar esta conexão.
Voltando à caixa de diálogo Adicionar tabela(s) PostGIS, clique em Conectar e adicione camadas ao seu projeto como de costume.
Try Yourself
Formule uma consulta que mostre o nome da pessoa, o nome da rua e a posição (a partir da coluna the_geom) como texto simples.
Resposta
select people.name,
streets.name as street_name,
st_astext(people.the_geom) as geometry
from streets, people
where people.street_id=streets.id;
Resultado:
name | street_name | geometry
--------------+-------------+---------------
Roger Jones | High street |
Sally Norman | High street |
Jane Smith | Main Road |
Joe Bloggs | Low Street |
Fault Towers | Main Road | POINT(33 -33)
(5 rows)
Como você pode ver, nossa restrição permite que os nulos sejam adicionados ao banco de dados.
16.2.8. In Conclusion
Você já viu como adicionar objetos espaciais a seu banco de dados e exibi-los no software GIS.
16.2.9. What’s Next?
Em seguida, você vai ver como importar dados para o e dados de exportação de, seu banco de dados.