quinta-feira, 19 de abril de 2012

Procedimento para detectar e corrigir feições inválidas no PostgreSQL


-->
Para atender a expecificação do padrão OGC Simple Feature um polígono deve ter sua topologia verfiricada e validada. Para isto no Postgis é possível verificar utilizando uma conjunto de comandos como por exemplo estes:

1) select st_isValid(the_geom), gid from bioma_UF ;

Neste caso estamos apenas apresentando o resultado da validação e o número do gid de cada polígono.

Agora para facilitar vamos listar apenas os gid dos polígonos não válidos.

2) select gid from bioma_UF where not st_isValid(the_geom);

Sabendo que existe erro nestas features, podemos testar uma opção para tentar corrigir o problema.

3) select st_isValid(st_buffer(the_geom,0.0)), gid from bioma_UF where not st_isValid(the_geom); 

Assim podemos atualizar os dados com o seguinte comando:

UPDATE bioma_UF set the_geom = st_buffer(the_geom, 0.0) where not st_isValid(the_geom);

Outras boas dicas sobre este assunto podem ser encontradas em:


Outra opção:

update table set geomcol = st_multi(st_collectionextract(st_makevalid(geomcol),3))
    where st_isvalid(geomcol) = false;

update dados_brutos_2020.ucstodas set geom = 
st_multi(st_simplifypreservetopology(st_buffer(geom, 0.000001), 0.0001))

quarta-feira, 18 de abril de 2012

Como adicionar um sequencial em uma consulta postgresql.

Uma solução para ter um número sequencial, a fim de ser utilizado como identificador único, por exemplo, é aproveitar a função run_number(). No exemplo:

select row_number() over(order by lin) as id , lin, col from focos_noaa limit 10;

o resultado é:
id;lin;col
1;172;1103
2;173;1383
3;173;1137
4;176;89
5;179;442
6;185;1127
7;187;76
8;192;1417
9;192;778
10;196;932

Uma explicação detalhada e muito boa eu encontrei em 01/mai/2020 em https://www.postgresqltutorial.com/postgresql-row_number/

domingo, 12 de fevereiro de 2012

Como utilizar um array de valores do POSGRESQL

Encontrei o artigo "Faster array building with array_agg" que comenta como é possível ter um array de valores distintos juntamente com uma função de agregação no banco de dados.  Um exemplo disto é quando contamos todos os pontos que estão contidos em um polígono e queremos ter como resposta o identificador do pontos que foram selecionados ou utilizados.
Neste caso temos:

select count(*), array_agg(gid) as todos_ids from focos;

Outros exemplos podem ser vistos em:
http://www.postgisonline.org/

terça-feira, 5 de julho de 2011

Rampa de Cores

Para encontrar um bom exemplo de variação de cores e utilizar em seu mapa existem duas ferramentas que podem ajudar. A primeira é http://colorbrewer2.org/ que permite ver a paleta de cores aplicada sobre um conjunto de polígonos como na figura abaixo.
colorbrewer
Outra opção é oferecida por uma aplicação provida pela Adobe, chamada de Kuler, que apresenta diferenças da primeira opção, porém não é específica para mapas.

Uma metodologia para definição das legendas pode ser encontrada em https://www.andrewnoske.com/wiki/Code_-_heatmaps_and_color_gradients

Outra ferramenta para criar um range de cores muito interessante pode ser encontrada em
https://cssgradient.io/


sexta-feira, 11 de março de 2011

Reprojeção de imagens utilizando o GDAL

Depois de ler o post “Usando código EPSG com GDAL” escrito por Leonardo Santana, Fiz um teste em 23/10/2009 utilizando uma versão diferente do gdal_translate que exige apenas um parâmetro de especificação do srs.
Agora o comando é -a_srs e o que aconteceu foi apenas uma substituição dos parâmetros de projeção no arquivo de saída, infelizmente sem que ele fosse reprojetado.



Para reprojetar uma imagem o comando correto é:

gdalwarp -s_srs EPSG:32723 -t_srs EPSG:4291 -of GTiff "/fmorelli/nome_entrada.tif" "/fmorelli/nome_saida.tif"

Onde -s_srs = SRID de entrada; -t_srs = SRID de saída.

terça-feira, 15 de setembro de 2009

Como gerar um mosaico de tiles (recortes regulares) de imagens.

Para unir vários recortes de imagens em um único arquivo pode ser utilizado o comando:

python gdal_merge.py –o nome_saida.tif –of GTiff –co “TFW-YES” arquivos*.tif

Neste comando o parâmetro arquivos*.tif utiliza o caractere curinga (*) para pegar todas as partes dos arquivos de entrada.

quarta-feira, 1 de julho de 2009

Como empilhar diferentes bandas (“layer stack”) de uma mesma imagem orbital para compor uma imagem RGB?

Durante o processamento de dados derivados do imageamento orbital é possível que algumas pessoas tenham interesse em unir em um único arquivo, diferentes bandas ou canais espectrais de uma mesma cena.

Como por exemplo, quando se recebe os dados dos satélites CBERS e Landsat provenientes do Catálogo de Imagens da Divisão de Geração de Imagens – DGI do INPE. É comum o usuário receber os arquivos separados, sendo que para fazer a manipulação destes dados em um Sistema de Informações Geográficas é mais usual trabalhar com apenas um arquivo.

Este processo pode ser executado em diferentes softwares de processamento de imagem e certamente existe uma receita específica para cada um.

Com objetivo de descrever algumas funcionalidades da GDAL, que pretendo seguir fazendo neste blog, vou demonstrar como executar o processo “layer stacking” utilizando o gdal_merge.py.

O comando básico para este processo é:

python gdal_merge.py –o nome_saida.tif –of GTiff –co “TFW=YES” –separate b5.tif b4.tif b3.tif

onde:

python = comando para executar o interpretador que deve estar previamente instalado e devidamente configurado no seu computador.

gdal_merge.py = script desenvolvido na linguagem python, e que acompanha as instalações padrão da GDAL.

-o nome_saida.tif = parâmetro utilizado para definir o nome da imagem de saída.

-of GTiff = parâmetros utilizado para definir o formato da imagem de saída, neste caso um GeoTif. Outros formatos podem ser listados com o comando gdalinfo –-formats.

-co “TFW=YES” = parâmetro utilizado para que seja criado simultaneamente o TFW da imagem de saída.

-separate = parâmetro utilizado para empilhar as imagens de entrada no mesmo arquivo de saída.

b5.tif b4.tif b3.tif = são os nomes dos arquivos de entrada.