sexta-feira, 4 de setembro de 2020

Como calcular área de um polígono no Postgis

 O link para o manual do Postgis é https://postgis.net/docs/ST_Area.html onde você vai encontrar detalhes da documentação. Neste post eu considerei que os dados do meu banco estão todos em projeção EPSG:4326 e então efetuo a conversão de tipo da geometria de Geometry para Geography e em seguida utilizo a função st_area.

No primeiro exemplo a função está retornando o dado em metros quadrados, portanto este é a unidade padrão;

   st_area( ucf.geom::geography) m2


Para obter o resultado em quilômetros quadrados foi realizada a divisão por 1 milhão;

   st_area( a_ucf_aq1km_16.intersection_geom::geography)/1000000 km2


Para obter o resultado em hectares foi realizada a divisão por 10 mil;

   st_area( a_ucf_aq1km_16.intersection_geom::geography)/10000 ha


sábado, 22 de agosto de 2020

Converter string para data no Python Pandas

 

Com o comando abaixo foi recortado do nome de uma imagem a parte que representa o ano e dia Juliano (DOY) e convertido para o formato data.

dados["data_pas"] = pd.to_datetime(dados.cena_atual.str.slice(9,16), format='%Y%j')

Truncar data no Python Pandas

 


# este comando é pra truncar a data mantendo os valores dentro da hora ex. 16:54 -> 16:00

df["data_hora"] = df.data_hora_gmt.dt.floor("H")

segunda-feira, 4 de maio de 2020

Comandos mágicos para edição rápida de arquivos txt em Shell

Estes comandos são apenas para recordar a sintaxe rápida pois a explicação depende de muita leitura, recomendo os livros do Verde (Aurélio Jargas) https://aurelio.net/ em especial https://aurelio.net/sed/sed-howto/#conhecendo-o-sed

# insere o texto "begin transation" na primeira linha do arquivo
# focos_terrama2q.sql
sed -i '1s/^/begin transaction; /' focos_terrama2q.sql 


# insere o texto na linha específica (linha 29322846)
sed -i '29322846s/^/commit; /' focos_terrama2q.sql

# insere o texto na ultima linha
echo "commit; " >> focos_terrama2q.sql

# insere algum texto a cada 100000 linhas
sed '0~100000 s/$/\ncommit;\nbegin;/g' < focos_terrama2q.sql > focos.sql



segunda-feira, 20 de abril de 2020

Time Zone no Banco de Dados PostgreSQL


Neste post estou preocupado como a definição de tempo do meu banco de dados. Pois quando o sistema for instalado em usuários de outros fusos o sistema pode apresentar erro. Com os comandos SQL abaixo direitamente no PGSQL você poderá saber o que está definido e como fazer a devida conversão.
-- Show timezone of current session.
show timezone;

 -- Set timezone of current session.
set time zone 'Brazil/East';

 -- Identify or remembering timezone.
select * from pg_timezone_names;


Uma dica de como manter o fuso definido está em:

https://kb.objectrocket.com/postgresql/postgresql-set-time-zone-1064


Para definir definitivamente nas configuração do Banco e não na seção devem ser utilizado os seguintes comandos:

sudo -u postgres pg_conftool 11 main set timezone "UTC" 
sudo -u postgres pg_conftool 11 main set log_timezone "UTC" 
service postgresql restart

sexta-feira, 27 de março de 2020

Como combinar todos os arquivos CSV de uma mesma pasta para um pandas dataframe automaticamente


Muitas vezes temos que ler vários arquivos idênticos, por exemplo focos por dia, para depois analisar todos os registros juntos. Uma maneira de fazer isto muito rápido foi publicado por Kade Killary
 em:

https://medium.com/@kadek/elegantly-reading-multiple-csvs-into-pandas-e1a76843b688

Resumindo o texto o que deve ser realizado está apresentado nas 3 linhas abaixo

import glob
import pandas as pd
df = pd.concat([pd.read_csv(f) for f in glob.glob('data*.csv')], ignore_index = True)

A explicação disto pode ser interpretada por partes da seguinte maneira

# glob.glob('data*.csv') - returns List[str]
# pd.read_csv(f) - returns pd.DataFrame()
# for f in glob.glob() - returns a List[DataFrames]
# pd.concat() - returns one pd.DataFrame()