Importante
A tradução é um esforço comunitário você pode contribuir. Esta página está atualmente traduzida em 68.00%.
16.2. Lesson: Simple Feature Model
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 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(geom) = 'ST_Point'::text
OR 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.
Responda
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','geom',2,4326,'POINT');
Why? geometry_columns is used by certain applications to be aware of
which tables in the database contain geometry data.
Nota
Se a instrução INSERT acima causar um erro, execute esta consulta primeiro:
select * from geometry_columns;
If the column f_table_name contains the value people, then
this table has already been registered and you don’t need to do anything
more.
O valor 2 se refere ao número de dimensões; neste caso, duas: X e Y.
The value 4326 refers to the projection we are using; in this case, WGS
84, which is referred to by the number 4326 (refer to the earlier discussion
about the EPSG).
★☆☆ Try Yourself:
Add an appropriate geometry_columns entry for your new cities layer
Responda
insert into geometry_columns values
('','public','cities','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, 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.
Now is probably a good time to open QGIS and try to view your people
table. Also, we should try editing / adding / deleting records and then
performing select queries in the database to see how the data has changed.
To load a PostgreSQL layer in QGIS, use the menu option or toolbar button:
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:
To see whether QGIS has found the address database and that your
username and password are correct, click Test Connect. If it works,
check the boxes next to Save Username and Save Password.
Then click OK to create this connection.
Back in the Add PostgreSQL Layers dialog, click Connect and add layers to your project as usual.
★★☆ Try Yourself:
Formulate a query that shows a person’s name, street name and position (from the geom column) as plain text.
Responda
select people.name,
streets.name as street_name,
st_astext(people.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.
