Funções PostGIS #2
Boa tarde senhores e senhoras,
Continuando nossa peregrinação pelas funções do PostGIS, irei começar explicar a que usamos no post anterior e não expliquei.
ST_AsText()
Esta função retorna o valor WKT (Well Known Text - especificação OGC) da geometria. Esta função é útil pois lhe mostra algo um pouco mais inteligível do que o WKB (Well Known Byte).
Ela tem como retorno o WKT sem o código SRID da geometria especificada. Se utilizada em um comando SELECT, ela irá realizar esta conversão em todos os objetos válidos da coluna especificada. Ela é uma função de output.
-- assinatura -- SELECT ST_AsText(the_geom) SELECT nm_equipamento_urbano, ST_AsText(the_geom);
Vamos falar um pouco das funções construtoras de geometria. Por que elas são importantes? É uma maneira de se converter dados de coordenadas, em objetos geográficos, representados no banco de dados por uma string com o valor WKB. Vamos começar pela mais simples: ST_Point()
ST_Point()
Esta é a mais simples das funções construtoras. Ela tem como entrada apenas um X e Y. Esta função esta de acordo com a norma OGC. Na verdade, o que ela faz é chamar a função ST_MakePoint() passando como entrada apenas os eixos X e Y.
-- assinatura -- SELECT ST_Point(coordenada_x, coordenada_y); SELECT ST_Point(-42.5,-19.2);
O resultado é retornado em WKB. Veja:
ST_MakePoint()
A função MakePoint é mais completa que a ST_Point, pois permite a utilização de até quatro eixos de coordenadas, X, Y, Z e M. Esta função não está de acordo com a norma OGC mas é uma forma de se trabalhar no PostGIS. O problema do uso da mesma é no momento de integração com outros softwares OGC compliant. Fique atento!
-- assinaturas -- SELECT ST_MakePoint(x,y); -- SELECT ST_MakePoint(x,y,z); -- SELECT ST_MakePoint(x,y,z,m); SELECT ST_MakePoint(-10,-1,300,1);
O resultado desta função também é trazido em WKB.
Existem funções deste tipo para todos os tipos de geometria. Vamos mostrar as outras:
ST_MakeLine()
Vamos complicar um pouquinho. Da mesma maneira que podemos construir pontos, podemos construir linhas. Existem três maneiras de se utilizar esta função: uma é com o resultado agregado de uma consulta, um array de pontos, ou dois pontos. Vou mostrar as três maneiras.
-- assinatura -- SELECT ST_MakeLine(geometry_set); -- SELECT ST_MakeLine(ponto1,ponto2); -- SELECT ST_MakeLine(array_pontos); -- resultado agregado de consulta SELECT l.setor, ST_AsText(ST_MakeLine(l.the_geom)) FROM (SELECT codsetor as "setor", the_geom FROM equipamento_urbano) as l GROUP BY l.setor; -- dois pontos SELECT ST_AsText(ST_MakeLine(ST_MakePoint(-1,-1),ST_MakePoint(-2,-2))) -- array de pontos SELECT ST_AsText(ST_MakeLine(ARRAY[ST_MakePoint(-10,-1),ST_MakePoint(-5,0),ST_MakePoint(-10,2),ST_MakePoint(-19,-20),ST_MakePoint(-1,0)])); -- note que a abertura do array se faz com os colchetes!
Vejamos os resultados, respectivamente: agregado, dois pontos e array de pontos. Uma nota: utilizei ST_AsText nas funções para facilitar a visualização do resultado. Todos os resultados podem ser facilmente testados, com exceção do agregado. Caso alguém tenha interesse, posso lhe enviar a tabela em formato .sql para conferência
Vamos complicar mais um pouquinho?
ST_MakePolygon()
Esta função constrói polígonos. Para um polígono ser um polígono ele deve ter uma clara distinção de seu interior com seu exterior. A única maneira de delimitarmos isto é tenho uma LINESTRING fechada, ou seja, o último vértico deve ser igual ao primeiro. Um polígono também pode ter holes ou seja, buracos. Eles também podem ser construídos aqui. Veja só:
-- assinatura -- SELECT ST_MakePolygon(linestring_fechada); -- SELECT ST_MakePolygon(linestring_fechada,array_poligonos_interiores); SELECT ST_AsText(ST_MakePolygon( ST_MakeLine(ARRAY[ ST_MakePoint(0,0), ST_MakePoint(1,0), ST_MakePoint(1,1), ST_MakePoint(0,1), ST_MakePoint(0,0)])))
Veja o resultado:
Todas estas funções são extremamente úteis, permitindo o usuário à manipular as geometrias de diversas tabelas para construir objetos temporários ou views para visualização em softwares de SIG. Lembrem-se que você não precisa utilizar ST_MakePoint() para construir polígonos ou linhas. Você pode utilizar a agregados e resultados de consultas como parâmetros de entrada para estas funções.
ST_GeomFromText
Esta é a rainha das funções construtoras de geometria. Com ela é possível construir qualquer geometria, desde que você tenha o WKT das mesmas. Mão na roda. A segunda assinatura lhe permite especificar um SRID.
-- assinatura
-- SELECT ST_GeomFromText('wkt');
-- SELECT ST_GeomFromText('wkt',srid);
SELECT ST_AsText(ST_GeomFromText('LINESTRING(0 0, 1 0, 2 1, 2 2, 3 1, 3 3, 0 1, 0 0)'))
SELECT ST_AsText(ST_GeomFromText('POLYGON((0 0, 1 0,1 1,0 1,0 0))'));
Agora vem a pergunta: porque utilizamos dois pares de parênteses quando construímos um polígono e apenas um quando construímos uma linestring? Lembra quando construímos um polígono, temos a opção de passar uma array de polígonos internos, os famosos holes? Então, o segundo set de parênteses corresponde à possibilidade de inserir este array de polígonos. Não se esqueça, para polígonos e geometrias multi*, dois sets de parênteses são necessários.
Hoje vimos um pouco sobre as funções construtoras de geometrias no PostGIS. O que acharam?
Abraços
Related posts:








May 23rd, 2010 - 07:33
Just want to say what a great blog you got here!
I’ve been around for quite a lot of time, but finally decided to show my appreciation of your work!
Thumbs up, and keep it going!
Cheers
Christian, iwspo.net
[Translate]
May 24th, 2010 - 16:02
Hello Christian!
Keep visiting. We always will have some nice articles here!
Thanks a lot for your comment
[Translate]