quarta-feira, 8 de agosto de 2012

Manipulação de datas em Linux

Para fazer conversão de dia juliano (dia do ano 0-365) para o formato gregoriano (dd-mm-aaaa) deve ser utilizada a seguinte linha de comando:

yyyymmdd=$(date -d "${yyyy}-01-01 + ${ddd} days -1 day" +%Y%m%d)

onde as variáveis yyyy representam o ano de interesse e ddd representa o dia sequencial como por exemplo 221

cdsr@dallas:~/scripts$ yyyymmdd=$(date -d "2012-01-01 + 221 days -1 day" +%Y%m%d)
cdsr@dallas:~/scripts$ echo $yyyymmdd
20120808

Por outro lado converter de dia juliano para dia-mes-ano é mais simples, bastando para isto utilizar o seguinte comando:

date -d 2012-08-08 +%j

terça-feira, 29 de maio de 2012

converção de linha/coluna de uma imagem geotif para lat/long

Depois de pesquisar um pouco como fazer para extrair as coordenadas de um píxel utilizando Python  e GDAL conseguí aproveitar as dicas publicadas em:

fonte: http://stackoverflow.com/questions/2922532/obtain-latitude-and-longitude-from-a-geotiff-file

e testei da seguinte maneira:

>>> from osgeo import gdal
>>> from osgeo.gdalconst import *
>>> import numpy, sys
>>> ds = gdal.Open('/home/fmorelli/testes/b250_EV_250_Aggr1km_RefSB_b0.tif', GA_ReadOnly)
>>> print ds.GetGeoTransform()
(-65.60666969799999, 0.01, 0.0, 11.845001666000002, 0.0, -0.01)
>>> gt = ds.GetGeoTransform()
>>> linha, coluna = 0,0
>>> gt[0]+coluna*gt[4]+linha*gt[5] # valor da longitude -65.606
>>> gt[3]+coluna*gt[4]+linha*gt[5] # valor da latitude 11.845

Agora falta fazer uma função pra ficar bonito ...

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.